Index: flexifilter.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flexifilter/flexifilter.admin.inc,v
retrieving revision 1.13
diff -u -r1.13 flexifilter.admin.inc
--- flexifilter.admin.inc	24 Jan 2008 01:57:10 -0000	1.13
+++ flexifilter.admin.inc	25 Jan 2008 04:50:31 -0000
@@ -34,7 +34,7 @@
 function flexifilter_filter_list_form_table($enabled) {
   $show_disable_link = $enabled;
   $show_enable_link  = !$enabled && flexifilter_get_number_enabled_filters() < FLEXIFILTER_MAX_FILTERS;
-  $header            = array(t('Label'), t('Description'), t('Edit'), t('Delete'), t($enabled ? 'Disable' : 'Enable'));
+  $header            = array(t('Label'), t('Description'), t('Edit'), t('Delete'), t('Preview'), t($enabled ? 'Disable' : 'Enable'));
   $rows              = array();
   $filters           = flexifilter_get_filters();
   foreach ($filters as $id => $filter) {
@@ -42,6 +42,7 @@
       $row   = array($filter['label'], $filter['description']);
       $row[] = l(t('Edit'), 'admin/build/flexifilters/'. $id .'/edit', array(), drupal_get_destination());
       $row[] = l(t('Delete'), 'admin/build/flexifilters/'. $id .'/delete', array(), drupal_get_destination());
+      $row[] = l(t('Preview'), 'admin/build/flexifilters/'. $id .'/preview', array(), drupal_get_destination());  
       if ($show_disable_link) {
         $row[] = l(t('Disable'), 'admin/build/flexifilters/'. $id .'/disable', array(), drupal_get_destination());
       }
@@ -847,4 +848,73 @@
   }
   flexifilter_install_flexifilters('flexifilter', $to_be_saved);
   $form_state['redirect'] = 'admin/build/flexifilters';
+}
+
+function flexifilter_filter_preview_form($form_state, $flexifilter) {
+  if (!isset($form_state['storage']['preview'])) {
+    $form['input'] = array(
+      '#type' => 'textarea',
+      '#title' => t('Text to test'),
+      '#default_value' => '',
+    );
+    $form['flexifilter'] = array(
+      '#type' => 'value',
+      '#value' => $flexifilter,
+    );
+    $form['submit'] = array(
+     '#type' => 'submit',
+      '#value' => t('Preview'),
+    );
+  }
+  else {
+    $form['input'] = array(
+      '#type' => 'textarea',
+      '#title' => t('Original text'),
+      '#default_value' => $form_state['storage']['input'],
+    );
+    $form['submit'] = array(
+      '#type' => 'submit',
+      '#value' => t('Preview'),
+    );
+    $form['prepare'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Prepare step'),
+      '#collapsible' => TRUE,
+    );
+    $form['process'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Process step'),
+      '#collapsible' => TRUE,
+    );
+    $form['flexifilter'] = array(
+      '#type' => 'value',
+      '#value' => $flexifilter,
+    );
+    foreach ($form_state['storage']['data'] as $key => $data) {
+      $settings = '';
+      foreach ($data['settings'] as $key => $value) {
+        $settings .= '<strong>'. check_plain($key) .'</strong>: '. check_plain(''. $value) ."<br />";
+      }
+      $form[$data['step']][$key . uniqid()] = array(
+        '#type' => 'textarea',
+        '#title' => ucfirst($data['type']) .': '. $data['class'],
+        '#description' => t('Settings:<br />!settings', array('!settings' => $settings)),
+        '#default_value' => $data['value'],
+        '#attributes' => array('readonly' => 'readonly'),
+      );
+    }
+  }
+  return $form;
+}
+
+function flexifilter_filter_preview_form_submit($form, &$form_state) {
+  variable_set('flexifilter_preview', TRUE);
+  variable_set('flexifilter_preview_text', array());
+  $form_state['storage']['input'] = $form_state['values']['input'];
+  $text = flexifilter_invoke_components($form_state['values']['flexifilter']['components'], 'prepare', $form_state['values']['input']);
+  flexifilter_invoke_components($form_state['values']['flexifilter']['components'], 'process', $text);
+  $form_state['storage']['preview'] = TRUE;
+  $form_state['storage']['data'] = (variable_get('flexifilter_preview_text', array()));
+  variable_del('flexifilter_preview');
+  variable_del('flexifilter_preview_text');
 }
\ No newline at end of file
Index: flexifilter.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flexifilter/flexifilter.module,v
retrieving revision 1.14
diff -u -r1.14 flexifilter.module
--- flexifilter.module	23 Jan 2008 22:43:16 -0000	1.14
+++ flexifilter.module	25 Jan 2008 04:49:49 -0000
@@ -71,6 +71,13 @@
     'page arguments' => array('flexifilter_filter_export_form', 3),
     'file' => 'flexifilter.admin.inc',
   );
+  $items['admin/build/flexifilters/%flexifilter/preview'] = array(
+    'title' => t('Preview'),
+    'type' => MENU_LOCAL_TASK,
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('flexifilter_filter_preview_form', 3),
+    'file' => 'flexifilter.admin.inc',
+  );
   $items['admin/build/flexifilters/%flexifilter/delete'] = array(
     'title' => t('Delete'),
     'type' => MENU_CALLBACK,
@@ -215,7 +222,14 @@
  * operations that the component doesn't support, it will return $text.
  */
 function flexifilter_invoke_component($component, $op, $settings = array(), $text = '') {
-  return call_user_func_array($component['callback'], array_merge($component['callback_arguments'], array($op, $settings, $text)));
+  $text = call_user_func_array($component['callback'], array_merge($component['callback_arguments'], array($op, $settings, $text)));
+  $_flexifilter_preview = variable_get('flexifilter_preview', FALSE);
+  if ($_flexifilter_preview) {
+    $_flexifilter_preview_text = variable_get('flexifilter_preview_text', array());
+    $_flexifilter_preview_text[] = array('value' => $text, 'type' => 'component', 'step' => $op, 'class' => $component['label'], 'settings' => $settings);
+    variable_set('flexifilter_preview_text', $_flexifilter_preview_text);
+  }
+  return $text;
 }
 
 /**

