RC Filters: correctly read default value for 'string_options' filters
authorStephane Bisson <sbisson@wikimedia.org>
Wed, 29 Mar 2017 20:29:48 +0000 (16:29 -0400)
committerStephane Bisson <sbisson@wikimedia.org>
Thu, 30 Mar 2017 16:37:00 +0000 (12:37 -0400)
Bug: T160092
Change-Id: If39f1b280952ce1cef91092416c8454b896f3484

resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js
tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js

index f04cc85..8fd1553 100644 (file)
         * @param {Array} filters Filter group definition
         */
        mw.rcfilters.dm.FiltersViewModel.prototype.initializeFilters = function ( filters ) {
-               var i, filterItem, selectedFilterNames, filterConflictResult, groupConflictResult, subsetNames,
+               var i, filterItem, filterConflictResult, groupConflictResult, subsetNames,
                        model = this,
                        items = [],
                        supersetMap = {},
                                groupConflictMap[ group ] = data.conflicts;
                        }
 
-                       selectedFilterNames = [];
                        for ( i = 0; i < data.filters.length; i++ ) {
                                data.filters[ i ].subset = data.filters[ i ].subset || [];
                                data.filters[ i ].subset = data.filters[ i ].subset.map( function ( el ) {
                                        // Store the default parameter state
                                        // For this group type, parameter values are direct
                                        model.defaultParams[ data.filters[ i ].name ] = Number( !!data.filters[ i ].default );
-                               } else if (
-                                       data.type === 'string_options' &&
-                                       data.filters[ i ].default
-                               ) {
-                                       selectedFilterNames.push( data.filters[ i ].name );
                                }
 
                                model.groups[ group ].addItems( filterItem );
                                items.push( filterItem );
                        }
 
-                       if ( data.type === 'string_options' ) {
+                       if ( data.type === 'string_options' && data.default ) {
                                // Store the default parameter group state
                                // For this group, the parameter is group name and value is the names
                                // of selected items
-                               model.defaultParams[ group ] = model.sanitizeStringOptionGroup( group, selectedFilterNames ).join( model.groups[ group ].getSeparator() );
+                               model.defaultParams[ group ] = model.sanitizeStringOptionGroup(
+                                       group,
+                                       data.default.split( model.groups[ group ].getSeparator() )
+                               ).join( model.groups[ group ].getSeparator() );
                        }
                } );
 
                                                        paramValues.length === model.groups[ group ].getItemCount()
                                                ) ?
                                                // All true (either because all values are written or the term 'all' is written)
-                                               // is the same as all filters set to false
-                                               false :
+                                               // is the same as all filters set to true
+                                               true :
                                                // Otherwise, the filter is selected only if it appears in the parameter values
                                                paramValues.indexOf( filterItem.getParamName() ) > -1;
                                }
index 405fdcf..27d3825 100644 (file)
                                title: 'Group 3',
                                type: 'string_options',
                                separator: ',',
+                               default: 'filter8',
                                filters: [
                                        {
                                                name: 'filter7',
                                        {
                                                name: 'filter8',
                                                label: 'Group 3: Filter 2',
-                                               description: 'Description of Filter 2 in Group 3',
-                                               default: true
+                                               description: 'Description of Filter 2 in Group 3'
                                        },
                                        {
                                                name: 'filter9',
                assert.deepEqual(
                        model.getSelectedState(),
                        $.extend( {}, defaultFilterRepresentation, {
-                               group3__filter7: false,
-                               group3__filter8: false,
-                               group3__filter9: false
+                               group3__filter7: true,
+                               group3__filter8: true,
+                               group3__filter9: true
                        } ),
-                       'A \'string_options\' parameter containing all values, results in all filters of the group as unchecked.'
+                       'A \'string_options\' parameter containing all values, results in all filters of the group as checked.'
                );
 
                model.toggleFiltersSelected(
                assert.deepEqual(
                        model.getSelectedState(),
                        $.extend( {}, defaultFilterRepresentation, {
-                               group3__filter7: false,
-                               group3__filter8: false,
-                               group3__filter9: false
+                               group3__filter7: true,
+                               group3__filter8: true,
+                               group3__filter9: true
                        } ),
-                       'A \'string_options\' parameter containing the value \'all\', results in all filters of the group as unchecked.'
+                       'A \'string_options\' parameter containing the value \'all\', results in all filters of the group as checked.'
                );
 
                model.toggleFiltersSelected(