Currently all styles modules added to the page using
addModuleStyles are put into the head, regardless
of their "position" value.
Bug: T97420
Change-Id: Ie4287e17d6f298cc63f42f257b1f67ee36961b77
* @return array Array of module names
*/
public function getModuleStyles( $filter = false, $position = null ) {
* @return array Array of module names
*/
public function getModuleStyles( $filter = false, $position = null ) {
+ // T97420
+ $resourceLoader = $this->getResourceLoader();
+
+ foreach ( $this->mModuleStyles as $val ) {
+ $module = $resourceLoader->getModule( $val );
+
+ if ( $module instanceof ResourceLoaderModule && $module->isPositionDefault() ) {
+ $warning = __METHOD__ . ': style module should define its position explicitly: ' . $val . ' ' . get_class( $module );
+ wfDebugLog( 'resourceloader', $warning );
+ wfLogWarning( $warning );
+ }
+ }
+
return $this->getModules( $filter, $position, 'mModuleStyles' );
}
return $this->getModules( $filter, $position, 'mModuleStyles' );
}
// Scripts "only" requests marked for bottom inclusion
// If we're in the <head>, use load() calls rather than <script src="..."> tags
$links = array();
// Scripts "only" requests marked for bottom inclusion
// If we're in the <head>, use load() calls rather than <script src="..."> tags
$links = array();
$links[] = $this->makeResourceLoaderLink( $this->getModuleScripts( true, 'bottom' ),
ResourceLoaderModule::TYPE_SCRIPTS, /* $useESI = */ false, /* $extraQuery = */ array(),
/* $loadCall = */ $inHead
);
$links[] = $this->makeResourceLoaderLink( $this->getModuleScripts( true, 'bottom' ),
ResourceLoaderModule::TYPE_SCRIPTS, /* $useESI = */ false, /* $extraQuery = */ array(),
/* $loadCall = */ $inHead
);
+ $links[] = $this->makeResourceLoaderLink( $this->getModuleStyles( true, 'bottom' ),
+ ResourceLoaderModule::TYPE_STYLES, /* $useESI = */ false, /* $extraQuery = */ array(),
+ /* $loadCall = */ $inHead
+ );
+
// Modules requests - let the client calculate dependencies and batch requests as it likes
// Only load modules that have marked themselves for loading at the bottom
$modules = $this->getModules( true, 'bottom' );
// Modules requests - let the client calculate dependencies and batch requests as it likes
// Only load modules that have marked themselves for loading at the bottom
$modules = $this->getModules( true, 'bottom' );
* @return string
*/
function getBottomScripts() {
* @return string
*/
function getBottomScripts() {
+ // In case the skin wants to add bottom CSS
+ $this->getSkin()->setupSkinUserCss( $this );
+
// Optimise jQuery ready event cross-browser.
// This also enforces $.isReady to be true at </body> which fixes the
// mw.loader bug in Firefox with using document.write between </body>
// Optimise jQuery ready event cross-browser.
// This also enforces $.isReady to be true at </body> which fixes the
// mw.loader bug in Firefox with using document.write between </body>
$otherTags = ''; // Tags to append after the normal <link> tags
$resourceLoader = $this->getResourceLoader();
$otherTags = ''; // Tags to append after the normal <link> tags
$resourceLoader = $this->getResourceLoader();
- $moduleStyles = $this->getModuleStyles();
+ $moduleStyles = $this->getModuleStyles( true, 'top' );
// Per-site custom styles
$moduleStyles[] = 'site';
// Per-site custom styles
$moduleStyles[] = 'site';
$this->{$member} = $option;
break;
// Single strings
$this->{$member} = $option;
break;
// Single strings
+ $this->isPositionDefined = true;
+ case 'group':
case 'skipFunction':
$this->{$member} = (string)$option;
break;
case 'skipFunction':
$this->{$member} = (string)$option;
break;
protected $selectorWithVariant = '.{prefix}-{name}-{variant}';
protected $targets = array( 'desktop', 'mobile' );
protected $selectorWithVariant = '.{prefix}-{name}-{variant}';
protected $targets = array( 'desktop', 'mobile' );
+ /** @var string Position on the page to load this module at */
+ protected $position = 'bottom';
+
/**
* Constructs a new module from an options array.
*
/**
* Constructs a new module from an options array.
*
$this->{$member} = $option;
break;
$this->{$member} = $option;
break;
+ case 'position':
+ $this->isPositionDefined = true;
case 'prefix':
case 'selectorWithoutVariant':
case 'selectorWithVariant':
case 'prefix':
case 'selectorWithoutVariant':
case 'selectorWithVariant':
+
+ /**
+ * @return string
+ */
+ public function getPosition() {
+ $this->loadFromDefinition();
+ return $this->position;
+ }
+
+ public function isPositionDefault() {
+ $this->loadFromDefinition();
+ return parent::isPositionDefault();
+ }
// In-object cache for version hash
protected $versionHash = array();
// In-object cache for version hash
protected $versionHash = array();
+ // Whether the position returned by getPosition() is defined in the module configuration
+ // and not a default value
+ protected $isPositionDefined = false;
+
+ /**
+ * Whether the position returned by getPosition() is a default value or comes from the module
+ * definition. This method is meant to be short-lived, and is only useful until classes added via
+ * addModuleStyles with a default value define an explicit position. See getModuleStyles() in
+ * OutputPage for the related migration warning.
+ *
+ * @return bool
+ * @since 1.26
+ */
+ public function isPositionDefault() {
+ return !$this->isPositionDefined;
+ }
+
/**
* Whether this module's JS expects to work without the client-side ResourceLoader module.
* Returning true from this function will prevent mw.loader.state() call from being
/**
* Whether this module's JS expects to work without the client-side ResourceLoader module.
* Returning true from this function will prevent mw.loader.state() call from being
),
),
'mediawiki.skinning.interface' => array(
),
),
'mediawiki.skinning.interface' => array(
'class' => 'ResourceLoaderSkinModule',
// Used in the web installer. Test it after modifying this definition!
'styles' => array(
'class' => 'ResourceLoaderSkinModule',
// Used in the web installer. Test it after modifying this definition!
'styles' => array(
),
'mediawiki.skinning.content.parsoid' => array(
),
'mediawiki.skinning.content.parsoid' => array(
// Style Parsoid HTML+RDFa output consistent with wikitext from PHP parser
// with the interface.css styles; skinStyles should be used if your
// skin over-rides common content styling.
// Style Parsoid HTML+RDFa output consistent with wikitext from PHP parser
// with the interface.css styles; skinStyles should be used if your
// skin over-rides common content styling.
),
'mediawiki.skinning.content.externallinks' => array(
),
'mediawiki.skinning.content.externallinks' => array(
'styles' => array(
'resources/src/mediawiki.skinning/content.externallinks.css' => array( 'media' => 'screen' ),
),
'styles' => array(
'resources/src/mediawiki.skinning/content.externallinks.css' => array( 'media' => 'screen' ),
),
'jquery.ui.core' => array(
'scripts' => 'resources/lib/jquery.ui/jquery.ui.core.js',
'jquery.ui.core' => array(
'scripts' => 'resources/lib/jquery.ui/jquery.ui.core.js',
+ 'dependencies' => array(
+ 'jquery.ui.core.styles',
+ ),
+ 'group' => 'jquery.ui',
+ ),
+ 'jquery.ui.core.styles' => array(
+ 'position' => 'top',
'skinStyles' => array(
'default' => array(
'resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css',
'skinStyles' => array(
'default' => array(
'resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css',
),
),
'mediawiki.content.json' => array(
),
),
'mediawiki.content.json' => array(
'styles' => 'resources/src/mediawiki/mediawiki.content.json.css',
),
'mediawiki.confirmCloseWindow' => array(
'styles' => 'resources/src/mediawiki/mediawiki.content.json.css',
),
'mediawiki.confirmCloseWindow' => array(
),
'mediawiki.helplink' => array(
),
'mediawiki.helplink' => array(
'styles' => array(
'resources/src/mediawiki/mediawiki.helplink.less',
),
'styles' => array(
'resources/src/mediawiki/mediawiki.helplink.less',
),
),
),
'mediawiki.sectionAnchor' => array(
),
),
'mediawiki.sectionAnchor' => array(
// Back-compat to hide it on cached pages (T18691; Ie9e334e973; 2015-03-17)
'styles' => 'resources/src/mediawiki/mediawiki.sectionAnchor.css',
'targets' => array( 'desktop', 'mobile' ),
// Back-compat to hide it on cached pages (T18691; Ie9e334e973; 2015-03-17)
'styles' => 'resources/src/mediawiki/mediawiki.sectionAnchor.css',
'targets' => array( 'desktop', 'mobile' ),
'position' => 'top',
),
'mediawiki.action.edit.styles' => array(
'position' => 'top',
),
'mediawiki.action.edit.styles' => array(
- 'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.styles.css',
+ 'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.styles.css',
),
'mediawiki.action.edit.collapsibleFooter' => array(
'scripts' => 'resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js',
),
'mediawiki.action.edit.collapsibleFooter' => array(
'scripts' => 'resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js',
'group' => 'mediawiki.action.history',
),
'mediawiki.action.history.diff' => array(
'group' => 'mediawiki.action.history',
),
'mediawiki.action.history.diff' => array(
'styles' => array(
'resources/src/mediawiki.action/mediawiki.action.history.diff.css',
'resources/src/mediawiki.action/mediawiki.action.history.diff.print.css' => array(
'styles' => array(
'resources/src/mediawiki.action/mediawiki.action.history.diff.css',
'resources/src/mediawiki.action/mediawiki.action.history.diff.print.css' => array(
),
),
'mediawiki.action.view.categoryPage.styles' => array(
),
),
'mediawiki.action.view.categoryPage.styles' => array(
'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less',
'targets' => array( 'desktop', 'mobile' )
),
'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less',
'targets' => array( 'desktop', 'mobile' )
),
'position' => 'top',
),
'mediawiki.action.view.redirectPage' => array(
'position' => 'top',
),
'mediawiki.action.view.redirectPage' => array(
- 'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css',
+ 'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css',
),
'mediawiki.action.view.rightClickEdit' => array(
'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.rightClickEdit.js',
),
'mediawiki.action.view.rightClickEdit' => array(
'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.rightClickEdit.js',
/* MediaWiki Special pages */
'mediawiki.special' => array(
/* MediaWiki Special pages */
'mediawiki.special' => array(
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.js',
'styles' => 'resources/src/mediawiki.special/mediawiki.special.css',
),
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.js',
'styles' => 'resources/src/mediawiki.special/mediawiki.special.css',
),
),
),
'mediawiki.special.changeslist' => array(
),
),
'mediawiki.special.changeslist' => array(
'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.css',
),
'mediawiki.special.changeslist.legend' => array(
'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.css',
),
'mediawiki.special.changeslist.legend' => array(
'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css',
),
'mediawiki.special.changeslist.legend.js' => array(
'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css',
),
'mediawiki.special.changeslist.legend.js' => array(
),
),
'mediawiki.special.changeslist.enhanced' => array(
),
),
'mediawiki.special.changeslist.enhanced' => array(
'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.enhanced.css',
),
'mediawiki.special.edittags' => array(
'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.enhanced.css',
),
'mediawiki.special.edittags' => array(
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.pageLanguage.js',
),
'mediawiki.special.pagesWithProp' => array(
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.pageLanguage.js',
),
'mediawiki.special.pagesWithProp' => array(
'styles' => 'resources/src/mediawiki.special/mediawiki.special.pagesWithProp.css',
),
'mediawiki.special.preferences' => array(
'styles' => 'resources/src/mediawiki.special/mediawiki.special.pagesWithProp.css',
),
'mediawiki.special.preferences' => array(
'position' => 'top',
),
'mediawiki.special.search' => array(
'position' => 'top',
),
'mediawiki.special.search' => array(
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.search.js',
'styles' => 'resources/src/mediawiki.special/mediawiki.special.search.css',
'messages' => array(
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.search.js',
'styles' => 'resources/src/mediawiki.special/mediawiki.special.search.css',
'messages' => array(
'position' => 'top',
),
'mediawiki.special.userlogin.signup.styles' => array(
'position' => 'top',
),
'mediawiki.special.userlogin.signup.styles' => array(
'styles' => array(
'resources/src/mediawiki.special/mediawiki.special.userlogin.signup.css',
),
'styles' => array(
'resources/src/mediawiki.special/mediawiki.special.userlogin.signup.css',
),
),
'mediawiki.special.userlogin.login.styles' => array(
),
'mediawiki.special.userlogin.login.styles' => array(
'styles' => array(
'resources/src/mediawiki.special/mediawiki.special.userlogin.login.css',
),
'styles' => array(
'resources/src/mediawiki.special/mediawiki.special.userlogin.login.css',
),
),
'mediawiki.special.userlogin.common.js' => array(
'scripts' => array(
),
'mediawiki.special.userlogin.common.js' => array(
'scripts' => array(
'position' => 'top',
),
'mediawiki.legacy.commonPrint' => array(
'position' => 'top',
),
'mediawiki.legacy.commonPrint' => array(
'styles' => array(
'resources/src/mediawiki.legacy/commonPrint.css' => array( 'media' => 'print' )
),
'styles' => array(
'resources/src/mediawiki.legacy/commonPrint.css' => array( 'media' => 'print' )
),
),
'mediawiki.legacy.shared' => array(
// Used in the web installer. Test it after modifying this definition!
),
'mediawiki.legacy.shared' => array(
// Used in the web installer. Test it after modifying this definition!
'styles' => array(
'resources/src/mediawiki.legacy/shared.css' => array( 'media' => 'screen' )
),
),
'mediawiki.legacy.oldshared' => array(
'styles' => array(
'resources/src/mediawiki.legacy/shared.css' => array( 'media' => 'screen' )
),
),
'mediawiki.legacy.oldshared' => array(
'styles' => array(
'resources/src/mediawiki.legacy/oldshared.css' => array( 'media' => 'screen' )
),
'styles' => array(
'resources/src/mediawiki.legacy/oldshared.css' => array( 'media' => 'screen' )
),
/* MediaWiki UI */
'mediawiki.ui' => array(
/* MediaWiki UI */
'mediawiki.ui' => array(
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/default.less',
),
),
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/default.less',
),
),
'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.ui.checkbox' => array(
'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.ui.checkbox' => array(
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/checkbox.less',
),
),
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/checkbox.less',
),
),
'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.ui.radio' => array(
'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.ui.radio' => array(
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/radio.less',
),
),
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/radio.less',
),
),
'targets' => array( 'desktop', 'mobile' ),
),
// Lightweight module for anchor styles
'mediawiki.ui.anchor' => array(
'targets' => array( 'desktop', 'mobile' ),
),
// Lightweight module for anchor styles
'mediawiki.ui.anchor' => array(
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/anchors.less',
),
),
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/anchors.less',
),
),
'targets' => array( 'desktop', 'mobile' ),
),
// Lightweight module for button styles
'mediawiki.ui.button' => array(
'targets' => array( 'desktop', 'mobile' ),
),
// Lightweight module for button styles
'mediawiki.ui.button' => array(
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/buttons.less',
),
),
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/buttons.less',
),
),
'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.ui.input' => array(
'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.ui.input' => array(
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/inputs.less',
),
),
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/inputs.less',
),
),
'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.ui.icon' => array(
'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.ui.icon' => array(
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/icons.less',
),
),
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/icons.less',
),
),
'targets' => array( 'desktop', 'mobile' ),
),
// Lightweight module for text styles
'mediawiki.ui.text' => array(
'targets' => array( 'desktop', 'mobile' ),
),
// Lightweight module for text styles
'mediawiki.ui.text' => array(
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/text.less',
),
),
'skinStyles' => array(
'default' => array(
'resources/src/mediawiki.ui/components/text.less',
),
),
'targets' => array( 'desktop', 'mobile' ),
),
'targets' => array( 'desktop', 'mobile' ),
),
),
'oojs-ui.styles.icons' => array(
),
'oojs-ui.styles.icons' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.indicators' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.indicators' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'indicators.json',
),
'oojs-ui.styles.textures' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'indicators.json',
),
'oojs-ui.styles.textures' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'textures.json',
),
'oojs-ui.styles.icons-alerts' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'textures.json',
),
'oojs-ui.styles.icons-alerts' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-alerts.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-alerts.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-content' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-content' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-content.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-content.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-editing-advanced' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-editing-advanced' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-editing-advanced.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-editing-advanced.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-editing-core' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-editing-core' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-editing-core.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-editing-core.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-editing-list' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-editing-list' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-editing-list.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-editing-list.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-editing-styling' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-editing-styling' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-editing-styling.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-editing-styling.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-interactions' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-interactions' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-interactions.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-interactions.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-layout' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-layout' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-layout.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-layout.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-location' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-location' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-location.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-location.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-media' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-media' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-media.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-media.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-moderation' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-moderation' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-moderation.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-moderation.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-movement' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-movement' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-movement.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-movement.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-user' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-user' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-user.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-user.json',
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-wikimedia' => array(
'selectorWithVariant' => '.oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before, .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before, .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before',
),
'oojs-ui.styles.icons-wikimedia' => array(
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-wikimedia.json',
'class' => 'ResourceLoaderImageModule',
'localBasePath' => "$IP/resources/lib/oojs-ui/themes/mediawiki",
'data' => 'icons-wikimedia.json',