Merge "Removed deprecated ExtractThumbParameters hook"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 16 May 2017 00:21:03 +0000 (00:21 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 16 May 2017 00:21:03 +0000 (00:21 +0000)
includes/EditPage.php
includes/parser/ParserOptions.php
languages/i18n/en.json
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js
resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js

index b1f50f0..098ffbf 100644 (file)
@@ -2753,6 +2753,9 @@ class EditPage {
                $wgOut->addHTML( Html::hidden( 'format', $this->contentFormat ) );
                $wgOut->addHTML( Html::hidden( 'model', $this->contentModel ) );
 
+               // Preserve &ooui=1 / &ooui=0 from URL parameters after submitting the page for preview
+               $wgOut->addHTML( Html::hidden( 'ooui', $this->oouiEnabled ? '1' : '0' ) );
+
                // following functions will need OOUI, enable it only once; here.
                if ( $this->oouiEnabled ) {
                        $wgOut->enableOOUI();
index d4d1042..d097414 100644 (file)
@@ -493,6 +493,7 @@ class ParserOptions {
         * @return string|bool
         */
        public function getWrapOutputClass() {
+               $this->optionUsed( 'wrapclass' );
                return $this->wrapOutputClass;
        }
 
@@ -943,6 +944,10 @@ class ParserOptions {
                        $confstr .= '!printable=1';
                }
 
+               if ( $this->wrapOutputClass !== 'mw-parser-output' && in_array( 'wrapclass', $forOptions ) ) {
+                       $confstr .= '!wrapclass=' . $this->wrapOutputClass;
+               }
+
                if ( $this->mExtraKey != '' ) {
                        $confstr .= $this->mExtraKey;
                }
index 00e0013..fcdbfdc 100644 (file)
        "rcfilters-savedqueries-defaultlabel": "Saved filters",
        "rcfilters-savedqueries-rename": "Rename",
        "rcfilters-savedqueries-setdefault": "Set as default",
-       "rcfilters-savedqueries-unsetdefault": "Unset as default",
+       "rcfilters-savedqueries-unsetdefault": "Remove as default",
        "rcfilters-savedqueries-remove": "Remove",
        "rcfilters-savedqueries-new-name-label": "Name",
        "rcfilters-savedqueries-apply-label": "Create quick link",
index 22b2619..59c0a19 100644 (file)
                        if ( model.getType() === 'send_unselected_if_any' ) {
                                // Store the default parameter state
                                // For this group type, parameter values are direct
-                               model.defaultParams[ filter.name ] = Number( !!filter.default );
+                               // We need to convert from a boolean to a string ('1' and '0')
+                               model.defaultParams[ filter.name ] = String( Number( !!filter.default ) );
                        }
                } );
 
                        // Go over the items and define the correct values
                        $.each( filterRepresentation, function ( name, value ) {
                                result[ filterParamNames[ name ] ] = areAnySelected ?
-                                       Number( !value ) : 0;
+                                       // We must store all parameter values as strings '0' or '1'
+                                       String( Number( !value ) ) :
+                                       '0';
                        } );
                } else if ( this.getType() === 'string_options' ) {
                        values = [];
                        paramRepresentation = paramRepresentation || {};
                        // Expand param representation to include all filters in the group
                        this.getItems().forEach( function ( filterItem ) {
-                               paramRepresentation[ filterItem.getParamName() ] = !!paramRepresentation[ filterItem.getParamName() ];
-                               paramToFilterMap[ filterItem.getParamName() ] = filterItem;
+                               var paramName = filterItem.getParamName();
 
-                               if ( paramRepresentation[ filterItem.getParamName() ] ) {
+                               paramRepresentation[ paramName ] = paramRepresentation[ paramName ] || '0';
+                               paramToFilterMap[ paramName ] = filterItem;
+
+                               if ( Number( paramRepresentation[ filterItem.getParamName() ] ) ) {
                                        areAnySelected = true;
                                }
                        } );
index 04fb52b..b8f2db5 100644 (file)
                this.clearItems();
                $.each( savedQueries.queries || {}, function ( id, obj ) {
                        var normalizedData = $.extend( true, {}, baseState, obj.data );
+
+                       // Backwards-compat fix: We stored the 'highlight' state with
+                       // "1" and "0" instead of true/false; for already-stored states,
+                       // we need to fix that.
+                       // NOTE: Since this feature is only available in beta, we should
+                       // not need this line when we release this to the general wikis.
+                       // This method will automatically fix all saved queries anyways
+                       // for existing users, who are only betalabs users at the moment.
+                       normalizedData.highlights.highlight = !!Number( normalizedData.highlight );
+
                        items.push(
                                new mw.rcfilters.dm.SavedQueryItemModel(
                                        id,
index f3fee74..e9274f5 100644 (file)
@@ -44,6 +44,7 @@
                        parsedSavedQueries,
                        this._getBaseState()
                );
+
                this.updateStateBasedOnUrl();
 
                // Update the changes list with the existing data
                        highlightedItems[ item.getName() ] = highlightEnabled ?
                                item.getHighlightColor() : null;
                } );
+               // These are filter states; highlight is stored as boolean
                highlightedItems.highlight = this.filtersModel.isHighlightEnabled();
 
                // Add item
                        this.filtersModel.toggleFiltersSelected( data.filters );
 
                        // Update highlight state
-                       this.filtersModel.toggleHighlight( !!highlights.highlight );
+                       this.filtersModel.toggleHighlight( !!Number( highlights.highlight ) );
                        this.filtersModel.getItems().forEach( function ( filterItem ) {
                                var color = highlights[ filterItem.getName() ];
                                if ( color ) {
                );
 
                // Update highlight state
-               this.filtersModel.toggleHighlight( !!parameters.highlight );
+               this.filtersModel.toggleHighlight( !!Number( parameters.highlight ) );
                this.filtersModel.getItems().forEach( function ( filterItem ) {
                        var color = parameters[ filterItem.getName() + '_color' ];
                        if ( color ) {
                        savedParams = this.filtersModel.getParametersFromFilters( data.filters || {} );
 
                        // Translate highlights to parameters
-                       savedHighlights.highlight = queryHighlights.highlight;
+                       savedHighlights.highlight = String( Number( queryHighlights.highlight ) );
                        $.each( queryHighlights, function ( filterName, color ) {
                                if ( filterName !== 'highlights' ) {
                                        savedHighlights[ filterName + '_color' ] = color;
                // highlight params
                uri.query.highlight = Number( this.filtersModel.isHighlightEnabled() );
                Object.keys( highlightParams ).forEach( function ( paramName ) {
-                       if ( highlightParams[ paramName ] ) {
-                               uri.query[ paramName ] = highlightParams[ paramName ];
-                       } else {
-                               delete uri.query[ paramName ];
-                       }
+                       // Always have some value (either the color or null) so that
+                       // if we have something in the URL that doesn't have the highlight
+                       // intentionally, it can override default with highlight.
+                       // Otherwise, the $.extend will always add the highlight that
+                       // exists in the default even if the URL query that is being
+                       // refreshed has different highlights, or has highlights enabled
+                       // but no active highlights anywhere
+                       uri.query[ paramName ] = highlightParams[ paramName ] ?
+                               highlightParams[ paramName ] : null;
                } );
 
                return uri;
index c61c288..618afb2 100644 (file)
                assert.deepEqual(
                        model.getDefaultParams(),
                        {
-                               hidefilter1: 1,
-                               hidefilter2: 0,
-                               hidefilter3: 1,
-                               hidefilter4: 0,
-                               hidefilter5: 1,
-                               hidefilter6: 0,
+                               hidefilter1: '1',
+                               hidefilter2: '0',
+                               hidefilter3: '1',
+                               hidefilter4: '0',
+                               hidefilter5: '1',
+                               hidefilter6: '0',
                                group3: 'filter8'
                        },
                        'Default parameters are stored properly per filter and group'
                assert.deepEqual(
                        model.getParametersFromFilters(),
                        {
-                               hidefilter1: 0,
-                               hidefilter2: 0,
-                               hidefilter3: 0,
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter1: '0',
+                               hidefilter2: '0',
+                               hidefilter3: '0',
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: ''
                        },
                        'Unselected filters return all parameters falsey or \'\'.'
                        model.getParametersFromFilters(),
                        {
                                // Group 1 (one selected, the others are true)
-                               hidefilter1: 0,
-                               hidefilter2: 1,
-                               hidefilter3: 1,
+                               hidefilter1: '0',
+                               hidefilter2: '1',
+                               hidefilter3: '1',
                                // Group 2 (nothing is selected, all false)
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: ''
                        },
                        'One filters in one "send_unselected_if_any" group returns the other parameters truthy.'
                        model.getParametersFromFilters(),
                        {
                                // Group 1 (two selected, the others are true)
-                               hidefilter1: 0,
-                               hidefilter2: 0,
-                               hidefilter3: 1,
+                               hidefilter1: '0',
+                               hidefilter2: '0',
+                               hidefilter3: '1',
                                // Group 2 (nothing is selected, all false)
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: ''
                        },
                        'Two filters in one "send_unselected_if_any" group returns the other parameters truthy.'
                        model.getParametersFromFilters(),
                        {
                                // Group 1 (all selected, all false)
-                               hidefilter1: 0,
-                               hidefilter2: 0,
-                               hidefilter3: 0,
+                               hidefilter1: '0',
+                               hidefilter2: '0',
+                               hidefilter3: '0',
                                // Group 2 (nothing is selected, all false)
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: ''
                        },
                        'All filters selected in one "send_unselected_if_any" group returns all parameters falsy.'
                        model.getParametersFromFilters(),
                        {
                                // Group 1 (all selected, all)
-                               hidefilter1: 0,
-                               hidefilter2: 0,
-                               hidefilter3: 0,
+                               hidefilter1: '0',
+                               hidefilter2: '0',
+                               hidefilter3: '0',
                                // Group 2 (nothing is selected, all false)
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: 'filter7'
                        },
                        'One filter selected in "string_option" group returns that filter in the value.'
                        model.getParametersFromFilters(),
                        {
                                // Group 1 (all selected, all)
-                               hidefilter1: 0,
-                               hidefilter2: 0,
-                               hidefilter3: 0,
+                               hidefilter1: '0',
+                               hidefilter2: '0',
+                               hidefilter3: '0',
                                // Group 2 (nothing is selected, all false)
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: 'filter7,filter8'
                        },
                        'Two filters selected in "string_option" group returns those filters in the value.'
                        model.getParametersFromFilters(),
                        {
                                // Group 1 (all selected, all)
-                               hidefilter1: 0,
-                               hidefilter2: 0,
-                               hidefilter3: 0,
+                               hidefilter1: '0',
+                               hidefilter2: '0',
+                               hidefilter3: '0',
                                // Group 2 (nothing is selected, all false)
-                               hidefilter4: 0,
-                               hidefilter5: 0,
-                               hidefilter6: 0,
+                               hidefilter4: '0',
+                               hidefilter5: '0',
+                               hidefilter6: '0',
                                group3: 'all'
                        },
                        'All filters selected in "string_option" group returns \'all\'.'
                                        },
                                        expected: {
                                                // Group 1 (two selected, the others are true)
-                                               hidefilter1: 0,
-                                               hidefilter2: 0,
-                                               hidefilter3: 1,
+                                               hidefilter1: '0',
+                                               hidefilter2: '0',
+                                               hidefilter3: '1',
                                                // Group 2 (nothing is selected, all false)
-                                               hidefilter4: 0,
-                                               hidefilter5: 0,
-                                               hidefilter6: 0,
+                                               hidefilter4: '0',
+                                               hidefilter5: '0',
+                                               hidefilter6: '0',
                                                group3: 'filter7,filter8'
                                        },
                                        msg: 'Given an explicit (complete) filter state object, the result is the same as if the object given represented the model state.'
                                        },
                                        expected: {
                                                // Group 1 (one selected, the others are true)
-                                               hidefilter1: 0,
-                                               hidefilter2: 1,
-                                               hidefilter3: 1,
+                                               hidefilter1: '0',
+                                               hidefilter2: '1',
+                                               hidefilter3: '1',
                                                // Group 2 (nothing is selected, all false)
-                                               hidefilter4: 0,
-                                               hidefilter5: 0,
-                                               hidefilter6: 0,
+                                               hidefilter4: '0',
+                                               hidefilter5: '0',
+                                               hidefilter6: '0',
                                                group3: ''
                                        },
                                        msg: 'Given an explicit (incomplete) filter state object, the result is the same as if the object give represented the model state.'