sRaw(); } // If there are no non-empty modules, skip this group if ( count( $grpModules ) === 0 ) { continue; } // Inline private modules. These can't be loaded through load.php for security // reasons, see bug 34907. Note that these modules should be loaded from // getHeadScripts() before the first loader call. Otherwise other modules can't // properly use them as dependencies (bug 30914) if ( $group === 'private' ) { if ( $only == ResourceLoaderModule::TYPE_STYLES ) { $links['html'] .= Html::inlineStyle( $resourceLoader->makeModuleResponse( $context, $grpModules ) ); } else { $links['html'] .= Html::inlineScript( ResourceLoader::makeLoaderConditionalScript( $resourceLoader->makeModuleResponse( $context, $grpModules ) ) ); } $links['html'] .= "\n"; continue; } // Special handling for the user group; because users might change their stuff // on-wiki like user pages, or user preferences; we need to find the highest // timestamp of these user-changeable modules so we can ensure cache misses on change // This should NOT be done for the site group (bug 27564) because anons get that too // and we shouldn't be putting timestamps in Squid-cached HTML $version = null; if ( $group === 'user' ) { // Get the maximum timestamp $timestamp = 1; foreach ( $grpModules as $module ) { $timestamp = max( $timestamp, $module->getModifiedTime( $context ) ); } // Add a version parameter so cache will break when things change $query['version'] = wfTimestamp( TS_ISO_8601_BASIC, $timestamp ); } $query['modules'] = ResourceLoader::makePackedModulesString( array_keys( $grpModules ) ); $moduleContext = new ResourceLoaderContext( $resourceLoader, new FauxRequest( $query ) ); $url = $resourceLoader->createLoaderURL( $source, $moduleContext, $extraQuery ); if ( $useESI && $resourceLoaderUseESI ) { $esi = Xml::element( 'esi:include', array( 'src' => $url ) ); if ( $only == ResourceLoaderModule::TYPE_STYLES ) { $link = Html::inlineStyle( $esi ); } else { $link = Html::inlineScript( $esi ); } } else { // Automatically select style/script elements if ( $only === ResourceLoaderModule::TYPE_STYLES ) { $link = Html::linkedStyle( $url ); } elseif ( $loadCall ) { $link = Html::inlineScript( ResourceLoader::makeLoaderConditionalScript( Xml::encodeJsCall( 'mw.loader.load', array( $url, 'text/javascript', true ) ) ) ); } else { $link = Html::linkedScript( $url ); if ( !$context->getRaw() && !$isRaw ) { // Wrap only=script / only=combined requests in a conditional as // browsers not supported by the startup module would unconditionally // execute this module. Otherwise users will get "ReferenceError: mw is // undefined" or "jQuery is undefined" from e.g. a "site" module. $link = Html::inlineScript( ResourceLoader::makeLoaderConditionalScript( Xml::encodeJsCall( 'document.write', array( $link ) ) ) ); } // For modules requested directly in the html via or