diff --git a/core/misc/states.js b/core/misc/states.js index 171bac5..75ee01d 100644 --- a/core/misc/states.js +++ b/core/misc/states.js @@ -420,7 +420,7 @@ states.Trigger.states = { collapsed: { 'collapsed': function(e) { - return (typeof e !== 'undefined' && 'value' in e) ? e.value : this.is('.collapsed'); + return (typeof e !== 'undefined' && 'value' in e) ? e.value : !this.is('[open]'); } } }; @@ -477,6 +477,8 @@ states.State.aliases = { 'unchecked': '!checked', 'irrelevant': '!relevant', 'expanded': '!collapsed', + 'open': '!collapsed', + 'closed': 'collapsed', 'readwrite': '!readonly' }; @@ -537,7 +539,7 @@ $(document).bind('state:checked', function(e) { $(document).bind('state:collapsed', function(e) { if (e.trigger) { - if ($(e.target).is('.collapsed') !== e.value) { + if ($(e.target).is('[open]') === e.value) { $(e.target).find('> summary a').click(); } } diff --git a/core/modules/system/tests/modules/design_test/form/details.inc b/core/modules/system/tests/modules/design_test/form/details.inc index 6d7ac68..febcda3 100644 --- a/core/modules/system/tests/modules/design_test/form/details.inc +++ b/core/modules/system/tests/modules/design_test/form/details.inc @@ -15,6 +15,11 @@ function design_test_form_details($form, &$form_state) { '#description' => 'Details description', '#collapsible' => TRUE, '#collapsed' => FALSE, + '#states' => array( + 'collapsed' => array( + ':input[name="states-trigger"]' => array('checked' => TRUE), + ), + ), ); $form['collapsed'] = array( @@ -143,6 +148,26 @@ function design_test_form_details($form, &$form_state) { ); $form['subtabs'][1] += $subform; + + // #states supports: + // - a 'collapsed' state trigger + // - a 'collapsed' remote condition + $form['states-trigger'] = array( + '#type' => 'checkbox', + '#title' => 'Collapse first details', + '#weight' => -100, + ); + $form['states-condition'] = array( + '#type' => 'checkbox', + '#title' => 'Required if second details are collapsed.', + '#states' => array( + 'required' => array( + 'details#edit-collapsed' => array('collapsed' => TRUE), + ), + ), + '#weight' => -100, + ); + return $form; }