Page MenuHomePhabricator
Paste P7126

Bad idea from https://gerrit.wikimedia.org/r/#/c/410038/
ActivePublic

Authored by matmarex on May 14 2018, 7:28 PM.
/**
* Load the styles of one or more ResourceLoader modules on this page.
*
* Module styles added through this function will be loaded as a stylesheet,
* using a standard `<link rel=stylesheet>` HTML tag, rather than as a combined
* Javascript and CSS package. Thus, they will even load when JavaScript is disabled.
*
* @param string|array $modules Module name (string) or array of module names
*/
public function addModuleStyles( $modules ) {
foreach ( (array)$modules as $moduleName ) {
$isIconPack = strpos( $moduleName, 'oojs-ui.styles.icons-' ) === 0;
$isSingleIcon = strpos( $moduleName, 'oojs-ui.styles.icon.' ) === 0;
if ( $isIconPack ) {
/** @var ResourceLoaderOOUIIconPackModule $moduleObj */
$moduleObj = $this->getResourceLoader()->getModule( $moduleName );
$this->handleOneModuleStylesWithDeprecations( $moduleName, $moduleObj );
// Handle dependencies for icon packs, even though they are style modules...
// (Replace icon pack module with individual icon modules.)
foreach ( $moduleObj->getDependencies() as $moduleName ) {
/** @var ResourceLoaderOOUISingleIconModule $moduleObj */
$moduleObj = $this->getResourceLoader()->getModule( $moduleName );
$this->handleOneModuleStylesWithDeprecations( $moduleName, $moduleObj );
}
} elseif ( $isSingleIcon ) {
/** @var ResourceLoaderOOUISingleIconModule $moduleObj */
$moduleObj = $this->getResourceLoader()->getModule( $moduleName );
$this->handleOneModuleStylesWithDeprecations( $moduleName, $moduleObj );
} else {
$this->mModuleStyles[] = $moduleName;
}
}
}
/**
* @param string $moduleName
* @param ResourceLoaderOOUISingleIconModule|ResourceLoaderOOUIIconPackModule $moduleObj
*/
private function handleOneModuleStylesWithDeprecations( $moduleName, $moduleObj ) {
$this->mModuleStyles[] = $moduleName;
if ( $moduleObj ) {
// Maybe add deprecation warning.
// (Icon packs are all deprecated, individual icons can also be deprecated.)
$deprecation = $moduleObj->getDeprecationInformation();
if ( $deprecation ) {
$this->addScript( ResourceLoader::makeInlineScript( $deprecation ) );
}
}
}