From 9529ae393ac19825a5e934514693c2b2879cd170 Mon Sep 17 00:00:00 2001
From: nuez <nuez@758020.no-reply.drupal.org>
Date: Thu, 21 Mar 2013 12:54:37 +0100
Subject: [PATCH] added jquery selectors

---
 compact_forms.admin.inc |    2 +-
 compact_forms.js        |    3 ++-
 compact_forms.module    |   38 +++++++++++++++++++++++++++-----------
 3 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/compact_forms.admin.inc b/compact_forms.admin.inc
index 41f941d..105f8c5 100644
--- a/compact_forms.admin.inc
+++ b/compact_forms.admin.inc
@@ -15,7 +15,7 @@ function compact_forms_admin_form($form, &$form_state) {
     '#rows' => 3,
     '#cols' => 40,
     '#default_value' => variable_get('compact_forms_ids', 'user-login-form'),
-    '#description' => t('Enter the CSS IDs of the forms to display compact. One per line.'),
+    '#description' => t('Enter IDs or classes of the forms you want to display compact, e.g. <em>#user-login-form</em>, or <em>.user-form</em>. One per line.'),
   );
   $form['compact_forms_descriptions'] = array(
     '#type' => 'checkbox',
diff --git a/compact_forms.js b/compact_forms.js
index 72e87bb..cd4011d 100644
--- a/compact_forms.js
+++ b/compact_forms.js
@@ -81,7 +81,8 @@ Drupal.behaviors.compactForms = {
     if (!settings || !settings.compactForms) {
       return;
     }
-    $('#' + settings.compactForms.forms.join(',#'), context).compactForm(settings.compactForms.stars);
+    var selectors = settings.compactForms.forms;
+    $(selectors.join(','), context).compactForm(settings.compactForms.stars);
 
     // Safari adds passwords without triggering any event after page load.
     // We therefore need to wait a bit and then check for field values.
diff --git a/compact_forms.module b/compact_forms.module
index 1a2e476..d74d632 100644
--- a/compact_forms.module
+++ b/compact_forms.module
@@ -55,34 +55,50 @@ function compact_forms_form_alter(&$form, $form_state, $form_id) {
  * @todo Replace with #attached and move back into hook_form_alter().
  */
 function compact_forms_pre_render($form) {
-  static $css_ids, $form_ids, $loaded, $field_size, $descriptions;
+  static $selectors, $form_ids, $loaded, $field_size, $descriptions;
 
   // 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));
+  if (!isset($selectors)) {
+    $selectors = explode("\n", variable_get('compact_forms_ids', '#user-login-form'));
+    $selectors = array_filter(array_map('trim', $selectors));
   }
   // Prepare Form API form ids.
-  if (!isset($form_ids) && !empty($css_ids)) {
+  /*  if (!isset($form_ids) && !empty($css_ids)) {
     $form_ids = array();
     foreach ($css_ids as $id) {
-      $form_ids[] = strtr($id, array('-' => '_'));
+    $form_ids[] = strtr($id, array('-' => '_'));
     }
-  }
+    } */
   // Prepare form alteration settings.
   if (!isset($field_size)) {
     $field_size = variable_get('compact_forms_field_size', '');
     $descriptions = variable_get('compact_forms_descriptions', 1);
   }
+  $apply = FALSE;
+  foreach ($selectors as $key => $selector) {
+    $selector_type = substr($selector, 0, 1);
+    $selector_value = substr($selector, 1);
+    if ($selector_type == "#") {
+      $form_id = substr($selector_value, array('-' => '_'));
+      if ($form['form_id']['#value'] == $form_id || $form['#id'] || $form['#id'] == $selector_value) {
+        $apply = TRUE;
+      }
+    }
+    if ($selector_type == ".") {
+      if (isset($form['#attributes']['class']) && in_array($selector, $form['#attributes']['class'])) {
+        $apply = TRUE;
+      }
+    }
+  }
 
-  if (in_array($form['form_id']['#value'], $form_ids) || (isset($form['#id']) && in_array($form['#id'], $css_ids))) {
+  if ($apply) {
     // If the custom #compact_forms property has been programmatically set to
     // FALSE, do not process this form.
     if (isset($form['#compact_forms']) && !$form['#compact_forms']) {
       // Also remove it from the CSS IDs being added as JS settings.
-      foreach ($css_ids as $key => $value) {
+      foreach ($selectors as $key => $value) {
         if ($value == $form['#id']) {
-          unset($css_ids[$key]);
+          unset($selectors[$key]);
         }
       }
       return;
@@ -90,7 +106,7 @@ function compact_forms_pre_render($form) {
 
     // Load our page requisites and JavaScript settings.
     if (!isset($loaded)) {
-      _compact_forms_include_js($css_ids);
+      _compact_forms_include_js($selectors);
       $loaded = TRUE;
     }
     // Only alter the form if a custom field size is configured or form element
-- 
1.7.9.5

