From: Max Semenik Date: Fri, 11 May 2012 19:16:29 +0000 (+0400) Subject: Introduced the concept of raw ResourceLoader modules X-Git-Tag: 1.31.0-rc.0~23590^2 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/exercices/modifier.php?a=commitdiff_plain;h=cd7923ac16c5182490e5d89f704cf3d9edb453f0;p=lhc%2Fweb%2Fwiklou.git Introduced the concept of raw ResourceLoader modules This is needed for mobile scripts that are supposed to work on dumb devices and as such can't rely on client-side RL, but still can take advantage of server-side minification and concatenation. Patchset 2: Allow loading raw modules with &raw=true appended to URL. Change-Id: I9410ffbf6633075e07bd06b10a98a4d12d9b6106 --- diff --git a/includes/resourceloader/ResourceLoader.php b/includes/resourceloader/ResourceLoader.php index 42fd8734e8..9e884942fb 100644 --- a/includes/resourceloader/ResourceLoader.php +++ b/includes/resourceloader/ResourceLoader.php @@ -685,6 +685,7 @@ class ResourceLoader { } // Generate output + $isRaw = false; foreach ( $modules as $name => $module ) { /** * @var $module ResourceLoaderModule @@ -763,15 +764,14 @@ class ResourceLoader { $missing[] = $name; unset( $modules[$name] ); } + $isRaw |= $module->isRaw(); wfProfileOut( __METHOD__ . '-' . $name ); } // Update module states - if ( $context->shouldIncludeScripts() ) { + if ( $context->shouldIncludeScripts() && !$context->getRaw() && !$isRaw ) { // Set the state of modules loaded as only scripts to ready - if ( count( $modules ) && $context->getOnly() === 'scripts' - && !isset( $modules['startup'] ) ) - { + if ( count( $modules ) && $context->getOnly() === 'scripts' ) { $out .= self::makeLoaderStateScript( array_fill_keys( array_keys( $modules ), 'ready' ) ); } diff --git a/includes/resourceloader/ResourceLoaderContext.php b/includes/resourceloader/ResourceLoaderContext.php index 4e28e76b44..87a3c2df31 100644 --- a/includes/resourceloader/ResourceLoaderContext.php +++ b/includes/resourceloader/ResourceLoaderContext.php @@ -41,6 +41,7 @@ class ResourceLoaderContext { protected $only; protected $version; protected $hash; + protected $raw; /* Methods */ @@ -64,6 +65,7 @@ class ResourceLoaderContext { $this->debug = $request->getFuzzyBool( 'debug', $wgResourceLoaderDebug ); $this->only = $request->getVal( 'only' ); $this->version = $request->getVal( 'version' ); + $this->raw = $request->getFuzzyBool( 'raw' ); $skinnames = Skin::getSkinNames(); // If no skin is specified, or we don't recognize the skin, use the default skin @@ -200,6 +202,13 @@ class ResourceLoaderContext { return $this->version; } + /** + * @return bool + */ + public function getRaw() { + return $this->raw; + } + /** * @return bool */ diff --git a/includes/resourceloader/ResourceLoaderFileModule.php b/includes/resourceloader/ResourceLoaderFileModule.php index e8542acbaf..f0892ec2a8 100644 --- a/includes/resourceloader/ResourceLoaderFileModule.php +++ b/includes/resourceloader/ResourceLoaderFileModule.php @@ -111,6 +111,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { protected $position = 'bottom'; /** Boolean: Link to raw files in debug mode */ protected $debugRaw = true; + /** Boolean: Whether mw.loader.state() call should be omitted */ + protected $raw = false; /** * Array: Cache for mtime * @par Usage: @@ -240,6 +242,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { break; // Single booleans case 'debugRaw': + case 'raw': $this->{$member} = (bool) $option; break; } @@ -367,6 +370,13 @@ class ResourceLoaderFileModule extends ResourceLoaderModule { return $this->dependencies; } + /** + * @return bool + */ + public function isRaw() { + return $this->raw; + } + /** * Get the last modified timestamp of this module. * diff --git a/includes/resourceloader/ResourceLoaderModule.php b/includes/resourceloader/ResourceLoaderModule.php index fa76a25625..035ff0975f 100644 --- a/includes/resourceloader/ResourceLoaderModule.php +++ b/includes/resourceloader/ResourceLoaderModule.php @@ -246,6 +246,17 @@ abstract class ResourceLoaderModule { return 'bottom'; } + /** + * Whether this module's JS expects to work without the client-side ResourceLoader module. + * Returning true from this function will prevent mw.loader.state() call from being + * appended to the bottom of the script. + * + * @return bool + */ + public function isRaw() { + return false; + } + /** * Get the loader JS for this module, if set. * diff --git a/includes/resourceloader/ResourceLoaderStartUpModule.php b/includes/resourceloader/ResourceLoaderStartUpModule.php index 74724a6918..467a1ac0f6 100644 --- a/includes/resourceloader/ResourceLoaderStartUpModule.php +++ b/includes/resourceloader/ResourceLoaderStartUpModule.php @@ -173,6 +173,13 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { /* Methods */ + /** + * @return bool + */ + public function isRaw() { + return true; + } + /** * @param $context ResourceLoaderContext * @return string