or request state must be added through MakeGlobalVariablesScript instead.
&$vars: array( variable name => value )
-'ResourceLoaderGetLessVars': Called in ResourceLoader::getLessVars after
-variables from $wgResourceLoaderLESSVars are added. Can be used to add
-context-based variables.
+'ResourceLoaderGetLessVars': DEPRECATED! Called in ResourceLoader::getLessVars
+to add global LESS variables. Loaded after $wgResourceLoaderLESSVars is added.
+Global LESS variables are deprecated. Use ResourceLoaderModule::getLessVars()
+instead to expose variables only in modules that need them.
&$lessVars: array of variables already added
'ResourceLoaderJqueryMsgModuleMagicWords': Called in
* at the beginning of all your .less files, with all the consequences.
* In particular, string values must be escaped and quoted.
*
- * Changes to LESS variables do not trigger cache invalidation.
- *
- * If the LESS variables need to be dynamic, you can use the
- * ResourceLoaderGetLessVars hook (since 1.25).
+ * Changes to this configuration do NOT trigger cache invalidation.
*
* @par Example:
* @code
* $wgResourceLoaderLESSVars = [
- * 'baseFontSize' => '1em',
- * 'smallFontSize' => '0.75em',
- * 'WikimediaBlue' => '#006699',
+ * 'exampleFontSize' => '1em',
+ * 'exampleBlue' => '#eee',
* ];
* @endcode
* @since 1.22
+ * @deprecated since 1.30 Use ResourceLoaderModule::getLessVars() instead to
+ * add variables to individual modules that need them.
*/
$wgResourceLoaderLESSVars = [
/**
return false;
}
+ /**
+ * @codeCoverageIgnore
+ */
private static function getUrlRegex() {
static $urlRegex;
if ( $urlRegex === null ) {
items = this.getFiltersByView( view );
// Normalize so we can search strings regardless of case and view
- query = query.toLowerCase();
+ query = query.trim().toLowerCase();
if ( view !== 'default' ) {
query = query.substr( 1 );
}
views = {},
items = [],
uri = new mw.Uri(),
- $changesList = $( '.mw-changeslist' ).first().contents(),
- experimentalViews = mw.config.get( 'wgStructuredChangeFiltersEnableExperimentalViews' );
+ $changesList = $( '.mw-changeslist' ).first().contents();
// Prepare views
- if ( namespaceStructure && experimentalViews ) {
+ if ( namespaceStructure ) {
items = [];
$.each( namespaceStructure, function ( namespaceID, label ) {
// Build and clean up the individual namespace items definition
} ]
};
}
- if ( tagList && experimentalViews ) {
+ if ( tagList ) {
views.tags = {
title: mw.msg( 'rcfilters-view-tags' ),
trigger: '#',
*/
mw.rcfilters.ui.ChangesLimitButtonWidget.prototype.onPopupLimit = function ( filterName ) {
this.controller.toggleFilterSelect( filterName, true );
+ this.button.popup.toggle( false );
};
/**
*/
mw.rcfilters.ui.DateButtonWidget.prototype.onPopupDays = function ( filterName ) {
this.controller.toggleFilterSelect( filterName, true );
+ this.button.popup.toggle( false );
};
/**
footers: [
{
name: 'viewSelect',
- disabled: !mw.config.get( 'wgStructuredChangeFiltersEnableExperimentalViews' ),
sticky: false,
// View select menu, appears on default view only
$element: $( '<div>' )
);
}
- if ( mw.config.get( 'wgStructuredChangeFiltersEnableExperimentalViews' ) ) {
- // Add a selector at the right of the input
- this.viewsSelectWidget = new OO.ui.ButtonSelectWidget( {
- classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-views-select-widget' ],
- items: [
- new OO.ui.ButtonOptionWidget( {
- framed: false,
- data: 'namespaces',
- icon: 'article',
- title: mw.msg( 'rcfilters-view-namespaces-tooltip' )
- } ),
- new OO.ui.ButtonOptionWidget( {
- framed: false,
- data: 'tags',
- icon: 'tag',
- title: mw.msg( 'rcfilters-view-tags-tooltip' )
- } )
- ]
- } );
+ // Add a selector at the right of the input
+ this.viewsSelectWidget = new OO.ui.ButtonSelectWidget( {
+ classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-views-select-widget' ],
+ items: [
+ new OO.ui.ButtonOptionWidget( {
+ framed: false,
+ data: 'namespaces',
+ icon: 'article',
+ title: mw.msg( 'rcfilters-view-namespaces-tooltip' )
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ framed: false,
+ data: 'tags',
+ icon: 'tag',
+ title: mw.msg( 'rcfilters-view-tags-tooltip' )
+ } )
+ ]
+ } );
- // Rearrange the UI so the select widget is at the right of the input
- this.$element.append(
- $( '<div>' )
- .addClass( 'mw-rcfilters-ui-table' )
- .append(
- $( '<div>' )
- .addClass( 'mw-rcfilters-ui-row' )
- .append(
- $( '<div>' )
- .addClass( 'mw-rcfilters-ui-cell' )
- .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-views-input' )
- .append( this.input.$element ),
- $( '<div>' )
- .addClass( 'mw-rcfilters-ui-cell' )
- .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-views-select' )
- .append( this.viewsSelectWidget.$element )
- )
- )
- );
+ // Rearrange the UI so the select widget is at the right of the input
+ this.$element.append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-table' )
+ .append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-row' )
+ .append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-cell' )
+ .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-views-input' )
+ .append( this.input.$element ),
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-cell' )
+ .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-views-select' )
+ .append( this.viewsSelectWidget.$element )
+ )
+ )
+ );
- // Event
- this.viewsSelectWidget.connect( this, { choose: 'onViewsSelectWidgetChoose' } );
- }
+ // Event
+ this.viewsSelectWidget.connect( this, { choose: 'onViewsSelectWidgetChoose' } );
rcFiltersRow.append(
$( '<div>' )
* @param {string} value Value of the input
*/
mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onInputChange = function ( value ) {
- var view = this.model.getViewByTrigger( value.substr( 0, 1 ) );
+ var view;
+
+ value = value.trim();
+
+ view = this.model.getViewByTrigger( value.substr( 0, 1 ) );
this.controller.switchView( view );
};
// Clear input if the only thing in the input is the prefix
if (
- this.input.getValue() === this.model.getViewTrigger( this.model.getCurrentView() )
+ this.input.getValue().trim() === this.model.getViewTrigger( this.model.getCurrentView() )
) {
// Clear the input
this.input.setValue( '' );
*/
mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.updateElementsForView = function () {
var view = this.model.getCurrentView(),
- inputValue = this.input.getValue(),
+ inputValue = this.input.getValue().trim(),
inputView = this.model.getViewByTrigger( inputValue.substr( 0, 1 ) );
if ( inputView !== 'default' ) {
mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onTagSelect = function ( tagItem ) {
var widget = this,
menuOption = this.menu.getItemFromModel( tagItem.getModel() ),
- oldInputValue = this.input.getValue();
+ oldInputValue = this.input.getValue().trim();
this.menu.setUserSelecting( true );
} );
// Hide namespaces and tags
- if ( mw.config.get( 'wgStructuredChangeFiltersEnableExperimentalViews' ) ) {
- $namespaceSelect.closest( 'tr' ).detach();
- this.$element.find( '.mw-tagfilter-label' ).closest( 'tr' ).detach();
- }
+ $namespaceSelect.closest( 'tr' ).detach();
+ this.$element.find( '.mw-tagfilter-label' ).closest( 'tr' ).detach();
// Hide limit and days
this.$element.find( '.rclinks' ).detach();
/**
* @dataProvider mimeTypeProvider
+ * @covers CSSMin::getMimeType
*/
public function testGetMimeType( $fileContents, $fileExtension, $expected ) {
$fileName = wfTempDir() . DIRECTORY_SEPARATOR . uniqid( 'MW_PHPUnit_CSSMinTest_' ) . '.'
/**
* @dataProvider provideIsRemoteUrl
- * @cover CSSMin::isRemoteUrl
+ * @covers CSSMin::isRemoteUrl
*/
public function testIsRemoteUrl( $expect, $url ) {
$this->assertEquals( CSSMinTestable::isRemoteUrl( $url ), $expect );
/**
* @dataProvider provideIsLocalUrls
- * @cover CSSMin::isLocalUrl
+ * @covers CSSMin::isLocalUrl
*/
public function testIsLocalUrl( $expect, $url ) {
$this->assertEquals( CSSMinTestable::isLocalUrl( $url ), $expect );
}
/**
- * This tests funky parameters to CSSMin::remap. testRemapRemapping tests
- * the basic functionality.
+ * This test tests funky parameters to CSSMin::remap.
*
+ * @see testRemapRemapping for testing of the basic functionality
* @dataProvider provideRemapCases
* @covers CSSMin::remap
+ * @covers CSSMin::remapOne
*/
public function testRemap( $message, $params, $expectedOutput ) {
$remapped = call_user_func_array( 'CSSMin::remap', $params );
}
/**
- * This tests basic functionality of CSSMin::remap. testRemapRemapping tests funky parameters.
+ * This tests the basic functionality of CSSMin::remap.
*
+ * @see testRemap for testing of funky parameters
* @dataProvider provideRemapRemappingCases
- * @covers CSSMin::remap
+ * @covers CSSMin
*/
public function testRemapRemapping( $message, $input, $expectedOutput ) {
$localPath = __DIR__ . '/../../data/cssmin';