Merge "Fix a bunch of call-time pass-by-reference errors"
[lhc/web/wiklou.git] / resources / ResourcesOOUI.php
1 <?php
2 /**
3 * Definition of OOjs UI ResourceLoader modules.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 * http://www.gnu.org/copyleft/gpl.html
19 *
20 * @file
21 */
22
23 if ( !defined( 'MEDIAWIKI' ) ) {
24 die( 'Not an entry point.' );
25 }
26
27 // WARNING: OOjs-UI is NOT TESTED with older browsers and is likely to break
28 // if loaded in browsers that don't support ES5
29 return call_user_func( function () {
30 $themes = ExtensionRegistry::getInstance()->getAttribute( 'SkinOOUIThemes' );
31 // We only use the theme names for file names, and they are lowercase
32 $themes = array_map( 'strtolower', $themes );
33 $themes['default'] = 'mediawiki';
34
35 // Helper function to generate paths to files used in 'skinStyles' and 'skinScripts'.
36 $getSkinSpecific = function ( $module, $ext = 'css' ) use ( $themes ) {
37 return array_combine(
38 array_keys( $themes ),
39 array_map( function ( $theme ) use ( $module, $ext ) {
40 $module = $module ? "$module-" : '';
41 // TODO Allow extensions to specify this path somehow
42 return "resources/lib/oojs-ui/oojs-ui-$module$theme.$ext";
43 }, array_values( $themes ) )
44 );
45 };
46
47 $modules = array();
48
49 // Omnibus module.
50 $modules['oojs-ui'] = array(
51 'dependencies' => array(
52 'oojs-ui-core',
53 'oojs-ui-widgets',
54 'oojs-ui-toolbars',
55 'oojs-ui-windows',
56 ),
57 'targets' => array( 'desktop', 'mobile' ),
58 );
59
60 // The core JavaScript library.
61 $modules['oojs-ui-core'] = array(
62 'scripts' => array(
63 'resources/lib/oojs-ui/oojs-ui-core.js',
64 'resources/src/oojs-ui-local.js',
65 ),
66 'skinScripts' => $getSkinSpecific( null, 'js' ),
67 'dependencies' => array(
68 'es5-shim',
69 'oojs',
70 'oojs-ui.styles',
71 'mediawiki.language',
72 ),
73 'targets' => array( 'desktop', 'mobile' ),
74 );
75 // This contains only the styles required by core widgets.
76 $modules['oojs-ui-core.styles'] = array(
77 'position' => 'top',
78 'styles' => 'resources/src/oojs-ui-local.css', // HACK, see inside the file
79 'skinStyles' => $getSkinSpecific( 'core' ),
80 'targets' => array( 'desktop', 'mobile' ),
81 // ResourceLoaderImageModule doesn't support 'skipFunction', so instead we set this up so that
82 // this module is skipped together with its dependencies. Nothing else depends on these modules.
83 'dependencies' => array(
84 'oojs-ui.styles.icons',
85 'oojs-ui.styles.indicators',
86 'oojs-ui.styles.textures',
87 ),
88 'skipFunction' => 'resources/src/oojs-ui-styles-skip.js',
89 );
90
91 // Deprecated old name for the module 'oojs-ui-core.styles'.
92 $modules['oojs-ui.styles'] = $modules['oojs-ui-core.styles'];
93
94 // Additional widgets and layouts module.
95 $modules['oojs-ui-widgets'] = array(
96 'scripts' => 'resources/lib/oojs-ui/oojs-ui-widgets.js',
97 'skinStyles' => $getSkinSpecific( 'widgets' ),
98 'dependencies' => 'oojs-ui-core',
99 'messages' => array(
100 'ooui-outline-control-move-down',
101 'ooui-outline-control-move-up',
102 'ooui-outline-control-remove',
103 'ooui-selectfile-button-select',
104 'ooui-selectfile-dragdrop-placeholder',
105 'ooui-selectfile-not-supported',
106 'ooui-selectfile-placeholder',
107 ),
108 'targets' => array( 'desktop', 'mobile' ),
109 );
110 // Toolbar and tools module.
111 $modules['oojs-ui-toolbars'] = array(
112 'scripts' => 'resources/lib/oojs-ui/oojs-ui-toolbars.js',
113 'skinStyles' => $getSkinSpecific( 'toolbars' ),
114 'dependencies' => 'oojs-ui-core',
115 'messages' => array(
116 'ooui-toolbar-more',
117 'ooui-toolgroup-collapse',
118 'ooui-toolgroup-expand',
119 ),
120 'targets' => array( 'desktop', 'mobile' ),
121 );
122 // Windows and dialogs module.
123 $modules['oojs-ui-windows'] = array(
124 'scripts' => 'resources/lib/oojs-ui/oojs-ui-windows.js',
125 'skinStyles' => $getSkinSpecific( 'windows' ),
126 'dependencies' => 'oojs-ui-core',
127 'messages' => array(
128 'ooui-dialog-message-accept',
129 'ooui-dialog-message-reject',
130 'ooui-dialog-process-continue',
131 'ooui-dialog-process-dismiss',
132 'ooui-dialog-process-error',
133 'ooui-dialog-process-retry',
134 ),
135 'targets' => array( 'desktop', 'mobile' ),
136 );
137
138 $imageSets = array(
139 // Comments for greppability
140 'icons', // oojs-ui.styles.icons
141 'indicators', // oojs-ui.styles.indicators
142 'textures', // oojs-ui.styles.textures
143 'icons-accessibility', // oojs-ui.styles.icons-accessibility
144 'icons-alerts', // oojs-ui.styles.icons-alerts
145 'icons-content', // oojs-ui.styles.icons-content
146 'icons-editing-advanced', // oojs-ui.styles.icons-editing-advanced
147 'icons-editing-core', // oojs-ui.styles.icons-editing-core
148 'icons-editing-list', // oojs-ui.styles.icons-editing-list
149 'icons-editing-styling', // oojs-ui.styles.icons-editing-styling
150 'icons-interactions', // oojs-ui.styles.icons-interactions
151 'icons-layout', // oojs-ui.styles.icons-layout
152 'icons-location', // oojs-ui.styles.icons-location
153 'icons-media', // oojs-ui.styles.icons-media
154 'icons-moderation', // oojs-ui.styles.icons-moderation
155 'icons-movement', // oojs-ui.styles.icons-movement
156 'icons-user', // oojs-ui.styles.icons-user
157 'icons-wikimedia', // oojs-ui.styles.icons-wikimedia
158 );
159 $rootPath = 'resources/lib/oojs-ui/themes';
160
161 foreach ( $imageSets as $name ) {
162 $module = array(
163 'position' => 'top',
164 'class' => 'ResourceLoaderOOUIImageModule',
165 'name' => $name,
166 'rootPath' => $rootPath,
167 );
168
169 if ( substr( $name, 0, 5 ) === 'icons' ) {
170 $module['selectorWithoutVariant'] = '.oo-ui-icon-{name}, .mw-ui-icon-{name}:before';
171 $module['selectorWithVariant'] = '
172 .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:before,
173 /* Hack for Flow, see T110051 */
174 .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before,
175 .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before';
176 }
177
178 $modules["oojs-ui.styles.$name"] = $module;
179 }
180
181 return $modules;
182 } );