nl_tokens: make the request for a scriptha
pl_tokens: function request_script ( chain_opts , script_obj , registry_item , onload , preload_this_script ) { // setTimeout() "yielding" prevents some weird race/crash conditions in older browsers setTimeout ( function ( ) { var script , src = script_obj . real_src , xhr ; // don't proceed until `append_to` is ready to append to if ( "item" in append_to ) { // check if `append_to` ref is still a live node list if ( ! append_to [ 0 ] ) { // `append_to` node not yet ready // try again in a little bit -- note: will re-call the anonymous function in the outer setTimeout, not the parent `request_script()` setTimeout ( arguments . callee , 25 ) ; return ; } // reassign from live node list ref to pure node ref -- avoids nasty IE bug where changes to DOM invalidate live node lists append_to = append_to [ 0 ] ; } script = <mask> . createElement ( "script" ) ; if ( script_obj . type ) script . type = script_obj . type ; if ( script_obj . charset ) script . charset = script_obj . charset ; if ( script_obj . crossOrigin ) script . crossOrigin = script_obj . crossOrigin ; // should preloading be used for this script? if ( preload_this_script ) { // real script preloading? if ( real_preloading ) { if ( chain_opts [ _Debug ] ) log_msg ( "start script preload: " + src ) ; registry_item . elem = script ; if ( explicit_preloading ) { // explicit preloading (aka, Zakas' proposal) script . preload = true ; script . onpreload = onload ; } else { script . onreadystatechange = function ( ) { if ( script . readyState == "loaded" ) onload ( ) ; } ; } script . src = src ; // NOTE: no append to DOM yet, appending will happen when ready to execute } // This is the ultimate fallback in React Server.  The // "cache-preloading" option in stock LABjs doesn't work in // modern Chrome, so... this is our last best hope.  If you're // configured for splitJsLoadFromExecution then you'd better // have xhr access to your scripts!  They need to either be on // the same domain or have CORS headers. else if ( chain_opts [ _UseCORSXHR ] || ( src . indexOf ( root_domain ) == 0 && chain_opts [ _UseLocalXHR ] ) ) { xhr = new XMLHttpRequest ( ) ; // note: IE never uses XHR (it supports true preloading), so no more need for ActiveXObject fallback for IE <= 7 if ( chain_opts [ _Debug ] ) log_msg ( "start script preload (xhr): " + src ) ; xhr . onreadystatechange = function ( ) { if ( xhr . readyState == 4 ) { xhr . onreadystatechange = function ( ) { } ; // fix a memory leak in IE registry_item . text = xhr . responseText + "\n//@ sourceURL=" + src ; // http://blog.getfirebug.com/2009/08/11/give-your-eval-a-name-with-sourceurl/ onload ( ) ; } } ; xhr . open ( "GET" , src ) ; xhr . send ( ) ; } // as a last resort, use cache-preloading else { if ( chain_opts [ _Debug ] ) log_msg ( "start script preload (cache): " + src ) ; script . type = "text/cache-script" ; create_script_load_listener ( script , registry_item , "ready" , function ( ) { append_to . removeChild ( script ) ; onload ( ) ; } ) ; script . src = src ; append_to . insertBefore ( script , append_to . firstChild ) ; } } // use async=false for ordered async? parallel-load-serial-execute http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order else if ( script_ordered_async ) { if ( chain_opts [ _Debug ] ) log_msg ( "start script load (ordered async): " + src ) ; script . async = false ; create_script_load_listener ( script , registry_item , "finished" , onload ) ; script . src = src ; append_to . insertBefore ( script , append_to . firstChild ) ; } // otherwise, just a normal script element else { if ( chain_opts [ _Debug ] ) log_msg ( "start script load: " + src ) ; create_script_load_listener ( script , registry_item , "finished" , onload ) ; script . src = src ; append_to . insertBefore ( script , append_to . firstChild ) ; } } , 0 ) ; }