@@ -62,9 +62,10 @@ var IN_GLOBAL_SCOPE = false;
6262 "use strict" ;
6363
6464 var win = window ;
65+ var setTimeout = win . setTimeout ;
6566 var doc = document ;
6667 var root = doc . documentElement ;
67- var head = doc . getElementsByTagName ( ' head' ) [ 0 ] || doc . documentElement ;
68+ var head = doc [ 'head' ] || doc . getElementsByTagName ( " head" ) [ 0 ] || root ;
6869
6970 // From http://javascript.nwbox.com/ContentLoaded/contentloaded.js
7071 // Author: Diego Perini (diego.perini at gmail.com)
@@ -73,11 +74,12 @@ var IN_GLOBAL_SCOPE = false;
7374 // License: MIT
7475 // Version: 1.2
7576 function contentLoaded ( callback ) {
77+ var addEventListener = doc [ 'addEventListener' ] ;
7678 var done = false , top = true ,
77- add = doc . addEventListener ? 'addEventListener' : 'attachEvent' ,
78- rem = doc . addEventListener ? 'removeEventListener' : 'detachEvent' ,
79- pre = doc . addEventListener ? '' : 'on' ,
80-
79+ add = addEventListener ? 'addEventListener' : 'attachEvent' ,
80+ rem = addEventListener ? 'removeEventListener' : 'detachEvent' ,
81+ pre = addEventListener ? '' : 'on' ,
82+
8183 init = function ( e ) {
8284 if ( e . type == 'readystatechange' && doc . readyState != 'complete' ) {
8385 return ;
@@ -173,14 +175,45 @@ var IN_GLOBAL_SCOPE = false;
173175 var LOADER_BASE_URL =
174176 'https://google-code-prettify.googlecode.com/svn/loader' ;
175177
176- for ( var i = 0 , n = langs . length ; i < n ; ++ i ) {
177- var script = doc . createElement ( 'script' ) ;
178+ for ( var i = 0 , n = langs . length ; i < n ; ++ i ) ( function ( lang ) {
179+ var script = doc . createElement ( "script" ) ;
180+
181+ // Excerpted from jQuery.ajaxTransport("script") to fire events when
182+ // a script is finished loading.
183+ // Attach handlers for each script
184+ script . onload = script . onerror = script . onreadystatechange = function ( ) {
185+ if ( script && (
186+ ! script . readyState || / l o a d e d | c o m p l e t e / . test ( script . readyState ) ) ) {
187+ // Handle memory leak in IE
188+ script . onerror = script . onload = script . onreadystatechange = null ;
189+
190+ -- pendingLanguages ;
191+ checkPendingLanguages ( ) ;
192+
193+ // Remove the script
194+ if ( script . parentNode ) {
195+ script . parentNode . removeChild ( script ) ;
196+ }
197+
198+ script = null ;
199+ }
200+ } ;
201+
178202 script . type = 'text/javascript' ;
179203 script . src = LOADER_BASE_URL
180204 + '/lang-' + encodeURIComponent ( langs [ i ] ) + '.js' ;
181- head . appendChild ( script ) ;
205+
206+ // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
207+ head . insertBefore ( script , head . firstChild ) ;
208+ } ) ( langs [ i ] ) ;
209+
210+ var pendingLanguages = langs . length ;
211+ function checkPendingLanguages ( ) {
212+ if ( ! pendingLanguages ) {
213+ setTimeout ( onLangsLoaded , 0 ) ;
214+ }
182215 }
183-
216+
184217 var skinUrls = [ ] ;
185218 for ( var i = 0 , n = skins . length ; i < n ; ++ i ) {
186219 skinUrls . push ( LOADER_BASE_URL
@@ -1833,12 +1866,11 @@ var IN_GLOBAL_SCOPE = false;
18331866 return prettyPrint ;
18341867 } ) ( ) ;
18351868
1836- if ( autorun ) {
1837- // If this script is deferred or async and the document is already
1838- // loaded we need to wait for language handlers to load before performing
1839- // any autorun.
1840- var OWN_NAMESPACE = 'code_google_com_googleprettify' ;
1841- ( win [ OWN_NAMESPACE ] || ( win [ OWN_NAMESPACE ] = { } ) ) [ 'run' ] = function ( ) {
1869+ // If this script is deferred or async and the document is already
1870+ // loaded we need to wait for language handlers to load before performing
1871+ // any autorun.
1872+ function onLangsLoaded ( ) {
1873+ if ( autorun ) {
18421874 contentLoaded (
18431875 function ( ) {
18441876 var n = callbacks . length ;
@@ -1854,12 +1886,8 @@ var IN_GLOBAL_SCOPE = false;
18541886 } : void 0 ;
18551887 prettyPrint ( callback ) ;
18561888 } ) ;
1857- } ;
1858-
1859- var endScript = doc . createElement ( 'script' ) ;
1860- endScript . type = 'text/javascript' ;
1861- endScript . appendChild ( doc . createTextNode ( OWN_NAMESPACE + '.run()' ) ) ;
1862- ( doc . body || doc . documentElement ) . appendChild ( endScript ) ;
1889+ }
18631890 }
1891+ checkPendingLanguages ( ) ;
18641892
18651893} ( ) ) ;
0 commit comments