*/
$wgIncludeLegacyJavaScript = true;
+/**
+ * If set to a positive number, ResourceLoader will not generate URLs whose
+ * query string is more than this many characters long, and will instead use
+ * multiple requests with shorter query strings. This degrades performance,
+ * but may be needed if your web server has a low (less than, say 1024)
+ * query string length limit or a low value for suhosin.get.max_value_length
+ * that you can't increase.
+ *
+ * If set to a negative number, ResourceLoader will assume there is no query
+ * string length limit.
+ */
+$wgResourceLoaderMaxQueryLength = -1;
+
/** @} */ # End of resource loader settings }
$wgArticlePath, $wgScriptPath, $wgServer, $wgContLang,
$wgVariantArticlePath, $wgActionPaths, $wgUseAjax, $wgVersion,
$wgEnableAPI, $wgEnableWriteAPI, $wgDBname, $wgEnableMWSuggest,
- $wgSitename, $wgFileExtensions, $wgExtensionAssetsPath, $wgProto, $wgCookiePrefix;
+ $wgSitename, $wgFileExtensions, $wgExtensionAssetsPath, $wgProto,
+ $wgCookiePrefix, $wgResourceLoaderMaxQueryLength;
// Pre-process information
$separatorTransTable = $wgContLang->separatorTransformTable();
'wgProto' => $wgProto,
// mediawiki sets cookies to have this prefix by default
'wgCookiePrefix' => $wgCookiePrefix,
+ 'wgResourceLoaderMaxQueryLength' => $wgResourceLoaderMaxQueryLength,
);
if ( $wgUseAjax && $wgEnableMWSuggest ) {
$vars['wgMWSuggestTemplate'] = SearchEngine::getMWSuggestTemplate();
version = registry[groups[group][g]].version;
}
}
- requests[requests.length] = $.extend(
- { 'modules': groups[group].join( '|' ), 'version': formatVersionNumber( version ) }, base
- );
+ var reqBase = $.extend( { 'version': formatVersionNumber( version ) }, base );
+ var reqBaseLength = $.param( reqBase ).length;
+ var reqs = [];
+ var limit = mw.config.get( 'wgResourceLoaderMaxQueryLength', -1 );
+ if ( limit > 0 ) {
+ // We may need to split up the request to honor the query string length limit
+ // So build it piece by piece
+ var l = reqBaseLength + 9; // '&modules='.length == 9
+ var r = 0;
+ reqs[0] = [];
+ for ( var i = 0; i < groups[group].length; i++ ) {
+ // If the request would become too long, create a new one,
+ // but don't create empty requests
+ // '%7C'.length == 3
+ if ( reqs[r].length > 0 && l + 3 + groups[group][i].length > limit ) {
+ // This request would become too long, create a new one
+ r++;
+ reqs[r] = [];
+ l = reqBaseLength + 9;
+ }
+ reqs[r][reqs[r].length] = groups[group][i];
+ l += groups[group][i].length + 3;
+ }
+ } else {
+ // No splitting needed
+ reqs = [ groups[group] ];
+ }
+ for ( var r in reqs ) {
+ requests[requests.length] = $.extend(
+ { 'modules': reqs[r].join( '|' ) }, reqBase
+ );
+ }
}
// Clear the batch - this MUST happen before we append the
// script element to the body or it's possible that the script