Index: compact_forms.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/compact_forms/compact_forms.module,v
retrieving revision 1.4
diff -u -p -r1.4 compact_forms.module
--- compact_forms.module	2 May 2009 00:39:31 -0000	1.4
+++ compact_forms.module	2 May 2009 00:41:19 -0000
@@ -39,32 +39,40 @@ function compact_forms_menu() {
 }
 
 /**
- * Implementation of hook_init().
- */
-function compact_forms_init() {
-  // Load our behavior.
-  _compact_forms_include_js();
-}
-
-/**
  * Implementation of hook_form_alter().
  */
 function compact_forms_form_alter(&$form, $form_state, $form_id) {
-  static $ids;
+  static $css_ids, $form_ids, $loaded, $field_size, $descriptions;
 
-  $field_size = variable_get('compact_forms_field_size', '');
-  $descriptions = variable_get('compact_forms_descriptions', 1);
-  // Nothing to do if no custom field size was configured and form element
-  // descriptions shall not be hidden.
-  if (empty($field_size) && !empty($descriptions)) {
-    return;
+  // Prepare CSS form ids.
+  if (!isset($css_ids)) {
+    $css_ids = explode("\n", variable_get('compact_forms_ids', 'user-login-form'));
+    $css_ids = array_filter(array_map('trim', $css_ids));
+  }
+  // Prepare Form API form ids.
+  if (!isset($form_ids) && !empty($css_ids)) {
+    $form_ids = array();
+    foreach ($css_ids as $id) {
+      $form_ids[] = strtr($id, array('-' => '_'));
+    }
   }
-
-  if (!isset($ids)) {
-    $ids = explode("\n", str_replace('-', '_', variable_get('compact_forms_ids', "user-login-form")));
+  // Prepare form alteration settings.
+  if (!isset($field_size)) {
+    $field_size = variable_get('compact_forms_field_size', '');
+    $descriptions = variable_get('compact_forms_descriptions', 1);
   }
-  if (in_array($form_id, $ids)) {
-    _compact_forms_resize_fields($form, $field_size, $descriptions);
+
+  if (in_array($form_id, $form_ids)) {
+    // Load our page requisites and JavaScript settings.
+    if (!isset($loaded)) {
+      _compact_forms_include_js($css_ids);
+      $loaded = TRUE;
+    }
+    // Nothing to alter if no custom field size was configured and form element
+    // descriptions shall not be hidden.
+    if (!(empty($field_size) && !empty($descriptions))) {
+      _compact_forms_resize_fields($form, $field_size, $descriptions);
+    }
   }
 }
 
@@ -100,24 +108,22 @@ function _compact_forms_resize_fields(&$
 
 /**
  * Include JavaScript and CSS and attach behaviors to all selected forms.
+ *
+ * @param $css_ids
+ *   An array containing CSS form ids.
  */
-function _compact_forms_include_js() {
-  $ids = explode("\n", variable_get('compact_forms_ids', 'user-login-form'));
-  $ids = array_filter(array_map('trim', $ids));
-
-  if (!empty($ids)) {
-    $path = drupal_get_path('module', 'compact_forms');
-    drupal_add_js($path . '/compact_forms.js');
-    drupal_add_css($path . '/compact_forms.css');
-
-    $settings = array(
-      'compactForms' => array(
-        'forms' => $ids,
-        'stars' => (int) variable_get('compact_forms_stars', 2),
-        'colons' => (int) variable_get('compact_forms_colons', 0),
-      ),
-    );
-    drupal_add_js($settings, 'setting');
-  }
+function _compact_forms_include_js($css_ids) {
+  $path = drupal_get_path('module', 'compact_forms');
+  drupal_add_js($path . '/compact_forms.js');
+  drupal_add_css($path . '/compact_forms.css');
+
+  $settings = array(
+    'compactForms' => array(
+      'forms' => $css_ids,
+      'stars' => (int) variable_get('compact_forms_stars', 2),
+      'colons' => (int) variable_get('compact_forms_colons', 0),
+    ),
+  );
+  drupal_add_js($settings, 'setting');
 }
 
