diff options
author | Andrew Dolgov <[email protected]> | 2011-03-04 19:02:28 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2011-03-04 19:02:59 +0300 |
commit | a089699c8915636ba4f158d77dba9b012bc93208 (patch) | |
tree | b2d7d051f1f55d44a6be07d3ee137e5a7ccfcefb /lib/dojo/_base/_loader/loader_debug.js | |
parent | cfad9259a6feacfa8194b1312770ae6db1ecce50 (diff) |
build custom layer of Dojo to speed up loading of tt-rss (refs #293)
Diffstat (limited to 'lib/dojo/_base/_loader/loader_debug.js')
-rw-r--r-- | lib/dojo/_base/_loader/loader_debug.js | 123 |
1 files changed, 75 insertions, 48 deletions
diff --git a/lib/dojo/_base/_loader/loader_debug.js b/lib/dojo/_base/_loader/loader_debug.js index a28040f58..fa26d8efb 100644 --- a/lib/dojo/_base/_loader/loader_debug.js +++ b/lib/dojo/_base/_loader/loader_debug.js @@ -5,55 +5,82 @@ */ -if(!dojo._hasResource["dojo._base._loader.loader_debug"]){ -dojo._hasResource["dojo._base._loader.loader_debug"]=true; +if(!dojo._hasResource["dojo._base._loader.loader_debug"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base._loader.loader_debug"] = true; dojo.provide("dojo._base._loader.loader_debug"); -dojo.nonDebugProvide=dojo.provide; -dojo.provide=function(_1){ -var _2=dojo["_xdDebugQueue"]; -if(_2&&_2.length>0&&_1==_2["currentResourceName"]){ -if(dojo.isAIR){ -window.setTimeout(function(){ -dojo._xdDebugFileLoaded(_1); -},1); -}else{ -window.setTimeout(dojo._scopeName+"._xdDebugFileLoaded('"+_1+"')",1); -} -} -return dojo.nonDebugProvide.apply(dojo,arguments); -}; -dojo._xdDebugFileLoaded=function(_3){ -if(!dojo._xdDebugScopeChecked){ -if(dojo._scopeName!="dojo"){ -window.dojo=window[dojo.config.scopeMap[0][1]]; -window.dijit=window[dojo.config.scopeMap[1][1]]; -window.dojox=window[dojo.config.scopeMap[2][1]]; -} -dojo._xdDebugScopeChecked=true; -} -var _4=dojo._xdDebugQueue; -if(_3&&_3==_4.currentResourceName){ -_4.shift(); -} -if(_4.length==0){ -dojo._xdWatchInFlight(); -} -if(_4.length==0){ -_4.currentResourceName=null; -for(var _5 in dojo._xdInFlight){ -if(dojo._xdInFlight[_5]===true){ -return; -} -} -dojo._xdNotifyLoaded(); -}else{ -if(_3==_4.currentResourceName){ -_4.currentResourceName=_4[0].resourceName; -var _6=document.createElement("script"); -_6.type="text/javascript"; -_6.src=_4[0].resourcePath; -document.getElementsByTagName("head")[0].appendChild(_6); + +//Override dojo.provide, so we can trigger the next +//script tag for the next local module. We can only add one +//at a time because there are browsers that execute script tags +//in the order that the code is received, and not in the DOM order. +dojo.nonDebugProvide = dojo.provide; + +dojo.provide = function(resourceName){ + var dbgQueue = dojo["_xdDebugQueue"]; + if(dbgQueue && dbgQueue.length > 0 && resourceName == dbgQueue["currentResourceName"]){ + //Set a timeout so the module can be executed into existence. Normally the + //dojo.provide call in a module is the first line. Don't want to risk attaching + //another script tag until the current one finishes executing. + if(dojo.isAIR){ + window.setTimeout(function(){dojo._xdDebugFileLoaded(resourceName);}, 1); + }else{ + window.setTimeout(dojo._scopeName + "._xdDebugFileLoaded('" + resourceName + "')", 1); + } + } + + return dojo.nonDebugProvide.apply(dojo, arguments); } + +dojo._xdDebugFileLoaded = function(resourceName){ + + if(!dojo._xdDebugScopeChecked){ + //If using a scoped dojo, we need to expose dojo as a real global + //for the debugAtAllCosts stuff to work. + if(dojo._scopeName != "dojo"){ + window.dojo = window[dojo.config.scopeMap[0][1]]; + window.dijit = window[dojo.config.scopeMap[1][1]]; + window.dojox = window[dojo.config.scopeMap[2][1]]; + } + + dojo._xdDebugScopeChecked = true; + } + + var dbgQueue = dojo._xdDebugQueue; + + if(resourceName && resourceName == dbgQueue.currentResourceName){ + dbgQueue.shift(); + } + + if(dbgQueue.length == 0){ + //Check for more modules that need debug loading. + //dojo._xdWatchInFlight will add more things to the debug + //queue if they just recently loaded but it was not detected + //between the dojo._xdWatchInFlight intervals. + dojo._xdWatchInFlight(); + } + + if(dbgQueue.length == 0){ + dbgQueue.currentResourceName = null; + + //Make sure nothing else is in flight. + //If something is still in flight, then it still + //needs to be added to debug queue after it loads. + for(var param in dojo._xdInFlight){ + if(dojo._xdInFlight[param] === true){ + return; + } + } + + dojo._xdNotifyLoaded(); + }else{ + if(resourceName == dbgQueue.currentResourceName){ + dbgQueue.currentResourceName = dbgQueue[0].resourceName; + var element = document.createElement("script"); + element.type = "text/javascript"; + element.src = dbgQueue[0].resourcePath; + document.getElementsByTagName("head")[0].appendChild(element); + } + } } -}; + } |