/** * 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 `` 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 ) ); } } }