MediaWiki REL1_30
ResourceLoaderOOUIImageModule.php
Go to the documentation of this file.
1<?php
28
29 protected function loadFromDefinition() {
30 if ( $this->definition === null ) {
31 // Do nothing if definition was already processed
32 return;
33 }
34
35 $themes = self::getSkinThemeMap();
36
37 // For backwards-compatibility, allow missing 'themeImages'
38 $module = isset( $this->definition['themeImages'] ) ? $this->definition['themeImages'] : '';
39
40 $definition = [];
41 foreach ( $themes as $skin => $theme ) {
42 // Find the path to the JSON file which contains the actual image definitions for this theme
43 if ( $module ) {
44 $dataPath = $this->getThemeImagesPath( $theme, $module );
45 } else {
46 // Backwards-compatibility for things that probably shouldn't have used this class...
47 $dataPath =
48 $this->definition['rootPath'] . '/' .
49 strtolower( $theme ) . '/' .
50 $this->definition['name'] . '.json';
51 }
52 $localDataPath = $this->localBasePath . '/' . $dataPath;
53
54 // If there's no file for this module of this theme, that's okay, it will just use the defaults
55 if ( !file_exists( $localDataPath ) ) {
56 continue;
57 }
58 $data = json_decode( file_get_contents( $localDataPath ), true );
59
60 // Expand the paths to images (since they are relative to the JSON file that defines them, not
61 // our base directory)
62 $fixPath = function ( &$path ) use ( $dataPath ) {
63 $path = dirname( $dataPath ) . '/' . $path;
64 };
65 array_walk( $data['images'], function ( &$value ) use ( $fixPath ) {
66 if ( is_string( $value['file'] ) ) {
67 $fixPath( $value['file'] );
68 } elseif ( is_array( $value['file'] ) ) {
69 array_walk_recursive( $value['file'], $fixPath );
70 }
71 } );
72
73 // Convert into a definition compatible with the parent vanilla ResourceLoaderImageModule
74 foreach ( $data as $key => $value ) {
75 switch ( $key ) {
76 // Images and color variants are defined per-theme, here converted to per-skin
77 case 'images':
78 case 'variants':
79 $definition[$key][$skin] = $data[$key];
80 break;
81
82 // Other options must be identical for each theme (or only defined in the default one)
83 default:
84 if ( !isset( $definition[$key] ) ) {
85 $definition[$key] = $data[$key];
86 } elseif ( $definition[$key] !== $data[$key] ) {
87 throw new Exception(
88 "Mismatched OOUI theme images definition: " .
89 "key '$key' of theme '$theme' for module '$module' " .
90 "does not match other themes"
91 );
92 }
93 break;
94 }
95 }
96 }
97
98 // Extra selectors to allow using the same icons for old-style MediaWiki UI code
99 if ( substr( $module, 0, 5 ) === 'icons' ) {
100 $definition['selectorWithoutVariant'] = '.oo-ui-icon-{name}, .mw-ui-icon-{name}:before';
101 $definition['selectorWithVariant'] = '
102 .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:before,
103 /* Hack for Flow, see T110051 */
104 .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before,
105 .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before';
106 }
107
108 // Fields from module definition silently override keys from JSON files
109 $this->definition += $definition;
110
111 parent::loadFromDefinition();
112 }
113}
Apache License January AND DISTRIBUTION Definitions License shall mean the terms and conditions for and distribution as defined by Sections through of this document Licensor shall mean the copyright owner or entity authorized by the copyright owner that is granting the License Legal Entity shall mean the union of the acting entity and all other entities that control are controlled by or are under common control with that entity For the purposes of this definition control direct or to cause the direction or management of such whether by contract or including but not limited to software source documentation and configuration files Object form shall mean any form resulting from mechanical transformation or translation of a Source including but not limited to compiled object generated and conversions to other media types Work shall mean the work of whether in Source or Object made available under the as indicated by a copyright notice that is included in or attached to the whether in Source or Object that is based or other modifications as a an original work of authorship For the purposes of this Derivative Works shall not include works that remain separable or merely the Work and Derivative Works thereof Contribution shall mean any work of including the original version of the Work and any modifications or additions to that Work or Derivative Works that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner For the purposes of this definition
static getSkinThemeMap()
Return a map of skin names (in lowercase) to OOUI theme names, defining which theme a given skin shou...
trait ResourceLoaderOOUIModule
Convenience methods for dealing with OOUI themes and their relations to MW skins.
getThemeImagesPath( $theme, $module)
ResourceLoader module for generated and embedded images.
loadFromDefinition()
Parse definition and external JSON data, if referenced.
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses just before the function returns a value If you return an< a > element with HTML attributes $attribs and contents $html will be returned If you return $ret will be returned $skin
Definition hooks.txt:1981