? .DS_Store
? .htaccess
? form_elements_expandable_1_503816.patch.txt
? form_elements_expandable_2_503816.patch.txt
? region_block_creation_2_503782.patch
? region_block_creation_3_503782.patch
? sites/.DS_Store
? sites/all/.DS_Store
? sites/all/modules/devel
? sites/default/settings.php
Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.343
diff -u -p -r1.343 form.inc
--- includes/form.inc	20 Jun 2009 15:17:38 -0000	1.343
+++ includes/form.inc	30 Jun 2009 19:06:58 -0000
@@ -2040,6 +2040,35 @@ function form_process_ahah($element) {
 }
 
 /**
+ * Prepares a textfield_expandable element for making it expandable by javascript.
+ * Elements stored in $element['#children'] will be hidden by default when js is enabled
+ * The value(s) if the hidden element(s) will be placed behind the textfield element acompanied by an 'edit' link to expand the hidden fields.
+ *
+ * @param $element
+ *   An associative array containing the properties of the element.
+ *   Properties used: expandable
+ * @return
+ *   None. Additional code is added to the header of the page using
+ *   drupal_add_js.
+ */
+function form_process_expandable($element) {
+  $class = array();
+
+  // Add resizable behavior
+  if ($element['#expandable'] !== FALSE) {
+    $element['#attached_js'] = array('misc/form.js', 'misc/jquery.form.js');
+
+    if (isset($element['#attributes']['class'])) {
+      $element['#attributes']['class'] = 'form-expandable ' . $element['#attributes']['class'];
+    }
+    else {
+      $element['#attributes']['class'] = 'form-expandable';
+    }
+  }
+  return $element;
+}
+
+/**
  * Format a checkbox.
  *
  * @param $element
Index: misc/form.js
===================================================================
RCS file: /cvs/drupal/drupal/misc/form.js,v
retrieving revision 1.9
diff -u -p -r1.9 form.js
--- misc/form.js	27 Apr 2009 20:19:35 -0000	1.9
+++ misc/form.js	30 Jun 2009 19:06:58 -0000
@@ -69,6 +69,60 @@ Drupal.behaviors.multiselectSelector = {
   }
 };
 
+/**
+ * Hides a regular form element and replaces it with a string (Label: form_value [edit]).
+ * By clicking the [edit] link, the form element will be shown again.
+ */
+Drupal.behaviors.expandable = {
+  attach: function (context, settings) {
+    $('.form-expandable:not(.formExpandable-processed)', context).each(function() {
+      // Store the form object for reference
+      var form_item = $(this).hide();
+
+      // Get the label text
+      var label_text = form_item.parents('.form-item').find('label').hide().text();
+      var stripped_label_text = label_text.substr(0, label_text.length - 1);
+      var value = Drupal.behaviors.expandable.fieldVal(form_item);
+
+      // Create the replacement string
+      var replacement = $('<small />').appendTo(form_item.parent())
+        .append($('<span />').addClass('form-expandable-label').text(stripped_label_text + ': '))
+        .append($('<span />').addClass('form-expandable-value').text(value + ' '))
+        .append($('<a href="expand" />').addClass('form-expandable-expand').text('[' + Drupal.t('edit') + ']'));
+
+      // Add a link behind the original textield which enables the user to collapse the form element again.
+      var suffix = $('<small />')
+        .append(' ')
+        .append($('<a />').attr({'href':'collapse'}).addClass('form-expandable-collapse').text('[' + Drupal.t('done') + ']'))
+        .insertAfter(form_item)
+        .hide();
+
+      $('.form-expandable-collapse, .form-expandable-expand', form_item.parents('.form-item')).click(function(e) {
+        e.preventDefault();
+
+        var value = Drupal.behaviors.expandable.fieldVal(form_item);
+
+        // Show or hide affected elements
+        if ($(this).hasClass('form-expandable-expand')) {
+          replacement.hide();
+          $(form_item).add(suffix).add(form_item.parents('.form-item').find('label')).show();
+        }
+        else {
+          replacement.show().find('.form-expandable-value').text(value + ' ');
+          $(form_item).add(suffix).add(form_item.parents('.form-item').find('label')).hide();
+        };
+      });
+    });
+  },
+  fieldVal: function (element) {
+    switch (element.get(0).tagName.toLowerCase()) {
+      case 'select':
+        return $(':selected', element).text();
+      default:
+        return element.val();
+    };
+  }
+};
 
 /**
  * Automatically display the guidelines of the selected text format.
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.716
diff -u -p -r1.716 system.module
--- modules/system/system.module	28 Jun 2009 12:52:57 -0000	1.716
+++ modules/system/system.module	30 Jun 2009 19:07:00 -0000
@@ -303,7 +303,8 @@ function system_elements() {
     '#size' => 60,
     '#maxlength' => 128,
     '#autocomplete_path' => FALSE,
-    '#process' => array('form_process_text_format', 'form_process_ahah'),
+    '#expandable' => FALSE,
+    '#process' => array('form_process_text_format', 'form_process_ahah', 'form_process_expandable'),
     '#theme' => 'textfield',
     '#theme_wrapper' => 'form_element',
   );
@@ -370,7 +371,8 @@ function system_elements() {
     '#input' => TRUE,
     '#size' => 0,
     '#multiple' => FALSE,
-    '#process' => array('form_process_ahah'),
+    '#expandable' => FALSE,
+    '#process' => array('form_process_ahah', 'form_process_expandable'),
     '#theme' => 'select',
     '#theme_wrapper' => 'form_element',
   );
