2022-01-13 23:08:32 +00:00
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
* (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
|
|
|
*
|
|
|
|
|
* @file
|
|
|
|
|
*/
|
|
|
|
|
|
2022-05-06 09:09:56 +00:00
|
|
|
namespace MediaWiki\ResourceLoader;
|
|
|
|
|
|
|
|
|
|
use Config;
|
2023-02-04 03:58:49 +00:00
|
|
|
use ExtensionRegistry;
|
2022-05-06 09:09:56 +00:00
|
|
|
|
2022-01-13 23:08:32 +00:00
|
|
|
/**
|
|
|
|
|
* Module for codex that has direction-specific style files and a static helper function for
|
|
|
|
|
* embedding icons in package modules.
|
|
|
|
|
*
|
|
|
|
|
* @ingroup ResourceLoader
|
|
|
|
|
* @internal
|
|
|
|
|
*/
|
2022-05-06 09:09:56 +00:00
|
|
|
class CodexModule extends FileModule {
|
2022-01-13 23:08:32 +00:00
|
|
|
|
2023-02-04 03:58:49 +00:00
|
|
|
protected $themeStyles = [];
|
|
|
|
|
protected $themeStylesAdded = false;
|
|
|
|
|
|
|
|
|
|
protected static $builtinSkinThemeMap = [
|
|
|
|
|
'default' => 'wikimedia-ui'
|
|
|
|
|
];
|
2022-01-13 23:08:32 +00:00
|
|
|
|
|
|
|
|
public function __construct( array $options = [], $localBasePath = null, $remoteBasePath = null ) {
|
2023-02-04 03:58:49 +00:00
|
|
|
if ( isset( $options['themeStyles'] ) ) {
|
|
|
|
|
$this->themeStyles = $options['themeStyles'];
|
2022-01-13 23:08:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
parent::__construct( $options, $localBasePath, $remoteBasePath );
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-06 09:09:56 +00:00
|
|
|
public function getStyleFiles( Context $context ) {
|
2023-03-23 13:15:06 +00:00
|
|
|
if ( $this->themeStyles && !$this->themeStylesAdded ) {
|
2023-02-04 03:58:49 +00:00
|
|
|
// Add theme styles
|
|
|
|
|
$themeMap = static::$builtinSkinThemeMap +
|
|
|
|
|
ExtensionRegistry::getInstance()->getAttribute( 'SkinCodexThemes' );
|
|
|
|
|
$theme = $themeMap[ $context->getSkin() ] ?? $themeMap[ 'default' ];
|
|
|
|
|
$dir = $context->getDirection();
|
|
|
|
|
$styles = $this->themeStyles[ $theme ][ $dir ];
|
|
|
|
|
$this->styles = array_merge( $this->styles, (array)$styles );
|
|
|
|
|
// Remember we added the theme styles so we don't add them twice if getStyleFiles() is called twice
|
|
|
|
|
$this->themeStylesAdded = true;
|
2022-01-13 23:08:32 +00:00
|
|
|
}
|
|
|
|
|
return parent::getStyleFiles( $context );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Retrieve the specified icon definitions from codex-icons.json. Intended as a convenience
|
|
|
|
|
* function to be used in packageFiles definitions.
|
|
|
|
|
*
|
|
|
|
|
* Example:
|
|
|
|
|
* "packageFiles": [
|
|
|
|
|
* {
|
|
|
|
|
* "name": "icons.json",
|
2022-05-16 22:13:26 +00:00
|
|
|
* "callback": "MediaWiki\\ResourceLoader\\CodexModule::getIcons",
|
2022-01-13 23:08:32 +00:00
|
|
|
* "callbackParam": [
|
|
|
|
|
* "cdxIconClear",
|
|
|
|
|
* "cdxIconTrash"
|
|
|
|
|
* ]
|
|
|
|
|
* }
|
|
|
|
|
* ]
|
|
|
|
|
*
|
2022-05-06 09:09:56 +00:00
|
|
|
* @param Context $context
|
2022-01-13 23:08:32 +00:00
|
|
|
* @param Config $config
|
|
|
|
|
* @param string[] $iconNames Names of icons to fetch
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
2022-05-06 09:09:56 +00:00
|
|
|
public static function getIcons( Context $context, Config $config, array $iconNames = [] ) {
|
2022-01-13 23:08:32 +00:00
|
|
|
global $IP;
|
|
|
|
|
static $allIcons = null;
|
|
|
|
|
if ( $allIcons === null ) {
|
|
|
|
|
$allIcons = json_decode( file_get_contents( "$IP/resources/lib/codex-icons/codex-icons.json" ), true );
|
|
|
|
|
}
|
|
|
|
|
return array_intersect_key( $allIcons, array_flip( $iconNames ) );
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-05-06 09:09:56 +00:00
|
|
|
|
|
|
|
|
/** @deprecated since 1.39 */
|
|
|
|
|
class_alias( CodexModule::class, 'ResourceLoaderCodexModule' );
|