}
/**
- * Return whether the definition of a module corresponds to a simple ResourceLoaderFileModule.
+ * Return whether the definition of a module corresponds to a simple ResourceLoaderFileModule
+ * or one of its subclasses.
*
* @param string $name Module name
* @return bool
return false;
}
$info = $this->moduleInfos[$name];
+ if ( isset( $info['object'] ) ) {
+ return false;
+ }
if (
- isset( $info['object'] ) ||
- // This special case is dumb, but we need $wgResourceModuleSkinStyles
- // to work for 'oojs-ui-core.styles'. See T167042.
- ( isset( $info['class'] ) && $info['class'] !== 'ResourceLoaderOOUIFileModule' )
+ isset( $info['class'] ) &&
+ $info['class'] !== 'ResourceLoaderFileModule' &&
+ !is_subclass_of( $info['class'], 'ResourceLoaderFileModule' )
) {
return false;
}
$strContent = self::filter( $filter, $strContent );
}
- $out .= $strContent;
+ if ( $context->getOnly() === 'scripts' ) {
+ // Use a linebreak between module scripts (T162719)
+ $out .= $this->ensureNewline( $strContent );
+ } else {
+ $out .= $strContent;
+ }
} catch ( Exception $e ) {
$this->outputErrorAndLog( $e, 'Generating module package failed: {exception}' );
if ( !$context->getDebug() ) {
$stateScript = self::filter( 'minify-js', $stateScript );
}
- $out .= $stateScript;
+ // Use a linebreak between module script and state script (T162719)
+ $out = $this->ensureNewline( $out ) . $stateScript;
}
} else {
if ( count( $states ) ) {
return $out;
}
+ /**
+ * Ensure the string is either empty or ends in a line break
+ * @param string $str
+ * @return string
+ */
+ private function ensureNewline( $str ) {
+ $end = substr( $str, -1 );
+ if ( $end === false || $end === "\n" ) {
+ return $str;
+ }
+ return $str . "\n";
+ }
+
/**
* Get names of modules that use a certain message.
*