MediaWiki  master
ResourceLoaderOOUIFileModule.php
Go to the documentation of this file.
1 <?php
30 
31  public function __construct( array $options = [] ) {
32  if ( isset( $options['themeScripts'] ) ) {
33  $skinScripts = $this->getSkinSpecific( $options['themeScripts'], 'scripts' );
34  if ( !isset( $options['skinScripts'] ) ) {
35  $options['skinScripts'] = [];
36  }
37  $this->extendSkinSpecific( $options['skinScripts'], $skinScripts );
38  }
39  if ( isset( $options['themeStyles'] ) ) {
40  $skinStyles = $this->getSkinSpecific( $options['themeStyles'], 'styles' );
41  if ( !isset( $options['skinStyles'] ) ) {
42  $options['skinStyles'] = [];
43  }
44  $this->extendSkinSpecific( $options['skinStyles'], $skinStyles );
45  }
46 
47  parent::__construct( $options );
48  }
49 
58  private function getSkinSpecific( $module, $which ) {
59  $themes = self::getSkinThemeMap();
60 
61  return array_combine(
62  array_keys( $themes ),
63  array_map( function ( $theme ) use ( $module, $which ) {
64  if ( $which === 'scripts' ) {
65  return $this->getThemeScriptsPath( $theme, $module );
66  } else {
67  return $this->getThemeStylesPath( $theme, $module );
68  }
69  }, array_values( $themes ) )
70  );
71  }
72 
80  private function extendSkinSpecific( array &$skinSpecific, array $extraSkinSpecific ) {
81  // For each skin where skinStyles/skinScripts are defined, add our ones at the beginning
82  foreach ( $skinSpecific as $skin => $files ) {
83  if ( !is_array( $files ) ) {
84  $files = [ $files ];
85  }
86  if ( isset( $extraSkinSpecific[$skin] ) ) {
87  $skinSpecific[$skin] = array_merge( [ $extraSkinSpecific[$skin] ], $files );
88  } elseif ( isset( $extraSkinSpecific['default'] ) ) {
89  $skinSpecific[$skin] = array_merge( [ $extraSkinSpecific['default'] ], $files );
90  }
91  }
92  // Add our remaining skinStyles/skinScripts for skins that did not have them defined
93  foreach ( $extraSkinSpecific as $skin => $file ) {
94  if ( !isset( $skinSpecific[$skin] ) ) {
95  $skinSpecific[$skin] = $file;
96  }
97  }
98  }
99 }
getThemeScriptsPath( $theme, $module)
if(PHP_SAPI !='cli-server') if(!isset( $_SERVER['SCRIPT_FILENAME'])) $file
Item class for a filearchive table row.
Definition: router.php:42
static static 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. ...
array $skinStyles
List of paths to CSS files to include when using specific skins.
getThemeStylesPath( $theme, $module)
Module based on local JavaScript/CSS files.
extendSkinSpecific(array &$skinSpecific, array $extraSkinSpecific)
Prepend the $extraSkinSpecific assoc.
Module which magically loads the right skinScripts and skinStyles for every skin, using the specified...
getSkinSpecific( $module, $which)
Helper function to generate values for &#39;skinStyles&#39; and &#39;skinScripts&#39;.
array $skinScripts
List of JavaScript files to include when using a specific skin.