Index: trunk/phase3/includes/OutputPage.php |
— | — | @@ -2516,7 +2516,7 @@ |
2517 | 2517 | * @param $only String ResourceLoaderModule TYPE_ class constant |
2518 | 2518 | * @param $useESI boolean |
2519 | 2519 | * @param $extraQuery Array with extra query parameters to add to each request. array( param => value ) |
2520 | | - * @param $loadCall boolean If true, output a mw.loader.load() call rather than a <script src="..."> tag |
| 2520 | + * @param $loadCall boolean If true, output an (asynchronous) mw.loader.load() call rather than a <script src="..."> tag |
2521 | 2521 | * @return string html <script> and <style> tags |
2522 | 2522 | */ |
2523 | 2523 | protected function makeResourceLoaderLink( $modules, $only, $useESI = false, array $extraQuery = array(), $loadCall = false ) { |
— | — | @@ -2659,7 +2659,7 @@ |
2660 | 2660 | } else if ( $loadCall ) { |
2661 | 2661 | $link = Html::inlineScript( |
2662 | 2662 | ResourceLoader::makeLoaderConditionalScript( |
2663 | | - Xml::encodeJsCall( 'mw.loader.load', array( $url ) ) |
| 2663 | + Xml::encodeJsCall( 'mw.loader.load', array( $url, 'text/javascript', true ) ) |
2664 | 2664 | ) |
2665 | 2665 | ); |
2666 | 2666 | } else { |
— | — | @@ -2712,7 +2712,7 @@ |
2713 | 2713 | if ( $modules ) { |
2714 | 2714 | $scripts .= Html::inlineScript( |
2715 | 2715 | ResourceLoader::makeLoaderConditionalScript( |
2716 | | - Xml::encodeJsCall( 'mw.loader.load', array( $modules, null, true ) ) |
| 2716 | + Xml::encodeJsCall( 'mw.loader.load', array( $modules ) ) |
2717 | 2717 | ) |
2718 | 2718 | ); |
2719 | 2719 | } |
— | — | @@ -2754,7 +2754,7 @@ |
2755 | 2755 | if ( $modules ) { |
2756 | 2756 | $scripts .= Html::inlineScript( |
2757 | 2757 | ResourceLoader::makeLoaderConditionalScript( |
2758 | | - Xml::encodeJsCall( 'mw.loader.load', array( $modules ) ) |
| 2758 | + Xml::encodeJsCall( 'mw.loader.load', array( $modules, null, true ) ) |
2759 | 2759 | ) |
2760 | 2760 | ); |
2761 | 2761 | } |
Index: trunk/phase3/resources/mediawiki/mediawiki.js |
— | — | @@ -620,14 +620,14 @@ |
621 | 621 | |
622 | 622 | /** |
623 | 623 | * Adds a script tag to the DOM, either using document.write or low-level DOM manipulation, |
624 | | - * depending on whether document-ready has occured yet and whether we are in blocking mode. |
| 624 | + * depending on whether document-ready has occured yet and whether we are in async mode. |
625 | 625 | * |
626 | 626 | * @param src String: URL to script, will be used as the src attribute in the script tag |
627 | 627 | * @param callback Function: Optional callback which will be run when the script is done |
628 | 628 | */ |
629 | | - function addScript( src, callback, blocking ) { |
| 629 | + function addScript( src, callback, async ) { |
630 | 630 | var done = false, script, head; |
631 | | - if ( ready || !blocking ) { |
| 631 | + if ( ready || async ) { |
632 | 632 | // jQuery's getScript method is NOT better than doing this the old-fashioned way |
633 | 633 | // because jQuery will eval the script's code, and errors will not have sane |
634 | 634 | // line numbers. |
— | — | @@ -738,7 +738,7 @@ |
739 | 739 | callback(); |
740 | 740 | } |
741 | 741 | }; |
742 | | - nestedAddScript = function ( arr, callback, blocking, i ) { |
| 742 | + nestedAddScript = function ( arr, callback, async, i ) { |
743 | 743 | // Recursively call addScript() in its own callback |
744 | 744 | // for each element of arr. |
745 | 745 | if ( i >= arr.length ) { |
— | — | @@ -748,13 +748,13 @@ |
749 | 749 | } |
750 | 750 | |
751 | 751 | addScript( arr[i], function() { |
752 | | - nestedAddScript( arr, callback, blocking, i + 1 ); |
753 | | - }, blocking ); |
| 752 | + nestedAddScript( arr, callback, async, i + 1 ); |
| 753 | + }, async ); |
754 | 754 | }; |
755 | 755 | |
756 | 756 | if ( $.isArray( script ) ) { |
757 | 757 | registry[module].state = 'loading'; |
758 | | - nestedAddScript( script, markModuleReady, registry[module].blocking, 0 ); |
| 758 | + nestedAddScript( script, markModuleReady, registry[module].async, 0 ); |
759 | 759 | } else if ( $.isFunction( script ) ) { |
760 | 760 | script(); |
761 | 761 | markModuleReady(); |
— | — | @@ -777,10 +777,10 @@ |
778 | 778 | * @param dependencies string module name or array of string module names |
779 | 779 | * @param ready function callback to execute when all dependencies are ready |
780 | 780 | * @param error function callback to execute when any dependency fails |
781 | | - * @param blocking (optional) If true, load modules in a blocking fashion if |
782 | | - * document ready has not yet occurred |
| 781 | + * @param async (optional) If true, load modules asynchronously even if |
| 782 | + * document ready has not yet occurred |
783 | 783 | */ |
784 | | - function request( dependencies, ready, error, blocking ) { |
| 784 | + function request( dependencies, ready, error, async ) { |
785 | 785 | var regItemDeps, regItemDepLen, n; |
786 | 786 | |
787 | 787 | // Allow calling by single module name |
— | — | @@ -812,9 +812,9 @@ |
813 | 813 | for ( n = 0; n < dependencies.length; n += 1 ) { |
814 | 814 | if ( $.inArray( dependencies[n], queue ) === -1 ) { |
815 | 815 | queue[queue.length] = dependencies[n]; |
816 | | - if ( blocking ) { |
817 | | - // Mark this module as blocking in the registry |
818 | | - registry[dependencies[n]].blocking = true; |
| 816 | + if ( async ) { |
| 817 | + // Mark this module as async in the registry |
| 818 | + registry[dependencies[n]].async = true; |
819 | 819 | } |
820 | 820 | } |
821 | 821 | } |
— | — | @@ -855,9 +855,9 @@ |
856 | 856 | * @param moduleMap {Object}: Module map, see buildModulesString() |
857 | 857 | * @param currReqBase {Object}: Object with other parameters (other than 'modules') to use in the request |
858 | 858 | * @param sourceLoadScript {String}: URL of load.php |
859 | | - * @param blocking {Boolean}: If true, use a blocking request if document ready has not yet occurred |
| 859 | + * @param async {Boolean}: If true, use an asynchrounous request even if document ready has not yet occurred |
860 | 860 | */ |
861 | | - function doRequest( moduleMap, currReqBase, sourceLoadScript, blocking ) { |
| 861 | + function doRequest( moduleMap, currReqBase, sourceLoadScript, async ) { |
862 | 862 | var request = $.extend( |
863 | 863 | { 'modules': buildModulesString( moduleMap ) }, |
864 | 864 | currReqBase |
— | — | @@ -865,7 +865,7 @@ |
866 | 866 | request = sortQuery( request ); |
867 | 867 | // Asynchronously append a script tag to the end of the body |
868 | 868 | // Append &* to avoid triggering the IE6 extension check |
869 | | - addScript( sourceLoadScript + '?' + $.param( request ) + '&*', null, blocking ); |
| 869 | + addScript( sourceLoadScript + '?' + $.param( request ) + '&*', null, async ); |
870 | 870 | } |
871 | 871 | |
872 | 872 | /* Public Methods */ |
— | — | @@ -877,7 +877,7 @@ |
878 | 878 | var reqBase, splits, maxQueryLength, q, b, bSource, bGroup, bSourceGroup, |
879 | 879 | source, group, g, i, modules, maxVersion, sourceLoadScript, |
880 | 880 | currReqBase, currReqBaseLength, moduleMap, l, |
881 | | - lastDotIndex, prefix, suffix, bytesAdded, blocking; |
| 881 | + lastDotIndex, prefix, suffix, bytesAdded, async; |
882 | 882 | |
883 | 883 | // Build a list of request parameters common to all requests. |
884 | 884 | reqBase = { |
— | — | @@ -954,7 +954,7 @@ |
955 | 955 | |
956 | 956 | currReqBase = $.extend( { 'version': formatVersionNumber( maxVersion ) }, reqBase ); |
957 | 957 | currReqBaseLength = $.param( currReqBase ).length; |
958 | | - blocking = false; |
| 958 | + async = true; |
959 | 959 | // We may need to split up the request to honor the query string length limit, |
960 | 960 | // so build it piece by piece. |
961 | 961 | l = currReqBaseLength + 9; // '&modules='.length == 9 |
— | — | @@ -976,26 +976,26 @@ |
977 | 977 | if ( maxQueryLength > 0 && !$.isEmptyObject( moduleMap ) && l + bytesAdded > maxQueryLength ) { |
978 | 978 | // This request would become too long, create a new one |
979 | 979 | // and fire off the old one |
980 | | - doRequest( moduleMap, currReqBase, sourceLoadScript, blocking ); |
| 980 | + doRequest( moduleMap, currReqBase, sourceLoadScript, async ); |
981 | 981 | moduleMap = {}; |
982 | | - blocking = false; |
| 982 | + async = true; |
983 | 983 | l = currReqBaseLength + 9; |
984 | 984 | } |
985 | 985 | if ( moduleMap[prefix] === undefined ) { |
986 | 986 | moduleMap[prefix] = []; |
987 | 987 | } |
988 | 988 | moduleMap[prefix].push( suffix ); |
989 | | - if ( registry[modules[i]].blocking ) { |
| 989 | + if ( !registry[modules[i]].async ) { |
990 | 990 | // If this module is blocking, make the entire request blocking |
991 | 991 | // This is slightly suboptimal, but in practice mixing of blocking |
992 | | - // and non-blocking modules will only occur in debug mode. |
993 | | - blocking = true; |
| 992 | + // and async modules will only occur in debug mode. |
| 993 | + async = false; |
994 | 994 | } |
995 | 995 | l += bytesAdded; |
996 | 996 | } |
997 | 997 | // If there's anything left in moduleMap, request that too |
998 | 998 | if ( !$.isEmptyObject( moduleMap ) ) { |
999 | | - doRequest( moduleMap, currReqBase, sourceLoadScript, blocking ); |
| 999 | + doRequest( moduleMap, currReqBase, sourceLoadScript, async ); |
1000 | 1000 | } |
1001 | 1001 | } |
1002 | 1002 | } |
— | — | @@ -1177,10 +1177,11 @@ |
1178 | 1178 | * @param type {String} mime-type to use if calling with a URL of an |
1179 | 1179 | * external script or style; acceptable values are "text/css" and |
1180 | 1180 | * "text/javascript"; if no type is provided, text/javascript is assumed. |
1181 | | - * @param blocking {Boolean} (optional) If true, load modules in a blocking |
1182 | | - * fashion if document ready has not yet occurred |
| 1181 | + * @param async {Boolean} (optional) If true, load modules asynchronously |
| 1182 | + * even if document ready has not yet occurred. If false (default), |
| 1183 | + * block before document ready and load async after |
1183 | 1184 | */ |
1184 | | - load: function ( modules, type, blocking ) { |
| 1185 | + load: function ( modules, type, async ) { |
1185 | 1186 | var filtered, m; |
1186 | 1187 | |
1187 | 1188 | // Validate input |
— | — | @@ -1199,7 +1200,7 @@ |
1200 | 1201 | } ) ); |
1201 | 1202 | return; |
1202 | 1203 | } else if ( type === 'text/javascript' || type === undefined ) { |
1203 | | - addScript( modules, null, blocking ); |
| 1204 | + addScript( modules, null, async ); |
1204 | 1205 | return; |
1205 | 1206 | } |
1206 | 1207 | // Unknown type |
— | — | @@ -1232,7 +1233,7 @@ |
1233 | 1234 | } |
1234 | 1235 | // Since some modules are not yet ready, queue up a request |
1235 | 1236 | else { |
1236 | | - request( filtered, null, null, blocking ); |
| 1237 | + request( filtered, null, null, async ); |
1237 | 1238 | return; |
1238 | 1239 | } |
1239 | 1240 | }, |