[wp-trac] [WordPress Trac] #37270: Improve handling of active state for dynamically-created controls/sections/panels

WordPress Trac noreply at wordpress.org
Mon Jul 4 17:12:31 UTC 2016


#37270: Improve handling of active state for dynamically-created
controls/sections/panels
--------------------------+----------------------------
 Reporter:  westonruter   |      Owner:
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Future Release
Component:  Customize     |    Version:
 Severity:  normal        |   Keywords:
  Focuses:  javascript    |
--------------------------+----------------------------
 When a control, section, or panel is dynamically created in JS and doesn't
 have a corresponding construct that gets created in PHP, then when the
 preview refreshes the construct won't be included among the
 `activeControls`, `activeSections`, or `activePanels` and so it will get
 its `active` state set to `false`. A workaround as used for nav menu items
 is to define `control.active.validate` to override whatever is being sent
 from the preview:

 {{{#!js
 control.active.validate = function() {
         var value, section = api.section( control.section() );
         if ( section ) {
                 value = section.active();
         } else {
                 value = false;
         }
         return value;
 };
 }}}

 The problematic code in Core is:

 {{{#!js
 var active = !! ( activeConstructs && activeConstructs[ id ] );
 }}}

 This is not ideal, and it means that a plugin cannot programmatically do
 `control.active.set( false )`.

 As suggested in an [https://github.com/xwp/wp-customize-
 posts/issues/157#issuecomment-223343369 issue on Customize Posts], we
 could improve the situation by discontinuing from considering constructs
 that are absent in the preview when determining whether to change the
 `active` state, which would specifically be for any constructs that are
 dynamically created:

 {{{#!js
 var active, isDynamicallyCreated;
 if ( ! _.isUndefined( activeConstructs[ id ] ) {
     active = _.isUndefined( activeConstructs[ id ];
 } else {
     isDynamicallyCreated = ! _.isUndefined( wp.customize.settings[ type +
 's' ][ id ] );
     active = isDynamicallyCreated ? null : false;
 }
 if ( _.isBoolean( active ) ) {
 ...
 }}}

--
Ticket URL: <https://core.trac.wordpress.org/ticket/37270>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list