jenkins-bot has submitted this change and it was merged.

Change subject: resourceloader: Use $.ajax instead of duplicating its "script" 
logic
......................................................................


resourceloader: Use $.ajax instead of duplicating its "script" logic

Also removed isFunction check. This is an internal method and the
parameter is either a function or omitted/nulled. No need for aggressive
validation.

Change-Id: I6bbd82ca1b986b45a2f4653427396b9a6fceb6e8
---
M resources/src/mediawiki/mediawiki.js
1 file changed, 21 insertions(+), 62 deletions(-)

Approvals:
  Ori.livneh: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/resources/src/mediawiki/mediawiki.js 
b/resources/src/mediawiki/mediawiki.js
index 47b0063..fc4635a 100644
--- a/resources/src/mediawiki/mediawiki.js
+++ b/resources/src/mediawiki/mediawiki.js
@@ -1043,71 +1043,30 @@
                         *  Ignored (and defaulted to `true`) if the 
document-ready event has already occurred.
                         */
                        function addScript( src, callback, async ) {
-                               /*jshint evil:true */
-                               var script, head, done;
-
-                               // Using isReady directly instead of storing it 
locally from
-                               // a $.fn.ready callback (bug 31895).
+                               // Using isReady directly instead of storing it 
locally from a $().ready callback (bug 31895)
                                if ( $.isReady || async ) {
-                                       // Can't use jQuery.getScript because 
that only uses <script> for cross-domain,
-                                       // it uses XHR and eval for same-domain 
scripts, which we don't want because it
-                                       // messes up line numbers.
-                                       // The below is based on jQuery 
([jquery@1.9.1]/src/ajax/script.js)
-
-                                       // IE-safe way of getting an append 
target. In old IE document.head isn't supported
-                                       // and its getElementsByTagName can't 
find <head> until </head> is parsed.
-                                       done = false;
-                                       head = document.head || 
document.getElementsByTagName( 'head' )[0] || document.documentElement;
-
-                                       script = document.createElement( 
'script' );
-                                       script.async = true;
-                                       script.src = src;
-                                       if ( $.isFunction( callback ) ) {
-                                               script.onload = 
script.onreadystatechange = function () {
-                                                       if (
-                                                               !done
-                                                               && (
-                                                                       
!script.readyState
-                                                                       || 
/loaded|complete/.test( script.readyState )
-                                                               )
-                                                       ) {
-                                                               done = true;
-
-                                                               // Handle 
memory leak in IE
-                                                               script.onload = 
script.onreadystatechange = null;
-
-                                                               // Detach the 
element from the document
-                                                               if ( 
script.parentNode ) {
-                                                                       
script.parentNode.removeChild( script );
-                                                               }
-
-                                                               // Dereference 
the element from javascript
-                                                               script = 
undefined;
-
-                                                               callback();
-                                                       }
-                                               };
-                                       }
-
-                                       if ( window.opera ) {
-                                               // Appending to the <head> 
blocks rendering completely in Opera,
-                                               // so append to the <body> 
after document ready. This means the
-                                               // scripts only start loading 
after the document has been rendered,
-                                               // but so be it. Opera users 
don't deserve faster web pages if their
-                                               // browser makes it impossible.
-                                               $( function () {
-                                                       
document.body.appendChild( script );
-                                               } );
-                                       } else {
-                                               // Circumvent IE6 bugs with 
base elements (jqbug.com/2709, jqbug.com/4378)
-                                               // by prepending instead of 
appending.
-                                               head.insertBefore( script, 
head.firstChild );
-                                       }
+                                       $.ajax( {
+                                               url: src,
+                                               dataType: 'script',
+                                               // Force jQuery behaviour to be 
for crossDomain. Otherwise jQuery would use
+                                               // XHR for a same domain 
request instead of <script>, which changes the request
+                                               // headers (potentially missing 
a cache hit), and reduces caching in general
+                                               // since browsers cache XHR 
much less (if at all). And XHR means we retreive
+                                               // text, so we'd need to 
$.globalEval, which then messes up line numbers.
+                                               crossDomain: true,
+                                               cache: true,
+                                               async: true
+                                       } ).always( function () {
+                                               if ( callback  ) {
+                                                       callback();
+                                               }
+                                       } );
                                } else {
+                                       /*jshint evil:true */
                                        document.write( mw.html.element( 
'script', { 'src': src }, '' ) );
-                                       if ( $.isFunction( callback ) ) {
-                                               // Document.write is 
synchronous, so this is called when it's done
-                                               // FIXME: that's a lie. 
doc.write isn't actually synchronous
+                                       if ( callback ) {
+                                               // Document.write is 
synchronous, so this is called when it's done.
+                                               // FIXME: That's a lie. 
doc.write isn't actually synchronous.
                                                callback();
                                        }
                                }

-- 
To view, visit https://gerrit.wikimedia.org/r/130602
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I6bbd82ca1b986b45a2f4653427396b9a6fceb6e8
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Krinkle <krinklem...@gmail.com>
Gerrit-Reviewer: Bartosz DziewoƄski <matma....@gmail.com>
Gerrit-Reviewer: Catrope <roan.katt...@gmail.com>
Gerrit-Reviewer: Jack Phoenix <j...@countervandalism.net>
Gerrit-Reviewer: Krinkle <krinklem...@gmail.com>
Gerrit-Reviewer: Ori.livneh <o...@wikimedia.org>
Gerrit-Reviewer: Trevor Parscal <tpars...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to