$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();
* @return string|bool
*/
public function getWrapOutputClass() {
+ $this->optionUsed( 'wrapclass' );
return $this->wrapOutputClass;
}
$confstr .= '!printable=1';
}
+ if ( $this->wrapOutputClass !== 'mw-parser-output' && in_array( 'wrapclass', $forOptions ) ) {
+ $confstr .= '!wrapclass=' . $this->wrapOutputClass;
+ }
+
if ( $this->mExtraKey != '' ) {
$confstr .= $this->mExtraKey;
}
"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",
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;
}
} );
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,
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;
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.'