WordPress.org

Make WordPress Core

Ticket #30737: 30737.addendum.2.diff

File 30737.addendum.2.diff, 10.1 KB (added by ocean90, 6 years ago)
  • src/wp-admin/js/customize-controls.js

     
    157157                defaultActiveArguments: { duration: 'fast', completeCallback: $.noop },
    158158                defaultExpandedArguments: { duration: 'fast', completeCallback: $.noop },
    159159                containerType: 'container',
     160                defaults: {
     161                        title: '',
     162                        description: '',
     163                        priority: 100,
     164                        type: 'default',
     165                        content: null,
     166                        active: true,
     167                        instanceNumber: null
     168                },
    160169
    161170                /**
    162171                 * @since 4.1.0
    163172                 *
    164                  * @param {String} id
    165                  * @param {Object} options
     173                 * @param {string}         id - The ID for the container.
     174                 * @param {object}         options - Object containing one property: params.
     175                 * @param {object}         options.params - Object containing the following properties.
     176                 * @param {string}         options.params.title - Title shown when panel is collapsed and expanded.
     177                 * @param {string=}        [options.params.description] - Description shown at the top of the panel.
     178                 * @param {number=100}     [options.params.priority] - The sort priority for the panel.
     179                 * @param {string=default} [options.params.type] - The type of the panel. See wp.customize.panelConstructor.
     180                 * @param {string=}        [options.params.content] - The markup to be used for the panel container. If empty, a JS template is used.
     181                 * @param {boolean=true}   [options.params.active] - Whether the panel is active or not.
    166182                 */
    167183                initialize: function ( id, options ) {
    168184                        var container = this;
    169185                        container.id = id;
    170                         container.params = {};
    171                         $.extend( container, options || {} );
     186                        options = options || {};
     187
     188                        options.params = _.defaults(
     189                                options.params || {},
     190                                container.defaults
     191                        );
     192
     193                        $.extend( container, options );
    172194                        container.templateSelector = 'customize-' + container.containerType + '-' + container.params.type;
    173195                        container.container = $( container.params.content );
    174196                        if ( 0 === container.container.length ) {
     
    202224
    203225                        api.utils.bubbleChildValueChanges( container, [ 'priority', 'active' ] );
    204226
    205                         container.priority.set( isNaN( container.params.priority ) ? 100 : container.params.priority );
     227                        container.priority.set( container.params.priority );
    206228                        container.active.set( container.params.active );
    207229                        container.expanded.set( false );
    208230                },
     
    386408
    387409                        if ( 0 !== $( '#tmpl-' + container.templateSelector ).length ) {
    388410                                template = wp.template( container.templateSelector );
    389                                 if ( template && container.container ) {
    390                                         return $.trim( template( container.params ) );
    391                                 }
     411                        } else {
     412                                template = wp.template( 'customize-' + container.containerType + '-default' );
    392413                        }
     414                        if ( template && container.container ) {
     415                                return $.trim( template( container.params ) );
     416                        }
    393417
    394418                        return '<li></li>';
    395419                }
     
    403427         */
    404428        api.Section = Container.extend({
    405429                containerType: 'section',
     430                defaults: {
     431                        title: '',
     432                        description: '',
     433                        priority: 100,
     434                        type: 'default',
     435                        content: null,
     436                        active: true,
     437                        instanceNumber: null,
     438                        panel: null,
     439                        customizeAction: ''
     440                },
    406441
    407442                /**
    408443                 * @since 4.1.0
    409444                 *
    410                  * @param {String} id
    411                  * @param {Array}  options
     445                 * @param {string}         id - The ID for the section.
     446                 * @param {object}         options - Object containing one property: params.
     447                 * @param {object}         options.params - Object containing the following properties.
     448                 * @param {string}         options.params.title - Title shown when section is collapsed and expanded.
     449                 * @param {string=}        [options.params.description] - Description shown at the top of the section.
     450                 * @param {number=100}     [options.params.priority] - The sort priority for the section.
     451                 * @param {string=default} [options.params.type] - The type of the section. See wp.customize.sectionConstructor.
     452                 * @param {string=}        [options.params.content] - The markup to be used for the section container. If empty, a JS template is used.
     453                 * @param {boolean=true}   [options.params.active] - Whether the section is active or not.
     454                 * @param {string}         options.params.panel - The ID for the panel this section is associated with.
     455                 * @param {string=}        [options.params.customizeAction] - Additional context information shown before the section title when expanded.
    412456                 */
    413457                initialize: function ( id, options ) {
    414458                        var section = this;
     
    10091053                /**
    10101054                 * @since 4.1.0
    10111055                 *
    1012                  * @param  {String} id
    1013                  * @param  {Object} options
     1056                 * @param {string}         id - The ID for the panel.
     1057                 * @param {object}         options - Object containing one property: params.
     1058                 * @param {object}         options.params - Object containing the following properties.
     1059                 * @param {string}         options.params.title - Title shown when panel is collapsed and expanded.
     1060                 * @param {string=}        [options.params.description] - Description shown at the top of the panel.
     1061                 * @param {number=100}     [options.params.priority] - The sort priority for the panel.
     1062                 * @param {string=default} [options.params.type] - The type of the panel. See wp.customize.panelConstructor.
     1063                 * @param {string=}        [options.params.content] - The markup to be used for the panel container. If empty, a JS template is used.
     1064                 * @param {boolean=true}   [options.params.active] - Whether the panel is active or not.
    10141065                 */
    10151066                initialize: function ( id, options ) {
    10161067                        var panel = this;
     
    12161267                        // Add the content to the container.
    12171268                        if ( 0 !== $( '#tmpl-' + panel.templateSelector + '-content' ).length ) {
    12181269                                template = wp.template( panel.templateSelector + '-content' );
    1219                                 if ( template && panel.container ) {
    1220                                         panel.container.find( '.accordion-sub-container' ).html( template( panel.params ) );
    1221                                 }
     1270                        } else {
     1271                                template = wp.template( 'customize-panel-default-content' );
    12221272                        }
     1273                        if ( template && panel.container ) {
     1274                                panel.container.find( '.accordion-sub-container' ).html( template( panel.params ) );
     1275                        }
    12231276                }
    12241277        });
    12251278
  • tests/qunit/fixtures/customize-settings.js

     
    5757                        'priority': 110,
    5858                        'title': 'Fixture titleless panel using template',
    5959                        'type': 'titleless'
    60                 }
     60                },
     61                'fixture-panel-reusing-default-template': {
     62                        'active': true,
     63                        'description': 'Lorem ipsum',
     64                        'instanceNumber': 3,
     65                        'priority': 110,
     66                        'title': 'Fixture panel of custom type re-using default template',
     67                        'type': 'reusing-default-template'
     68                },
     69                'fixture-panel-without-params': {}
    6170        },
    6271        'sections': {
    6372                'fixture-section': {
     
    8796                        'priority': 20,
    8897                        'title': 'Fixture titleless section using template',
    8998                        'type': 'titleless'
    90                 }
     99                },
     100                'fixture-section-reusing-default-template': {
     101                        'active': true,
     102                        'description': '',
     103                        'instanceNumber': 4,
     104                        'panel': 'fixture-panel',
     105                        'priority': 20,
     106                        'title': 'Fixture section of custom type re-using default template',
     107                        'type': 'reusing-default-template'
     108                },
     109                'fixture-section-without-params': {}
    91110        },
    92111        'settings': {
    93112                'fixture-setting': {
  • tests/qunit/wp-admin/js/customize-controls.js

     
    136136                ok( 0 === section.container.find( '> .accordion-section-title' ).length );
    137137                ok( 1 === section.container.find( '> .accordion-section-content' ).length );
    138138        } );
     139        module( 'Customizer Custom Type Section Lacking Specific Template' );
     140        test( 'Fixture section has expected content', function () {
     141                var id = 'fixture-section-reusing-default-template', section;
     142                section = wp.customize.section( id );
     143                ok( ! section.params.content );
     144                ok( !! section.container );
     145                ok( section.container.is( '.control-section.control-section-' + section.params.type ) );
     146                ok( 1 === section.container.find( '> .accordion-section-title' ).length );
     147                ok( 1 === section.container.find( '> .accordion-section-content' ).length );
     148        } );
     149        module( 'Customizer Section lacking any params' );
     150        test( 'Fixture section has default params supplied', function () {
     151                var id = 'fixture-section-without-params', section, defaultParams;
     152                section = wp.customize.section( id );
     153                defaultParams = {
     154                        title: '',
     155                        description: '',
     156                        priority: 100,
     157                        panel: null,
     158                        type: 'default',
     159                        content: null,
     160                        active: true,
     161                        instanceNumber: null,
     162                        customizeAction: ''
     163                };
     164                jQuery.each( defaultParams, function ( key, value ) {
     165                        ok( 'undefined' !== typeof section.params[ key ] );
     166                        equal( value, section.params[ key ] );
     167                } );
     168        } );
    139169
     170
    140171        // Begin panels.
    141172        module( 'Customizer Panel in Fixture' );
    142173        test( 'Fixture panel exists', function () {
     
    199230                ok( 1 === panel.container.find( '> .control-panel-content' ).length );
    200231        } );
    201232
     233        module( 'Customizer Custom Type Panel Lacking Specific Template' );
     234        test( 'Fixture panel has expected content', function () {
     235                var id = 'fixture-panel-reusing-default-template', panel;
     236                panel = wp.customize.panel( id );
     237                ok( ! panel.params.content );
     238                ok( !! panel.container );
     239                ok( panel.container.is( '.control-panel.control-panel-' + panel.params.type ) );
     240                ok( 1 === panel.container.find( '> .accordion-section-title' ).length );
     241                ok( 1 === panel.container.find( '> .control-panel-content' ).length );
     242        } );
     243        module( 'Customizer Panel lacking any params' );
     244        test( 'Fixture panel has default params supplied', function () {
     245                var id = 'fixture-panel-without-params', panel, defaultParams;
     246                panel = wp.customize.panel( id );
     247                defaultParams = {
     248                        title: '',
     249                        description: '',
     250                        priority: 100,
     251                        type: 'default',
     252                        content: null,
     253                        active: true,
     254                        instanceNumber: null
     255                };
     256                jQuery.each( defaultParams, function ( key, value ) {
     257                        ok( 'undefined' !== typeof panel.params[ key ] );
     258                        equal( value, panel.params[ key ] );
     259                } );
     260        } );
    202261
    203262        module( 'Dynamically-created Customizer Setting Model' );
    204263        settingId = 'new_blogname';