If any of the styles given in its module definition (in the
'styles' or 'skinStyles' properties) used the same media queries
as the module's own CSS (e.g. 'all'), the module would fail with
"PHP Fatal error: [] operator not supported for strings" because
FileModule defaults to merging all the stylesheets into a single
string.
Fix this by ensuring they are arrays before trying to extend them.
This previously made it impossible to use $wgResourceModuleSkinStyles
for modules that use SkinModule (instead of plain FileModule), such as
the 'mediawiki.skinning.interface' module.
Bug: T168088
Change-Id: I3effcaa4982728e707fbf9efeec4e5e78fc8aab6
public function getStyles( ResourceLoaderContext $context ) {
$logo = $this->getLogo( $this->getConfig() );
$styles = parent::getStyles( $context );
public function getStyles( ResourceLoaderContext $context ) {
$logo = $this->getLogo( $this->getConfig() );
$styles = parent::getStyles( $context );
+ $this->normalizeStyles( $styles );
$default = !is_array( $logo ) ? $logo : $logo['1x'];
$styles['all'][] = '.mw-wiki-logo { background-image: ' .
$default = !is_array( $logo ) ? $logo : $logo['1x'];
$styles['all'][] = '.mw-wiki-logo { background-image: ' .
+ /**
+ * Ensure all media keys use array values.
+ *
+ * Normalises arrays returned by the ResourceLoaderFileModule::getStyles() method.
+ *
+ * @param array &$styles Associative array, keys are strings (media queries),
+ * values are strings or arrays
+ */
+ private function normalizeStyles( &$styles ) {
+ foreach ( $styles as $key => $val ) {
+ if ( !is_array( $val ) ) {
+ $styles[$key] = [ $val ];
+ }
+ }
+ }
+
/**
* @param Config $conf
* @return string|array Single url if no variants are defined
/**
* @param Config $conf
* @return string|array Single url if no variants are defined