(function(){ /************************************************************** * * Firebug Lite 1.4.0a1 * * Copyright (c) 2007, Parakey Inc. * Released under BSD license. * More information: http://getfirebug.com/firebuglite * **************************************************************/ /* * CSS selectors powered by: * * Sizzle CSS Selector Engine - v1.0 * Copyright 2009, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ var FBL={}; (function(){var productionDir="http://getfirebug.com/releases/lite/"; var bookmarkletVersion=4; var reNotWhitespace=/[^\s]/; var reSplitFile=/:\/{1,3}(.*?)\/([^\/]*?)\/?($|\?.*)/; this.reJavascript=/\s*javascript:\s*(.*)/; this.reChrome=/chrome:\/\/([^\/]*)\//; this.reFile=/file:\/\/([^\/]*)\//; var userAgent=navigator.userAgent.toLowerCase(); this.isFirefox=/firefox/.test(userAgent); this.isOpera=/opera/.test(userAgent); this.isSafari=/webkit/.test(userAgent); this.isIE=/msie/.test(userAgent)&&!/opera/.test(userAgent); this.isIE6=/msie 6/i.test(navigator.appVersion); this.browserVersion=(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1]; this.isIElt8=this.isIE&&(this.browserVersion-0<8); this.NS=null; this.pixelsPerInch=null; var namespaces=[]; this.ns=function(fn){var ns={}; namespaces.push(fn,ns); return ns }; var FBTrace=null; this.initialize=function(){if(FBL.FBTrace){FBTrace=FBL.FBTrace }else{FBTrace=FBL.FBTrace={} }FBL.Ajax.initialize(); var isChromeContext=window.Firebug&&typeof window.Firebug.SharedEnv=="object"; if(isChromeContext){sharedEnv=window.Firebug.SharedEnv; delete window.Firebug.SharedEnv; FBL.Env=sharedEnv; FBL.Env.isChromeContext=true; FBTrace.messageQueue=FBL.Env.traceMessageQueue }else{FBL.NS=document.documentElement.namespaceURI; FBL.Env.browser=window; FBL.Env.destroy=destroyEnvironment; if(document.documentElement.getAttribute("debug")=="true"){FBL.Env.Options.startOpened=true }findLocation(); var prefs=eval("("+FBL.readCookie("FirebugLite")+")"); if(prefs){FBL.Env.Options.startOpened=prefs.startOpened; FBL.Env.Options.enableTrace=prefs.enableTrace; FBL.Env.Options.enablePersistent=prefs.enablePersistent }if(FBL.isFirefox&&typeof FBL.Env.browser.console=="object"&&FBL.Env.browser.console.firebug&&FBL.Env.Options.disableWhenFirebugActive){return }}if(FBL.Env.isDebugMode){FBL.Env.browser.FBL=FBL }this.isQuiksMode=FBL.Env.browser.document.compatMode=="BackCompat"; this.isIEQuiksMode=this.isIE&&this.isQuiksMode; this.isIEStantandMode=this.isIE&&!this.isQuiksMode; this.noFixedPosition=this.isIE6||this.isIEQuiksMode; if(FBL.Env.Options.enableTrace){FBTrace.initialize() }if(FBTrace.DBG_INITIALIZE&&isChromeContext){FBTrace.sysout("FBL.initialize - persistent application","initialize chrome context") }if(FBTrace.DBG_INITIALIZE){FBTrace.sysout("FBL.initialize",namespaces.length/2+" namespaces BEGIN") }for(var i=0; i0){path=reLastDir.exec(path)[1] }path+=backDir[2] }else{if(src.indexOf("/")!=-1){if(/^\.\/./.test(src)){path+=src.substring(2) }else{if(/^\/./.test(src)){var domain=/^(\w+:\/\/[^\/]+)/.exec(path); path=domain[1]+src }else{path+=src }}}}}}FBL.Env.isChromeExtension=script&&script.getAttribute("extension")=="Chrome"; if(FBL.Env.isChromeExtension){path=productionDir; FBL.Env.bookmarkletOutdated=false; script={innerHTML:"{showIconWhenHidden:false}"} }var m=path&&path.match(/([^\/]+)\/$/)||null; if(path&&m){var Env=FBL.Env; Env.useLocalSkin=path.indexOf(location.protocol+"//"+location.host+"/")==0; if(fileName=="firebug-lite-dev.js"){Env.isDevelopmentMode=true; Env.isDebugMode=true }else{if(fileName=="firebug-lite-debug.js"){Env.isDebugMode=true }}if(Env.browser.document.documentElement.getAttribute("debug")=="true"){Env.Options.startOpened=true }if(fileOptions){var options=fileOptions.split(","); for(var i=0,length=options.length; i1){for(var i=0; i":return">"; case"&":return"&"; case"'":return"'"; case'"':return""" }return"?" }return String(value).replace(/[<>&"']/g,replaceChars) }this.escapeHTML=escapeHTML; this.cropString=function(text,limit){text=text+""; if(!limit){var halfLimit=50 }else{var halfLimit=limit/2 }if(text.length>limit){return this.escapeNewLines(text.substr(0,halfLimit)+"..."+text.substr(text.length-halfLimit)) }else{return this.escapeNewLines(text) }}; this.isWhitespace=function(text){return !reNotWhitespace.exec(text) }; this.splitLines=function(text){var reSplitLines2=/.*(:?\r\n|\n|\r)?/mg; var lines; if(text.match){lines=text.match(reSplitLines2) }else{var str=text+""; lines=str.match(reSplitLines2) }lines.pop(); return lines }; this.safeToString=function(ob){if(this.isIE){return ob+"" }try{if(ob&&"toString" in ob&&typeof ob.toString=="function"){return ob.toString() }}catch(exc){return ob+"" }}; this.hasProperties=function(ob){try{for(var name in ob){return true }}catch(exc){}return false }; var reTrim=/^\s+|\s+$/g; this.trim=function(s){return s.replace(reTrim,"") }; this.emptyFn=function(){}; this.isVisible=function(elt){return this.getStyle(elt,"visibility")!="hidden"&&(elt.offsetWidth>0||elt.offsetHeight>0||elt.tagName in invisibleTags||elt.namespaceURI=="http://www.w3.org/2000/svg"||elt.namespaceURI=="http://www.w3.org/1998/Math/MathML") }; this.collapse=function(elt,collapsed){if(this.isIElt8){if(collapsed){this.setClass(elt,"collapsed") }else{this.removeClass(elt,"collapsed") }}else{elt.setAttribute("collapsed",collapsed?"true":"false") }}; this.obscure=function(elt,obscured){if(obscured){this.setClass(elt,"obscured") }else{this.removeClass(elt,"obscured") }}; this.hide=function(elt,hidden){elt.style.visibility=hidden?"hidden":"visible" }; this.clearNode=function(node){var nodeName=" "+node.nodeName.toLowerCase()+" "; var ignoreTags=" table tbody thead tfoot th tr td "; if(this.isIE&&ignoreTags.indexOf(nodeName)!=-1){this.eraseNode(node) }else{node.innerHTML="" }}; this.eraseNode=function(node){while(node.lastChild){node.removeChild(node.lastChild) }}; this.iterateWindows=function(win,handler){if(!win||!win.document){return }handler(win); if(win==top||!win.frames){return }for(var i=0; iscrollParent.offsetHeight){return scrollParent }}}; this.isScrolledToBottom=function(element){var onBottom=(element.scrollTop+element.offsetHeight)==element.scrollHeight; if(FBTrace.DBG_CONSOLE){FBTrace.sysout("isScrolledToBottom offsetHeight: "+element.offsetHeight+" onBottom:"+onBottom) }return onBottom }; this.scrollToBottom=function(element){element.scrollTop=element.scrollHeight; if(FBTrace.DBG_CONSOLE){FBTrace.sysout("scrollToBottom reset scrollTop "+element.scrollTop+" = "+element.scrollHeight); if(element.scrollHeight==element.offsetHeight){FBTrace.sysout("scrollToBottom attempt to scroll non-scrollable element "+element,element) }}return(element.scrollTop==element.scrollHeight) }; this.move=function(element,x,y){element.style.left=x+"px"; element.style.top=y+"px" }; this.resize=function(element,w,h){element.style.width=w+"px"; element.style.height=h+"px" }; this.linesIntoCenterView=function(element,scrollBox){if(!scrollBox){scrollBox=this.getOverflowParent(element) }if(!scrollBox){return }var offset=this.getClientOffset(element); var topSpace=offset.y-scrollBox.scrollTop; var bottomSpace=(scrollBox.scrollTop+scrollBox.clientHeight)-(offset.y+element.offsetHeight); if(topSpace<0||bottomSpace<0){var split=(scrollBox.clientHeight/2); var centerY=offset.y-split; scrollBox.scrollTop=centerY; topSpace=split; bottomSpace=split-element.offsetHeight }return{before:Math.round((topSpace/element.offsetHeight)+0.5),after:Math.round((bottomSpace/element.offsetHeight)+0.5)} }; this.scrollIntoCenterView=function(element,scrollBox,notX,notY){if(!element){return }if(!scrollBox){scrollBox=this.getOverflowParent(element) }if(!scrollBox){return }var offset=this.getClientOffset(element); if(!notY){var topSpace=offset.y-scrollBox.scrollTop; var bottomSpace=(scrollBox.scrollTop+scrollBox.clientHeight)-(offset.y+element.offsetHeight); if(topSpace<0||bottomSpace<0){var centerY=offset.y-(scrollBox.clientHeight/2); scrollBox.scrollTop=centerY }}if(!notX){var leftSpace=offset.x-scrollBox.scrollLeft; var rightSpace=(scrollBox.scrollLeft+scrollBox.clientWidth)-(offset.x+element.clientWidth); if(leftSpace<0||rightSpace<0){var centerX=offset.x-(scrollBox.clientWidth/2); scrollBox.scrollLeft=centerX }}if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("lib.scrollIntoCenterView ","Element:"+element.innerHTML) }}; var cssKeywordMap=null; var cssPropNames=null; var cssColorNames=null; var imageRules=null; this.getCSSKeywordsByProperty=function(propName){if(!cssKeywordMap){cssKeywordMap={}; for(var name in this.cssInfo){var list=[]; var types=this.cssInfo[name]; for(var i=0; i"); var pureText=true; for(var child=element.firstChild; child; child=child.nextSibling){pureText=pureText&&(child.nodeType==Node.TEXT_NODE) }if(pureText){html.push(escapeForHtmlEditor(elt.textContent)) }else{for(var child=elt.firstChild; child; child=child.nextSibling){toHTML(child) }}html.push("") }else{if(isElementSVG(elt)||isElementMathML(elt)){html.push("/>") }else{if(self.isSelfClosing(elt)){html.push((isElementXHTML(elt))?"/>":">") }else{html.push(">") }}}}else{if(elt.nodeType==Node.TEXT_NODE){html.push(escapeForTextNode(elt.textContent)) }else{if(elt.nodeType==Node.CDATA_SECTION_NODE){html.push("") }else{if(elt.nodeType==Node.COMMENT_NODE){html.push("") }}}}}var html=[]; toHTML(element); return html.join("") }; this.getElementXML=function(element){function toXML(elt){if(elt.nodeType==Node.ELEMENT_NODE){if(unwrapObject(elt).firebugIgnore){return }xml.push("<",elt.nodeName.toLowerCase()); for(var i=0; i"); for(var child=elt.firstChild; child; child=child.nextSibling){toXML(child) }xml.push("") }else{xml.push("/>") }}else{if(elt.nodeType==Node.TEXT_NODE){xml.push(elt.nodeValue) }else{if(elt.nodeType==Node.CDATA_SECTION_NODE){xml.push("") }else{if(elt.nodeType==Node.COMMENT_NODE){xml.push("") }}}}}var xml=[]; toXML(element); return xml.join("") }; this.hasClass=function(node,name){if(arguments.length==2){return(" "+node.className+" ").indexOf(" "+name+" ")!=-1 }if(!node||node.nodeType!=1){return false }else{for(var i=1; i=0){var size=name.length; node.className=node.className.substr(0,index-1)+node.className.substr(index+size) }}}; this.toggleClass=function(elt,name){if((" "+elt.className+" ").indexOf(" "+name+" ")!=-1){this.removeClass(elt,name) }else{this.setClass(elt,name) }}; this.setClassTimed=function(elt,name,context,timeout){if(!timeout){timeout=1300 }if(elt.__setClassTimeout){context.clearTimeout(elt.__setClassTimeout) }else{this.setClass(elt,name) }elt.__setClassTimeout=context.setTimeout(function(){delete elt.__setClassTimeout; FBL.removeClass(elt,name) },timeout) }; this.cancelClassTimed=function(elt,name,context){if(elt.__setClassTimeout){FBL.removeClass(elt,name); context.clearTimeout(elt.__setClassTimeout); delete elt.__setClassTimeout }}; this.$=function(id,doc){if(doc){return doc.getElementById(id) }else{return FBL.Firebug.chrome.document.getElementById(id) }}; this.$$=function(selector,doc){if(doc||!FBL.Firebug.chrome){return FBL.Firebug.Selector(selector,doc) }else{return FBL.Firebug.Selector(selector,FBL.Firebug.chrome.document) }}; this.getChildByClass=function(node){for(var i=1; i1&&doc.styleSheets[1].href=="chrome://browser/skin/feeds/subscribe.css")){return true }return FBL.isSystemURL(win.location.href) }catch(exc){ERROR("tabWatcher.isSystemPage document not ready:"+exc); return false }}; this.isSystemStyleSheet=function(sheet){var href=sheet&&sheet.href; return href&&FBL.isSystemURL(href) }; this.getURIHost=function(uri){try{if(uri){return uri.host }else{return"" }}catch(exc){return"" }}; this.isLocalURL=function(url){if(url.substr(0,5)=="file:"){return true }else{if(url.substr(0,8)=="wyciwyg:"){return true }else{return false }}}; this.isDataURL=function(url){return(url&&url.substr(0,5)=="data:") }; this.getLocalPath=function(url){if(this.isLocalURL(url)){var fileHandler=ioService.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler); var file=fileHandler.getFileFromURLSpec(url); return file.path }}; this.getURLFromLocalFile=function(file){var fileHandler=ioService.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler); var URL=fileHandler.getURLSpecFromFile(file); return URL }; this.getDataURLForContent=function(content,url){var uri="data:text/html;"; uri+="fileName="+encodeURIComponent(url)+","; uri+=encodeURIComponent(content); return uri },this.getDomain=function(url){var m=/[^:]+:\/{1,3}([^\/]+)/.exec(url); return m?m[1]:"" }; this.getURLPath=function(url){var m=/[^:]+:\/{1,3}[^\/]+(\/.*?)$/.exec(url); return m?m[1]:"" }; this.getPrettyDomain=function(url){var m=/[^:]+:\/{1,3}(www\.)?([^\/]+)/.exec(url); return m?m[2]:"" }; this.absoluteURL=function(url,baseURL){return this.absoluteURLWithDots(url,baseURL).replace("/./","/","g") }; this.absoluteURLWithDots=function(url,baseURL){if(url[0]=="?"){return baseURL+url }var reURL=/(([^:]+:)\/{1,2}[^\/]*)(.*?)$/; var m=reURL.exec(url); if(m){return url }var m=reURL.exec(baseURL); if(!m){return"" }var head=m[1]; var tail=m[3]; if(url.substr(0,2)=="//"){return m[2]+url }else{if(url[0]=="/"){return head+url }else{if(tail[tail.length-1]=="/"){return baseURL+url }else{var parts=tail.split("/"); return head+parts.slice(0,parts.length-1).join("/")+"/"+url }}}}; this.normalizeURL=function(url){if(!url){return"" }if(url.length<255){url=url.replace(/[^\/]+\/\.\.\//,"","g"); url=url.replace(/#.*/,""); url=url.replace(/file:\/([^\/])/g,"file:///$1"); if(url.indexOf("chrome:")==0){var m=reChromeCase.exec(url); if(m){url="chrome://"+m[1].toLowerCase()+"/"+m[2] }}}return url }; this.denormalizeURL=function(url){return url.replace(/file:\/\/\//g,"file:/") }; this.parseURLParams=function(url){var q=url?url.indexOf("?"):-1; if(q==-1){return[] }var search=url.substr(q+1); var h=search.lastIndexOf("#"); if(h!=-1){search=search.substr(0,h) }if(!search){return[] }return this.parseURLEncodedText(search) }; this.parseURLEncodedText=function(text){var maxValueLength=25000; var params=[]; text=text.replace(/\+/g," "); var args=text.split("&"); for(var i=0; imaxValueLength){parts[1]=this.$STR("LargeData") }params.push({name:decodeURIComponent(parts[0]),value:decodeURIComponent(parts[1])}) }else{params.push({name:decodeURIComponent(parts[0]),value:""}) }}catch(e){if(FBTrace.DBG_ERRORS){FBTrace.sysout("parseURLEncodedText EXCEPTION ",e); FBTrace.sysout("parseURLEncodedText EXCEPTION URI",args[i]) }}}params.sort(function(a,b){return a.name<=b.name?-1:1 }); return params }; this.parseURLParamsArray=function(url){var q=url?url.indexOf("?"):-1; if(q==-1){return[] }var search=url.substr(q+1); var h=search.lastIndexOf("#"); if(h!=-1){search=search.substr(0,h) }if(!search){return[] }return this.parseURLEncodedTextArray(search) }; this.parseURLEncodedTextArray=function(text){var maxValueLength=25000; var params=[]; text=text.replace(/\+/g," "); var args=text.split("&"); for(var i=0; imaxValueLength){parts[1]=this.$STR("LargeData") }params.push({name:decodeURIComponent(parts[0]),value:[decodeURIComponent(parts[1])]}) }else{params.push({name:decodeURIComponent(parts[0]),value:[""]}) }}catch(e){if(FBTrace.DBG_ERRORS){FBTrace.sysout("parseURLEncodedText EXCEPTION ",e); FBTrace.sysout("parseURLEncodedText EXCEPTION URI",args[i]) }}}params.sort(function(a,b){return a.name<=b.name?-1:1 }); return params }; this.reEncodeURL=function(file,text){var lines=text.split("\n"); var params=this.parseURLEncodedText(lines[lines.length-1]); var args=[]; for(var i=0; i0){setTimeout(this.sendRequest,10) }}},getResponse:function(options){var t=this.transport,type=options.dataType; if(t.status!=200){return t.statusText }else{if(type=="text"){return t.responseText }else{if(type=="html"){return t.responseText }else{if(type=="xml"){return t.responseXML }else{if(type=="json"){return eval("("+t.responseText+")") }}}}}},getState:function(){return this.states[this.transport.readyState] }}; this.createCookie=function(name,value,days){if("cookie" in document){if(days){var date=new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires="; expires="+date.toGMTString() }else{var expires="" }document.cookie=name+"="+value+expires+"; path=/" }}; this.readCookie=function(name){if("cookie" in document){var nameEQ=name+"="; var ca=document.cookie.split(";"); for(var i=0; iobjects.length){format=""; objIndex=-1; parts.length=0; break }}}var result=[]; for(var i=0; i'; var tabNode=this.tabNode=createElement("a",{id:panelId+"Tab",className:"fbTab fbHover",innerHTML:tabHTML}); if(isIE6){tabNode.href="javascript:void(0)" }var panelBarNode=this.parentPanel?Firebug.chrome.getPanel(this.parentPanel).sidePanelBarNode:this.panelBarNode; panelBarNode.appendChild(tabNode); tabNode.style.display="block"; if(options.hasToolButtons){this.toolButtonsNode=createElement("span",{id:panelId+"Buttons",className:"fbToolbarButtons"}); $("fbToolbarButtons").appendChild(this.toolButtonsNode) }if(options.hasStatusBar){this.statusBarBox=$("fbStatusBarBox"); this.statusBarNode=createElement("span",{id:panelId+"StatusBar",className:"fbToolbarButtons fbStatusBar"}); this.statusBarBox.appendChild(this.statusBarNode) }}this.containerNode=this.panelNode.parentNode; if(FBTrace.DBG_INITIALIZE){FBTrace.sysout("Firebug.Panel.create",this.name) }this.onContextMenu=bind(this.onContextMenu,this) },destroy:function(state){if(FBTrace.DBG_INITIALIZE){FBTrace.sysout("Firebug.Panel.destroy",this.name) }if(this.hasSidePanel){this.sidePanelBar.destroy(); this.sidePanelBar=null }this.options=null; this.name=null; this.parentPanel=null; this.tabNode=null; this.panelNode=null; this.containerNode=null; this.toolButtonsNode=null; this.statusBarBox=null; this.statusBarNode=null },initialize:function(){if(FBTrace.DBG_INITIALIZE){FBTrace.sysout("Firebug.Panel.initialize",this.name) }if(this.hasSidePanel){this.sidePanelBar.initialize() }var options=this.options=extend(Firebug.Panel.options,this.options); var panelId="fb"+this.name; this.panelNode=$(panelId); this.tabNode=$(panelId+"Tab"); this.tabNode.style.display="block"; if(options.hasStatusBar){this.statusBarBox=$("fbStatusBarBox"); this.statusBarNode=$(panelId+"StatusBar") }if(options.hasToolButtons){this.toolButtonsNode=$(panelId+"Buttons") }this.containerNode=this.panelNode.parentNode; this.containerNode.scrollTop=this.lastScrollTop; addEvent(this.containerNode,"contextmenu",this.onContextMenu); Firebug.chrome.currentPanel=Firebug.chrome.selectedPanel&&Firebug.chrome.selectedPanel.sidePanelBar?Firebug.chrome.selectedPanel.sidePanelBar.selectedPanel:Firebug.chrome.selectedPanel; Firebug.showInfoTips=true; Firebug.InfoTip.initializeBrowser(Firebug.chrome) },shutdown:function(){if(FBTrace.DBG_INITIALIZE){FBTrace.sysout("Firebug.Panel.shutdown",this.name) }Firebug.InfoTip.uninitializeBrowser(Firebug.chrome); if(Firebug.chrome.largeCommandLineVisible){Firebug.chrome.hideLargeCommandLine() }if(this.hasSidePanel){}this.lastScrollTop=this.containerNode.scrollTop; removeEvent(this.containerNode,"contextmenu",this.onContextMenu) },detach:function(oldChrome,newChrome){if(oldChrome.selectedPanel.name==this.name){this.lastScrollTop=oldChrome.selectedPanel.containerNode.scrollTop }},reattach:function(doc){if(this.options.innerHTMLSync){this.synchronizeUI() }},synchronizeUI:function(){this.containerNode.scrollTop=this.lastScrollTop||0 },show:function(state){var options=this.options; if(options.hasStatusBar){this.statusBarBox.style.display="inline"; this.statusBarNode.style.display="inline" }if(options.hasToolButtons){this.toolButtonsNode.style.display="inline" }this.panelNode.style.display="block"; this.visible=true; if(!this.parentPanel){Firebug.chrome.layout(this) }},hide:function(state){var options=this.options; if(options.hasStatusBar){this.statusBarBox.style.display="none"; this.statusBarNode.style.display="none" }if(options.hasToolButtons){this.toolButtonsNode.style.display="none" }this.panelNode.style.display="none"; this.visible=false },watchWindow:function(win){},unwatchWindow:function(win){},updateOption:function(name,value){},showToolbarButtons:function(buttonsId,show){try{if(!this.context.browser){if(FBTrace.DBG_ERRORS){FBTrace.sysout("firebug.Panel showToolbarButtons this.context has no browser, this:",this) }return }var buttons=this.context.browser.chrome.$(buttonsId); if(buttons){collapse(buttons,show?"false":"true") }}catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.dumpProperties("firebug.Panel showToolbarButtons FAILS",exc); if(!this.context.browser){FBTrace.dumpStack("firebug.Panel showToolbarButtons no browser") }}}},supportsObject:function(object){return 0 },hasObject:function(object){return false },select:function(object,forceUpdate){if(!object){object=this.getDefaultSelection(this.context) }if(FBTrace.DBG_PANELS){FBTrace.sysout("firebug.select "+this.name+" forceUpdate: "+forceUpdate+" "+object+((object==this.selection)?"==":"!=")+this.selection) }if(forceUpdate||object!=this.selection){this.selection=object; this.updateSelection(object) }},updateSelection:function(object){},markChange:function(skipSelf){if(this.dependents){if(skipSelf){for(var i=0; ilocB.path){return 1 }if(locA.pathlocB.name){return 1 }if(locA.namewidth||el.scrollHeight>height)){width=el.scrollWidth; height=el.scrollHeight }return{width:width,height:height} },getWindowScrollPosition:function(){var top=0,left=0,el; if(typeof this.window.pageYOffset=="number"){top=this.window.pageYOffset; left=this.window.pageXOffset }else{if((el=this.document.body)&&(el.scrollTop||el.scrollLeft)){top=el.scrollTop; left=el.scrollLeft }else{if((el=this.document.documentElement)&&(el.scrollTop||el.scrollLeft)){top=el.scrollTop; left=el.scrollLeft }}}return{top:top,left:left} },getElementFromPoint:function(x,y){if(shouldFixElementFromPoint){var scroll=this.getWindowScrollPosition(); return this.document.elementFromPoint(x+scroll.left,y+scroll.top) }else{return this.document.elementFromPoint(x,y) }},getElementPosition:function(el){var left=0; var top=0; do{left+=el.offsetLeft; top+=el.offsetTop }while(el=el.offsetParent); return{left:left,top:top} },getElementBox:function(el){var result={}; if(el.getBoundingClientRect){var rect=el.getBoundingClientRect(); var offset=isIE?this.document.body.clientTop||this.document.documentElement.clientTop:0; var scroll=this.getWindowScrollPosition(); result.top=Math.round(rect.top-offset+scroll.top); result.left=Math.round(rect.left-offset+scroll.left); result.height=Math.round(rect.bottom-rect.top); result.width=Math.round(rect.right-rect.left) }else{var position=this.getElementPosition(el); result.top=position.top; result.left=position.left; result.height=el.offsetHeight; result.width=el.offsetWidth }return result },getMeasurement:function(el,name){var result={value:0,unit:"px"}; var cssValue=this.getStyle(el,name); if(!cssValue){return result }if(cssValue.toLowerCase()=="auto"){return result }var reMeasure=/(\d+\.?\d*)(.*)/; var m=cssValue.match(reMeasure); if(m){result.value=m[1]-0; result.unit=m[2].toLowerCase() }return result },getMeasurementInPixels:function(el,name){if(!el){return null }var m=this.getMeasurement(el,name); var value=m.value; var unit=m.unit; if(unit=="px"){return value }else{if(unit=="pt"){return this.pointsToPixels(name,value) }}if(unit=="em"){return this.emToPixels(el,value) }else{if(unit=="%"){return this.percentToPixels(el,value) }}},getMeasurementBox1:function(el,name){var sufixes=["Top","Left","Bottom","Right"]; var result=[]; for(var i=0,sufix; sufix=sufixes[i]; i++){result[i]=Math.round(this.getMeasurementInPixels(el,name+sufix)) }return{top:result[0],left:result[1],bottom:result[2],right:result[3]} },getMeasurementBox:function(el,name){var result=[]; var sufixes=name=="border"?["TopWidth","LeftWidth","BottomWidth","RightWidth"]:["Top","Left","Bottom","Right"]; if(isIE){var propName,cssValue; var autoMargin=null; for(var i=0,sufix; sufix=sufixes[i]; i++){propName=name+sufix; cssValue=el.currentStyle[propName]||el.style[propName]; if(cssValue=="auto"){if(!autoMargin){autoMargin=this.getCSSAutoMarginBox(el) }result[i]=autoMargin[sufix.toLowerCase()] }else{result[i]=this.getMeasurementInPixels(el,propName) }}}else{for(var i=0,sufix; sufix=sufixes[i]; i++){result[i]=this.getMeasurementInPixels(el,name+sufix) }}return{top:result[0],left:result[1],bottom:result[2],right:result[3]} },getCSSAutoMarginBox:function(el){if(isIE&&" meta title input script link a ".indexOf(" "+el.nodeName.toLowerCase()+" ")!=-1){return{top:0,left:0,bottom:0,right:0} }if(isIE&&" h1 h2 h3 h4 h5 h6 h7 ul p ".indexOf(" "+el.nodeName.toLowerCase()+" ")==-1){return{top:0,left:0,bottom:0,right:0} }var offsetTop=0; if(false&&isIEStantandMode){var scrollSize=Firebug.browser.getWindowScrollSize(); offsetTop=scrollSize.height }var box=this.document.createElement("div"); box.style.cssText="margin:0; padding:1px; border: 0; visibility: hidden;"; var clone=el.cloneNode(false); var text=this.document.createTextNode(" "); clone.appendChild(text); box.appendChild(clone); this.document.body.appendChild(box); var marginTop=clone.offsetTop-box.offsetTop-1; var marginBottom=box.offsetHeight-clone.offsetHeight-2-marginTop; var marginLeft=clone.offsetLeft-box.offsetLeft-1; var marginRight=box.offsetWidth-clone.offsetWidth-2-marginLeft; this.document.body.removeChild(box); return{top:marginTop+offsetTop,left:marginLeft,bottom:marginBottom-offsetTop,right:marginRight} },getFontSizeInPixels:function(el){var size=this.getMeasurement(el,"fontSize"); if(size.unit=="px"){return size.value }var computeDirtyFontSize=function(el,calibration){var div=this.document.createElement("div"); var divStyle=offscreenStyle; if(calibration){divStyle+=" font-size:"+calibration+"px;" }div.style.cssText=divStyle; div.innerHTML="A"; el.appendChild(div); var value=div.offsetHeight; el.removeChild(div); return value }; var rate=200/225; var value=computeDirtyFontSize(el); return value*rate },pointsToPixels:function(name,value,returnFloat){var axis=/Top$|Bottom$/.test(name)?"y":"x"; var result=value*pixelsPerInch[axis]/72; return returnFloat?result:Math.round(result) },emToPixels:function(el,value){if(!el){return null }var fontSize=this.getFontSizeInPixels(el); return Math.round(value*fontSize) },exToPixels:function(el,value){if(!el){return null }var div=this.document.createElement("div"); div.style.cssText=offscreenStyle+"width:"+value+"ex;"; el.appendChild(div); var value=div.offsetWidth; el.removeChild(div); return value },percentToPixels:function(el,value){if(!el){return null }var div=this.document.createElement("div"); div.style.cssText=offscreenStyle+"width:"+value+"%;"; el.appendChild(div); var value=div.offsetWidth; el.removeChild(div); return value },getStyle:isIE?function(el,name){return el.currentStyle[name]||el.style[name]||undefined }:function(el,name){return this.document.defaultView.getComputedStyle(el,null)[name]||el.style[name]||undefined }} }}); FBL.ns(function(){with(FBL){var WindowDefaultOptions={type:"frame",id:"FirebugUI",height:250},commandLine,fbTop,fbContent,fbContentStyle,fbBottom,fbBtnInspect,fbToolbar,fbPanelBox1,fbPanelBox1Style,fbPanelBox2,fbPanelBox2Style,fbPanelBar2Box,fbPanelBar2BoxStyle,fbHSplitter,fbVSplitter,fbVSplitterStyle,fbPanel1,fbPanel1Style,fbPanel2,fbPanel2Style,fbConsole,fbConsoleStyle,fbHTML,fbCommandLine,fbLargeCommandLine,fbLargeCommandButtons,topHeight,topPartialHeight,chromeRedrawSkipRate=isIE?75:isOpera?80:75,lastSelectedPanelName,focusCommandLineState=0,lastFocusedPanelName,lastHSplitterMouseMove=0,onHSplitterMouseMoveBuffer=null,onHSplitterMouseMoveTimer=null,lastVSplitterMouseMove=0; FBL.FirebugChrome={isOpen:false,height:250,sidePanelWidth:350,selectedPanelName:"Console",selectedHTMLElementId:null,chromeMap:{},htmlSelectionStack:[],consoleMessageQueue:[],create:function(){if(FBTrace.DBG_INITIALIZE){FBTrace.sysout("FirebugChrome.create","creating chrome window") }createChromeWindow() },initialize:function(){if(FBTrace.DBG_INITIALIZE){FBTrace.sysout("FirebugChrome.initialize","initializing chrome window") }if(Env.chrome.type=="frame"||Env.chrome.type=="div"){ChromeMini.create(Env.chrome) }var chrome=Firebug.chrome=new Chrome(Env.chrome); FirebugChrome.chromeMap[chrome.type]=chrome; addGlobalEvent("keydown",onGlobalKeyDown); if(Env.Options.enablePersistent&&chrome.type=="popup"){var frame=FirebugChrome.chromeMap.frame; if(frame){frame.close() }chrome.initialize() }},clone:function(FBChrome){for(var name in FBChrome){var prop=FBChrome[name]; if(FBChrome.hasOwnProperty(name)&&!isFunction(prop)){this[name]=prop }}}}; var createChromeWindow=function(options){options=extend(WindowDefaultOptions,options||{}); var chrome={},context=options.context||Env.browser,type=chrome.type=Env.Options.enablePersistent?"popup":options.type,isChromeFrame=type=="frame",useLocalSkin=Env.useLocalSkin,url=useLocalSkin?Env.Location.skin:"about:blank",body=context.document.getElementsByTagName("body")[0],formatNode=function(node){if(!Env.isDebugMode){node.firebugIgnore=true }node.style.border="0"; node.style.visibility="hidden"; node.style.zIndex="2147483647"; node.style.position=noFixedPosition?"absolute":"fixed"; node.style.width="100%"; node.style.left="0"; node.style.bottom=noFixedPosition?"-1px":"0"; node.style.height=options.height+"px"; if(isFirefox){node.style.display="none" }},createChromeDiv=function(){var node=chrome.node=createGlobalElement("div"),style=createGlobalElement("style"),css=FirebugChrome.Skin.CSS,rules=".fbBody *{margin:0;padding:0;font-size:11px;line-height:13px;color:inherit;}"+css+".fbBody #fbHSplitter{position:absolute !important;} .fbBody #fbHTML span{line-height:14px;} .fbBody .lineNo div{line-height:inherit !important;}"; style.type="text/css"; if(style.styleSheet){style.styleSheet.cssText=rules }else{style.appendChild(context.document.createTextNode(rules)) }document.getElementsByTagName("head")[0].appendChild(style); node.className="fbBody"; node.style.overflow="hidden"; node.innerHTML=getChromeDivTemplate(); if(isIE){setTimeout(function(){node.firstChild.style.height="1px"; node.firstChild.style.position="static" },0) }formatNode(node); body.appendChild(node); chrome.window=window; chrome.document=document; onChromeLoad(chrome) }; try{if(type=="div"){createChromeDiv(); return }else{if(isChromeFrame){var node=chrome.node=createGlobalElement("iframe"); node.setAttribute("src",url); node.setAttribute("frameBorder","0"); formatNode(node); body.appendChild(node); node.id=options.id }else{var height=FirebugChrome.height||options.height,options=["true,top=",Math.max(screen.availHeight-height-61,0),",left=0,height=",height,",width=",screen.availWidth-10,",resizable"].join(""),node=chrome.node=context.window.open(url,"popup",options); if(node){try{node.focus() }catch(E){alert("Firebug Error: Firebug popup was blocked."); return }}else{alert("Firebug Error: Firebug popup was blocked."); return }}}if(!useLocalSkin){var tpl=getChromeTemplate(!isChromeFrame),doc=isChromeFrame?node.contentWindow.document:node.document; doc.write(tpl); doc.close() }var win,waitDelay=useLocalSkin?isChromeFrame?200:300:100,waitForWindow=function(){if(isChromeFrame&&(win=node.contentWindow)&&node.contentWindow.document.getElementById("fbCommandLine")||!isChromeFrame&&(win=node.window)&&node.document&&node.document.getElementById("fbCommandLine")){chrome.window=win.window; chrome.document=win.document; setTimeout(function(){onChromeLoad(chrome) },useLocalSkin?200:0) }else{setTimeout(waitForWindow,waitDelay) }}; waitForWindow() }catch(e){var msg=e.message||e; if(/access/i.test(msg)){if(isChromeFrame){body.removeChild(node) }else{if(type=="popup"){node.close() }}createChromeDiv() }else{alert("Firebug Error: Firebug GUI could not be created.") }}}; var onChromeLoad=function onChromeLoad(chrome){Env.chrome=chrome; if(FBTrace.DBG_INITIALIZE){FBTrace.sysout("Chrome onChromeLoad","chrome window loaded") }if(Env.Options.enablePersistent){Env.FirebugChrome=FirebugChrome; chrome.window.Firebug=chrome.window.Firebug||{}; chrome.window.Firebug.SharedEnv=Env; if(Env.isDevelopmentMode){Env.browser.window.FBDev.loadChromeApplication(chrome) }else{var doc=chrome.document; var script=doc.createElement("script"); script.src=Env.Location.app+"#remote,persist"; doc.getElementsByTagName("head")[0].appendChild(script) }}else{if(chrome.type=="frame"||chrome.type=="div"){setTimeout(function(){FBL.Firebug.initialize() },0) }else{if(chrome.type=="popup"){var oldChrome=FirebugChrome.chromeMap.frame; var newChrome=new Chrome(chrome); dispatch(newChrome.panelMap,"detach",[oldChrome,newChrome]); if(oldChrome){oldChrome.close() }newChrome.reattach(oldChrome,newChrome) }}}}; var getChromeDivTemplate=function(){return FirebugChrome.Skin.HTML }; var getChromeTemplate=function(isPopup){var tpl=FirebugChrome.Skin; var r=[],i=-1; r[++i]=''; r[++i]=""; r[++i]=Firebug.version; r[++i]=""; r[++i]=''; r[++i]=tpl.HTML; r[++i]=""; return r.join("") }; var Chrome=function Chrome(chrome){var type=chrome.type; var Base=type=="frame"||type=="div"?ChromeFrameBase:ChromePopupBase; append(this,Base); append(this,chrome); append(this,new Context(chrome.window)); FirebugChrome.chromeMap[type]=this; Firebug.chrome=this; Env.chrome=chrome.window; this.commandLineVisible=false; this.sidePanelVisible=false; this.create(); return this }; var ChromeBase={}; append(ChromeBase,Controller); append(ChromeBase,PanelBar); append(ChromeBase,{node:null,type:null,document:null,window:null,sidePanelVisible:false,commandLineVisible:false,largeCommandLineVisible:false,inspectButton:null,create:function(){PanelBar.create.call(this); if(Firebug.Inspector){this.inspectButton=new Button({type:"toggle",element:$("fbChrome_btInspect"),owner:Firebug.Inspector,onPress:Firebug.Inspector.startInspecting,onUnpress:Firebug.Inspector.stopInspecting}) }},destroy:function(){if(Firebug.Inspector){this.inspectButton.destroy() }PanelBar.destroy.call(this); this.shutdown() },testMenu:function(){var firebugMenu=new Menu({id:"fbFirebugMenu",items:[{label:"Open Firebug",type:"shortcut",key:isFirefox?"Shift+F12":"F12",checked:true,command:"toggleChrome"},{label:"Open Firebug in New Window",type:"shortcut",key:isFirefox?"Ctrl+Shift+F12":"Ctrl+F12",command:"openPopup"},{label:"Inspect Element",type:"shortcut",key:"Ctrl+Shift+C",command:"toggleInspect"},{label:"Command Line",type:"shortcut",key:"Ctrl+Shift+L",command:"focusCommandLine"},"-",{label:"Options",type:"group",child:"fbFirebugOptionsMenu"},"-",{label:"Firebug Lite Website...",command:"visitWebsite"},{label:"Discussion Group...",command:"visitDiscussionGroup"},{label:"Issue Tracker...",command:"visitIssueTracker"}],onHide:function(){iconButton.restore() },toggleChrome:function(){Firebug.chrome.toggle() },openPopup:function(){Firebug.chrome.toggle(true,true) },toggleInspect:function(){Firebug.Inspector.toggleInspect() },focusCommandLine:function(){Firebug.chrome.focusCommandLine() },visitWebsite:function(){this.visit("http://getfirebug.com/lite.html") },visitDiscussionGroup:function(){this.visit("http://groups.google.com/group/firebug") },visitIssueTracker:function(){this.visit("http://code.google.com/p/fbug/issues/list") },visit:function(url){window.open(url) }}); var firebugOptionsMenu={id:"fbFirebugOptionsMenu",getItems:function(){var cookiesDisabled=!Firebug.saveCookies; return[{label:"Save Options in Cookies",type:"checkbox",value:"saveCookies",checked:Firebug.saveCookies,command:"saveOptions"},"-",{label:"Start Opened",type:"checkbox",value:"startOpened",checked:Firebug.startOpened,disabled:cookiesDisabled},{label:"Start in New Window",type:"checkbox",value:"startInNewWindow",checked:Firebug.startInNewWindow,disabled:cookiesDisabled},{label:"Show Icon When Hidden",type:"checkbox",value:"showIconWhenHidden",checked:Firebug.showIconWhenHidden,disabled:cookiesDisabled},"-",{label:"Override Console Object",type:"checkbox",value:"overrideConsole",checked:Firebug.overrideConsole,disabled:cookiesDisabled},{label:"Ignore Firebug Elements",type:"checkbox",value:"ignoreFirebugElements",checked:Firebug.ignoreFirebugElements,disabled:cookiesDisabled},{label:"Disable When Firebug Active",type:"checkbox",value:"disableWhenFirebugActive",checked:Firebug.disableWhenFirebugActive,disabled:cookiesDisabled},"-",{label:"Enable Trace Mode",type:"checkbox",value:"enableTrace",checked:Firebug.enableTrace,disabled:cookiesDisabled},{label:"Enable Persistent Mode (experimental)",type:"checkbox",value:"enablePersistent",checked:Firebug.enablePersistent,disabled:cookiesDisabled},"-",{label:"Restore Options",command:"restorePrefs",disabled:cookiesDisabled}] },onCheck:function(target,value,checked){Firebug.setPref(value,checked) },saveOptions:function(target){var saveEnabled=target.getAttribute("checked"); if(!saveEnabled){this.restorePrefs() }this.updateMenu(target); return false },restorePrefs:function(target){Firebug.restorePrefs(); if(Firebug.saveCookies){Firebug.savePrefs() }else{Firebug.erasePrefs() }if(target){this.updateMenu(target) }return false },updateMenu:function(target){var options=getElementsByClass(target.parentNode,"fbMenuOption"); var firstOption=options[0]; var enabled=Firebug.saveCookies; if(enabled){Menu.check(firstOption) }else{Menu.uncheck(firstOption) }if(enabled){Menu.check(options[0]) }else{Menu.uncheck(options[0]) }for(var i=1,length=options.length; ichromeRedrawSkipRate){lastHSplitterMouseMove=new Date().getTime(); handleHSplitterMouseMove() }else{if(!onHSplitterMouseMoveTimer){onHSplitterMouseMoveTimer=setTimeout(handleHSplitterMouseMove,chromeRedrawSkipRate) }}cancelEvent(event,true); return false }; var handleHSplitterMouseMove=function(){if(onHSplitterMouseMoveTimer){clearTimeout(onHSplitterMouseMoveTimer); onHSplitterMouseMoveTimer=null }var clientY=onHSplitterMouseMoveBuffer; var windowSize=Firebug.browser.getWindowSize(); var scrollSize=Firebug.browser.getWindowScrollSize(); var commandLineHeight=Firebug.chrome.commandLineVisible?fbCommandLine.offsetHeight:0; var fixedHeight=topHeight+commandLineHeight; var chromeNode=Firebug.chrome.node; var scrollbarSize=!isIE&&(scrollSize.width>windowSize.width)?17:0; var height=windowSize.height; var chromeHeight=Math.max(height-clientY+5-scrollbarSize,fixedHeight); chromeHeight=Math.min(chromeHeight,windowSize.height-scrollbarSize); FirebugChrome.height=chromeHeight; chromeNode.style.height=chromeHeight+"px"; if(noFixedPosition){Firebug.chrome.fixIEPosition() }Firebug.chrome.draw() }; var onHSplitterMouseUp=function onHSplitterMouseUp(event){removeGlobalEvent("mousemove",onHSplitterMouseMove); removeGlobalEvent("mouseup",onHSplitterMouseUp); if(isIE){removeEvent(Firebug.browser.document.documentElement,"mouseleave",onHSplitterMouseUp) }fbHSplitter.className=""; Firebug.chrome.draw(); return false }; var onVSplitterMouseDown=function onVSplitterMouseDown(event){addGlobalEvent("mousemove",onVSplitterMouseMove); addGlobalEvent("mouseup",onVSplitterMouseUp); return false }; var onVSplitterMouseMove=function onVSplitterMouseMove(event){if(new Date().getTime()-lastVSplitterMouseMove>chromeRedrawSkipRate){var target=event.target||event.srcElement; if(target&&target.ownerDocument){var clientX=event.clientX; var win=document.all?event.srcElement.ownerDocument.parentWindow:event.target.ownerDocument.defaultView; if(win!=win.parent){clientX+=win.frameElement?win.frameElement.offsetLeft:0 }var size=Firebug.chrome.getSize(); var x=Math.max(size.width-clientX+3,6); FirebugChrome.sidePanelWidth=x; Firebug.chrome.draw() }lastVSplitterMouseMove=new Date().getTime() }cancelEvent(event,true); return false }; var onVSplitterMouseUp=function onVSplitterMouseUp(event){removeGlobalEvent("mousemove",onVSplitterMouseMove); removeGlobalEvent("mouseup",onVSplitterMouseUp); Firebug.chrome.draw() } }}); FBL.ns(function(){with(FBL){var throttleTimeWindow=200; var throttleMessageLimit=30; var throttleInterval=30; var throttleFlushCount=20; var refreshDelay=300; Firebug.TabContext=function(win,browser,chrome,persistedState){this.window=win; this.browser=browser; this.persistedState=persistedState; this.name=normalizeURL(this.getWindowLocation().toString()); this.windows=[]; this.panelMap={}; this.sidePanelNames={}; this.sourceFileMap={}; this.sourceCache=new Firebug.SourceCache(this); this.global=win }; Firebug.TabContext.prototype={getWindowLocation:function(){return safeGetWindowLocation(this.window) },getTitle:function(){if(this.window&&this.window.document){return this.window.document.title }else{return"" }},getName:function(){if(!this.name||this.name==="about:blank"){var url=this.getWindowLocation().toString(); if(isDataURL(url)){var props=splitDataURL(url); if(props.fileName){this.name="data url from "+props.fileName }}else{this.name=normalizeURL(url); if(this.name==="about:blank"&&this.window.frameElement){this.name+=" in "+getElementCSSSelector(this.window.frameElement) }}}return this.name },getGlobalScope:function(){return this.window },addSourceFile:function(sourceFile){this.sourceFileMap[sourceFile.href]=sourceFile; sourceFile.context=this; Firebug.onSourceFileCreated(this,sourceFile) },removeSourceFile:function(sourceFile){if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("tabContext.removeSourceFile "+sourceFile.href+" in context "+sourceFile.context.getName()) }delete this.sourceFileMap[sourceFile.href]; delete sourceFile.context },reattach:function(oldChrome,newChrome){for(var panelName in this.panelMap){var panel=this.panelMap[panelName]; panel.detach(oldChrome,newChrome); panel.invalid=true; var panelNode=panel.panelNode; if(panelNode&&panelNode.parentNode){panelNode.parentNode.removeChild(panelNode) }}},destroy:function(state){if(this.timeouts){for(var timeout in this.timeouts){clearTimeout(timeout) }}if(this.intervals){for(var timeout in this.intervals){clearInterval(timeout) }}if(this.throttleTimeout){clearTimeout(this.throttleTimeout) }state.panelState={}; if(this.persistedState){for(var panelName in this.persistedState.panelState){state.panelState[panelName]=this.persistedState.panelState[panelName] }}for(var panelName in this.panelMap){var panelType=Firebug.getPanelType(panelName); this.destroyPanel(panelType,state) }if(FBTrace.DBG_INITIALIZE){FBTrace.sysout("tabContext.destroy "+this.getName()+" set state ",state) }},initPanelTypes:function(){if(!this.panelTypes){this.panelTypes=[]; this.panelTypeMap={} }},addPanelType:function(url,title,parentPanel){url=absoluteURL(url,this.window.location.href); if(!url){throw ("addPanelType: url is invalid!"); return }this.initPanelTypes(); var name=createPanelName(url); while(name in this.panelTypeMap){name+="_" }var panelType=createPanelType(name,url,title,parentPanel); this.panelTypes.push(panelType); this.panelTypeMap[name]=panelType; return panelType },addPanelTypeConstructor:function(panelType){this.initPanelTypes(); this.panelTypes.push(panelType); var name=panelType.prototype.name; this.panelTypeMap[name]=panelType },removePanelType:function(url){},getPanel:function(panelName,noCreate){var panelType=Firebug.getPanelType(panelName); if(!panelType&&this.panelTypeMap){panelType=this.panelTypeMap[panelName] }if(!panelType){return null }var enabled=panelType.prototype.isEnabled?panelType.prototype.isEnabled():true; if(enabled){return this.getPanelByType(panelType,noCreate) }return null },getPanelByType:function(panelType,noCreate){if(!panelType||!this.panelMap){return null }var panelName=panelType.prototype.name; if(this.panelMap.hasOwnProperty(panelName)){var panel=this.panelMap[panelName]; if(panel.invalid){var doc=this.chrome.getPanelDocument(panelType); panel.reattach(doc); delete panel.invalid }return panel }else{if(!noCreate){return this.createPanel(panelType) }}},eachPanelInContext:function(callback){for(var panelName in this.panelMap){if(this.panelMap.hasOwnProperty(panelName)){var panel=this.panelMap[panelName]; var rc=callback(panel); if(rc){return rc }}}},createPanel:function(panelType){var panel=new panelType(); this.panelMap[panel.name]=panel; if(FBTrace.DBG_PANELS){FBTrace.sysout("tabContext.createPanel; Panel created: "+panel.name,panel) }dispatch(Firebug.modules,"onCreatePanel",[this,panel,panelType]); if(panel.parentPanel){panel.mainPanel=this.panelMap[panel.parentPanel]; panel.mainPanel.addListener(panel) }var doc=this.chrome.getPanelDocument(panelType); panel.initialize(this,doc); return panel },destroyPanel:function(panelType,state){var panelName=panelType.prototype.name; var panel=this.panelMap[panelName]; if(!panel){return }var panelState=panelName in state.panelState?state.panelState[panelName]:{}; state.panelState[panelName]=panelState; try{var dontRemove=panel.destroy(panelState); delete this.panelMap[panelName]; if(dontRemove){return }}catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.sysout("tabContext.destroy FAILS "+exc,exc) }delete state.panelState[panelName] }var panelNode=panel.panelNode; if(panelNode&&panelNode.parentNode){panelNode.parentNode.removeChild(panelNode) }},setPanel:function(panelName,panel){if(panel){this.panelMap[panelName]=panel }else{delete this.panelMap[panelName] }},invalidatePanels:function(){if(!this.invalidPanels){this.invalidPanels={} }for(var i=0; iqueue.length){max=queue.length }for(var i=0; i tabWatcher initialize "+tabBrowser) }httpObserver.addObserver(TabWatcherHttpObserver,"firebug-http-event",false) },destroy:function(){if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher destroy\n") }this.shuttingDown=true; httpObserver.removeObserver(TabWatcherHttpObserver,"firebug-http-event"); if(Firebug.TraceModule){Firebug.TraceModule.removeListener(TraceListener) }},watchTopWindow:function(win,uri,userCommands){if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher.watchTopWindow for: "+(uri instanceof nsIURI?uri.spec:uri)+", tab: "+Firebug.getTabIdForWindow(win)+"\n") }if(!win){if(FBTrace.DBG_ERRORS){FBTrace.sysout("-> tabWatcher.watchTopWindow should not have a null window!") }return false }var selectedBrowser=Firebug.chrome.getCurrentBrowser(); var context=this.getContextByWindow(win); if(context){if(FBTrace.DBG_ACTIVATION){FBTrace.sysout("-> tabWatcher.watchTopWindow context exists "+context.getName()) }if(!this.shouldShowContext(context)){if(context.browser){delete context.browser.showFirebug }this.unwatchContext(win,context); return }}else{var url=(uri instanceof nsIURI)?uri.spec:uri; if(!this.shouldCreateContext(selectedBrowser,url,userCommands)){if(FBTrace.DBG_ACTIVATION){FBTrace.sysout("-> tabWatcher will not create context ") }delete selectedBrowser.showFirebug; this.watchContext(win,null); return false }var browser=this.getBrowserByWindow(win); context=this.createContext(win,browser,Firebug.getContextType()) }if(win instanceof Ci.nsIDOMWindow&&win.parent==win){win.addEventListener("pageshow",onLoadWindowContent,onLoadWindowContent.capturing); win.addEventListener("DOMContentLoaded",onLoadWindowContent,onLoadWindowContent.capturing); if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher.watchTopWindow addEventListener for pageshow, DomContentLoaded "+safeGetWindowLocation(win)) }}this.watchWindow(win,context); if(context&&!context.loaded){context.loaded=!context.browser.webProgress.isLoadingDocument; if(context.loaded){dispatch(this.fbListeners,"loadedContext",[context]) }if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher context "+(context.loaded?"*** LOADED ***":"isLoadingDocument")+" in watchTopWindow, id: "+context.uid+", uri: "+(uri instanceof nsIURI?uri.spec:uri)+"\n") }}if(context&&!context.loaded&&!context.showContextTimeout){context.showContextTimeout=setTimeout(bindFixed(function delayShowContext(){if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> watchTopWindow delayShowContext id:"+context.showContextTimeout,context) }if(context.window){this.rushShowContext(win,context) }else{if(FBTrace.DBG_ERRORS){FBTrace.sysout("tabWatcher watchTopWindow no context.window "+(context.browser?context.browser.currentURI.spec:" and no context.browser")+"\n") }}},this),400) }else{if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> watchTopWindow context.loaded:"+context.loaded+" for "+context.getName()) }this.rushShowContext(win,context) }return context },rushShowContext:function(win,context){if(context.showContextTimeout){clearTimeout(context.showContextTimeout) }delete context.showContextTimeout; var currentURI=Firebug.chrome.getCurrentURI(); if(!currentURI||currentURI.spec!=context.browser.currentURI.spec){if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> rushShowContext: Do not show context as it's not the active tab: "+context.browser.currentURI.spec+"\n") }return }this.watchContext(win,context) },shouldShowContext:function(context){if(dispatch2(this.fbListeners,"shouldShowContext",[context])){return true }else{return false }},shouldCreateContext:function(browser,url,userCommands){if(!this.fbListeners){return userCommands }if(dispatch2(this.fbListeners,"shouldCreateContext",[browser,url,userCommands])){if(FBTrace.DBG_ACTIVATION){FBTrace.sysout("-> shouldCreateContext with user: "+userCommands+" one listener says yes to "+url,this.fbListeners) }return true }if(FBTrace.DBG_ACTIVATION){FBTrace.sysout("-> shouldCreateContext with user: "+userCommands+" no opinion for: "+url) }if(dispatch2(this.fbListeners,"shouldNotCreateContext",[browser,url,userCommands])){return false }if(FBTrace.DBG_ACTIVATION){FBTrace.sysout("-> shouldNotCreateContext no opinion for: "+url) }return userCommands },createContext:function(win,browser,contextType){if(contexts.length==0){Firebug.broadcast("enableXULWindow",[]) }var persistedState=browser.persistedState; delete browser.persistedState; var location=safeGetWindowLocation(win).toString(); var prevDomain=persistedState?getDomain(persistedState.location):null; var domain=getDomain(location); var context=new contextType(win,browser,Firebug.chrome,persistedState); contexts.push(context); context.uid=FBL.getUniqueId(); browser.showFirebug=true; if(FBTrace.DBG_WINDOWS||FBTrace.DBG_ACTIVATION){FBTrace.sysout("-> tabWatcher *** INIT *** context, id: "+context.uid+", "+context.getName()+" browser "+browser.currentURI.spec+" Firebug.chrome.window: "+Firebug.chrome.window.location+" context.window: "+safeGetWindowLocation(context.window)) }dispatch(this.fbListeners,"initContext",[context,persistedState]); return context },watchLoadedTopWindow:function(win){var isSystem=isSystemPage(win); var context=this.getContextByWindow(win); if((context&&!context.window)){if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher.watchLoadedTopWindow bailing !!!, context.window: "+context.window+", isSystem: "+isSystem+"\n") }this.unwatchTopWindow(win); this.watchContext(win,null,isSystem); return }if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> watchLoadedTopWindow context: "+(context?(context.uid+", loaded="+context.loaded):"undefined")+", "+safeGetWindowLocation(win)+"\n") }if(context&&!context.loaded){context.loaded=true; if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> Context *** LOADED *** in watchLoadedTopWindow, id: "+context.uid+", uri: "+safeGetWindowLocation(win)+"\n") }dispatch(this.fbListeners,"loadedContext",[context]); this.rushShowContext(win,context) }},watchWindow:function(win,context){if(!context){context=this.getContextByWindow(getRootWindow(win)) }var location=safeGetWindowLocation(win); if(context&&location!=aboutBlank){TabWatcherUnloader.registerWindow(win) }if(context&&context.windows.indexOf(win)==-1){context.windows.push(win); if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> watchWindow register *** FRAME *** to context for win.location: "+location+"\n") }dispatch(this.fbListeners,"watchWindow",[context,win]); if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> watchWindow for: "+location+", context: "+context.uid+"\n"); if(context){for(var i=0; i tabWatcher.unwatchTopWindow for: "+(context?context.getWindowLocation():"NULL Context")+", context: "+context) }this.unwatchContext(win,context); return true },unwatchWindow:function(win){var context=this.getContextByWindow(win); if(!context){if(FBTrace.DBG_ERRORS){FBTrace.sysout("unwatchWindow: no context for win "+safeGetWindowLocation(win)) }return }var index=context.windows.indexOf(win); if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher.unwatchWindow context: "+context.getName()+" index of win: "+index+"/"+context.windows.length,context.windows) }if(index!=-1){context.windows.splice(index,1); dispatch(this.fbListeners,"unwatchWindow",[context,win]) }},watchBrowser:function(browser){if(FBTrace.DBG_WINDOWS){var uri=safeGetURI(browser); FBTrace.sysout("-> tabWatcher.watchBrowser for: "+(uri instanceof nsIURI?uri.spec:uri)+"\n") }registerFrameListener(browser); var shouldDispatch=this.watchTopWindow(browser.contentWindow,safeGetURI(browser),true); if(shouldDispatch){dispatch(this.fbListeners,"watchBrowser",[browser]); return true }return false },unwatchBrowser:function(browser,userCommands){if(FBTrace.DBG_WINDOWS){var uri=safeGetURI(browser); FBTrace.sysout("-> tabWatcher.unwatchBrowser for: "+(uri instanceof nsIURI?uri.spec:uri)+" user commands: "+userCommands+(browser?"":"NULL BROWSER")) }if(!browser){return }delete browser.showFirebug; var shouldDispatch=this.unwatchTopWindow(browser.contentWindow); if(shouldDispatch){dispatch(this.fbListeners,"unwatchBrowser",[browser,userCommands]); return true }return false },watchContext:function(win,context,isSystem){if(this.shuttingDown){return }var browser=context?context.browser:this.getBrowserByWindow(win); if(browser){browser.isSystemPage=isSystem }if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher context *** SHOW *** (watchContext), id: "+(context?context.uid:"null")+", uri: "+win.location.href+"\n") }dispatch(this.fbListeners,"showContext",[browser,context]) },unwatchContext:function(win,context){if(!context){var browser=this.getBrowserByWindow(win); if(browser){browser.persistedState={}; delete browser.showFirebug; dispatch(this.fbListeners,"showContext",[browser,null]) }dispatch(this.fbListeners,"destroyContext",[null,(browser?browser.persistedState:null),browser]); return }var persistedState={location:context.getWindowLocation()}; context.browser.persistedState=persistedState; iterateWindows(context.window,function(win){dispatch(TabWatcher.fbListeners,"unwatchWindow",[context,win]) }); dispatch(this.fbListeners,"destroyContext",[context,persistedState,context.browser]); if(FBTrace.DBG_WINDOWS||FBTrace.DBG_ACTIVATION){FBTrace.sysout("-> tabWatcher.unwatchContext *** DESTROY *** context "+context.uid+" for: "+(context.window&&!context.window.closed?context.window.location:"no window or closed ")+" aborted: "+context.aborted) }context.destroy(persistedState); remove(contexts,context); for(var name in context){delete context[name] }var currentBrowser=Firebug.chrome.getCurrentBrowser(); if(!currentBrowser.showFirebug){dispatch(this.fbListeners,"showContext",[browser,null]) }if(contexts.length==0){Firebug.broadcast("disableXULWindow",[]) }},getContextByWindow:function(winIn){if(!winIn){return }var rootWindow=getRootWindow(winIn); if(rootWindow){for(var i=0; i tabWatcher.watchWindow addEventListener for "+eventName) }this.listeners.push({window:win,listener:listener,eventName:eventName}) },unregisterWindow:function(win){var newListeners=[]; for(var i=0; i tabWatcher.Unloader; PAGE HIDE ("+this.listeners.length+") "+win.location,event) }onPageHideTopWindow(event) },onUnload:function(event){var win=event.currentTarget; this.unregisterWindow(win); if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher.Unloader; PAGE UNLOAD ("+this.listeners.length+") "+win.location,event) }onUnloadWindow(event) }}; function getRefererHeader(request){var http=QI(request,Ci.nsIHttpChannel); var referer=null; http.visitRequestHeaders({visitHeader:function(name,value){if(name=="referer"){referer=value }}}); return referer }var TabWatcherHttpObserver=extend(Object,{observe:function(aSubject,aTopic,aData){try{if(aTopic=="http-on-modify-request"){aSubject=aSubject.QueryInterface(Ci.nsIHttpChannel); this.onModifyRequest(aSubject) }}catch(err){ERROR(err) }},onModifyRequest:function(request){var win=getWindowForRequest(request); var tabId=Firebug.getTabIdForWindow(win); if(!tabId){return }if(request.URI.spec!=request.originalURI.spec){return }if(request.loadFlags&Ci.nsIHttpChannel.LOAD_DOCUMENT_URI){if((FBTrace.DBG_ACTIVATION||FBTrace.DBG_WINDOWS)&&win==win.parent){FBTrace.sysout("-> tabWatcher TabWatcherHttpObserver *** START *** document request for: "+request.URI.spec+" window for request is "+safeGetWindowLocation(win)+"\n") }if(win==win.parent){var browser=TabWatcher.getBrowserByWindow(win); if(!browser){return }delete browser.FirebugLink; if(safeGetWindowLocation(win).toString()=="about:blank"){var referer=getRefererHeader(request); if(referer){try{var srcURI=makeURI(referer); browser.FirebugLink={src:srcURI,dst:request.URI} }catch(e){if(FBTrace.DBG_ERRORS){FBTrace.sysout("tabWatcher.onModifyRequest failed to make URI from "+referer+" because "+exc,exc) }}}}else{browser.FirebugLink={src:browser.currentURI,dst:request.URI} }if(FBTrace.DBG_ACTIVATION&&browser.FirebugLink){FBTrace.sysout("tabWatcher.onModifyRequest created FirebugLink from "+browser.FirebugLink.src.spec+" to "+browser.FirebugLink.dst.spec) }}}},QueryInterface:function(aIID){if(aIID.equals(Ci.nsIObserver)||aIID.equals(Ci.nsISupportsWeakReference)||aIID.equals(Ci.nsISupports)){return this }throw Components.results.NS_NOINTERFACE }}); function onPageHideTopWindow(event){var win=event.currentTarget; var doc=event.target; if(doc.defaultView!=win){return }if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher pagehide event.currentTarget "+safeGetWindowLocation(win),event) }if(event.persisted){if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher onPageHideTopWindow for: "+safeGetWindowLocation(win)+"\n") }TabWatcher.unwatchTopWindow(win) }else{win.addEventListener("unload",onUnloadTopWindow,true); if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher onPageHideTopWindow set unload handler "+safeGetWindowLocation(win)+"\n") }}}function evictTopWindow(win,uri){if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher evictTopWindow win "+safeGetWindowLocation(win)+" uri "+uri.spec) }TabWatcher.unwatchTopWindow(win) }function onUnloadTopWindow(event){var win=event.currentTarget; win.removeEventListener("unload",onUnloadTopWindow,true); if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher onUnloadTopWindow for: "+safeGetWindowLocation(win)+" typeof :"+typeof(win)+"\n") }TabWatcher.unwatchTopWindow(win) }function onLoadWindowContent(event){if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher.onLoadWindowContent event.type: "+event.type+"\n") }var win=event.currentTarget; try{win.removeEventListener("pageshow",onLoadWindowContent,onLoadWindowContent.capturing); if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher.onLoadWindowContent pageshow removeEventListener "+safeGetWindowLocation(win)) }}catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.sysout("-> tabWatcher.onLoadWindowContent removeEventListener pageshow fails",exc) }}try{win.removeEventListener("DOMContentLoaded",onLoadWindowContent,onLoadWindowContent.capturing); if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher.onLoadWindowContent DOMContentLoaded removeEventListener "+safeGetWindowLocation(win)) }}catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.sysout("-> tabWatcher.onLoadWindowContent removeEventListener DOMContentLoaded fails",exc) }}var context=TabWatcher.getContextByWindow(win); if(context){context.onLoadWindowContent=true }try{if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher.onLoadWindowContent:"+safeGetWindowLocation(win),win) }TabWatcher.watchLoadedTopWindow(win) }catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.sysout("-> tabWatchter onLoadWindowContent FAILS: "+exc,exc) }}}onLoadWindowContent.capturing=false; function onUnloadWindow(event){var win=event.currentTarget; var eventType="unload"; if(FBTrace.DBG_WINDOWS){FBTrace.sysout("-> tabWatcher.onUnloadWindow for: "+safeGetWindowLocation(win)+" removeEventListener: "+eventType+"\n") }TabWatcher.unwatchWindow(win) }function safeGetName(request){try{return request.name }catch(exc){return null }}function safeGetURI(browser){try{return browser.currentURI }catch(exc){return null }}var TraceListener={onDump:function(message){var prefix="->"; if(message.text.indexOf(prefix)==0){message.text=message.text.substr(prefix.length); message.text=trim(message.text); message.type="DBG_WINDOWS" }}} }}); FBL.ns(function(){with(FBL){Firebug.Lite={} }}); FBL.ns(function(){with(FBL){Firebug.Lite.Browser=function(window){this.contentWindow=window; this.contentDocument=window.document; this.currentURI={spec:window.location.href} }; Firebug.Lite.Browser.prototype={toString:function(){return"Firebug.Lite.Browser" }} }}); FBL.ns(function(){with(FBL){Firebug.Lite.Cache={ID:"firebug"+new Date().getTime()}; var cacheUID=0; var createCache=function(){var map={}; var CID=Firebug.Lite.Cache.ID; var cacheFunction=function(element){return cacheAPI.set(element) }; var cacheAPI={get:function(key){return map.hasOwnProperty(key)?map[key]:null },set:function(element){var id=element[CID]; if(!id){id=++cacheUID; element[CID]=id }if(!map.hasOwnProperty(id)){map[id]=element }return id },unset:function(element){var id=element[CID]; element[CID]=null; delete element[CID]; map[id]=null; delete map[id] },key:function(element){return element[CID] },has:function(element){return map.hasOwnProperty(element[CID]) },clear:function(){for(var id in map){var element=map[id]; element[CID]=null; delete element[CID]; map[id]=null; delete map[id] }}}; FBL.append(cacheFunction,cacheAPI); return cacheFunction }; Firebug.Lite.Cache.StyleSheet=createCache(); Firebug.Lite.Cache.Element=createCache() }}); FBL.ns(function(){with(FBL){Firebug.Lite.Proxy={_callbacks:{},load:function(url){var resourceDomain=getDomain(url); var isLocalResource=!resourceDomain||resourceDomain==Firebug.context.window.location.host; return isLocalResource?fetchResource(url):fetchProxyResource(url) },loadJSONP:function(url,callback){var script=createGlobalElement("script"),doc=Firebug.context.document,uid=""+new Date().getTime(),callbackName="callback=Firebug.Lite.Proxy._callbacks."+uid,jsonpURL=url.indexOf("?")!=-1?url+"&"+callbackName:url+"?"+callbackName; Firebug.Lite.Proxy._callbacks[uid]=function(data){if(callback){callback(data) }script.parentNode.removeChild(script); delete Firebug.Lite.Proxy._callbacks[uid] }; script.src=jsonpURL; if(doc.documentElement){doc.documentElement.appendChild(script) }},YQL:function(url,callback){var yql="http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22"+encodeURIComponent(url)+"%22&format=xml"; this.loadJSONP(yql,function(data){var source=data.results[0]; var match=/\s+

([\s\S]+)<\/p>\s+<\/body>$/.exec(source); if(match){source=match[1] }console.log(source) }) }}; var fetchResource=function(url){var xhr=FBL.Ajax.getXHRObject(); xhr.open("get",url,false); xhr.send(); return xhr.responseText }; var fetchProxyResource=function(url){var proxyURL=Env.Location.baseDir+"plugin/proxy/proxy.php?url="+encodeURIComponent(url); var response=fetchResource(proxyURL); try{var data=eval("("+response+")") }catch(E){return"ERROR: Firebug Lite Proxy plugin returned an invalid response." }return data?data.contents:"" } }}); FBL.ns(function(){with(FBL){Firebug.Lite.Script=function(window){this.fileName=null; this.isValid=null; this.baseLineNumber=null; this.lineExtent=null; this.tag=null; this.functionName=null; this.functionSource=null }; Firebug.Lite.Script.prototype={isLineExecutable:function(){},pcToLine:function(){},lineToPc:function(){},toString:function(){return"Firebug.Lite.Script" }} }}); FBL.ns(function(){with(FBL){Firebug.Lite.Style={} }}); FBL.ns(function(){with(FBL){var chunker=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,done=0,toString=Object.prototype.toString,hasDuplicate=false,baseHasDuplicate=true; [0,0].sort(function(){baseHasDuplicate=false; return 0 }); var Sizzle=function(selector,context,results,seed){results=results||[]; var origContext=context=context||document; if(context.nodeType!==1&&context.nodeType!==9){return[] }if(!selector||typeof selector!=="string"){return results }var parts=[],m,set,checkSet,check,mode,extra,prune=true,contextXML=isXML(context),soFar=selector; while((chunker.exec(""),m=chunker.exec(soFar))!==null){soFar=m[3]; parts.push(m[1]); if(m[2]){extra=m[3]; break }}if(parts.length>1&&origPOS.exec(selector)){if(parts.length===2&&Expr.relative[parts[0]]){set=posProcess(parts[0]+parts[1],context) }else{set=Expr.relative[parts[0]]?[context]:Sizzle(parts.shift(),context); while(parts.length){selector=parts.shift(); if(Expr.relative[selector]){selector+=parts.shift() }set=posProcess(selector,set) }}}else{if(!seed&&parts.length>1&&context.nodeType===9&&!contextXML&&Expr.match.ID.test(parts[0])&&!Expr.match.ID.test(parts[parts.length-1])){var ret=Sizzle.find(parts.shift(),context,contextXML); context=ret.expr?Sizzle.filter(ret.expr,ret.set)[0]:ret.set[0] }if(context){var ret=seed?{expr:parts.pop(),set:makeArray(seed)}:Sizzle.find(parts.pop(),parts.length===1&&(parts[0]==="~"||parts[0]==="+")&&context.parentNode?context.parentNode:context,contextXML); set=ret.expr?Sizzle.filter(ret.expr,ret.set):ret.set; if(parts.length>0){checkSet=makeArray(set) }else{prune=false }while(parts.length){var cur=parts.pop(),pop=cur; if(!Expr.relative[cur]){cur="" }else{pop=parts.pop() }if(pop==null){pop=context }Expr.relative[cur](checkSet,pop,contextXML) }}else{checkSet=parts=[] }}if(!checkSet){checkSet=set }if(!checkSet){throw"Syntax error, unrecognized expression: "+(cur||selector) }if(toString.call(checkSet)==="[object Array]"){if(!prune){results.push.apply(results,checkSet) }else{if(context&&context.nodeType===1){for(var i=0; checkSet[i]!=null; i++){if(checkSet[i]&&(checkSet[i]===true||checkSet[i].nodeType===1&&contains(context,checkSet[i]))){results.push(set[i]) }}}else{for(var i=0; checkSet[i]!=null; i++){if(checkSet[i]&&checkSet[i].nodeType===1){results.push(set[i]) }}}}}else{makeArray(checkSet,results) }if(extra){Sizzle(extra,origContext,results,seed); Sizzle.uniqueSort(results) }return results }; Sizzle.uniqueSort=function(results){if(sortOrder){hasDuplicate=baseHasDuplicate; results.sort(sortOrder); if(hasDuplicate){for(var i=1; i":function(checkSet,part,isXML){var isPartStr=typeof part==="string"; if(isPartStr&&!/\W/.test(part)){part=isXML?part:part.toUpperCase(); for(var i=0,l=checkSet.length; i=0)){if(!inplace){result.push(elem) }}else{if(inplace){curLoop[i]=false }}}}return false },ID:function(match){return match[1].replace(/\\/g,"") },TAG:function(match,curLoop){for(var i=0; curLoop[i]===false; i++){}return curLoop[i]&&isXML(curLoop[i])?match[1]:match[1].toUpperCase() },CHILD:function(match){if(match[1]=="nth"){var test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(match[2]=="even"&&"2n"||match[2]=="odd"&&"2n+1"||!/\D/.test(match[2])&&"0n+"+match[2]||match[2]); match[2]=(test[1]+(test[2]||1))-0; match[3]=test[3]-0 }match[0]=done++; return match },ATTR:function(match,curLoop,inplace,result,not,isXML){var name=match[1].replace(/\\/g,""); if(!isXML&&Expr.attrMap[name]){match[1]=Expr.attrMap[name] }if(match[2]==="~="){match[4]=" "+match[4]+" " }return match },PSEUDO:function(match,curLoop,inplace,result,not){if(match[1]==="not"){if((chunker.exec(match[3])||"").length>1||/^\w/.test(match[3])){match[3]=Sizzle(match[3],null,null,curLoop) }else{var ret=Sizzle.filter(match[3],curLoop,inplace,true^not); if(!inplace){result.push.apply(result,ret) }return false }}else{if(Expr.match.POS.test(match[0])||Expr.match.CHILD.test(match[0])){return true }}return match },POS:function(match){match.unshift(true); return match }},filters:{enabled:function(elem){return elem.disabled===false&&elem.type!=="hidden" },disabled:function(elem){return elem.disabled===true },checked:function(elem){return elem.checked===true },selected:function(elem){elem.parentNode.selectedIndex; return elem.selected===true },parent:function(elem){return !!elem.firstChild },empty:function(elem){return !elem.firstChild },has:function(elem,i,match){return !!Sizzle(match[3],elem).length },header:function(elem){return/h\d/i.test(elem.nodeName) },text:function(elem){return"text"===elem.type },radio:function(elem){return"radio"===elem.type },checkbox:function(elem){return"checkbox"===elem.type },file:function(elem){return"file"===elem.type },password:function(elem){return"password"===elem.type },submit:function(elem){return"submit"===elem.type },image:function(elem){return"image"===elem.type },reset:function(elem){return"reset"===elem.type },button:function(elem){return"button"===elem.type||elem.nodeName.toUpperCase()==="BUTTON" },input:function(elem){return/input|select|textarea|button/i.test(elem.nodeName) }},setFilters:{first:function(elem,i){return i===0 },last:function(elem,i,match,array){return i===array.length-1 },even:function(elem,i){return i%2===0 },odd:function(elem,i){return i%2===1 },lt:function(elem,i,match){return imatch[3]-0 },nth:function(elem,i,match){return match[3]-0==i },eq:function(elem,i,match){return match[3]-0==i }},filter:{PSEUDO:function(elem,match,i,array){var name=match[1],filter=Expr.filters[name]; if(filter){return filter(elem,i,match,array) }else{if(name==="contains"){return(elem.textContent||elem.innerText||"").indexOf(match[3])>=0 }else{if(name==="not"){var not=match[3]; for(var i=0,l=not.length; i=0) }}},ID:function(elem,match){return elem.nodeType===1&&elem.getAttribute("id")===match },TAG:function(elem,match){return(match==="*"&&elem.nodeType===1)||elem.nodeName===match },CLASS:function(elem,match){return(" "+(elem.className||elem.getAttribute("class"))+" ").indexOf(match)>-1 },ATTR:function(elem,match){var name=match[1],result=Expr.attrHandle[name]?Expr.attrHandle[name](elem):elem[name]!=null?elem[name]:elem.getAttribute(name),value=result+"",type=match[2],check=match[4]; return result==null?type==="!=":type==="="?value===check:type==="*="?value.indexOf(check)>=0:type==="~="?(" "+value+" ").indexOf(check)>=0:!check?value&&result!==false:type==="!="?value!=check:type==="^="?value.indexOf(check)===0:type==="$="?value.substr(value.length-check.length)===check:type==="|="?value===check||value.substr(0,check.length+1)===check+"-":false },POS:function(elem,match,i,array){var name=match[2],filter=Expr.setFilters[name]; if(filter){return filter(elem,i,match,array) }}}}; var origPOS=Expr.match.POS; for(var type in Expr.match){Expr.match[type]=new RegExp(Expr.match[type].source+/(?![^\[]*\])(?![^\(]*\))/.source); Expr.leftMatch[type]=new RegExp(/(^(?:.|\r|\n)*?)/.source+Expr.match[type].source) }var makeArray=function(array,results){array=Array.prototype.slice.call(array,0); if(results){results.push.apply(results,array); return results }return array }; try{Array.prototype.slice.call(document.documentElement.childNodes,0) }catch(e){makeArray=function(array,results){var ret=results||[]; if(toString.call(array)==="[object Array]"){Array.prototype.push.apply(ret,array) }else{if(typeof array.length==="number"){for(var i=0,l=array.length; i"; var root=document.documentElement; root.insertBefore(form,root.firstChild); if(!!document.getElementById(id)){Expr.find.ID=function(match,context,isXML){if(typeof context.getElementById!=="undefined"&&!isXML){var m=context.getElementById(match[1]); return m?m.id===match[1]||typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id").nodeValue===match[1]?[m]:undefined:[] }}; Expr.filter.ID=function(elem,match){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id"); return elem.nodeType===1&&node&&node.nodeValue===match } }root.removeChild(form); root=form=null })(); (function(){var div=document.createElement("div"); div.appendChild(document.createComment("")); if(div.getElementsByTagName("*").length>0){Expr.find.TAG=function(match,context){var results=context.getElementsByTagName(match[1]); if(match[1]==="*"){var tmp=[]; for(var i=0; results[i]; i++){if(results[i].nodeType===1){tmp.push(results[i]) }}results=tmp }return results } }div.innerHTML=""; if(div.firstChild&&typeof div.firstChild.getAttribute!=="undefined"&&div.firstChild.getAttribute("href")!=="#"){Expr.attrHandle.href=function(elem){return elem.getAttribute("href",2) } }div=null })(); if(document.querySelectorAll){(function(){var oldSizzle=Sizzle,div=document.createElement("div"); div.innerHTML="

"; if(div.querySelectorAll&&div.querySelectorAll(".TEST").length===0){return }Sizzle=function(query,context,extra,seed){context=context||document; if(!seed&&context.nodeType===9&&!isXML(context)){try{return makeArray(context.querySelectorAll(query),extra) }catch(e){}}return oldSizzle(query,context,extra,seed) }; for(var prop in oldSizzle){Sizzle[prop]=oldSizzle[prop] }div=null })() }if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var div=document.createElement("div"); div.innerHTML="
"; if(div.getElementsByClassName("e").length===0){return }div.lastChild.className="e"; if(div.getElementsByClassName("e").length===1){return }Expr.order.splice(1,0,"CLASS"); Expr.find.CLASS=function(match,context,isXML){if(typeof context.getElementsByClassName!=="undefined"&&!isXML){return context.getElementsByClassName(match[1]) }}; div=null })() }function dirNodeCheck(dir,cur,doneName,checkSet,nodeCheck,isXML){var sibDir=dir=="previousSibling"&&!isXML; for(var i=0,l=checkSet.length; i0){match=elem; break }}}elem=elem[dir] }checkSet[i]=match }}}var contains=document.compareDocumentPosition?function(a,b){return a.compareDocumentPosition(b)&16 }:function(a,b){return a!==b&&(a.contains?a.contains(b):true) }; var isXML=function(elem){return elem.nodeType===9&&elem.documentElement.nodeName!=="HTML"||!!elem.ownerDocument&&elem.ownerDocument.documentElement.nodeName!=="HTML" }; var posProcess=function(selector,context){var tmpSet=[],later="",match,root=context.nodeType?[context]:context; while((match=Expr.match.PSEUDO.exec(selector))){later+=match[0]; selector=selector.replace(Expr.match.PSEUDO,"") }selector=Expr.relative[selector]?selector+"*":selector; for(var i=0,l=root.length; i":return">"; case"&":return"&"; case"'":return"'"; case'"':return""" }return"?" }return String(value).replace(/[<>&"']/g,replaceChars) }function __loop__(iter,outputs,fn){var iterOuts=[]; outputs.push(iterOuts); if(iter instanceof Array){iter=new ArrayIterator(iter) }try{while(1){var value=iter.next(); var itemOuts=[0,0]; iterOuts.push(itemOuts); fn.apply(this,[value,itemOuts]) }}catch(exc){if(exc!=StopIteration){throw exc }}}var js=fnBlock.join(""); var r=null; eval(js); this.renderMarkup=r },getVarNames:function(args){if(this.vars){args.push.apply(args,this.vars) }for(var i=0; i"'); this.generateChildMarkup(topBlock,topOuts,blocks,info); topBlock.push(',""') },generateChildMarkup:function(topBlock,topOuts,blocks,info){for(var i=0; i=array.length){throw StopIteration }return array[index] } }function StopIteration(){}FBL.$break=function(){throw StopIteration }; var Renderer={renderHTML:function(args,outputs,self){var code=[]; var markupArgs=[code,this.tag.context,args,outputs]; markupArgs.push.apply(markupArgs,this.tag.markupArgs); this.tag.renderMarkup.apply(self?self:this.tag.subject,markupArgs); return code.join("") },insertRows:function(args,before,self){this.tag.compile(); var outputs=[]; var html=this.renderHTML(args,outputs,self); var doc=before.ownerDocument; var div=doc.createElement("div"); div.innerHTML=""+html+"
"; var tbody=div.firstChild.firstChild; var parent=before.tagName=="TR"?before.parentNode:before; var after=before.tagName=="TR"?before.nextSibling:null; var firstRow=tbody.firstChild,lastRow; while(tbody.firstChild){lastRow=tbody.firstChild; if(after){parent.insertBefore(lastRow,after) }else{parent.appendChild(lastRow) }}var offset=0; if(before.tagName=="TR"){var node=firstRow.parentNode.firstChild; for(; node&&node!=firstRow; node=node.nextSibling){++offset }}var domArgs=[firstRow,this.tag.context,offset]; domArgs.push.apply(domArgs,this.tag.domArgs); domArgs.push.apply(domArgs,outputs); this.tag.renderDOM.apply(self?self:this.tag.subject,domArgs); return[firstRow,lastRow] },insertBefore:function(args,before,self){return this.insertNode(args,before.ownerDocument,before,false,self) },insertAfter:function(args,after,self){return this.insertNode(args,after.ownerDocument,after,true,self) },insertNode:function(args,doc,element,isAfter,self){if(!args){args={} }this.tag.compile(); var outputs=[]; var html=this.renderHTML(args,outputs,self); var doc=element.ownerDocument; if(!womb||womb.ownerDocument!=doc){womb=doc.createElement("div") }womb.innerHTML=html; var root=womb.firstChild; if(isAfter){while(womb.firstChild){if(element.nextSibling){element.parentNode.insertBefore(womb.firstChild,element.nextSibling) }else{element.parentNode.appendChild(womb.firstChild) }}}else{while(womb.lastChild){element.parentNode.insertBefore(womb.lastChild,element) }}var domArgs=[root,this.tag.context,0]; domArgs.push.apply(domArgs,this.tag.domArgs); domArgs.push.apply(domArgs,outputs); this.tag.renderDOM.apply(self?self:this.tag.subject,domArgs); return root },replace:function(args,parent,self){this.tag.compile(); var outputs=[]; var html=this.renderHTML(args,outputs,self); var root; if(parent.nodeType==1){parent.innerHTML=html; root=parent.firstChild }else{if(!parent||parent.nodeType!=9){parent=document }if(!womb||womb.ownerDocument!=parent){womb=parent.createElement("div") }womb.innerHTML=html; root=womb.firstChild }var domArgs=[root,this.tag.context,0]; domArgs.push.apply(domArgs,this.tag.domArgs); domArgs.push.apply(domArgs,outputs); this.tag.renderDOM.apply(self?self:this.tag.subject,domArgs); return root },append:function(args,parent,self){this.tag.compile(); var outputs=[]; var html=this.renderHTML(args,outputs,self); if(!womb||womb.ownerDocument!=parent.ownerDocument){womb=parent.ownerDocument.createElement("div") }womb.innerHTML=html; var root=womb.firstChild; while(womb.firstChild){parent.appendChild(womb.firstChild) }womb=null; var domArgs=[root,this.tag.context,0]; domArgs.push.apply(domArgs,this.tag.domArgs); domArgs.push.apply(domArgs,outputs); this.tag.renderDOM.apply(self?self:this.tag.subject,domArgs); return root }}; function defineTags(){for(var i=0; inumPropertiesShown){break }}if(numProperties>numPropertiesShown){props.push({object:"...",tag:FirebugReps.Caption.tag,name:"",equal:"",delim:""}) }else{if(props.length>0){props[props.length-1].delim="" }}}catch(exc){}return props },fb_1_6_propIterator:function(object,max){max=max||3; if(!object){return[] }var props=[]; var len=0,count=0; try{for(var name in object){var value; try{value=object[name] }catch(exc){continue }var t=typeof(value); if(t=="boolean"||t=="number"||(t=="string"&&value)||(t=="object"&&value&&value.toString)){var rep=Firebug.getRep(value); var tag=rep.shortTag||rep.tag; if(t=="object"){value=rep.getTitle(value); tag=rep.titleTag }count++; if(count<=max){props.push({tag:tag,name:name,object:value,equal:"=",delim:", "}) }else{break }}}if(count>max){props[Math.max(1,max-1)]={object:"more...",tag:FirebugReps.Caption.tag,name:"",equal:"",delim:""} }else{if(props.length>0){props[props.length-1].delim="" }}}catch(exc){}return props },className:"object",supportsObject:function(object,type){return true }}); this.Arr=domplate(Firebug.Rep,{tag:OBJECTBOX({_repObject:"$object"},SPAN({"class":"arrayLeftBracket",role:"presentation"},"["),FOR("item","$object|arrayIterator",TAG("$item.tag",{object:"$item.object"}),SPAN({"class":"arrayComma",role:"presentation"},"$item.delim")),SPAN({"class":"arrayRightBracket",role:"presentation"},"]")),shortTag:OBJECTBOX({_repObject:"$object"},SPAN({"class":"arrayLeftBracket",role:"presentation"},"["),FOR("item","$object|shortArrayIterator",TAG("$item.tag",{object:"$item.object"}),SPAN({"class":"arrayComma",role:"presentation"},"$item.delim")),SPAN({"class":"arrayRightBracket"},"]")),arrayIterator:function(array){var items=[]; for(var i=0; i3){items.push({object:(array.length-3)+" more...",tag:FirebugReps.Caption.tag,delim:""}) }return items },shortPropIterator:this.Obj.propIterator,getItemIndex:function(child){var arrayIndex=0; for(child=child.previousSibling; child; child=child.previousSibling){if(child.repObject){++arrayIndex }}return arrayIndex },className:"array",supportsObject:function(object){return this.isArray(object) },isArray:function(obj){try{if(!obj){return false }else{if(isIE&&!isFunction(obj)&&typeof obj=="object"&&isFinite(obj.length)&&obj.nodeType!=8){return true }else{if(isFinite(obj.length)&&isFunction(obj.splice)){return true }else{if(isFinite(obj.length)&&isFunction(obj.callee)){return true }else{if(instanceOf(obj,"HTMLCollection")){return true }else{if(instanceOf(obj,"NodeList")){return true }else{return false }}}}}}}catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.sysout("isArray FAILS:",exc); FBTrace.sysout("isArray Fails on obj",obj) }}return false },getTitle:function(object,context){return"["+object.length+"]" }}); this.Property=domplate(Firebug.Rep,{supportsObject:function(object){return object instanceof Property },getRealObject:function(prop,context){return prop.object[prop.name] },getTitle:function(prop,context){return prop.name }}); this.NetFile=domplate(this.Obj,{supportsObject:function(object){return object instanceof Firebug.NetFile },browseObject:function(file,context){openNewTab(file.href); return true },getRealObject:function(file,context){return null }}); this.Except=domplate(Firebug.Rep,{tag:OBJECTBOX({_repObject:"$object"},"$object.message"),className:"exception",supportsObject:function(object){return object instanceof ErrorCopy }}); this.Element=domplate(Firebug.Rep,{tag:OBJECTLINK("<",SPAN({"class":"nodeTag"},"$object.nodeName|toLowerCase"),FOR("attr","$object|attrIterator"," $attr.nodeName="",SPAN({"class":"nodeValue"},"$attr.nodeValue"),"""),">"),shortTag:OBJECTLINK(SPAN({"class":"$object|getVisible"},SPAN({"class":"selectorTag"},"$object|getSelectorTag"),SPAN({"class":"selectorId"},"$object|getSelectorId"),SPAN({"class":"selectorClass"},"$object|getSelectorClass"),SPAN({"class":"selectorValue"},"$object|getValue"))),getVisible:function(elt){return isVisible(elt)?"":"selectorHidden" },getSelectorTag:function(elt){return elt.nodeName.toLowerCase() },getSelectorId:function(elt){return elt.id?"#"+elt.id:"" },getSelectorClass:function(elt){return elt.className?"."+elt.className.split(" ")[0]:"" },getValue:function(elt){return""; var value; if(elt instanceof HTMLImageElement){value=getFileName(elt.src) }else{if(elt instanceof HTMLAnchorElement){value=getFileName(elt.href) }else{if(elt instanceof HTMLInputElement){value=elt.value }else{if(elt instanceof HTMLFormElement){value=getFileName(elt.action) }else{if(elt instanceof HTMLScriptElement){value=getFileName(elt.src) }}}}}return value?" "+cropString(value,20):"" },attrIterator:function(elt){var attrs=[]; var idAttr,classAttr; if(elt.attributes){for(var i=0; i0 },hasErrorBreak:function(error){return fbs.hasErrorBreakpoint(error.href,error.lineNo) },getMessage:function(message){var re=/\[Exception... "(.*?)" nsresult:/; var m=re.exec(message); return m?m[1]:message },getLine:function(error){if(error.category=="js"){if(error.source){return cropString(error.source,80) }else{if(error.href&&error.href.indexOf("XPCSafeJSObjectWrapper")==-1){return cropString(error.getSourceLine(),80) }}}},getSourceLink:function(error){var ext=error.category=="css"?"css":"js"; return error.lineNo?new SourceLink(error.href,error.lineNo,ext):null },getSourceType:function(error){if(error.source){return"syntax" }else{if(error.lineNo==1&&getFileExtension(error.href)!="js"){return"none" }else{if(error.category=="css"){return"none" }else{if(!error.href||!error.lineNo){return"none" }else{return"exec" }}}}},onToggleError:function(event){var target=event.currentTarget; if(hasClass(event.target,"errorBreak")){this.breakOnThisError(target.repObject) }else{if(hasClass(event.target,"errorSource")){var panel=Firebug.getElementPanel(event.target); this.inspectObject(target.repObject,panel.context) }else{if(hasClass(event.target,"errorTitle")){var traceBox=target.childNodes[1]; toggleClass(target,"opened"); event.target.setAttribute("aria-checked",hasClass(target,"opened")); if(hasClass(target,"opened")){if(target.stackTrace){var node=FirebugReps.StackTrace.tag.append({object:target.stackTrace},traceBox) }if(Firebug.A11yModel.enabled){var panel=Firebug.getElementPanel(event.target); dispatch([Firebug.A11yModel],"onLogRowContentCreated",[panel,traceBox]) }}else{clearNode(traceBox) }}}}},copyError:function(error){var message=[this.getMessage(error.message),error.href,"Line "+error.lineNo]; copyToClipboard(message.join("\n")) },breakOnThisError:function(error){if(this.hasErrorBreak(error)){Firebug.Debugger.clearErrorBreakpoint(error.href,error.lineNo) }else{Firebug.Debugger.setErrorBreakpoint(error.href,error.lineNo) }},className:"errorMessage",inspectable:false,supportsObject:function(object){return object instanceof ErrorMessage },inspectObject:function(error,context){var sourceLink=this.getSourceLink(error); FirebugReps.SourceLink.inspectObject(sourceLink,context) },getContextMenuItems:function(error,target,context){var breakOnThisError=this.hasErrorBreak(error); var items=[{label:"CopyError",command:bindFixed(this.copyError,this,error)}]; if(error.category=="css"){items.push("-",{label:"BreakOnThisError",type:"checkbox",checked:breakOnThisError,command:bindFixed(this.breakOnThisError,this,error)},optionMenu("BreakOnAllErrors","breakOnErrors")) }return items }}); this.Assert=domplate(Firebug.Rep,{tag:DIV(DIV({"class":"errorTitle"}),DIV({"class":"assertDescription"})),className:"assert",inspectObject:function(error,context){var sourceLink=this.getSourceLink(error); Firebug.chrome.select(sourceLink) },getContextMenuItems:function(error,target,context){var breakOnThisError=this.hasErrorBreak(error); return[{label:"CopyError",command:bindFixed(this.copyError,this,error)},"-",{label:"BreakOnThisError",type:"checkbox",checked:breakOnThisError,command:bindFixed(this.breakOnThisError,this,error)},{label:"BreakOnAllErrors",type:"checkbox",checked:Firebug.breakOnErrors,command:bindFixed(this.breakOnAllErrors,this,error)}] }}); this.SourceText=domplate(Firebug.Rep,{tag:DIV(FOR("line","$object|lineIterator",DIV({"class":"sourceRow",role:"presentation"},SPAN({"class":"sourceLine",role:"presentation"},"$line.lineNo"),SPAN({"class":"sourceRowText",role:"presentation"},"$line.text")))),lineIterator:function(sourceText){var maxLineNoChars=(sourceText.lines.length+"").length; var list=[]; for(var i=0; i57)&&event.charCode!=45&&event.charCode!=46){FBL.cancelEvent(event) }else{this.ignoreNextInput=event.keyCode==8 }}}},onOverflow:function(){this.updateLayout(false,false,3) },onKeyDown:function(event){if(event.keyCode>46||event.keyCode==32||event.keyCode==8){this.keyDownPressed=true }},onInput:function(event){if(isIE){if(event.propertyName!="value"||!isVisible(this.input)||!this.keyDownPressed){return }this.keyDownPressed=false }var selectRangeCallback; if(this.ignoreNextInput){this.ignoreNextInput=false; this.getAutoCompleter().reset() }else{if(this.completeAsYouType){selectRangeCallback=this.getAutoCompleter().complete(currentPanel.context,this.input,false) }else{this.getAutoCompleter().reset() }}Firebug.Editor.update(); if(selectRangeCallback){if(isSafari){setTimeout(selectRangeCallback,0) }else{selectRangeCallback() }}},onContextMenu:function(event){cancelEvent(event); var popup=$("fbInlineEditorPopup"); FBL.eraseNode(popup); var target=event.target||event.srcElement; var menu=this.getContextMenuItems(target); if(menu){for(var i=0; ithis.textSize.height+3:this.noWrap&&approxTextWidth>maxWidth; if(wrapped){var style=isIE?this.target.currentStyle:this.target.ownerDocument.defaultView.getComputedStyle(this.target,""); targetMargin=parseInt(style.marginLeft)+parseInt(style.marginRight); approxTextWidth=maxWidth-targetMargin; this.input.style.width="100%"; this.box.style.width=approxTextWidth+"px" }else{var charWidth=this.measureInputText("m").width; if(extraWidth){charWidth*=extraWidth }var inputWidth=approxTextWidth+charWidth; if(initial){if(isIE){var xDiff=13; this.box.style.width=(inputWidth+xDiff)+"px" }else{this.box.style.width="auto" }}else{var xDiff=isIE?13:this.box.scrollWidth-this.input.offsetWidth; this.box.style.width=(inputWidth+xDiff)+"px" }this.input.style.width=inputWidth+"px" }this.expander.style.width=approxTextWidth+"px"; this.expander.style.height=Math.max(this.textSize.height-3,0)+"px" }if(forceAll){scrollIntoCenterView(this.box,null,true) }}}); Firebug.AutoCompleter=function(getExprOffset,getRange,evaluator,selectMode,caseSensitive){var candidates=null; var originalValue=null; var originalOffset=-1; var lastExpr=null; var lastOffset=-1; var exprOffset=0; var lastIndex=0; var preParsed=null; var preExpr=null; var postExpr=null; this.revert=function(textBox){if(originalOffset!=-1){textBox.value=originalValue; setSelectionRange(textBox,originalOffset,originalOffset); this.reset(); return true }else{this.reset(); return false }}; this.reset=function(){candidates=null; originalValue=null; originalOffset=-1; lastExpr=null; lastOffset=0; exprOffset=0 }; this.complete=function(context,textBox,cycle,reverse){var value=textBox.value; var offset=getInputSelectionStart(textBox); if(isSafari&&!cycle&&offset>=0){offset++ }if(!selectMode&&originalOffset!=-1){offset=originalOffset }if(!candidates||!cycle||offset!=lastOffset){originalOffset=offset; originalValue=value; var parseStart=getExprOffset?getExprOffset(value,offset,context):0; preParsed=value.substr(0,parseStart); var parsed=value.substr(parseStart); var range=getRange?getRange(parsed,offset-parseStart,context):null; if(!range){range={start:0,end:parsed.length-1} }var expr=parsed.substr(range.start,range.end-range.start+1); preExpr=parsed.substr(0,range.start); postExpr=parsed.substr(range.end+1); exprOffset=parseStart+range.start; if(!cycle){if(!expr){return }else{if(lastExpr&&lastExpr.indexOf(expr)!=0){candidates=null }else{if(lastExpr&&lastExpr.length>=expr.length){candidates=null; lastExpr=expr; return }}}}lastExpr=expr; lastOffset=offset; var searchExpr; if(expr&&offset!=parseStart+range.end+1){if(cycle){offset=range.start; searchExpr=expr; expr="" }else{return }}var values=evaluator(preExpr,expr,postExpr,context); if(!values){return }if(expr){candidates=[]; if(caseSensitive){for(var i=0; i=candidates.length){lastIndex=0 }else{if(lastIndex<0){lastIndex=candidates.length-1 }}var completion=candidates[lastIndex]; var preCompletion=expr.substr(0,offset-exprOffset); var postCompletion=completion.substr(offset-exprOffset); textBox.value=preParsed+preExpr+preCompletion+postCompletion+postExpr; var offsetEnd=preParsed.length+preExpr.length+completion.length; return function(){if(selectMode){setSelectionRange(textBox,offset,offsetEnd) }else{setSelectionRange(textBox,offsetEnd,offsetEnd) }} } }; var getDefaultEditor=function getDefaultEditor(panel){if(!defaultEditor){var doc=panel.document; defaultEditor=new Firebug.InlineEditor(doc) }return defaultEditor }; var getOutsider=function getOutsider(element,group,stepper){var parentGroup=getAncestorByClass(group.parentNode,"editGroup"); var next; do{next=stepper(next||element) }while(isAncestor(next,group)||isGroupInsert(next,parentGroup)); return next }; var isGroupInsert=function isGroupInsert(next,group){return(!group||isAncestor(next,group))&&(hasClass(next,"insertBefore")||hasClass(next,"insertAfter")) }; var getNextOutsider=function getNextOutsider(element,group){return getOutsider(element,group,bind(getNextByClass,FBL,"editable")) }; var getPreviousOutsider=function getPreviousOutsider(element,group){return getOutsider(element,group,bind(getPreviousByClass,FBL,"editable")) }; var getInlineParent=function getInlineParent(element){var lastInline=element; for(; element; element=element.parentNode){var s=isIE?element.currentStyle:element.ownerDocument.defaultView.getComputedStyle(element,""); if(s.display!="inline"){return lastInline }else{lastInline=element }}return null }; var insertTab=function insertTab(){insertTextIntoElement(currentEditor.input,Firebug.Editor.tabCharacter) }; Firebug.registerModule(Firebug.Editor) }}); FBL.ns(function(){with(FBL){var ElementCache=Firebug.Lite.Cache.Element; var inspectorTS,inspectorTimer,isInspecting; Firebug.Inspector={create:function(){offlineFragment=Env.browser.document.createDocumentFragment(); createBoxModelInspector(); createOutlineInspector() },destroy:function(){destroyBoxModelInspector(); destroyOutlineInspector(); offlineFragment=null },toggleInspect:function(){if(isInspecting){this.stopInspecting() }else{Firebug.chrome.inspectButton.changeState("pressed"); this.startInspecting() }},startInspecting:function(){isInspecting=true; Firebug.chrome.selectPanel("HTML"); createInspectorFrame(); var size=Firebug.browser.getWindowScrollSize(); fbInspectFrame.style.width=size.width+"px"; fbInspectFrame.style.height=size.height+"px"; addEvent(fbInspectFrame,"mousemove",Firebug.Inspector.onInspecting); addEvent(fbInspectFrame,"mousedown",Firebug.Inspector.onInspectingClick) },stopInspecting:function(){isInspecting=false; if(outlineVisible){this.hideOutline() }removeEvent(fbInspectFrame,"mousemove",Firebug.Inspector.onInspecting); removeEvent(fbInspectFrame,"mousedown",Firebug.Inspector.onInspectingClick); destroyInspectorFrame(); Firebug.chrome.inspectButton.restore(); if(Firebug.chrome.type=="popup"){Firebug.chrome.node.focus() }},onInspectingClick:function(e){fbInspectFrame.style.display="none"; var targ=Firebug.browser.getElementFromPoint(e.clientX,e.clientY); fbInspectFrame.style.display="block"; var id=targ.id; if(id&&/^fbOutline\w$/.test(id)){return }if(id=="FirebugUI"){return }while(targ.nodeType!=1){targ=targ.parentNode }Firebug.Inspector.stopInspecting() },onInspecting:function(e){if(new Date().getTime()-lastInspecting>30){fbInspectFrame.style.display="none"; var targ=Firebug.browser.getElementFromPoint(e.clientX,e.clientY); fbInspectFrame.style.display="block"; var id=targ.id; if(id&&/^fbOutline\w$/.test(id)){return }if(id=="FirebugUI"){return }while(targ.nodeType!=1){targ=targ.parentNode }if(targ.nodeName.toLowerCase()=="body"){return }Firebug.Inspector.drawOutline(targ); if(ElementCache(targ)){var target=""+ElementCache.key(targ); var lazySelect=function(){inspectorTS=new Date().getTime(); Firebug.HTML.selectTreeNode(""+ElementCache.key(targ)) }; if(inspectorTimer){clearTimeout(inspectorTimer); inspectorTimer=null }if(new Date().getTime()-inspectorTS>200){setTimeout(lazySelect,0) }else{inspectorTimer=setTimeout(lazySelect,300) }}lastInspecting=new Date().getTime() }},onInspectingBody:function(e){if(new Date().getTime()-lastInspecting>30){var targ=e.target; var id=targ.id; if(id&&/^fbOutline\w$/.test(id)){return }if(id=="FirebugUI"){return }while(targ.nodeType!=1){targ=targ.parentNode }if(targ.nodeName.toLowerCase()=="body"){return }Firebug.Inspector.drawOutline(targ); if(ElementCache.has(targ)){FBL.Firebug.HTML.selectTreeNode(""+ElementCache.key(targ)) }lastInspecting=new Date().getTime() }},drawOutline:function(el){var border=2; var scrollbarSize=17; var windowSize=Firebug.browser.getWindowSize(); var scrollSize=Firebug.browser.getWindowScrollSize(); var scrollPosition=Firebug.browser.getWindowScrollPosition(); var box=Firebug.browser.getElementBox(el); var top=box.top; var left=box.left; var height=box.height; var width=box.width; var freeHorizontalSpace=scrollPosition.left+windowSize.width-left-width-(!isIE&&scrollSize.height>windowSize.height?scrollbarSize:0); var freeVerticalSpace=scrollPosition.top+windowSize.height-top-height-(!isIE&&scrollSize.width>windowSize.width?scrollbarSize:0); var numVerticalBorders=freeVerticalSpace>0?2:1; var o=outlineElements; var style; style=o.fbOutlineT.style; style.top=top-border+"px"; style.left=left+"px"; style.height=border+"px"; style.width=width+"px"; style=o.fbOutlineL.style; style.top=top-border+"px"; style.left=left-border+"px"; style.height=height+numVerticalBorders*border+"px"; style.width=border+"px"; style=o.fbOutlineB.style; if(freeVerticalSpace>0){style.top=top+height+"px"; style.left=left+"px"; style.width=width+"px" }else{style.top=-2*border+"px"; style.left=-2*border+"px"; style.width=border+"px" }style=o.fbOutlineR.style; if(freeHorizontalSpace>0){style.top=top-border+"px"; style.left=left+width+"px"; style.height=height+numVerticalBorders*border+"px"; style.width=(freeHorizontalSpacescrollPosition.top+windowSize.height-offsetHeight||box.left>scrollPosition.left+windowSize.width||scrollPosition.top>box.top+box.height||scrollPosition.left>box.left+box.width){return }var top=box.top; var left=box.left; var height=box.height; var width=box.width; var margin=Firebug.browser.getMeasurementBox(el,"margin"); var padding=Firebug.browser.getMeasurementBox(el,"padding"); var border=Firebug.browser.getMeasurementBox(el,"border"); boxModelStyle.top=top-margin.top+"px"; boxModelStyle.left=left-margin.left+"px"; boxModelStyle.height=height+margin.top+margin.bottom+"px"; boxModelStyle.width=width+margin.left+margin.right+"px"; boxBorderStyle.top=margin.top+"px"; boxBorderStyle.left=margin.left+"px"; boxBorderStyle.height=height+"px"; boxBorderStyle.width=width+"px"; boxPaddingStyle.top=margin.top+border.top+"px"; boxPaddingStyle.left=margin.left+border.left+"px"; boxPaddingStyle.height=height-border.top-border.bottom+"px"; boxPaddingStyle.width=width-border.left-border.right+"px"; boxContentStyle.top=margin.top+border.top+padding.top+"px"; boxContentStyle.left=margin.left+border.left+padding.left+"px"; boxContentStyle.height=height-border.top-padding.top-padding.bottom-border.bottom+"px"; boxContentStyle.width=width-border.left-padding.left-padding.right-border.right+"px"; if(!boxModelVisible){this.showBoxModel() }},hideBoxModel:function(){if(!boxModelVisible){return }offlineFragment.appendChild(boxModel); boxModelVisible=false },showBoxModel:function(){if(boxModelVisible){return }if(outlineVisible){this.hideOutline() }Firebug.browser.document.getElementsByTagName("body")[0].appendChild(boxModel); boxModelVisible=true }}; var offlineFragment=null; var boxModelVisible=false; var boxModel,boxModelStyle,boxMargin,boxMarginStyle,boxBorder,boxBorderStyle,boxPadding,boxPaddingStyle,boxContent,boxContentStyle; var resetStyle="margin:0; padding:0; border:0; position:absolute; overflow:hidden; display:block;"; var offscreenStyle=resetStyle+"top:-1234px; left:-1234px;"; var inspectStyle=resetStyle+"z-index: 2147483500;"; var inspectFrameStyle=resetStyle+"z-index: 2147483550; top:0; left:0; background:url("+Env.Location.skinDir+"pixel_transparent.gif);"; var inspectModelOpacity=isIE?"filter:alpha(opacity=80);":"opacity:0.8;"; var inspectModelStyle=inspectStyle+inspectModelOpacity; var inspectMarginStyle=inspectStyle+"background: #EDFF64; height:100%; width:100%;"; var inspectBorderStyle=inspectStyle+"background: #666;"; var inspectPaddingStyle=inspectStyle+"background: SlateBlue;"; var inspectContentStyle=inspectStyle+"background: SkyBlue;"; var outlineStyle={fbHorizontalLine:"background: #3875D7;height: 2px;",fbVerticalLine:"background: #3875D7;width: 2px;"}; var lastInspecting=0; var fbInspectFrame=null; var outlineVisible=false; var outlineElements={}; var outline={fbOutlineT:"fbHorizontalLine",fbOutlineL:"fbVerticalLine",fbOutlineB:"fbHorizontalLine",fbOutlineR:"fbVerticalLine"}; var getInspectingTarget=function(){}; var createInspectorFrame=function createInspectorFrame(){fbInspectFrame=createGlobalElement("div"); fbInspectFrame.id="fbInspectFrame"; fbInspectFrame.firebugIgnore=true; fbInspectFrame.style.cssText=inspectFrameStyle; Firebug.browser.document.getElementsByTagName("body")[0].appendChild(fbInspectFrame) }; var destroyInspectorFrame=function destroyInspectorFrame(){if(fbInspectFrame){Firebug.browser.document.getElementsByTagName("body")[0].removeChild(fbInspectFrame); fbInspectFrame=null }}; var createOutlineInspector=function createOutlineInspector(){for(var name in outline){var el=outlineElements[name]=createGlobalElement("div"); el.id=name; el.firebugIgnore=true; el.style.cssText=inspectStyle+outlineStyle[outline[name]]; offlineFragment.appendChild(el) }}; var destroyOutlineInspector=function destroyOutlineInspector(){for(var name in outline){var el=outlineElements[name]; el.parentNode.removeChild(el) }}; var createBoxModelInspector=function createBoxModelInspector(){boxModel=createGlobalElement("div"); boxModel.id="fbBoxModel"; boxModel.firebugIgnore=true; boxModelStyle=boxModel.style; boxModelStyle.cssText=inspectModelStyle; boxMargin=createGlobalElement("div"); boxMargin.id="fbBoxMargin"; boxMarginStyle=boxMargin.style; boxMarginStyle.cssText=inspectMarginStyle; boxModel.appendChild(boxMargin); boxBorder=createGlobalElement("div"); boxBorder.id="fbBoxBorder"; boxBorderStyle=boxBorder.style; boxBorderStyle.cssText=inspectBorderStyle; boxModel.appendChild(boxBorder); boxPadding=createGlobalElement("div"); boxPadding.id="fbBoxPadding"; boxPaddingStyle=boxPadding.style; boxPaddingStyle.cssText=inspectPaddingStyle; boxModel.appendChild(boxPadding); boxContent=createGlobalElement("div"); boxContent.id="fbBoxContent"; boxContentStyle=boxContent.style; boxContentStyle.cssText=inspectContentStyle; boxModel.appendChild(boxContent); offlineFragment.appendChild(boxModel) }; var destroyBoxModelInspector=function destroyBoxModelInspector(){boxModel.parentNode.removeChild(boxModel) } }}); FBL.ns(function(){with(FBL){var consoleQueue=[]; var lastHighlightedObject; var FirebugContext=Env.browser; var maxQueueRequests=500; Firebug.ConsoleBase={log:function(object,context,className,rep,noThrottle,sourceLink){return this.logRow(appendObject,object,context,className,rep,sourceLink,noThrottle) },logFormatted:function(objects,context,className,noThrottle,sourceLink){return this.logRow(appendFormatted,objects,context,className,null,sourceLink,noThrottle) },openGroup:function(objects,context,className,rep,noThrottle,sourceLink,noPush){return this.logRow(appendOpenGroup,objects,context,className,rep,sourceLink,noThrottle) },closeGroup:function(context,noThrottle){return this.logRow(appendCloseGroup,null,context,null,null,null,noThrottle,true) },logRow:function(appender,objects,context,className,rep,sourceLink,noThrottle,noRow){noThrottle=true; if(!context){context=FirebugContext }if(FBTrace.DBG_ERRORS&&!context){FBTrace.sysout("Console.logRow has no context, skipping objects",objects) }if(!context){return }if(noThrottle||!context){var panel=this.getPanel(context); if(panel){var row=panel.append(appender,objects,className,rep,sourceLink,noRow); var container=panel.panelNode; return row }else{consoleQueue.push([appender,objects,context,className,rep,sourceLink,noThrottle,noRow]) }}else{if(!context.throttle){return }var args=[appender,objects,context,className,rep,sourceLink,true,noRow]; context.throttle(this.logRow,this,args) }},appendFormatted:function(args,row,context){if(!context){context=FirebugContext }var panel=this.getPanel(context); panel.appendFormatted(args,row) },clear:function(context){if(!context){context=Firebug.context }var panel=this.getPanel(context,true); if(panel){panel.clear() }},getPanel:function(context,noCreate){return Firebug.chrome?Firebug.chrome.getPanel("Console"):null }}; var ActivableConsole=extend(Firebug.ConsoleBase,{isAlwaysEnabled:function(){return true }}); Firebug.Console=Firebug.Console=extend(ActivableConsole,{dispatchName:"console",error:function(){Firebug.Console.logFormatted(arguments,Firebug.browser,"error") },flush:function(){for(var i=0,length=consoleQueue.length; iobjects.length){format=""; objIndex=-1; parts.length=0; break }}}for(var i=0; i1){traceRecursion--; return }var frames=[]; for(var fn=arguments.callee.caller.caller; fn; fn=fn.caller){if(wasVisited(fn)){break }var args=[]; for(var i=0,l=fn.arguments.length; i1){objects=[errorObject]; for(var i=1; i0)){var oldest=frames.length-1; for(var i=0; i0&&commandHistory.length>0){this.element.value=commandHistory[--commandPointer] }},nextCommand:function(){var element=this.element; var limit=commandHistory.length-1; var i=commandPointer; if(i=0&&i',msg,"",'"] },onKeyDown:function(e){e=e||event; var code=e.keyCode; if(code!=9&&code!=16&&code!=17&&code!=18){isAutoCompleting=false }if(code==13){this.enter(); this.clear() }else{if(code==27){setTimeout(this.clear,0) }else{if(code==38){this.prevCommand() }else{if(code==40){this.nextCommand() }else{if(code==9){this.autocomplete(e.shiftKey) }else{return }}}}}cancelEvent(e,true); return false },onMultiLineKeyDown:function(e){e=e||event; var code=e.keyCode; if(code==13&&e.ctrlKey){this.enter() }}}); Firebug.registerModule(Firebug.CommandLine); function getExpressionOffset(command){var bracketCount=0; var start=command.length-1; for(; start>=0; --start){var c=command[start]; if((c==","||c==";"||c==" ")&&!bracketCount){break }if(reOpenBracket.test(c)){if(bracketCount){--bracketCount }else{break }}else{if(reCloseBracket.test(c)){++bracketCount }}}return start+1 }var CommandLineAPI={$:function(id){return Firebug.browser.document.getElementById(id) },$$:function(selector,context){context=context||Firebug.browser.document; return Firebug.Selector?Firebug.Selector(selector,context):Firebug.Console.error("Firebug.Selector module not loaded.") },$0:null,$1:null,dir:function(o){Firebug.Console.log(o,Firebug.context,"dir",Firebug.DOMPanel.DirTable) },dirxml:function(o){if(instanceOf(o,"Window")){o=o.document.documentElement }else{if(instanceOf(o,"Document")){o=o.documentElement }}Firebug.Console.log(o,Firebug.context,"dirxml",Firebug.HTMLPanel.SoloElement) }}; var defineCommandLineAPI=function defineCommandLineAPI(){Firebug.CommandLine.API={}; for(var m in CommandLineAPI){if(!Env.browser.window[m]){Firebug.CommandLine.API[m]=CommandLineAPI[m] }}var stack=FirebugChrome.htmlSelectionStack; if(stack){Firebug.CommandLine.API.$0=stack[0]; Firebug.CommandLine.API.$1=stack[1] }} }}); (function(){with(FBL){var XHRSpy=function(){this.requestHeaders=[]; this.responseHeaders=[] }; XHRSpy.prototype={method:null,url:null,async:null,xhrRequest:null,href:null,loaded:false,logRow:null,responseText:null,requestHeaders:null,responseHeaders:null,sourceLink:null,getURL:function(){return this.href }}; var XMLHttpRequestWrapper=function(activeXObject){var xhrRequest=typeof activeXObject!="undefined"?activeXObject:new _XMLHttpRequest(),spy=new XHRSpy(),self=this,reqType,reqUrl,reqStartTS; var updateSelfPropertiesIgnore={abort:1,channel:1,getAllResponseHeaders:1,getInterface:1,getResponseHeader:1,mozBackgroundRequest:1,multipart:1,onreadystatechange:1,open:1,send:1,setRequestHeader:1}; var updateSelfProperties=function(){for(var propName in xhrRequest){if(propName in updateSelfPropertiesIgnore){continue }try{var propValue=xhrRequest[propName]; if(propValue&&!isFunction(propValue)){self[propName]=propValue }}catch(E){}}}; var updateXHRPropertiesIgnore={channel:1,onreadystatechange:1,readyState:1,responseBody:1,responseText:1,responseXML:1,status:1,statusText:1,upload:1}; var updateXHRProperties=function(){for(var propName in self){if(propName in updateXHRPropertiesIgnore){continue }try{var propValue=self[propName]; if(propValue&&!xhrRequest[propName]){xhrRequest[propName]=propValue }}catch(E){}}}; var logXHR=function(){var row=Firebug.Console.log(spy,null,"spy",Firebug.Spy.XHR); if(row){setClass(row,"loading"); spy.logRow=row }}; var finishXHR=function(){var duration=new Date().getTime()-reqStartTS; var success=xhrRequest.status==200; var responseHeadersText=xhrRequest.getAllResponseHeaders(); var responses=responseHeadersText?responseHeadersText.split(/[\n\r]/):[]; var reHeader=/^(\S+):\s*(.*)/; for(var i=0,l=responses.length; ilimit){name=name.substr(0,limit)+"..." }return name },getParamTitle:function(param){var limit=25; var name=param.name; if(name.length>limit){return name }return"" },hideParams:function(file){return !file.urlParams||!file.urlParams.length },hidePost:function(file){return file.method.toUpperCase()!="POST" },hidePut:function(file){return file.method.toUpperCase()!="PUT" },hideResponse:function(file){return false },hideCache:function(file){return true; return !file.cacheEntry },hideHtml:function(file){return(file.mimeType!="text/html")&&(file.mimeType!="application/xhtml+xml") },onClickTab:function(event){this.selectTab(event.currentTarget||event.srcElement) },getParamValueIterator:function(param){return param.value; return wrapText(param.value,true) },appendTab:function(netInfoBox,tabId,tabTitle){var args={tabId:tabId,tabTitle:tabTitle}; this.customTab.append(args,$$(".netInfoTabs",netInfoBox)[0]); this.customBody.append(args,$$(".netInfoBodies",netInfoBox)[0]) },selectTabByName:function(netInfoBox,tabName){var tab=getChildByClass(netInfoBox,"netInfoTabs","netInfo"+tabName+"Tab"); if(tab){this.selectTab(tab) }},selectTab:function(tab){var view=tab.getAttribute("view"); var netInfoBox=getAncestorByClass(tab,"netInfoBody"); var selectedTab=netInfoBox.selectedTab; if(selectedTab){removeClass(netInfoBox.selectedText,"netInfoTextSelected"); removeClass(selectedTab,"netInfoTabSelected"); selectedTab.setAttribute("aria-selected","false") }var textBodyName="netInfo"+view+"Text"; selectedTab=netInfoBox.selectedTab=tab; netInfoBox.selectedText=$$("."+textBodyName,netInfoBox)[0]; setClass(netInfoBox.selectedText,"netInfoTextSelected"); setClass(selectedTab,"netInfoTabSelected"); selectedTab.setAttribute("selected","true"); selectedTab.setAttribute("aria-selected","true"); var file=Firebug.getRepObject(netInfoBox); var context=Firebug.chrome; this.updateInfo(netInfoBox,file,context) },updateInfo:function(netInfoBox,file,context){if(FBTrace.DBG_NET){FBTrace.sysout("net.updateInfo; file",file) }if(!netInfoBox){if(FBTrace.DBG_NET||FBTrace.DBG_ERRORS){FBTrace.sysout("net.updateInfo; ERROR netInfo == null "+file.href,file) }return }var tab=netInfoBox.selectedTab; if(hasClass(tab,"netInfoParamsTab")){if(file.urlParams&&!netInfoBox.urlParamsPresented){netInfoBox.urlParamsPresented=true; this.insertHeaderRows(netInfoBox,file.urlParams,"Params") }}else{if(hasClass(tab,"netInfoHeadersTab")){var headersText=$$(".netInfoHeadersText",netInfoBox)[0]; if(file.responseHeaders&&!netInfoBox.responseHeadersPresented){netInfoBox.responseHeadersPresented=true; NetInfoHeaders.renderHeaders(headersText,file.responseHeaders,"ResponseHeaders") }if(file.requestHeaders&&!netInfoBox.requestHeadersPresented){netInfoBox.requestHeadersPresented=true; NetInfoHeaders.renderHeaders(headersText,file.requestHeaders,"RequestHeaders") }}else{if(hasClass(tab,"netInfoPostTab")){if(!netInfoBox.postPresented){netInfoBox.postPresented=true; var postText=$$(".netInfoPostText",netInfoBox)[0]; NetInfoPostData.render(context,postText,file) }}else{if(hasClass(tab,"netInfoPutTab")){if(!netInfoBox.putPresented){netInfoBox.putPresented=true; var putText=$$(".netInfoPutText",netInfoBox)[0]; NetInfoPostData.render(context,putText,file) }}else{if(hasClass(tab,"netInfoResponseTab")&&file.loaded&&!netInfoBox.responsePresented){var responseTextBox=$$(".netInfoResponseText",netInfoBox)[0]; if(file.category=="image"){netInfoBox.responsePresented=true; var responseImage=netInfoBox.ownerDocument.createElement("img"); responseImage.src=file.href; clearNode(responseTextBox); responseTextBox.appendChild(responseImage,responseTextBox) }else{this.setResponseText(file,netInfoBox,responseTextBox,context) }}else{if(hasClass(tab,"netInfoCacheTab")&&file.loaded&&!netInfoBox.cachePresented){var responseTextBox=netInfoBox.getElementsByClassName("netInfoCacheText").item(0); if(file.cacheEntry){netInfoBox.cachePresented=true; this.insertHeaderRows(netInfoBox,file.cacheEntry,"Cache") }}else{if(hasClass(tab,"netInfoHtmlTab")&&file.loaded&&!netInfoBox.htmlPresented){netInfoBox.htmlPresented=true; var text=Utils.getResponseText(file,context); var iframe=$$(".netInfoHtmlPreview",netInfoBox)[0]; var reScript=//gi; text=text.replace(reScript,""); iframe.contentWindow.document.write(text); iframe.contentWindow.document.close() }}}}}}}dispatch(NetInfoBody.fbListeners,"updateTabBody",[netInfoBox,file,context]) },setResponseText:function(file,netInfoBox,responseTextBox,context){netInfoBox.responsePresented=true; if(isIE){responseTextBox.style.whiteSpace="nowrap" }responseTextBox[typeof responseTextBox.textContent!="undefined"?"textContent":"innerText"]=file.responseText; return; var text=Utils.getResponseText(file,context); var limit=Firebug.netDisplayedResponseLimit+15; var limitReached=text?(text.length>limit):false; if(limitReached){text=text.substr(0,limit)+"..." }if(text){insertWrappedText(text,responseTextBox) }else{insertWrappedText("",responseTextBox) }if(limitReached){var object={text:$STR("net.responseSizeLimitMessage"),onClickLink:function(){var panel=context.getPanel("net",true); panel.openResponseInTab(file) }}; Firebug.NetMonitor.ResponseSizeLimit.append(object,responseTextBox) }netInfoBox.responsePresented=true; if(FBTrace.DBG_NET){FBTrace.sysout("net.setResponseText; response text updated") }},insertHeaderRows:function(netInfoBox,headers,tableName,rowName){if(!headers.length){return }var headersTable=$$(".netInfo"+tableName+"Table",netInfoBox)[0]; var tbody=getChildByClass(headersTable,"netInfo"+rowName+"Body"); if(!tbody){tbody=headersTable.firstChild }var titleRow=getChildByClass(tbody,"netInfo"+rowName+"Title"); this.headerDataTag.insertRows({headers:headers},titleRow?titleRow:tbody); removeClass(titleRow,"collapsed") }}); var NetInfoBody=Firebug.NetMonitor.NetInfoBody; Firebug.NetMonitor.NetInfoHeaders=domplate(Firebug.Rep,{tag:DIV({"class":"netInfoHeadersTable",role:"tabpanel"},DIV({"class":"netInfoHeadersGroup netInfoResponseHeadersTitle"},SPAN($STR("ResponseHeaders")),SPAN({"class":"netHeadersViewSource response collapsed",onclick:"$onViewSource",_sourceDisplayed:false,_rowName:"ResponseHeaders"},$STR("net.headers.view source"))),TABLE({cellpadding:0,cellspacing:0},TBODY({"class":"netInfoResponseHeadersBody",role:"list","aria-label":$STR("ResponseHeaders")})),DIV({"class":"netInfoHeadersGroup netInfoRequestHeadersTitle"},SPAN($STR("RequestHeaders")),SPAN({"class":"netHeadersViewSource request collapsed",onclick:"$onViewSource",_sourceDisplayed:false,_rowName:"RequestHeaders"},$STR("net.headers.view source"))),TABLE({cellpadding:0,cellspacing:0},TBODY({"class":"netInfoRequestHeadersBody",role:"list","aria-label":$STR("RequestHeaders")}))),sourceTag:TR({role:"presentation"},TD({colspan:2,role:"presentation"},PRE({"class":"source"}))),onViewSource:function(event){var target=event.target; var requestHeaders=(target.rowName=="RequestHeaders"); var netInfoBox=getAncestorByClass(target,"netInfoBody"); var file=netInfoBox.repObject; if(target.sourceDisplayed){var headers=requestHeaders?file.requestHeaders:file.responseHeaders; this.insertHeaderRows(netInfoBox,headers,target.rowName); target.innerHTML=$STR("net.headers.view source") }else{var source=requestHeaders?file.requestHeadersText:file.responseHeadersText; this.insertSource(netInfoBox,source,target.rowName); target.innerHTML=$STR("net.headers.pretty print") }target.sourceDisplayed=!target.sourceDisplayed; cancelEvent(event) },insertSource:function(netInfoBox,source,rowName){var tbody=$$(".netInfo"+rowName+"Body",netInfoBox)[0]; var node=this.sourceTag.replace({},tbody); var sourceNode=$$(".source",node)[0]; sourceNode.innerHTML=source },insertHeaderRows:function(netInfoBox,headers,rowName){var headersTable=$$(".netInfoHeadersTable",netInfoBox)[0]; var tbody=$$(".netInfo"+rowName+"Body",headersTable)[0]; clearNode(tbody); if(!headers.length){return }NetInfoBody.headerDataTag.insertRows({headers:headers},tbody); var titleRow=getChildByClass(headersTable,"netInfo"+rowName+"Title"); removeClass(titleRow,"collapsed") },init:function(parent){var rootNode=this.tag.append({},parent); var netInfoBox=getAncestorByClass(parent,"netInfoBody"); var file=netInfoBox.repObject; var viewSource; viewSource=$$(".request",rootNode)[0]; if(file.requestHeadersText){removeClass(viewSource,"collapsed") }viewSource=$$(".response",rootNode)[0]; if(file.responseHeadersText){removeClass(viewSource,"collapsed") }},renderHeaders:function(parent,headers,rowName){if(!parent.firstChild){this.init(parent) }this.insertHeaderRows(parent,headers,rowName) }}); var NetInfoHeaders=Firebug.NetMonitor.NetInfoHeaders; Firebug.NetMonitor.NetInfoPostData=domplate(Firebug.Rep,{paramsTable:TABLE({"class":"netInfoPostParamsTable",cellpadding:0,cellspacing:0,role:"presentation"},TBODY({role:"list","aria-label":$STR("net.label.Parameters")},TR({"class":"netInfoPostParamsTitle",role:"presentation"},TD({colspan:3,role:"presentation"},DIV({"class":"netInfoPostParams"},$STR("net.label.Parameters"),SPAN({"class":"netInfoPostContentType"},"application/x-www-form-urlencoded")))))),partsTable:TABLE({"class":"netInfoPostPartsTable",cellpadding:0,cellspacing:0,role:"presentation"},TBODY({role:"list","aria-label":$STR("net.label.Parts")},TR({"class":"netInfoPostPartsTitle",role:"presentation"},TD({colspan:2,role:"presentation"},DIV({"class":"netInfoPostParams"},$STR("net.label.Parts"),SPAN({"class":"netInfoPostContentType"},"multipart/form-data")))))),jsonTable:TABLE({"class":"netInfoPostJSONTable",cellpadding:0,cellspacing:0,role:"presentation"},TBODY({role:"list","aria-label":$STR("JSON")},TR({"class":"netInfoPostJSONTitle",role:"presentation"},TD({role:"presentation"},DIV({"class":"netInfoPostParams"},$STR("JSON")))),TR(TD({"class":"netInfoPostJSONBody"})))),xmlTable:TABLE({"class":"netInfoPostXMLTable",cellpadding:0,cellspacing:0,role:"presentation"},TBODY({role:"list","aria-label":$STR("xmlviewer.tab.XML")},TR({"class":"netInfoPostXMLTitle",role:"presentation"},TD({role:"presentation"},DIV({"class":"netInfoPostParams"},$STR("xmlviewer.tab.XML")))),TR(TD({"class":"netInfoPostXMLBody"})))),sourceTable:TABLE({"class":"netInfoPostSourceTable",cellpadding:0,cellspacing:0,role:"presentation"},TBODY({role:"list","aria-label":$STR("net.label.Source")},TR({"class":"netInfoPostSourceTitle",role:"presentation"},TD({colspan:2,role:"presentation"},DIV({"class":"netInfoPostSource"},$STR("net.label.Source")))))),sourceBodyTag:TR({role:"presentation"},TD({colspan:2,role:"presentation"},FOR("line","$param|getParamValueIterator",CODE({"class":"focusRow subFocusRow",role:"listitem"},"$line")))),getParamValueIterator:function(param){return NetInfoBody.getParamValueIterator(param) },render:function(context,parentNode,file){var spy=getAncestorByClass(parentNode,"spyHead"); var spyObject=spy.repObject; var data=spyObject.data; var contentType=file.mimeType; if(contentType&&contentType=="application/x-www-form-urlencoded"||data&&data.indexOf("=")!=-1){var params=parseURLEncodedTextArray(data); if(params){this.insertParameters(parentNode,params) }}var jsonData={responseText:data}; if(Firebug.JSONViewerModel.isJSON(contentType,data)){this.insertJSON(parentNode,jsonData,context) }var postText=data; if(postText){this.insertSource(parentNode,postText) }},insertParameters:function(parentNode,params){if(!params||!params.length){return }var paramTable=this.paramsTable.append({object:{}},parentNode); var row=$$(".netInfoPostParamsTitle",paramTable)[0]; var tbody=paramTable.getElementsByTagName("tbody")[0]; NetInfoBody.headerDataTag.insertRows({headers:params},row) },insertParts:function(parentNode,data){if(!data.params||!data.params.length){return }var partsTable=this.partsTable.append({object:{}},parentNode); var row=$$(".netInfoPostPartsTitle",paramTable)[0]; NetInfoBody.headerDataTag.insertRows({headers:data.params},row) },insertJSON:function(parentNode,file,context){var text=file.responseText; var data=parseJSONString(text); if(!data){return }var jsonTable=this.jsonTable.append({},parentNode); var jsonBody=$$(".netInfoPostJSONBody",jsonTable)[0]; if(!this.toggles){this.toggles={} }Firebug.DOMPanel.DirTable.tag.replace({object:data,toggles:this.toggles},jsonBody) },insertXML:function(parentNode,file,context){var text=Utils.getPostText(file,context); var jsonTable=this.xmlTable.append(null,parentNode); var jsonBody=$$(".netInfoPostXMLBody",jsonTable)[0]; Firebug.XMLViewerModel.insertXML(jsonBody,text) },insertSource:function(parentNode,text){var sourceTable=this.sourceTable.append({object:{}},parentNode); var row=$$(".netInfoPostSourceTitle",sourceTable)[0]; var param={value:[text]}; this.sourceBodyTag.insertRows({param:param},row) },parseMultiPartText:function(file,context){var text=Utils.getPostText(file,context); if(text==undefined){return null }FBTrace.sysout("net.parseMultiPartText; boundary: ",text); var boundary=text.match(/\s*boundary=\s*(.*)/)[1]; var divider="\r\n\r\n"; var bodyStart=text.indexOf(divider); var body=text.substr(bodyStart+divider.length); var postData={}; postData.mimeType="multipart/form-data"; postData.params=[]; var parts=body.split("--"+boundary); for(var i=0; i1)?m[1]:"",value:trim(part[1])}) }return postData }}); var NetInfoPostData=Firebug.NetMonitor.NetInfoPostData; var $STRP=function(a){return a }; Firebug.NetMonitor.NetLimit=domplate(Firebug.Rep,{collapsed:true,tableTag:DIV(TABLE({width:"100%",cellpadding:0,cellspacing:0},TBODY())),limitTag:TR({"class":"netRow netLimitRow",$collapsed:"$isCollapsed"},TD({"class":"netCol netLimitCol",colspan:6},TABLE({cellpadding:0,cellspacing:0},TBODY(TR(TD(SPAN({"class":"netLimitLabel"},$STRP("plural.Limit_Exceeded",[0]))),TD({style:"width:100%"}),TD(BUTTON({"class":"netLimitButton",title:"$limitPrefsTitle",onclick:"$onPreferences"},$STR("LimitPrefs"))),TD(" ")))))),isCollapsed:function(){return this.collapsed },onPreferences:function(event){openNewTab("about:config") },updateCounter:function(row){removeClass(row,"collapsed"); var limitLabel=row.getElementsByClassName("netLimitLabel").item(0); limitLabel.firstChild.nodeValue=$STRP("plural.Limit_Exceeded",[row.limitInfo.totalCount]) },createTable:function(parent,limitInfo){var table=this.tableTag.replace({},parent); var row=this.createRow(table.firstChild.firstChild,limitInfo); return[table,row] },createRow:function(parent,limitInfo){var row=this.limitTag.insertRows(limitInfo,parent,this)[0]; row.limitInfo=limitInfo; return row },observe:function(subject,topic,data){if(topic!="nsPref:changed"){return }if(data.indexOf("net.logLimit")!=-1){this.updateMaxLimit() }},updateMaxLimit:function(){var value=Firebug.getPref(Firebug.prefDomain,"net.logLimit"); maxQueueRequests=value?value:maxQueueRequests }}); var NetLimit=Firebug.NetMonitor.NetLimit; Firebug.NetMonitor.ResponseSizeLimit=domplate(Firebug.Rep,{tag:DIV({"class":"netInfoResponseSizeLimit"},SPAN("$object.beforeLink"),A({"class":"objectLink",onclick:"$onClickLink"},"$object.linkText"),SPAN("$object.afterLink")),reLink:/^(.*)(.*)<\/a>(.*$)/,append:function(obj,parent){var m=obj.text.match(this.reLink); return this.tag.append({onClickLink:obj.onClickLink,object:{beforeLink:m[1],linkText:m[2],afterLink:m[3]}},parent,this) }}); Firebug.NetMonitor.Utils={findHeader:function(headers,name){if(!headers){return null }name=name.toLowerCase(); for(var i=0; ilimit&&!noLimit){return cropString(file.postText,limit,"\n\n... "+$STR("net.postDataSizeLimitMessage")+" ...\n\n") }return file.postText },getResponseText:function(file,context){return(typeof(file.responseText)!="undefined")?file.responseText:context.sourceCache.loadText(file.href,file.method,file) },isURLEncodedRequest:function(file,context){var text=Utils.getPostText(file,context); if(text&&text.toLowerCase().indexOf("content-type: application/x-www-form-urlencoded")==0){return true }var headerValue=Utils.findHeader(file.requestHeaders,"content-type"); if(headerValue&&headerValue.indexOf("application/x-www-form-urlencoded")==0){return true }return false },isMultiPartRequest:function(file,context){var text=Utils.getPostText(file,context); if(text&&text.toLowerCase().indexOf("content-type: multipart/form-data")==0){return true }return false },getMimeType:function(mimeType,uri){if(!mimeType||!(mimeCategoryMap.hasOwnProperty(mimeType))){var ext=getFileExtension(uri); if(!ext){return mimeType }else{var extMimeType=mimeExtensionMap[ext.toLowerCase()]; return extMimeType?extMimeType:mimeType }}else{return mimeType }},getDateFromSeconds:function(s){var d=new Date(); d.setTime(s*1000); return d },getHttpHeaders:function(request,file){try{var http=QI(request,Ci.nsIHttpChannel); file.status=request.responseStatus; file.method=http.requestMethod; file.urlParams=parseURLParams(file.href); file.mimeType=Utils.getMimeType(request.contentType,request.name); if(!file.responseHeaders&&Firebug.collectHttpHeaders){var requestHeaders=[],responseHeaders=[]; http.visitRequestHeaders({visitHeader:function(name,value){requestHeaders.push({name:name,value:value}) }}); http.visitResponseHeaders({visitHeader:function(name,value){responseHeaders.push({name:name,value:value}) }}); file.requestHeaders=requestHeaders; file.responseHeaders=responseHeaders }}catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.sysout("net.getHttpHeaders FAILS "+file.href,exc) }}},isXHR:function(request){try{var callbacks=request.notificationCallbacks; var xhrRequest=callbacks?callbacks.getInterface(Ci.nsIXMLHttpRequest):null; if(FBTrace.DBG_NET){FBTrace.sysout("net.isXHR; "+(xhrRequest!=null)+", "+safeGetName(request)) }return(xhrRequest!=null) }catch(exc){}return false },getFileCategory:function(file){if(file.category){if(FBTrace.DBG_NET){FBTrace.sysout("net.getFileCategory; current: "+file.category+" for: "+file.href,file) }return file.category }if(file.isXHR){if(FBTrace.DBG_NET){FBTrace.sysout("net.getFileCategory; XHR for: "+file.href,file) }return file.category="xhr" }if(!file.mimeType){var ext=getFileExtension(file.href); if(ext){file.mimeType=mimeExtensionMap[ext.toLowerCase()] }}if(!file.mimeType){return"" }var mimeType=file.mimeType; if(mimeType){mimeType=mimeType.split(";")[0] }return(file.category=mimeCategoryMap[mimeType]) }}; var Utils=Firebug.NetMonitor.Utils; Firebug.registerModule(Firebug.NetMonitor) }}); FBL.ns(function(){with(FBL){var contexts=[]; Firebug.Spy=extend(Firebug.Module,{dispatchName:"spy",initialize:function(){if(Firebug.TraceModule){Firebug.TraceModule.addListener(this.TraceListener) }Firebug.Module.initialize.apply(this,arguments) },shutdown:function(){Firebug.Module.shutdown.apply(this,arguments); if(Firebug.TraceModule){Firebug.TraceModule.removeListener(this.TraceListener) }},initContext:function(context){context.spies=[]; if(Firebug.showXMLHttpRequests&&Firebug.Console.isAlwaysEnabled()){this.attachObserver(context,context.window) }if(FBTrace.DBG_SPY){FBTrace.sysout("spy.initContext "+contexts.length+" ",context.getName()) }},destroyContext:function(context){this.detachObserver(context,null); if(FBTrace.DBG_SPY&&context.spies.length){FBTrace.sysout("spy.destroyContext; ERROR There are leaking Spies ("+context.spies.length+") "+context.getName()) }delete context.spies; if(FBTrace.DBG_SPY){FBTrace.sysout("spy.destroyContext "+contexts.length+" ",context.getName()) }},watchWindow:function(context,win){if(Firebug.showXMLHttpRequests&&Firebug.Console.isAlwaysEnabled()){this.attachObserver(context,win) }},unwatchWindow:function(context,win){try{this.detachObserver(context,win) }catch(ex){ERROR(ex) }},updateOption:function(name,value){if(name=="showXMLHttpRequests"){var tach=value?this.attachObserver:this.detachObserver; for(var i=0; i\s*/,""); var div=parentNode.ownerDocument.createElement("div"); div.innerHTML=xmlText; var root=div.getElementsByTagName("*")[0]; if(FBTrace.DBG_XMLVIEWER){FBTrace.sysout("xmlviewer.updateTabBody; XML response parsed",doc) }var html=[]; Firebug.Reps.appendNode(root,html); parentNode.innerHTML=html.join("") }}); Firebug.XMLViewerModel.ParseError=domplate(Firebug.Rep,{tag:DIV({"class":"xmlInfoError"},DIV({"class":"xmlInfoErrorMsg"},"$error.message"),PRE({"class":"xmlInfoErrorSource"},"$error|getSource")),getSource:function(error){var parts=error.source.split("\n"); if(parts.length!=2){return error.source }var limit=50; var column=parts[1].length; if(column>=limit){parts[0]="..."+parts[0].substr(column-limit); parts[1]="..."+parts[1].substr(column-limit) }if(parts[0].length>80){parts[0]=parts[0].substr(0,80)+"..." }return parts.join("\n") }}); Firebug.registerModule(Firebug.XMLViewerModel) }}); FBL.ns(function(){with(FBL){var ElementCache=Firebug.Lite.Cache.Element; var cacheID=Firebug.Lite.Cache.ID; var ignoreHTMLProps={sizcache:1,sizset:1}; ignoreHTMLProps[cacheID]=1; Firebug.HTML=extend(Firebug.Module,{appendTreeNode:function(nodeArray,html){var reTrim=/^\s+|\s+$/g; if(!nodeArray.length){nodeArray=[nodeArray] }for(var n=0,node; node=nodeArray[n]; n++){if(node.nodeType==1){if(Firebug.ignoreFirebugElements&&node.firebugIgnore){continue }var uid=ElementCache(node); var child=node.childNodes; var childLength=child.length; var nodeName=node.nodeName.toLowerCase(); var nodeVisible=isVisible(node); var hasSingleTextChild=childLength==1&&node.firstChild.nodeType==3&&nodeName!="script"&&nodeName!="style"; var nodeControl=!hasSingleTextChild&&childLength>0?('
'):""; var isIE=false; if(isIE&&nodeControl){html.push(nodeControl) }if(typeof uid!="undefined"){html.push('
',!isIE&&nodeControl?nodeControl:"","<',nodeName,"") }else{html.push('
<',nodeName,"") }for(var i=0; i',name,'="',escapeHTML(value),""") }if(hasSingleTextChild){var value=child[0].nodeValue.replace(reTrim,""); if(value){html.push('>',escapeHTML(value),'</',nodeName,">
") }else{html.push("/>
") }}else{if(childLength>0){html.push(">") }else{html.push("/>") }}}else{if(node.nodeType==3){if(node.parentNode&&(node.parentNode.nodeName.toLowerCase()=="script"||node.parentNode.nodeName.toLowerCase()=="style")){var value=node.nodeValue.replace(reTrim,""); if(isIE){var src=value+"\n" }else{var src="\n"+value+"\n" }var match=src.match(/\n/g); var num=match?match.length:0; var s=[],sl=0; for(var c=1; c'+c+"" }html.push('
',s.join(""),'
',escapeHTML(src),"
") }else{var value=node.nodeValue.replace(reTrim,""); if(value){html.push('
',escapeHTML(value),"
") }}}}}},appendTreeChildren:function(treeNode){var doc=Firebug.chrome.document; var uid=treeNode.id; var parentNode=ElementCache.get(uid); if(parentNode.childNodes.length==0){return }var treeNext=treeNode.nextSibling; var treeParent=treeNode.parentNode; var isIE=false; var control=isIE?treeNode.previousSibling:treeNode.firstChild; control.className="nodeControl nodeMaximized"; var html=[]; var children=doc.createElement("div"); children.className="nodeChildren"; this.appendTreeNode(parentNode.childNodes,html); children.innerHTML=html.join(""); treeParent.insertBefore(children,treeNext); var closeElement=doc.createElement("div"); closeElement.className="objectBox-element"; closeElement.innerHTML='</'+parentNode.nodeName.toLowerCase()+">"; treeParent.insertBefore(closeElement,treeNext) },removeTreeChildren:function(treeNode){var children=treeNode.nextSibling; var closeTag=children.nextSibling; var isIE=false; var control=isIE?treeNode.previousSibling:treeNode.firstChild; control.className="nodeControl"; children.parentNode.removeChild(children); closeTag.parentNode.removeChild(closeTag) },isTreeNodeVisible:function(id){return $(id) },select:function(el){var id=el&&ElementCache(el); if(id){this.selectTreeNode(id) }},selectTreeNode:function(id){id=""+id; var node,stack=[]; while(id&&!this.isTreeNodeVisible(id)){stack.push(id); var node=ElementCache.get(id).parentNode; if(node){id=ElementCache(node) }else{break }}stack.push(id); while(stack.length>0){id=stack.pop(); node=$(id); if(stack.length>0&&ElementCache.get(id).childNodes.length>0){this.appendTreeChildren(node) }}selectElement(node); fbPanel1.scrollTop=Math.round(node.offsetTop-fbPanel1.clientHeight/2) }}); Firebug.registerModule(Firebug.HTML); function HTMLPanel(){}HTMLPanel.prototype=extend(Firebug.Panel,{name:"HTML",title:"HTML",options:{hasSidePanel:true,isPreRendered:true,innerHTMLSync:true},create:function(){Firebug.Panel.create.apply(this,arguments); this.panelNode.style.padding="4px 3px 1px 15px"; this.panelNode.style.minWidth="500px"; if(Env.Options.enablePersistent||Firebug.chrome.type!="popup"){this.createUI() }if(!this.sidePanelBar.selectedPanel){this.sidePanelBar.selectPanel("css") }},destroy:function(){selectedElement=null; fbPanel1=null; selectedSidePanelTS=null; selectedSidePanelTimer=null; Firebug.Panel.destroy.apply(this,arguments) },createUI:function(){var rootNode=Firebug.browser.document.documentElement; var html=[]; Firebug.HTML.appendTreeNode(rootNode,html); this.panelNode.innerHTML=html.join("") },initialize:function(){Firebug.Panel.initialize.apply(this,arguments); addEvent(this.panelNode,"click",Firebug.HTML.onTreeClick); fbPanel1=$("fbPanel1"); if(!selectedElement){Firebug.HTML.selectTreeNode(ElementCache(Firebug.browser.document.body)) }addEvent(fbPanel1,"mousemove",Firebug.HTML.onListMouseMove); addEvent($("fbContent"),"mouseout",Firebug.HTML.onListMouseMove); addEvent(Firebug.chrome.node,"mouseout",Firebug.HTML.onListMouseMove) },shutdown:function(){removeEvent(fbPanel1,"mousemove",Firebug.HTML.onListMouseMove); removeEvent($("fbContent"),"mouseout",Firebug.HTML.onListMouseMove); removeEvent(Firebug.chrome.node,"mouseout",Firebug.HTML.onListMouseMove); removeEvent(this.panelNode,"click",Firebug.HTML.onTreeClick); fbPanel1=null; Firebug.Panel.shutdown.apply(this,arguments) },reattach:function(){if(FirebugChrome.selectedHTMLElementId){Firebug.HTML.selectTreeNode(FirebugChrome.selectedHTMLElementId) }},updateSelection:function(object){var id=ElementCache(object); if(id){Firebug.HTML.selectTreeNode(id) }}}); Firebug.registerPanel(HTMLPanel); var formatStyles=function(styles){return isIE?styles.replace(/([^\s]+)\s*:/g,function(m,g){return g.toLowerCase()+":" }):styles }; var selectedElement=null; var fbPanel1=null; var selectedSidePanelTS,selectedSidePanelTimer; var selectElement=function selectElement(e){if(e!=selectedElement){if(selectedElement){selectedElement.className="objectBox-element" }e.className=e.className+" selectedElement"; if(FBL.isFirefox){e.style.MozBorderRadius="2px" }else{if(FBL.isSafari){e.style.WebkitBorderRadius="2px" }}selectedElement=e; FirebugChrome.selectedHTMLElementId=e.id; var target=ElementCache.get(e.id); var selectedSidePanel=Firebug.chrome.getPanel("HTML").sidePanelBar.selectedPanel; var stack=FirebugChrome.htmlSelectionStack; stack.unshift(target); if(stack.length>2){stack.pop() }var lazySelect=function(){selectedSidePanelTS=new Date().getTime(); selectedSidePanel.select(target,true) }; if(selectedSidePanelTimer){clearTimeout(selectedSidePanelTimer); selectedSidePanelTimer=null }if(new Date().getTime()-selectedSidePanelTS>100){setTimeout(lazySelect,0) }else{selectedSidePanelTimer=setTimeout(lazySelect,150) }}}; Firebug.HTML.onTreeClick=function(e){e=e||event; var targ; if(e.target){targ=e.target }else{if(e.srcElement){targ=e.srcElement }}if(targ.nodeType==3){targ=targ.parentNode }if(targ.className.indexOf("nodeControl")!=-1||targ.className=="nodeTag"){var isIE=false; if(targ.className=="nodeTag"){var control=isIE?(targ.parentNode.previousSibling||targ):(targ.parentNode.previousSibling||targ); selectElement(targ.parentNode.parentNode); if(control.className.indexOf("nodeControl")==-1){return }}else{control=targ }FBL.cancelEvent(e); var treeNode=isIE?control.nextSibling:control.parentNode; if(control.className.indexOf(" nodeMaximized")!=-1){FBL.Firebug.HTML.removeTreeChildren(treeNode) }else{FBL.Firebug.HTML.appendTreeChildren(treeNode) }}else{if(targ.className=="nodeValue"||targ.className=="nodeName"){}}}; function onListMouseOut(e){e=e||event||window; var targ; if(e.target){targ=e.target }else{if(e.srcElement){targ=e.srcElement }}if(targ.nodeType==3){targ=targ.parentNode }if(hasClass(targ,"fbPanel")){FBL.Firebug.Inspector.hideBoxModel(); hoverElement=null }}var hoverElement=null; var hoverElementTS=0; Firebug.HTML.onListMouseMove=function onListMouseMove(e){try{e=e||event||window; var targ; if(e.target){targ=e.target }else{if(e.srcElement){targ=e.srcElement }}if(targ.nodeType==3){targ=targ.parentNode }var found=false; while(targ&&!found){if(!/\snodeBox\s|\sobjectBox-selector\s/.test(" "+targ.className+" ")){targ=targ.parentNode }else{found=true }}if(!targ){FBL.Firebug.Inspector.hideBoxModel(); hoverElement=null; return }if(typeof targ.attributes[cacheID]=="undefined"){return }var uid=targ.attributes[cacheID]; if(!uid){return }var el=ElementCache.get(uid.value); var nodeName=el.nodeName.toLowerCase(); if(FBL.isIE&&" meta title script link ".indexOf(" "+nodeName+" ")!=-1){return }if(!/\snodeBox\s|\sobjectBox-selector\s/.test(" "+targ.className+" ")){return }if(el.id=="FirebugUI"||" html head body br script link iframe ".indexOf(" "+nodeName+" ")!=-1){FBL.Firebug.Inspector.hideBoxModel(); hoverElement=null; return }if((new Date().getTime()-hoverElementTS>40)&&hoverElement!=el){hoverElementTS=new Date().getTime(); hoverElement=el; FBL.Firebug.Inspector.drawBoxModel(el) }}catch(E){}}; Firebug.Reps={appendText:function(object,html){html.push(escapeHTML(objectToString(object))) },appendNull:function(object,html){html.push('',escapeHTML(objectToString(object)),"") },appendString:function(object,html){html.push('"',escapeHTML(objectToString(object)),""") },appendInteger:function(object,html){html.push('',escapeHTML(objectToString(object)),"") },appendFloat:function(object,html){html.push('',escapeHTML(objectToString(object)),"") },appendFunction:function(object,html){var reName=/function ?(.*?)\(/; var m=reName.exec(objectToString(object)); var name=m&&m[1]?m[1]:"function"; html.push('',escapeHTML(name),"()") },appendObject:function(object,html){try{if(object==undefined){this.appendNull("undefined",html) }else{if(object==null){this.appendNull("null",html) }else{if(typeof object=="string"){this.appendString(object,html) }else{if(typeof object=="number"){this.appendInteger(object,html) }else{if(typeof object=="boolean"){this.appendInteger(object,html) }else{if(typeof object=="function"){this.appendFunction(object,html) }else{if(object.nodeType==1){this.appendSelector(object,html) }else{if(typeof object=="object"){if(typeof object.length!="undefined"){this.appendArray(object,html) }else{this.appendObjectFormatted(object,html) }}else{this.appendText(object,html) }}}}}}}}}catch(exc){}},appendObjectFormatted:function(object,html){var text=objectToString(object); var reObject=/\[object (.*?)\]/; var m=reObject.exec(text); html.push('',m?m[1]:text,"") },appendSelector:function(object,html){var uid=ElementCache(object); var uidString=uid?[cacheID,'="',uid,'"'].join(""):""; html.push('"); html.push('',escapeHTML(object.nodeName.toLowerCase()),""); if(object.id){html.push('#',escapeHTML(object.id),"") }if(object.className){html.push('.',escapeHTML(object.className),"") }html.push("") },appendNode:function(node,html){if(node.nodeType==1){var uid=ElementCache(node); var uidString=uid?[cacheID,'="',uid,'"'].join(""):""; html.push('
',"','<',node.nodeName.toLowerCase(),""); for(var i=0; i',name,'="',escapeHTML(value),""") }if(node.firstChild){html.push('>
'); for(var child=node.firstChild; child; child=child.nextSibling){this.appendNode(child,html) }html.push('
</',node.nodeName.toLowerCase(),">
") }else{html.push("/>") }}else{if(node.nodeType==3){var value=trim(node.nodeValue); if(value){html.push('
',escapeHTML(value),"
") }}}},appendArray:function(object,html){html.push('[ '); for(var i=0,l=object.length,obj; i]") }} }}); FBL.ns(function(){with(FBL){var maxWidth=100,maxHeight=80; var infoTipMargin=10; var infoTipWindowPadding=25; Firebug.InfoTip=extend(Firebug.Module,{dispatchName:"infoTip",tags:domplate({infoTipTag:DIV({"class":"infoTip"}),colorTag:DIV({style:"background: $rgbValue; width: 100px; height: 40px"}," "),imgTag:DIV({"class":"infoTipImageBox infoTipLoading"},IMG({"class":"infoTipImage",src:"$urlValue",repeat:"$repeat",onload:"$onLoadImage"}),IMG({"class":"infoTipBgImage",collapsed:true,src:"blank.gif"}),DIV({"class":"infoTipCaption"})),onLoadImage:function(event){var img=event.currentTarget||event.srcElement; var innerBox=img.parentNode; var caption=getElementByClass(innerBox,"infoTipCaption"); var bgImg=getElementByClass(innerBox,"infoTipBgImage"); if(!bgImg){return }if(isIE){removeClass(innerBox,"infoTipLoading") }var updateInfoTip=function(){var w=img.naturalWidth||img.width||10,h=img.naturalHeight||img.height||10; var repeat=img.getAttribute("repeat"); if(repeat=="repeat-x"||(w==1&&h>1)){collapse(img,true); collapse(bgImg,false); bgImg.style.background="url("+img.src+") repeat-x"; bgImg.style.width=maxWidth+"px"; if(h>maxHeight){bgImg.style.height=maxHeight+"px" }else{bgImg.style.height=h+"px" }}else{if(repeat=="repeat-y"||(h==1&&w>1)){collapse(img,true); collapse(bgImg,false); bgImg.style.background="url("+img.src+") repeat-y"; bgImg.style.height=maxHeight+"px"; if(w>maxWidth){bgImg.style.width=maxWidth+"px" }else{bgImg.style.width=w+"px" }}else{if(repeat=="repeat"||(w==1&&h==1)){collapse(img,true); collapse(bgImg,false); bgImg.style.background="url("+img.src+") repeat"; bgImg.style.width=maxWidth+"px"; bgImg.style.height=maxHeight+"px" }else{if(w>maxWidth||h>maxHeight){if(w>h){img.style.width=maxWidth+"px"; img.style.height=Math.round((h/w)*maxWidth)+"px" }else{img.style.width=Math.round((w/h)*maxHeight)+"px"; img.style.height=maxHeight+"px" }}}}}caption.innerHTML=$STRF(w+" x "+h) }; if(isIE){setTimeout(updateInfoTip,0) }else{updateInfoTip(); removeClass(innerBox,"infoTipLoading") }}}),initializeBrowser:function(browser){browser.onInfoTipMouseOut=bind(this.onMouseOut,this,browser); browser.onInfoTipMouseMove=bind(this.onMouseMove,this,browser); var doc=browser.document; if(!doc){return }addEvent(doc,"mouseover",browser.onInfoTipMouseMove); addEvent(doc,"mouseout",browser.onInfoTipMouseOut); addEvent(doc,"mousemove",browser.onInfoTipMouseMove); return browser.infoTip=this.tags.infoTipTag.append({},getBody(doc)) },uninitializeBrowser:function(browser){if(browser.infoTip){var doc=browser.document; removeEvent(doc,"mouseover",browser.onInfoTipMouseMove); removeEvent(doc,"mouseout",browser.onInfoTipMouseOut); removeEvent(doc,"mousemove",browser.onInfoTipMouseMove); browser.infoTip.parentNode.removeChild(browser.infoTip); delete browser.infoTip; delete browser.onInfoTipMouseMove }},showInfoTip:function(infoTip,panel,target,x,y,rangeParent,rangeOffset){if(!Firebug.showInfoTips){return }var scrollParent=getOverflowParent(target); var scrollX=x+(scrollParent?scrollParent.scrollLeft:0); if(panel.showInfoTip(infoTip,target,scrollX,y,rangeParent,rangeOffset)){var htmlElt=infoTip.ownerDocument.documentElement; var panelWidth=htmlElt.clientWidth; var panelHeight=htmlElt.clientHeight; if(x+infoTip.offsetWidth+infoTipMargin>panelWidth){infoTip.style.left=Math.max(0,panelWidth-(infoTip.offsetWidth+infoTipMargin))+"px"; infoTip.style.right="auto" }else{infoTip.style.left=(x+infoTipMargin)+"px"; infoTip.style.right="auto" }if(y+infoTip.offsetHeight+infoTipMargin>panelHeight){infoTip.style.top=Math.max(0,panelHeight-(infoTip.offsetHeight+infoTipMargin))+"px"; infoTip.style.bottom="auto" }else{infoTip.style.top=(y+infoTipMargin)+"px"; infoTip.style.bottom="auto" }if(FBTrace.DBG_INFOTIP){FBTrace.sysout("infotip.showInfoTip; top: "+infoTip.style.top+", left: "+infoTip.style.left+", bottom: "+infoTip.style.bottom+", right:"+infoTip.style.right+", offsetHeight: "+infoTip.offsetHeight+", offsetWidth: "+infoTip.offsetWidth+", x: "+x+", panelWidth: "+panelWidth+", y: "+y+", panelHeight: "+panelHeight) }infoTip.setAttribute("active","true") }else{this.hideInfoTip(infoTip) }},hideInfoTip:function(infoTip){if(infoTip){infoTip.removeAttribute("active") }},onMouseOut:function(event,browser){if(!event.relatedTarget){this.hideInfoTip(browser.infoTip) }},onMouseMove:function(event,browser){if(getAncestorByClass(event.target,"infoTip")){return }if(browser.currentPanel){var x=event.clientX,y=event.clientY,target=event.target||event.srcElement; this.showInfoTip(browser.infoTip,browser.currentPanel,target,x,y,event.rangeParent,event.rangeOffset) }else{this.hideInfoTip(browser.infoTip) }},populateColorInfoTip:function(infoTip,color){this.tags.colorTag.replace({rgbValue:color},infoTip); return true },populateImageInfoTip:function(infoTip,url,repeat){if(!repeat){repeat="no-repeat" }this.tags.imgTag.replace({urlValue:url,repeat:repeat},infoTip); return true },disable:function(){},showPanel:function(browser,panel){if(panel){var infoTip=panel.panelBrowser.infoTip; if(!infoTip){infoTip=this.initializeBrowser(panel.panelBrowser) }this.hideInfoTip(infoTip) }},showSidePanel:function(browser,panel){this.showPanel(browser,panel) }}); Firebug.registerModule(Firebug.InfoTip) }}); (function(){this.getElementXPath=function(element){if(element&&element.id){return'//*[@id="'+element.id+'"]' }else{return this.getElementTreeXPath(element) }}; this.getElementTreeXPath=function(element){var paths=[]; for(; element&&element.nodeType==1; element=element.parentNode){var index=0; for(var sibling=element.previousSibling; sibling; sibling=sibling.previousSibling){if(sibling.nodeName==element.nodeName){++index }}var tagName=element.nodeName.toLowerCase(); var pathIndex=(index?"["+(index+1)+"]":""); paths.splice(0,0,tagName+pathIndex) }return paths.length?"/"+paths.join("/"):null }; this.getElementsByXPath=function(doc,xpath){var nodes=[]; try{var result=doc.evaluate(xpath,doc,null,XPathResult.ANY_TYPE,null); for(var item=result.iterateNext(); item; item=result.iterateNext()){nodes.push(item) }}catch(exc){}return nodes }; this.getRuleMatchingElements=function(rule,doc){var css=rule.selectorText; var xpath=this.cssToXPath(css); return this.getElementsByXPath(doc,xpath) } }).call(FBL); FBL.ns(function(){with(FBL){var toCamelCase=function toCamelCase(s){return s.replace(reSelectorCase,toCamelCaseReplaceFn) }; var toSelectorCase=function toSelectorCase(s){return s.replace(reCamelCase,"-$1").toLowerCase() }; var reCamelCase=/([A-Z])/g; var reSelectorCase=/\-(.)/g; var toCamelCaseReplaceFn=function toCamelCaseReplaceFn(m,g){return g.toUpperCase() }; var ElementCache=Firebug.Lite.Cache.Element; var StyleSheetCache=Firebug.Lite.Cache.StyleSheet; var globalCSSRuleIndex; var externalStyleSheetURLs=[]; var externalStyleSheetWarning=domplate(Firebug.Rep,{tag:DIV({"class":"warning focusRow",style:"font-weight:normal;",role:"listitem"},SPAN("$object|STR"),A({href:"$href",target:"_blank"},"$link|STR"))}); var processAllStyleSheetsTimeout=null; var loadExternalStylesheet=function(doc,styleSheetIterator,styleSheet){var url=styleSheet.href; styleSheet.firebugIgnore=true; var source=Firebug.Lite.Proxy.load(url); source=source.replace(/url\(([^\)]+)\)/g,function(a,name){var hasDomain=/\w+:\/\/./.test(name); if(!hasDomain){name=name.replace(/^(["'])(.+)\1$/,"$2"); var first=name.charAt(0); if(first=="/"){var m=/^([^:]+:\/{1,3}[^\/]+)/.exec(url); return m?"url("+m[1]+name+")":"url("+name+")" }else{var path=url.replace(/[^\/]+\.[\w\d]+(\?.+|#.+)?$/g,""); path=path+name; var reBack=/[^\/]+\/\.\.\//; while(reBack.test(path)){path=path.replace(reBack,"") }return"url("+path+")" }}return a }); var oldStyle=styleSheet.ownerNode; if(!oldStyle){return }if(!oldStyle.parentNode){return }var style=createGlobalElement("style"); style.setAttribute("charset","utf-8"); style.setAttribute("type","text/css"); style.innerHTML=source; oldStyle.parentNode.insertBefore(style,oldStyle.nextSibling); oldStyle.parentNode.removeChild(oldStyle); doc.styleSheets[doc.styleSheets.length-1].externalURL=url; console.log(url,"call "+externalStyleSheetURLs.length,source); externalStyleSheetURLs.pop(); if(processAllStyleSheetsTimeout){clearTimeout(processAllStyleSheetsTimeout) }processAllStyleSheetsTimeout=setTimeout(function(){console.log("processing"); FBL.processAllStyleSheets(doc,styleSheetIterator); processAllStyleSheetsTimeout=null },200) }; FBL.processAllStyleSheets=function(doc,styleSheetIterator){styleSheetIterator=styleSheetIterator||processStyleSheet; globalCSSRuleIndex=-1; var styleSheets=doc.styleSheets; var importedStyleSheets=[]; if(FBTrace.DBG_CSS){var start=new Date().getTime() }for(var i=0,length=styleSheets.length; imaxSpecificity){maxSpecificity=spec; mostSpecificSelector=sel }}}rule.specificity=maxSpecificity }}rules.sort(sortElementRules); return rules }; var sortElementRules=function(a,b){var ruleA=CSSRuleMap[a]; var ruleB=CSSRuleMap[b]; var specificityA=ruleA.specificity; var specificityB=ruleB.specificity; if(specificityA>specificityB){return 1 }else{if(specificityAruleB.order?1:-1 }}}; var solveRulesTied=function(a,b){var ruleA=CSSRuleMap[a]; var ruleB=CSSRuleMap[b]; if(ruleA.specificity==ruleB.specificity){return ruleA.order>ruleB.order?1:-1 }return null }; var reSelectorTag=/(^|\s)(?:\w+)/g; var reSelectorClass=/\.[\w\d_-]+/g; var reSelectorId=/#[\w\d_-]+/g; var getCSSRuleSpecificity=function(selector){var match=selector.match(reSelectorTag); var tagCount=match?match.length:0; match=selector.match(reSelectorClass); var classCount=match?match.length:0; match=selector.match(reSelectorId); var idCount=match?match.length:0; return tagCount+10*classCount+100*idCount }; Firebug.SourceBoxPanel=Firebug.Panel; var domUtils=null; var textContent=isIE?"innerText":"textContent"; var CSSDomplateBase={isEditable:function(rule){return !rule.isSystemSheet },isSelectorEditable:function(rule){return rule.isSelectorEditable&&this.isEditable(rule) }}; var CSSPropTag=domplate(CSSDomplateBase,{tag:DIV({"class":"cssProp focusRow",$disabledStyle:"$prop.disabled",$editGroup:"$rule|isEditable",$cssOverridden:"$prop.overridden",role:"option"},A({"class":"cssPropDisable"},"  "),SPAN({"class":"cssPropName",$editable:"$rule|isEditable"},"$prop.name"),SPAN({"class":"cssColon"},":"),SPAN({"class":"cssPropValue",$editable:"$rule|isEditable"},"$prop.value$prop.important"),SPAN({"class":"cssSemi"},";"))}); var CSSRuleTag=TAG("$rule.tag",{rule:"$rule"}); var CSSImportRuleTag=domplate({tag:DIV({"class":"cssRule insertInto focusRow importRule",_repObject:"$rule.rule"},"@import "",A({"class":"objectLink",_repObject:"$rule.rule.styleSheet"},"$rule.rule.href"),"";")}); var CSSStyleRuleTag=domplate(CSSDomplateBase,{tag:DIV({"class":"cssRule insertInto",$cssEditableRule:"$rule|isEditable",$editGroup:"$rule|isSelectorEditable",_repObject:"$rule.rule",ruleId:"$rule.id",role:"presentation"},DIV({"class":"cssHead focusRow",role:"listitem"},SPAN({"class":"cssSelector",$editable:"$rule|isSelectorEditable"},"$rule.selector")," {"),DIV({role:"group"},DIV({"class":"cssPropertyListBox",role:"listbox"},FOR("prop","$rule.props",TAG(CSSPropTag.tag,{rule:"$rule",prop:"$prop"})))),DIV({"class":"editable insertBefore",role:"presentation"},"}"))}); var reSplitCSS=/(url\("?[^"\)]+?"?\))|(rgb\(.*?\))|(#[\dA-Fa-f]+)|(-?\d+(\.\d+)?(%|[a-z]{1,2})?)|([^,\s]+)|"(.*?)"/; var reURL=/url\("?([^"\)]+)?"?\)/; var reRepeat=/no-repeat|repeat-x|repeat-y|repeat/; var sothinkInstalled=false; var styleGroups={text:["font-family","font-size","font-weight","font-style","color","text-transform","text-decoration","letter-spacing","word-spacing","line-height","text-align","vertical-align","direction","column-count","column-gap","column-width"],background:["background-color","background-image","background-repeat","background-position","background-attachment","opacity"],box:["width","height","top","right","bottom","left","margin-top","margin-right","margin-bottom","margin-left","padding-top","padding-right","padding-bottom","padding-left","border-top-width","border-right-width","border-bottom-width","border-left-width","border-top-color","border-right-color","border-bottom-color","border-left-color","border-top-style","border-right-style","border-bottom-style","border-left-style","-moz-border-top-radius","-moz-border-right-radius","-moz-border-bottom-radius","-moz-border-left-radius","outline-top-width","outline-right-width","outline-bottom-width","outline-left-width","outline-top-color","outline-right-color","outline-bottom-color","outline-left-color","outline-top-style","outline-right-style","outline-bottom-style","outline-left-style"],layout:["position","display","visibility","z-index","overflow-x","overflow-y","overflow-clip","white-space","clip","float","clear","-moz-box-sizing"],other:["cursor","list-style-image","list-style-position","list-style-type","marker-offset","user-focus","user-select","user-modify","user-input"]}; var styleGroupTitles={text:"Text",background:"Background",box:"Box Model",layout:"Layout",other:"Other"}; Firebug.CSSModule=extend(Firebug.Module,{freeEdit:function(styleSheet,value){if(!styleSheet.editStyleSheet){var ownerNode=getStyleSheetOwnerNode(styleSheet); styleSheet.disabled=true; var url=CCSV("@mozilla.org/network/standard-url;1",Components.interfaces.nsIURL); url.spec=styleSheet.href; var editStyleSheet=ownerNode.ownerDocument.createElementNS("http://www.w3.org/1999/xhtml","style"); unwrapObject(editStyleSheet).firebugIgnore=true; editStyleSheet.setAttribute("type","text/css"); editStyleSheet.setAttributeNS("http://www.w3.org/XML/1998/namespace","base",url.directory); if(ownerNode.hasAttribute("media")){editStyleSheet.setAttribute("media",ownerNode.getAttribute("media")) }ownerNode.parentNode.insertBefore(editStyleSheet,ownerNode.nextSibling); styleSheet.editStyleSheet=editStyleSheet }styleSheet.editStyleSheet.innerHTML=value; if(FBTrace.DBG_CSS){FBTrace.sysout("css.saveEdit styleSheet.href:"+styleSheet.href+" got innerHTML:"+value+"\n") }dispatch(this.fbListeners,"onCSSFreeEdit",[styleSheet,value]) },insertRule:function(styleSheet,cssText,ruleIndex){if(FBTrace.DBG_CSS){FBTrace.sysout("Insert: "+ruleIndex+" "+cssText) }var insertIndex=styleSheet.insertRule(cssText,ruleIndex); dispatch(this.fbListeners,"onCSSInsertRule",[styleSheet,cssText,ruleIndex]); return insertIndex },deleteRule:function(styleSheet,ruleIndex){if(FBTrace.DBG_CSS){FBTrace.sysout("deleteRule: "+ruleIndex+" "+styleSheet.cssRules.length,styleSheet.cssRules) }dispatch(this.fbListeners,"onCSSDeleteRule",[styleSheet,ruleIndex]); styleSheet.deleteRule(ruleIndex) },setProperty:function(rule,propName,propValue,propPriority){var style=rule.style||rule; var baseText=style.cssText; if(style.getPropertyValue){var prevValue=style.getPropertyValue(propName); var prevPriority=style.getPropertyPriority(propName); style.removeProperty(propName); style.setProperty(propName,propValue,propPriority) }else{style[toCamelCase(propName)]=propValue }if(propName){dispatch(this.fbListeners,"onCSSSetProperty",[style,propName,propValue,propPriority,prevValue,prevPriority,rule,baseText]) }},removeProperty:function(rule,propName,parent){var style=rule.style||rule; var baseText=style.cssText; if(style.getPropertyValue){var prevValue=style.getPropertyValue(propName); var prevPriority=style.getPropertyPriority(propName); style.removeProperty(propName) }else{style[toCamelCase(propName)]="" }if(propName){dispatch(this.fbListeners,"onCSSRemoveProperty",[style,propName,prevValue,prevPriority,rule,baseText]) }}}); Firebug.CSSStyleSheetPanel=function(){}; Firebug.CSSStyleSheetPanel.prototype=extend(Firebug.SourceBoxPanel,{template:domplate({tag:DIV({"class":"cssSheet insertInto a11yCSSView"},FOR("rule","$rules",CSSRuleTag),DIV({"class":"cssSheet editable insertBefore"},""))}),refresh:function(){if(this.location){this.updateLocation(this.location) }else{if(this.selection){this.updateSelection(this.selection) }}},toggleEditing:function(){if(!this.stylesheetEditor){this.stylesheetEditor=new StyleSheetEditor(this.document) }if(this.editing){Firebug.Editor.stopEditing() }else{if(!this.location){return }var styleSheet=this.location.editStyleSheet?this.location.editStyleSheet.sheet:this.location; var css=getStyleSheetCSS(styleSheet,this.context); this.stylesheetEditor.styleSheet=this.location; Firebug.Editor.startEditing(this.panelNode,css,this.stylesheetEditor) }},getStylesheetURL:function(rule){if(this.location.href){return this.location.href }else{return this.context.window.location.href }},getRuleByLine:function(styleSheet,line){if(!domUtils){return null }var cssRules=styleSheet.cssRules; for(var i=0; i=line){return rule }}}},highlightRule:function(rule){var ruleElement=Firebug.getElementByRepObject(this.panelNode.firstChild,rule); if(ruleElement){scrollIntoCenterView(ruleElement,this.panelNode); setClassTimed(ruleElement,"jumpHighlight",this.context) }},getStyleSheetRules:function(context,styleSheet){var isSystemSheet=isSystemStyleSheet(styleSheet); function appendRules(cssRules){for(var i=0; i20){return }var target=event.target||event.srcElement; if(hasClass(target,"textEditor")){return }var row=getAncestorByClass(target,"cssProp"); if(row&&hasClass(row,"editGroup")){this.disablePropertyRow(row); cancelEvent(event) }},onDoubleClick:function(event){var offset=event.clientX-this.panelNode.parentNode.offsetLeft; if(!isLeftClick(event)||offset<=20){return }var target=event.target||event.srcElement; if(hasClass(target,"textEditorInner")){return }var row=getAncestorByClass(target,"cssRule"); if(row&&!getAncestorByClass(target,"cssPropName")&&!getAncestorByClass(target,"cssPropValue")){this.insertPropertyRow(row); cancelEvent(event) }},name:"stylesheet",title:"CSS",parentPanel:null,searchable:true,dependents:["css","stylesheet","dom","domSide","layout"],options:{hasToolButtons:true},create:function(){Firebug.Panel.create.apply(this,arguments); this.onMouseDown=bind(this.onMouseDown,this); this.onDoubleClick=bind(this.onDoubleClick,this); if(this.name=="stylesheet"){this.onChangeSelect=bind(this.onChangeSelect,this); var doc=Firebug.browser.document; var selectNode=this.selectNode=createElement("select"); processAllStyleSheets(doc,function(doc,styleSheet){var key=StyleSheetCache.key(styleSheet); var fileName=getFileName(styleSheet.href)||getFileName(doc.location.href); var option=createElement("option",{value:key}); option.appendChild(Firebug.chrome.document.createTextNode(fileName)); selectNode.appendChild(option) }); this.toolButtonsNode.appendChild(selectNode) }},onChangeSelect:function(event){event=event||window.event; var target=event.srcElement||event.currentTarget; var key=target.value; var styleSheet=StyleSheetCache.get(key); this.updateLocation(styleSheet) },initialize:function(){Firebug.Panel.initialize.apply(this,arguments); this.context=Firebug.chrome; this.document=Firebug.chrome.document; this.initializeNode(); if(this.name=="stylesheet"){var styleSheets=Firebug.browser.document.styleSheets; if(styleSheets.length>0){addEvent(this.selectNode,"change",this.onChangeSelect); this.updateLocation(styleSheets[0]) }}},shutdown:function(){Firebug.Editor.stopEditing(); if(this.name=="stylesheet"){removeEvent(this.selectNode,"change",this.onChangeSelect) }this.destroyNode(); Firebug.Panel.shutdown.apply(this,arguments) },destroy:function(state){Firebug.Panel.destroy.apply(this,arguments) },initializeNode:function(oldPanelNode){addEvent(this.panelNode,"mousedown",this.onMouseDown); addEvent(this.panelNode,"dblclick",this.onDoubleClick) },destroyNode:function(){removeEvent(this.panelNode,"mousedown",this.onMouseDown); removeEvent(this.panelNode,"dblclick",this.onDoubleClick) },ishow:function(state){Firebug.Inspector.stopInspecting(true); this.showToolbarButtons("fbCSSButtons",true); if(this.context.loaded&&!this.location){restoreObjects(this,state); if(!this.location){this.location=this.getDefaultLocation() }if(state&&state.scrollTop){this.panelNode.scrollTop=state.scrollTop }}},ihide:function(){this.showToolbarButtons("fbCSSButtons",false); this.lastScrollTop=this.panelNode.scrollTop },supportsObject:function(object){if(object instanceof CSSStyleSheet){return 1 }else{if(object instanceof CSSStyleRule){return 2 }else{if(object instanceof CSSStyleDeclaration){return 2 }else{if(object instanceof SourceLink&&object.type=="css"&&reCSS.test(object.href)){return 2 }else{return 0 }}}}},updateLocation:function(styleSheet){if(!styleSheet){return }if(styleSheet.editStyleSheet){styleSheet=styleSheet.editStyleSheet.sheet }if(styleSheet.restricted){FirebugReps.Warning.tag.replace({object:"AccessRestricted"},this.panelNode); externalStyleSheetWarning.tag.append({object:"The stylesheet could not be loaded due to access restrictions. ",link:"more...",href:"http://getfirebug.com/wiki/index.php/Firebug_Lite_FAQ#I_keep_seeing_.22Access_to_restricted_URI_denied.22"},this.panelNode); return }var rules=this.getStyleSheetRules(this.context,styleSheet); var result; if(rules.length){result=this.template.tag.replace({rules:rules},this.panelNode) }else{result=FirebugReps.Warning.tag.replace({object:"EmptyStyleSheet"},this.panelNode) }},updateSelection:function(object){this.selection=null; if(object instanceof CSSStyleDeclaration){object=object.parentRule }if(object instanceof CSSStyleRule){this.navigate(object.parentStyleSheet); this.highlightRule(object) }else{if(object instanceof CSSStyleSheet){this.navigate(object) }else{if(object instanceof SourceLink){try{var sourceLink=object; var sourceFile=getSourceFileByHref(sourceLink.href,this.context); if(sourceFile){clearNode(this.panelNode); this.showSourceFile(sourceFile); var lineNo=object.line; if(lineNo){this.scrollToLine(lineNo,this.jumpHighlightFactory(lineNo,this.context)) }}else{var stylesheet=getStyleSheetByHref(sourceLink.href,this.context); if(stylesheet){this.navigate(stylesheet) }else{if(FBTrace.DBG_CSS){FBTrace.sysout("css.updateSelection no sourceFile for "+sourceLink.href,sourceLink) }}}}catch(exc){if(FBTrace.DBG_CSS){FBTrace.sysout("css.upDateSelection FAILS "+exc,exc) }}}}}},updateOption:function(name,value){if(name=="expandShorthandProps"){this.refresh() }},getLocationList:function(){var styleSheets=getAllStyleSheets(this.context); return styleSheets },getOptionsMenuItems:function(){return[{label:"Expand Shorthand Properties",type:"checkbox",checked:Firebug.expandShorthandProps,command:bindFixed(Firebug.togglePref,Firebug,"expandShorthandProps")},"-",{label:"Refresh",command:bind(this.refresh,this)}] },getContextMenuItems:function(style,target){var items=[]; if(this.infoTipType=="color"){items.push({label:"CopyColor",command:bindFixed(copyToClipboard,FBL,this.infoTipObject)}) }else{if(this.infoTipType=="image"){items.push({label:"CopyImageLocation",command:bindFixed(copyToClipboard,FBL,this.infoTipObject)},{label:"OpenImageInNewTab",command:bindFixed(openNewTab,FBL,this.infoTipObject)}) }}if(isElement(this.selection)){items.push({label:"EditStyle",command:bindFixed(this.editElementStyle,this)}) }else{if(!isSystemStyleSheet(this.selection)){items.push({label:"NewRule",command:bindFixed(this.insertRule,this,target)}) }}var cssRule=getAncestorByClass(target,"cssRule"); if(cssRule&&hasClass(cssRule,"cssEditableRule")){items.push("-",{label:"NewProp",command:bindFixed(this.insertPropertyRow,this,target)}); var propRow=getAncestorByClass(target,"cssProp"); if(propRow){var propName=getChildByClass(propRow,"cssPropName")[textContent]; var isDisabled=hasClass(propRow,"disabledStyle"); items.push({label:$STRF("EditProp",[propName]),nol10n:true,command:bindFixed(this.editPropertyRow,this,propRow)},{label:$STRF("DeleteProp",[propName]),nol10n:true,command:bindFixed(this.deletePropertyRow,this,propRow)},{label:$STRF("DisableProp",[propName]),nol10n:true,type:"checkbox",checked:isDisabled,command:bindFixed(this.disablePropertyRow,this,propRow)}) }}items.push("-",{label:"Refresh",command:bind(this.refresh,this)}); return items },browseObject:function(object){if(this.infoTipType=="image"){openNewTab(this.infoTipObject); return true }},showInfoTip:function(infoTip,target,x,y){var propValue=getAncestorByClass(target,"cssPropValue"); if(propValue){var offset=getClientOffset(propValue); var offsetX=x-offset.x; var text=propValue[textContent]; var charWidth=propValue.offsetWidth/text.length; var charOffset=Math.floor(offsetX/charWidth); var cssValue=parseCSSValue(text,charOffset); if(cssValue){if(cssValue.value==this.infoTipValue){return true }this.infoTipValue=cssValue.value; if(cssValue.type=="rgb"||(!cssValue.type&&isColorKeyword(cssValue.value))){this.infoTipType="color"; this.infoTipObject=cssValue.value; return Firebug.InfoTip.populateColorInfoTip(infoTip,cssValue.value) }else{if(cssValue.type=="url"){var propNameNode=getElementByClass(target.parentNode,"cssPropName"); if(propNameNode&&isImageRule(propNameNode[textContent])){var rule=Firebug.getRepObject(target); var baseURL=this.getStylesheetURL(rule); var relURL=parseURLValue(cssValue.value); var absURL=isDataURL(relURL)?relURL:absoluteURL(relURL,baseURL); var repeat=parseRepeatValue(text); this.infoTipType="image"; this.infoTipObject=absURL; return Firebug.InfoTip.populateImageInfoTip(infoTip,absURL,repeat) }}}}}delete this.infoTipType; delete this.infoTipValue; delete this.infoTipObject },getEditor:function(target,value){if(target==this.panelNode||hasClass(target,"cssSelector")||hasClass(target,"cssRule")||hasClass(target,"cssSheet")){if(!this.ruleEditor){this.ruleEditor=new CSSRuleEditor(this.document) }return this.ruleEditor }else{if(!this.editor){this.editor=new CSSEditor(this.document) }return this.editor }},getDefaultLocation:function(){try{var styleSheets=this.context.window.document.styleSheets; if(styleSheets.length){var sheet=styleSheets[0]; return(Firebug.filterSystemURLs&&isSystemURL(getURLForStyleSheet(sheet)))?null:sheet }}catch(exc){if(FBTrace.DBG_LOCATIONS){FBTrace.sysout("css.getDefaultLocation FAILS "+exc,exc) }}},getObjectDescription:function(styleSheet){var url=getURLForStyleSheet(styleSheet); var instance=getInstanceForStyleSheet(styleSheet); var baseDescription=splitURLBase(url); if(instance){baseDescription.name=baseDescription.name+" #"+(instance+1) }return baseDescription },search:function(text,reverse){var curDoc=this.searchCurrentDoc(!Firebug.searchGlobal,text,reverse); if(!curDoc&&Firebug.searchGlobal){return this.searchOtherDocs(text,reverse) }return curDoc },searchOtherDocs:function(text,reverse){var scanRE=Firebug.Search.getTestingRegex(text); function scanDoc(styleSheet){for(var i=0; i0){externalStyleSheetWarning.tag.append({object:"The results here may be inaccurate because some stylesheets could not be loaded due to access restrictions. ",link:"more...",href:"http://getfirebug.com/wiki/index.php/Firebug_Lite_FAQ#I_keep_seeing_.22This_element_has_no_style_rules.22"},this.panelNode) }},getStylesheetURL:function(rule){if(rule&&rule.parentStyleSheet&&rule.parentStyleSheet.href){return rule.parentStyleSheet.href }else{return this.selection.ownerDocument.location.href }},getInheritedRules:function(element,sections,usedProps){var parent=element.parentNode; if(parent&&parent.nodeType==1){this.getInheritedRules(parent,sections,usedProps); var rules=[]; this.getElementRules(parent,rules,usedProps,true); if(rules.length){sections.splice(0,0,{element:parent,rules:rules}) }}},getElementRules:function(element,rules,usedProps,inheritMode){var inspectedRules,displayedRules={}; inspectedRules=getElementCSSRules(element); if(inspectedRules){for(var i=0,length=inspectedRules.length; i"+value+" = "+propValue+"\n") }if(previousValue){Firebug.CSSModule.removeProperty(rule,previousValue) }Firebug.CSSModule.setProperty(rule,value,parsedValue.value,parsedValue.priority) }}else{if(!value){Firebug.CSSModule.removeProperty(rule,previousValue) }}}else{if(getAncestorByClass(target,"cssPropValue")){var propName=getChildByClass(row,"cssPropName")[textContent]; var propValue=getChildByClass(row,"cssPropValue")[textContent]; if(FBTrace.DBG_CSS){FBTrace.sysout("CSSEditor.saveEdit propName=propValue: "+propName+" = "+propValue+"\n") }if(value&&value!="null"){var parsedValue=parsePriority(value); Firebug.CSSModule.setProperty(rule,propName,parsedValue.value,parsedValue.priority) }else{if(previousValue&&previousValue!="null"){Firebug.CSSModule.removeProperty(rule,propName) }}}}this.panel.markChange(this.panel.name=="stylesheet") },advanceToNext:function(target,charCode){if(charCode==58&&hasClass(target,"cssPropName")){return true }},getAutoCompleteRange:function(value,offset){if(hasClass(this.target,"cssPropName")){return{start:0,end:value.length-1} }else{return parseCSSValue(value,offset) }},getAutoCompleteList:function(preExpr,expr,postExpr){if(hasClass(this.target,"cssPropName")){return getCSSPropertyNames() }else{var row=getAncestorByClass(this.target,"cssProp"); var propName=getChildByClass(row,"cssPropName")[textContent]; return getCSSKeywordsByProperty(propName) }}}); function CSSRuleEditor(doc){this.initializeInline(doc); this.completeAsYouType=false }CSSRuleEditor.uniquifier=0; CSSRuleEditor.prototype=domplate(Firebug.InlineEditor.prototype,{insertNewRow:function(target,insertWhere){var emptyRule={selector:"",id:"",props:[],isSelectorEditable:true}; if(insertWhere=="before"){return CSSStyleRuleTag.tag.insertBefore({rule:emptyRule},target) }else{return CSSStyleRuleTag.tag.insertAfter({rule:emptyRule},target) }},saveEdit:function(target,value,previousValue){if(FBTrace.DBG_CSS){FBTrace.sysout("CSSRuleEditor.saveEdit: '"+value+"' '"+previousValue+"'",target) }target.innerHTML=escapeForCss(value); if(value===previousValue){return }var row=getAncestorByClass(target,"cssRule"); var styleSheet=this.panel.location; styleSheet=styleSheet.editStyleSheet?styleSheet.editStyleSheet.sheet:styleSheet; var cssRules=styleSheet.cssRules; var rule=Firebug.getRepObject(target),oldRule=rule; var ruleIndex=cssRules.length; if(rule||Firebug.getRepObject(row.nextSibling)){var searchRule=rule||Firebug.getRepObject(row.nextSibling); for(ruleIndex=0; ruleIndexb.name?1:-1 }) }function getTopmostRuleLine(panelNode){for(var child=panelNode.firstChild; child; child=child.nextSibling){if(child.offsetTop+child.offsetHeight>panelNode.scrollTop){var rule=child.repObject; if(rule){return{line:domUtils.getRuleLine(rule),offset:panelNode.scrollTop-child.offsetTop} }}}return 0 }function getStyleSheetCSS(sheet,context){if(sheet.ownerNode instanceof HTMLStyleElement){return sheet.ownerNode.innerHTML }else{return context.sourceCache.load(sheet.href).join("") }}function getStyleSheetOwnerNode(sheet){for(; sheet&&!sheet.ownerNode; sheet=sheet.parentStyleSheet){}return sheet.ownerNode }function scrollSelectionIntoView(panel){var selCon=getSelectionController(panel); selCon.scrollSelectionIntoView(nsISelectionController.SELECTION_NORMAL,nsISelectionController.SELECTION_FOCUS_REGION,true) }function getSelectionController(panel){var browser=Firebug.chrome.getPanelBrowser(panel); return browser.docShell.QueryInterface(nsIInterfaceRequestor).getInterface(nsISelectionDisplay).QueryInterface(nsISelectionController) }Firebug.registerModule(Firebug.CSSModule); Firebug.registerPanel(Firebug.CSSStyleSheetPanel); Firebug.registerPanel(CSSElementPanel); Firebug.registerPanel(CSSComputedElementPanel) }}); FBL.ns(function(){with(FBL){Firebug.SourceCache=function(context){this.context=context; this.cache={} }; Firebug.SourceCache.prototype=extend(new Firebug.Listener(),{isCached:function(url){return(this.cache[url]?true:false) },loadText:function(url,method,file){var lines=this.load(url,method,file); return lines?lines.join(""):null },load:function(url,method,file){if(FBTrace.DBG_CACHE){FBTrace.sysout("sourceCache.load: "+url); if(!this.cache.hasOwnProperty(url)&&this.cache[url]){FBTrace.sysout("sourceCache.load; ERROR - hasOwnProperty returns false, but the URL is cached: "+url,this.cache[url]) }}var response=this.cache[this.removeAnchor(url)]; if(response){return response }if(FBTrace.DBG_CACHE){var urls=[]; for(var prop in this.cache){urls.push(prop) }FBTrace.sysout("sourceCache.load: Not in the Firebug internal cache",urls) }var d=FBL.splitDataURL(url); if(d){var src=d.encodedContent; var data=decodeURIComponent(src); var lines=splitLines(data); this.cache[url]=lines; return lines }var j=FBL.reJavascript.exec(url); if(j){var src=url.substring(FBL.reJavascript.lastIndex); var lines=splitLines(src); this.cache[url]=lines; return lines }var c=FBL.reChrome.test(url); if(c){if(Firebug.filterSystemURLs){return["Filtered chrome url "+url] }var reWrapperMunge=/(\S*)\s*->\s*(\S*)/; var m=reWrapperMunge.exec(url); if(m){url=m[2]; if(FBTrace.DBG_CACHE){FBTrace.sysout("sourceCache found munged xpcnativewrapper url and set it to "+url+" m "+m+" m[0]:"+m[0]+" [1]"+m[1],m) }}var chromeURI=makeURI(url); if(!chromeURI){if(FBTrace.DBG_CACHE){FBTrace.sysout("sourceCache.load failed to convert chrome to local: "+url) }return["sourceCache failed to make URI from "+url] }var localURI=chromeReg.convertChromeURL(chromeURI); if(FBTrace.DBG_CACHE){FBTrace.sysout("sourceCache.load converting chrome to local: "+url," -> "+localURI.spec) }return this.loadFromLocal(localURI.spec) }c=FBL.reFile.test(url); if(c){return this.loadFromLocal(url) }return this.loadFromCache(url,method,file) },store:function(url,text){var tempURL=this.removeAnchor(url); if(FBTrace.DBG_CACHE){FBTrace.sysout("sourceCache for "+this.context.getName()+" store url="+url+((tempURL!=url)?" -> "+tempURL:""),text) }var lines=splitLines(text); return this.storeSplitLines(tempURL,lines) },removeAnchor:function(url){var index=url.indexOf("#"); if(index<0){return url }return url.substr(0,index) },loadFromLocal:function(url){var src=getResource(url); if(src){var lines=splitLines(src); this.cache[url]=lines; return lines }},loadFromCache:function(url,method,file){if(FBTrace.DBG_CACHE){FBTrace.sysout("sourceCache.loadFromCache url:"+url) }var doc=this.context.window.document; if(doc){var charset=doc.characterSet }else{var charset="UTF-8" }try{var data=Firebug.Lite.Proxy.load(url); var lines=splitLines(data); this.cache[url]=lines; return lines }catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.sysout("sourceCache.load FAILS, url="+url,exc) }return["sourceCache.load FAILS for url="+url,exc.toString()] }finally{}},storeSplitLines:function(url,lines){if(FBTrace.DBG_CACHE){FBTrace.sysout("sourceCache for window="+this.context.getName()+" store url="+url+"\n") }return this.cache[url]=lines },invalidate:function(url){url=this.removeAnchor(url); if(FBTrace.DBG_CACHE){FBTrace.sysout("sourceCache.invalidate; "+url) }delete this.cache[url] },getLine:function(url,lineNo){var lines=this.load(url); if(lines){if(lineNo<=lines.length){return lines[lineNo-1] }else{return(lines.length==1)?lines[0]:"("+lineNo+" out of range "+lines.length+")" }}else{return"(no source for "+url+")" }}}); var readWithXHR=function(url){Ajax.request({url:url,async:false}); return Ajax.transport.responseText } }}); FBL.ns(function(){with(FBL){var PCMAP_SOURCETEXT=-1; var PCMAP_PRETTYPRINT=-2; Firebug.SourceFile=function(compilation_unit_type){this.compilation_unit_type=compilation_unit_type }; Firebug.SourceFile.prototype={getBaseLineOffset:function(){return 0 },toString:function(){var str=(this.compilation_unit_type?this.compilation_unit_type+" ":"")+this.href+" script.tags( "; if(this.outerScript){str+=(this.outerScript.isValid?this.outerScript.tag:"X")+"| " }if(this.innerScripts){var numberInvalid=0; for(var p in this.innerScripts){var script=this.innerScripts[p]; if(script.isValid){str+=p+" " }else{numberInvalid++ }}}str+=")"+(numberInvalid?"("+numberInvalid+" invalid)":""); return str },isExecutableLine:function(lineNo){return false; if(this.hasScriptAtLineNumber(lineNo,true)){return true }if(this.outerScriptLineMap&&(this.outerScriptLineMap.indexOf(lineNo)!=-1)){return true }return false },loadScriptLines:function(context){if(this.source){return this.source }else{return context.sourceCache.load(this.href) }}}; Firebug.SourceFile.summarizeSourceLineArray=function(sourceLines,size){var buf=""; for(var i=0; isize||aLine.length>240){break }}return buf.substr(0,size) }; Firebug.SourceFile.NestedScriptAnalyzer=function(sourceFile){this.sourceFile=sourceFile }; Firebug.SourceFile.NestedScriptAnalyzer.prototype={getSourceLineFromFrame:function(context,frame){if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("NestedScriptAnalyzer in "+this.sourceFile.compilation_unit_type+": frame.line - this.sourceFile.getBaseLineOffset()",frame.line+" - "+this.sourceFile.getBaseLineOffset()) }return frame.line-(this.sourceFile.getBaseLineOffset()) },getFunctionDescription:function(script,context,frame){if(frame){var name=frame.name; var args=FBL.getFunctionArgValues(frame) }else{var name=script.functionName; var args=[] }if(name=="anonymous"){name=FBL.guessFunctionName(this.sourceFile.href,this.getBaseLineNumberByScript(script),context) }return{name:name,args:args} },getSourceLinkForScript:function(script){var line=this.getBaseLineNumberByScript(script); return new FBL.SourceLink(this.sourceFile.href,line,"js") },getBaseLineNumberByScript:function(script){return script.baseLineNumber-(this.sourceFile.getBaseLineOffset()-1) }}; Firebug.SourceFile.addScriptsToSourceFile=function(sourceFile,outerScript,innerScripts){if(!sourceFile.innerScripts){sourceFile.innerScripts={} }var total=0; while(innerScripts.hasMoreElements()){var script=innerScripts.getNext(); if(!script){if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("addScriptsToSourceFile innerScripts.getNext FAILS "+sourceFile,script) }continue }sourceFile.innerScripts[script.tag]=script; if(FBTrace.DBG_SOURCEFILES){total++ }}if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("addScriptsToSourceFile "+total+" scripts, sourcefile="+sourceFile.toString(),sourceFile) }}; Firebug.ScriptTagSourceFile=function(context,url,scriptTagNumber){this.context=context; this.href=url; this.scriptTagNumber=scriptTagNumber; this.innerScripts={}; this.pcmap_type=PCMAP_SOURCETEXT }; Firebug.ScriptTagSourceFile.prototype=descend(new Firebug.SourceFile("scriptTag"),Firebug.SourceFile.CommonBase); Firebug.SourceFile.getSourceFileByScript=function(context,script){if(!context.sourceFileMap){return null }var lucky=context.sourceFileMap[script.fileName]; if(FBTrace.DBG_SOURCEFILES&&lucky){FBTrace.sysout("getSourceFileByScript trying to be lucky for "+script.tag+" in "+lucky,script) }if(lucky&&lucky.hasScript(script)){return lucky }if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("getSourceFileByScript looking for "+script.tag+"@"+script.fileName+" in "+context.getName()+": ",context.sourceFileMap) }for(var url in context.sourceFileMap){var sourceFile=context.sourceFileMap[url]; if(sourceFile.hasScript(script)){return sourceFile }}}; Firebug.SourceFile.getScriptAnalyzer=function(context,script){var sourceFile=Firebug.SourceFile.getSourceFileByScript(context,script); if(FBTrace.DBG_STACK){FBTrace.sysout("getScriptAnalyzer "+(sourceFile?"finds sourceFile: ":"FAILS to find sourceFile"),sourceFile) }if(sourceFile){var analyzer=sourceFile.getScriptAnalyzer(script); if(FBTrace.DBG_STACK){FBTrace.sysout("getScriptAnalyzer finds analyzer: ",analyzer) }return analyzer }return undefined }; Firebug.SourceFile.getSourceFileAndLineByScript=function(context,script,frame){var sourceFile=Firebug.SourceFile.getSourceFileByScript(context,script); if(sourceFile){if(sourceFile.pcmap_type){var line=script.pcToLine(1,sourceFile.pcmap_type) }else{var line=1 }return{sourceFile:sourceFile,lineNo:line} }}; Firebug.SourceFile.guessEnclosingFunctionName=function(url,line,context){var sourceFile=context.sourceFileMap[url]; if(sourceFile){var scripts=sourceFile.getScriptsAtLineNumber(line); if(scripts){var script=scripts[0]; var analyzer=sourceFile.getScriptAnalyzer(script); line=analyzer.getBaseLineNumberByScript(script) }}return FBL.guessFunctionName(url,line-1,context) } }}); FBL.ns(function(){with(FBL){Firebug.ActivableModule=Firebug.Module; Firebug.registerActivableModule=Firebug.registerModule; Firebug.Panel.isEnabled=function(){return true }; Firebug.ActivablePanel=Firebug.Panel; Firebug.SourceBoxDecorator=function(sourceBox){}; Firebug.SourceBoxDecorator.sourceBoxCounter=0; Firebug.SourceBoxDecorator.prototype={onSourceBoxCreation:function(sourceBox){sourceBox.uniqueId=++Firebug.SourceBoxDecorator.sourceBoxCounter },decorate:function(sourceBox,sourceFile){return },getUserVisibleLineNumber:function(sourceBox,lineNo){return lineNo },getLineHTML:function(sourceBox,lineNo){var html=escapeForSourceLine(sourceBox.lines[lineNo-1]); if(Firebug.replaceTabs>0){var space=new Array(Firebug.replaceTabs+1).join(" "); html=html.replace(/\t/g,space) }return html },getLineId:function(sourceBox,lineNo){return"sb"+sourceBox.uniqueId+"-L"+lineNo }}; Firebug.SourceBoxPanel=function(){}; var SourceBoxPanelBase=extend(Firebug.MeasureBox,Firebug.ActivablePanel); Firebug.SourceBoxPanel=extend(SourceBoxPanelBase,{create:function(){this.onResize=bind(this.resizer,this); this.sourceBoxes={}; this.decorator=this.getDecorator(); Firebug.ActivablePanel.create.apply(this,arguments); this.scrollingElement=this.containerNode },initialize:function(context,doc){Firebug.ActivablePanel.initialize.apply(this,arguments) },initializeNode:function(panelNode){this.resizeEventTarget=Firebug.chrome.window; addEvent(this.resizeEventTarget,"resize",this.onResize); this.attachToCache(); Firebug.ActivablePanel.initializeNode.apply(this,arguments) },reattach:function(doc){var oldEventTarget=this.resizeEventTarget; oldEventTarget.removeEventListener("resize",this.onResize,true); Firebug.Panel.reattach.apply(this,arguments); this.resizeEventTarget=Firebug.chrome.window; addEvent(this.resizeEventTarget,"resize",this.onResize); this.attachToCache() },destroyNode:function(){Firebug.ActivablePanel.destroyNode.apply(this,arguments); removeEvent(this.resizeEventTarget,"resize",this.onResize); this.detachFromCache() },attachToCache:function(){this.context.sourceCache.addListener(this) },detachFromCache:function(){this.context.sourceCache.removeListener(this) },onTextSizeChange:function(zoom){this.removeAllSourceBoxes() },removeAllSourceBoxes:function(){this.sourceBoxes={} },onStartRequest:function(context,request){},onStopRequest:function(context,request,responseText){if(context===this.context){var url=request.URI.spec; var sourceFile=getSourceFileByHref(url,context); if(sourceFile){this.removeSourceBoxBySourceFile(sourceFile) }}},updateSourceBox:function(sourceBox){},getDecorator:function(){return new Firebug.SourceBoxDecorator() },getSourceType:function(){throw"SourceBox.getSourceType: Need to override in extender " },disablePanel:function(module){this.sourceBoxes={}; Firebug.ActivablePanel.disablePanel.apply(this,arguments) },getSourceLinesFrom:function(selection){if(selection.isCollapsed){return"" }var anchorSourceRow=getAncestorByClass(selection.anchorNode,"sourceRow"); var focusSourceRow=getAncestorByClass(selection.focusNode,"sourceRow"); if(anchorSourceRow==focusSourceRow){return selection.toString() }var buf=this.getSourceLine(anchorSourceRow,selection.anchorOffset); var currentSourceRow=anchorSourceRow.nextSibling; while(currentSourceRow&&(currentSourceRow!=focusSourceRow)&&hasClass(currentSourceRow,"sourceRow")){buf+=this.getSourceLine(currentSourceRow); currentSourceRow=currentSourceRow.nextSibling }buf+=this.getSourceLine(focusSourceRow,0,selection.focusOffset); return buf },getSourceLine:function(sourceRow,beginOffset,endOffset){var source=getChildByClass(sourceRow,"sourceRowText").textContent; if(endOffset){source=source.substring(beginOffset,endOffset) }else{if(beginOffset){source=source.substring(beginOffset) }else{source=source }}return source },getSourceBoxBySourceFile:function(sourceFile){if(sourceFile.href){var sourceBox=this.getSourceBoxByURL(sourceFile.href); if(sourceBox&&sourceBox.repObject==sourceFile){return sourceBox }else{return null }}},getSourceBoxByURL:function(url){return url?this.sourceBoxes[url]:null },removeSourceBoxBySourceFile:function(sourceFile){var sourceBox=this.getSourceBoxBySourceFile(sourceFile); if(sourceBox){delete this.sourceBoxes[sourceFile.href]; if(sourceBox.parentNode===this.panelNode){this.panelNode.removeChild(sourceBox) }if(this.selectedSourceBox===sourceBox){delete this.selectedSourceBox; delete this.location; this.showSourceFile(sourceFile) }}},renameSourceBox:function(oldURL,newURL){var sourceBox=this.sourceBoxes[oldURL]; if(sourceBox){delete this.sourceBoxes[oldURL]; this.sourceBoxes[newURL]=sourceBox }},showSourceFile:function(sourceFile){var sourceBox=this.getSourceBoxBySourceFile(sourceFile); if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("firebug.showSourceFile: "+sourceFile,sourceBox) }if(!sourceBox){if(sourceFile.compilation_unit_type==="scriptTagAppend"&&!sourceFile.source){sourceFile.source=["script tag mutation event has not arrived"]; return }sourceBox=this.createSourceBox(sourceFile) }this.showSourceBox(sourceBox) },showSourceLink:function(sourceLink){var sourceFile=getSourceFileByHref(sourceLink.href,this.context); if(sourceFile){this.navigate(sourceFile); if(sourceLink.line){this.scrollToLine(sourceLink.href,sourceLink.line,this.jumpHighlightFactory(sourceLink.line,this.context)); dispatch(this.fbListeners,"onShowSourceLink",[this,sourceLink.line]) }if(sourceLink==this.selection){delete this.selection }}},showSourceBox:function(sourceBox){if(this.selectedSourceBox){collapse(this.selectedSourceBox,true) }this.selectedSourceBox=sourceBox; delete this.currentSearch; if(sourceBox){this.reView(sourceBox); this.updateSourceBox(sourceBox); collapse(sourceBox,false) }},createSourceBox:function(sourceFile){var sourceBox=this.initializeSourceBox(sourceFile); sourceBox.decorator=this.decorator; sourceBox.decorator.onSourceBoxCreation(sourceBox); this.sourceBoxes[sourceFile.href]=sourceBox; if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("firebug.createSourceBox with "+sourceBox.maximumLineNumber+" lines for "+sourceFile+(sourceFile.href?" sourceBoxes":" anon "),sourceBox) }this.panelNode.appendChild(sourceBox); this.setSourceBoxLineSizes(sourceBox); return sourceBox },getSourceFileBySourceBox:function(sourceBox){return sourceBox.repObject },initializeSourceBox:function(sourceFile){var sourceBox=this.document.createElement("div"); setClass(sourceBox,"sourceBox"); collapse(sourceBox,true); var lines=sourceFile.loadScriptLines(this.context); if(!lines){lines=["Failed to load source for sourceFile "+sourceFile] }sourceBox.lines=lines; sourceBox.repObject=sourceFile; sourceBox.maximumLineNumber=lines.length; sourceBox.maxLineNoChars=(sourceBox.maximumLineNumber+"").length; sourceBox.getLineNode=function(lineNo){return $(this.decorator.getLineId(this,lineNo),this.ownerDocument) }; var paddedSource="
"; appendInnerHTML(sourceBox,paddedSource); sourceBox.viewport=getChildByClass(sourceBox,"sourceViewport"); return sourceBox },setSourceBoxLineSizes:function(sourceBox){var view=sourceBox.viewport; var lineNoCharsSpacer=""; for(var i=0; i3&&linesFromBot>3); if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("SourceBoxPanel.scrollTimeout: skipScrolling: "+skipScrolling+" fromTop:"+linesFromTop+" fromBot:"+linesFromBot) }}else{if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("SourceBoxPanel.scrollTimeout, no viewable lines",this.selectedSourceBox) }}if(!skipScrolling){var viewRange=this.getViewRangeFromTargetLine(this.selectedSourceBox,lineNo); this.selectedSourceBox.newScrollTop=this.getScrollTopFromViewRange(this.selectedSourceBox,viewRange); if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("SourceBoxPanel.scrollTimeout: newScrollTop "+this.selectedSourceBox.newScrollTop+" vs old "+this.selectedSourceBox.scrollTop+" for "+this.selectedSourceBox.repObject.href) }this.selectedSourceBox.scrollTop=this.selectedSourceBox.newScrollTop; if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("SourceBoxPanel.scrollTimeout: scrollTo "+lineNo+" scrollTop:"+this.selectedSourceBox.scrollTop+" lineHeight: "+this.selectedSourceBox.lineHeight) }}if(this.selectedSourceBox.highlighter){this.applyDecorator(this.selectedSourceBox) }},this)); this.selectedSourceBox.highlighter=highlighter },jumpHighlightFactory:function(lineNo,context){return function jumpHighlightIfInView(sourceBox){var lineNode=sourceBox.getLineNode(lineNo); if(lineNode){setClassTimed(lineNode,"jumpHighlight",context); if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("jumpHighlightFactory on line "+lineNo+" lineNode:"+lineNode.innerHTML+"\n") }}else{if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("jumpHighlightFactory no node at line "+lineNo,sourceBox) }}return false } },resizer:function(event){if(this.selectedSourceBox&&this.visible){if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("resizer event: "+event.type,event) }this.reView(this.selectedSourceBox) }},reView:function(sourceBox,clearCache){if(sourceBox.targetedLine){sourceBox.targetLineNumber=sourceBox.targetedLine; var viewRange=this.getViewRangeFromTargetLine(sourceBox,sourceBox.targetedLine); delete sourceBox.targetedLine }else{var viewRange=this.getViewRangeFromScrollTop(sourceBox,this.scrollingElement.scrollTop) }if(clearCache){this.clearSourceBox(sourceBox) }else{if(this.scrollingElement.scrollTop===sourceBox.lastScrollTop&&sourceBox.clientHeight&&sourceBox.clientHeight===sourceBox.lastClientHeight){if(sourceBox.firstRenderedLine<=viewRange.firstLine&&sourceBox.lastRenderedLine>=viewRange.lastLine){if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("reView skipping sourceBox "+this.scrollingElement.scrollTop+"=scrollTop="+sourceBox.lastScrollTop+", "+sourceBox.clientHeight+"=clientHeight="+sourceBox.lastClientHeight,sourceBox) }return }}}dispatch(this.fbListeners,"onBeforeViewportChange",[this]); this.buildViewAround(sourceBox,viewRange); if(Firebug.uiListeners.length>0){var link=new SourceLink(sourceBox.repObject.href,sourceBox.centralLine,this.getSourceType()); dispatch(Firebug.uiListeners,"onViewportChange",[link]) }sourceBox.lastScrollTop=this.scrollingElement.scrollTop; sourceBox.lastClientHeight=sourceBox.clientHeight },buildViewAround:function(sourceBox,viewRange){try{this.updateViewportCache(sourceBox,viewRange) }catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.sysout("buildViewAround updateViewportCache FAILS "+exc,exc) }}this.setViewportPadding(sourceBox,viewRange); sourceBox.centralLine=Math.floor((viewRange.lastLine+viewRange.firstLine)/2); this.applyDecorator(sourceBox); return },updateViewportCache:function(sourceBox,viewRange){var cacheHit=this.insertedLinesOverlapCache(sourceBox,viewRange); if(!cacheHit){this.clearSourceBox(sourceBox); sourceBox.firstRenderedLine=viewRange.firstLine; sourceBox.lastRenderedLine=viewRange.lastLine }else{sourceBox.firstRenderedLine=Math.min(viewRange.firstLine,sourceBox.firstRenderedLine); sourceBox.lastRenderedLine=Math.max(viewRange.lastLine,sourceBox.lastRenderedLine) }sourceBox.firstViewableLine=viewRange.firstLine; sourceBox.lastViewableLine=viewRange.lastLine; sourceBox.numberOfRenderedLines=sourceBox.lastRenderedLine-sourceBox.firstRenderedLine+1; if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("buildViewAround viewRange: "+viewRange.firstLine+"-"+viewRange.lastLine+" rendered: "+sourceBox.firstRenderedLine+"-"+sourceBox.lastRenderedLine,sourceBox) }},insertedLinesOverlapCache:function(sourceBox,viewRange){var cacheHit=false; var linesBefore=[]; var linesAfter=[]; for(var line=viewRange.firstLine; line<=viewRange.lastLine; line++){if(line>=sourceBox.firstRenderedLine&&line<=sourceBox.lastRenderedLine){cacheHit=true; continue }var lineHTML=this.getSourceLineHTML(sourceBox,line); if(line0){var topCacheLine=sourceBox.getLineNode(sourceBox.firstRenderedLine); appendInnerHTML(sourceBox.viewport,linesBefore.join(""),topCacheLine) }if(linesAfter.length>0){appendInnerHTML(sourceBox.viewport,linesAfter.join(""),null) }return cacheHit },old_insertedLinesOverlapCache:function(sourceBox,viewRange){var topCacheLine=null; var cacheHit=false; for(var line=viewRange.firstLine; line<=viewRange.lastLine; line++){if(line>=sourceBox.firstRenderedLine&&line<=sourceBox.lastRenderedLine){cacheHit=true; continue }var lineHTML=this.getSourceLineHTML(sourceBox,line); var ref=null; if(line
'+lineNoText+''+lineHTML+""; return theHTML },getTextForLineNo:function(lineNo,maxLineNoChars){var lineNoText=lineNo+""; while(lineNoText.lengthsourceBox.maximumLineNumber){viewRange.lastLine=sourceBox.maximumLineNumber }return viewRange },getViewRangeFromScrollTop:function(sourceBox,scrollTop){var viewRange={}; var averageLineHeight=this.getAverageLineHeight(sourceBox); viewRange.firstLine=Math.floor(scrollTop/averageLineHeight+1); var panelHeight=this.panelNode.parentNode.clientHeight; var viewableLines=Math.ceil((panelHeight/averageLineHeight)+1); viewRange.lastLine=viewRange.firstLine+viewableLines; if(viewRange.lastLine>sourceBox.maximumLineNumber){viewRange.lastLine=sourceBox.maximumLineNumber }viewRange.centralLine=Math.floor((viewRange.lastLine-viewRange.firstLine)/2); if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("getViewRangeFromScrollTop scrollTop:"+scrollTop+" viewRange: "+viewRange.firstLine+"-"+viewRange.lastLine); if(!this.noRecurse){this.noRecurse=true; var testScrollTop=this.getScrollTopFromViewRange(sourceBox,viewRange); delete this.noRecurse; FBTrace.sysout("getViewRangeFromScrollTop "+((scrollTop==testScrollTop)?"checks":(scrollTop+"=!scrollTop!="+testScrollTop))) }}return viewRange },getScrollTopFromViewRange:function(sourceBox,viewRange){var averageLineHeight=this.getAverageLineHeight(sourceBox); var scrollTop=Math.floor(averageLineHeight*(viewRange.firstLine-1)); if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("getScrollTopFromViewRange viewRange:"+viewRange.firstLine+"-"+viewRange.lastLine+" averageLineHeight: "+averageLineHeight+" scrollTop "+scrollTop); if(!this.noRecurse){this.noRecurse=true; var testViewRange=this.getViewRangeFromScrollTop(sourceBox,scrollTop); delete this.noRecurse; var vrStr=viewRange.firstLine+"-"+viewRange.lastLine; var tvrStr=testViewRange.firstLine+"-"+testViewRange.lastLine; FBTrace.sysout("getScrollTopFromCenterLine "+((vrStr==tvrStr)?"checks":vrStr+"=!viewRange!="+tvrStr)) }}return scrollTop },getAverageLineHeight:function(sourceBox){var averageLineHeight=sourceBox.lineHeight; var renderedViewportHeight=sourceBox.viewport.clientHeight; var numberOfRenderedLines=sourceBox.numberOfRenderedLines; if(renderedViewportHeight&&numberOfRenderedLines){averageLineHeight=renderedViewportHeight/numberOfRenderedLines }return averageLineHeight },getTotalPadding:function(sourceBox){var numberOfRenderedLines=sourceBox.numberOfRenderedLines; if(!numberOfRenderedLines){return 0 }var max=sourceBox.maximumLineNumber; var averageLineHeight=this.getAverageLineHeight(sourceBox); var virtualSourceBoxHeight=Math.floor(max*averageLineHeight); if(virtualSourceBoxHeight0){dispatch(Firebug.uiListeners,"onApplyDecorator",[sourceBox]) }if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("sourceBoxDecoratorTimeout "+sourceBox.repObject,sourceBox) }}catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.sysout("sourcebox applyDecorator FAILS "+exc,exc) }}},asyncHighlighting:function(sourceBox){try{if(sourceBox.highlighter){var sticky=sourceBox.highlighter(sourceBox); if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("asyncHighlighting highlighter sticky:"+sticky,sourceBox.highlighter) }if(!sticky){delete sourceBox.highlighter }}}catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.sysout("sourcebox highlighter FAILS "+exc,exc) }}}}) }}); FBL.ns(function(){with(FBL){var fbs={registerClient:function(){},unregisterClient:function(){},unregisterDebugger:function(){}}; FBL.getUniqueId=function(){}; FBL.persistObjects=function(){}; FBL.sourceFilesAsArray=function(){return[] }; Firebug.ActivableModule.isAlwaysEnabled=function(){return true }; Firebug.ActivablePanel.destroyNode=function(){}; var STEP_OVER=1; var STEP_INTO=2; var STEP_OUT=3; var tooltipTimeout=300; var reLineNumber=/^[^\\]?#(\d*)$/; var reEval=/\s*eval\s*\(([^)]*)\)/m; var reHTM=/\.[hH][tT][mM]/; var reFunction=/\s*Function\s*\(([^)]*)\)/m; var reTooMuchRecursion=/too\smuch\srecursion/; Firebug.Debugger=extend(Firebug.ActivableModule,{dispatchName:"debugger",fbs:fbs,hasValidStack:function(context){return context.stopped&&context.currentFrame.isValid },evaluate:function(js,context,scope){var frame=context.currentFrame; if(!frame){return }frame.scope.refresh(); var result={}; var scriptToEval=js; var ok=frame.eval(scriptToEval,"",1,result); var value=unwrapIValue(result.value); if(ok){return value }else{throw value }},evaluateInCallingFrame:function(js,fileName,lineNo){return this.halt(function evalInFrame(frame){window.dump("evaluateInCallingFrame "+frame.script.fileName+" stack: "+getJSDStackDump(frame)+"\n"); var result={}; var ok=frame.eval(js,fileName,lineNo,result); var value=unwrapIValue(result.value); if(ok){return value }else{throw value }}) },getCurrentFrameKeys:function(context){var globals=keys(context.getGlobalScope().wrappedJSObject); if(context.currentFrame){return this.getFrameKeys(context.currentFrame,globals) }return globals },getFrameKeys:function(frame,names){var listValue={value:null},lengthValue={value:0}; frame.scope.getProperties(listValue,lengthValue); for(var i=0; i=0){delete context.stopped; delete context.stoppedFrame; delete context.currentFrame; if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.stop extension vetoed stop with hookReturn "+hookReturn) }return hookReturn }try{this.freeze(context); var depth=fbs.enterNestedEventLoop({onNest:bindFixed(this.startDebugging,this,context)}); if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.stop, depth:"+depth+" context:"+context.getName()) }}catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.sysout("debugger exception in nested event loop: "+exc,exc) }else{ERROR("debugger exception in nested event loop: "+exc+"\n") }}finally{this.thaw(context) }this.stopDebugging(context); dispatch(this.fbListeners,"onResume",[context]); if(context.aborted){delete context.aborted; return RETURN_ABORT }else{if(Firebug.rerun){setTimeout(function reExecute(){var rerun=context.savedRerun=Firebug.rerun; delete Firebug.rerun; if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("Firebug.debugger.reExecute ",{rerun:rerun}) }function successConsoleFunction(result,context){if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("Firebug.debugger.reExecute success",result) }dispatch(Firebug.Debugger.fbListeners,"onRerunComplete",[true,result]) }function exceptionFunction(result,context){if(FBTrace.DBG_ERRORS){FBTrace.sysout("Firebug.debugger.reExecute FAILED "+result,result) }dispatch(Firebug.Debugger.fbListeners,"onRerunComplete",[failed,result]) }Firebug.CommandLine.evaluate("window._firebug.rerunFunction()",context,null,context.window,successConsoleFunction,exceptionFunction) }); if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("Firebug.debugger.reExecute return "+RETURN_HOOK_ERROR) }return RETURN_HOOK_ERROR }else{return RETURN_CONTINUE }}},rerun:function(context){if(!context.stopped){FBTrace.sysout("debugger.rerun FAILS: not stopped"); return }if(Firebug.rerun){FBTrace.sysout("debugger.rerun FAILS: Firebug.rerun in progress"); return }Firebug.rerun=this.getRerun(context); this.resume(context) },getRerun:function(context){if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.rerun for "+context.getName()) }try{var frame=context.stoppedFrame; while(frame.callingFrame&&frame.callingFrame.script.functionName){frame=frame.callingFrame; if(frame.script.functionName=="_firebugRerun"){if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("getRerun re-rerun ",context.savedRerun) }return context.savedRerun }}function getStoreRerunInfoScript(fnName){var str="if (!window._firebug)window._firebug={};\n"; str+="window._firebug.rerunThis = this;\n"; str+="window._firebug.rerunArgs = [];\n"; str+="if (arguments && arguments.length) for (var i = 0; i < arguments.length; i++) window._firebug.rerunArgs.push(arguments[i]);\n"; str+="window._firebug.rerunFunctionName = "+fnName+";\n"; str+="window._firebug.rerunFunction = function _firebugRerun() { "+fnName+".apply(window._firebug.rerunThis, window._firebug.rerunArgs); }"; return str }var rerun={}; var fnName=getFunctionName(frame.script,context,frame,true); rerun.script=getStoreRerunInfoScript(fnName); var jsdFunctionName=frame.script.functionName; var result={}; var ok=frame.eval(rerun.script,context.window.location+"/RerunScript",1,result); if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.rerun "+ok+" and result: "+result+" for "+context.getName(),{result:result,rerun:rerun,functionName:jsdFunctionName}) }}catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.sysout("debugger.rerun FAILS for "+context.getName()+" because "+exc,{exc:exc,rerun:rerun}) }}return rerun },resume:function(context){if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.resume, context.stopped:"+context.stopped+"\n") }var depth=fbs.exitNestedEventLoop(); if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.resume, depth:"+depth+"\n") }},abort:function(context){if(context.stopped){context.aborted=true; this.thaw(context); this.resume(context); fbs.unPause(true) }},stepOver:function(context){if(!context.stoppedFrame||!context.stoppedFrame.isValid){return }fbs.step(STEP_OVER,context.stoppedFrame,this); this.resume(context) },stepInto:function(context){if(!context.stoppedFrame||!context.stoppedFrame.isValid){return }fbs.step(STEP_INTO,context.stoppedFrame,this); this.resume(context) },stepOut:function(context){if(!context.stoppedFrame||!context.stoppedFrame.isValid){return }fbs.step(STEP_OUT,context.stoppedFrame); this.resume(context) },suspend:function(context){if(context.stopped){return }fbs.suspend(this,context) },unSuspend:function(context){fbs.stopStepping() },runUntil:function(context,sourceFile,lineNo){if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("runUntil "+lineNo+" @"+sourceFile) }if(!context.stoppedFrame||!context.stoppedFrame.isValid){return }fbs.runUntil(sourceFile,lineNo,context.stoppedFrame,this); this.resume(context) },freeze:function(context){var executionContext=context.stoppedFrame.executionContext; try{executionContext.scriptsEnabled=false; this.suppressEventHandling(context); context.isFrozen=true; if(context.window.document.commandDispatcher){context.saveFocus=context.window.document.commandDispatcher.focusedElement; if(context.saveFocus){context.discardBlurEvents=function(event){if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.freeze discard blur event "+context.discardOneMore+" while focus is "+context.window.document.commandDispatcher.focusedElement,event) }event.preventDefault(); event.stopPropagation(); if(context.discardOneMore){context.window.removeEventListener("blur",context.discardBlurEvents,true); delete context.discardOneMore; delete context.saveFocus }},context.window.addEventListener("blur",context.discardBlurEvents,true) }}if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.freeze context.saveFocus "+context.saveFocus,context.saveFocus); FBTrace.sysout("debugger.freeze try to disable scripts "+(context.eventSuppressor?"and events":"but not events")+" in "+context.getName()+" executionContext.tag "+executionContext.tag+".scriptsEnabled: "+executionContext.scriptsEnabled) }}catch(exc){if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.freeze, freeze exception "+exc+" in "+context.getName(),exc) }}},suppressEventHandling:function(context){if(context.window instanceof Ci.nsIInterfaceRequestor){context.eventSuppressor=context.window.getInterface(Ci.nsIDOMWindowUtils); if(context.eventSuppressor){context.eventSuppressor.suppressEventHandling(true) }}},thaw:function(context){try{if(context.isFrozen){delete context.isFrozen }else{return }var executionContext=context.stoppedFrame.executionContext; if(executionContext.isValid){this.unsuppressEventHandling(context); if(context.saveFocus){context.window.focus(); context.saveFocus.focus(); context.discardOneMore=true }if(FBTrace.DBG_UI_LOOP){var nowFocused=context.window.document.commandDispatcher?context.window.document.commandDispatcher.focusedElement:null; FBTrace.sysout("debugger.thaw context.saveFocus "+context.saveFocus+" vs "+nowFocused,context.saveFocus) }executionContext.scriptsEnabled=true }else{if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.thaw "+executionContext.tag+" executionContext is not valid") }}if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.thaw try to enable scripts "+(context.eventSuppressor?"with events suppressed":"events enabled")+" in "+context.getName()+" executionContext.tag "+executionContext.tag+".scriptsEnabled: "+executionContext.scriptsEnabled) }}catch(exc){if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.stop, scriptsEnabled = true exception:",exc) }}},unsuppressEventHandling:function(context){if(context.eventSuppressor){context.eventSuppressor.suppressEventHandling(false); delete context.eventSuppressor }},toggleFreezeWindow:function(context){if(!context.stopped){Firebug.Debugger.halt(function grabContext(frame){context.stoppedFrame=frame; Firebug.Debugger.doToggleFreezeWindow(context); delete context.stoppedFrame }); Firebug.Debugger.toggleReportTopLevel(context); Firebug.Debugger.suspend(context) }else{Firebug.Debugger.doToggleFreezeWindow(context) }},doToggleFreezeWindow:function(context){if(context.isFrozen){Firebug.Debugger.unsuppressEventHandling(context) }else{Firebug.Debugger.suppressEventHandling(context) }},toggleReportTopLevel:function(context){if(context.reportTopLevel){fbs.setTopLevelHook(null) }else{fbs.setTopLevelHook(Firebug.Debugger,function reportTopLevel(frame){Firebug.Console.logFormatted(["Javascript entered",frame.script.fileName,frame.line],context,"info") }) }},setBreakOnNextCause:function(context,frame){var sourceFile=Firebug.SourceFile.getSourceFileByScript(context,frame.script); var analyzer=sourceFile.getScriptAnalyzer(frame.script); var lineNo=analyzer.getSourceLineFromFrame(context,frame); context.breakingCause={title:$STR("Break On Next"),message:$STR("Disable converts pause to disabled breakpoint"),skipAction:function addSkipperAndGo(){var bp=fbs.setBreakpoint(sourceFile,lineNo,null,Firebug.Debugger); fbs.disableBreakpoint(sourceFile.href,lineNo); if(FBTrace.DBG_BP){FBTrace.sysout("debugger.setBreakOnNextCause converted to disabled bp "+sourceFile.href+"@"+lineNo+" tag: "+frame.script.tag,bp) }Firebug.Debugger.resume(context) },okAction:function justGo(){Firebug.Debugger.resume(context) }} },setBreakpoint:function(sourceFile,lineNo){fbs.setBreakpoint(sourceFile,lineNo,null,Firebug.Debugger) },clearBreakpoint:function(sourceFile,lineNo){fbs.clearBreakpoint(sourceFile.href,lineNo) },setErrorBreakpoint:function(sourceFile,line){fbs.setErrorBreakpoint(sourceFile,line,Firebug.Debugger) },clearErrorBreakpoint:function(sourceFile,line){fbs.clearErrorBreakpoint(sourceFile.href,line,Firebug.Debugger) },clearAllBreakpoints:function(context){if(context){var sourceFiles=sourceFilesAsArray(context.sourceFileMap); fbs.clearAllBreakpoints(sourceFiles,Firebug.Debugger) }else{fbs.enumerateBreakpoints(null,{call:function(url,lineNo,bp){if(bp.debuggerName!==Firebug.Debugger.debuggerName){return }if(Firebug.filterSystemURLs){fbs.clearBreakpoint(url,lineNo) }else{if(!isSystemURL(url)){fbs.clearBreakpoint(url,lineNo) }}}}) }},enableAllBreakpoints:function(context){if(FBTrace.DBG_BP){FBTrace.sysout("enableAllBreakpoints sourceFileMap:",context.sourceFileMap) }for(var url in context.sourceFileMap){fbs.enumerateBreakpoints(url,{call:function(url,lineNo){fbs.enableBreakpoint(url,lineNo) }}) }},disableAllBreakpoints:function(context){for(var url in context.sourceFileMap){fbs.enumerateBreakpoints(url,{call:function(url,lineNo){fbs.disableBreakpoint(url,lineNo) }}) }},getBreakpointCount:function(context){var count=0; for(var url in context.sourceFileMap){fbs.enumerateBreakpoints(url,{call:function(url,lineNo){++count }}); fbs.enumerateErrorBreakpoints(url,{call:function(url,lineNo){++count }}) }return count },traceAll:function(context){fbs.traceAll(sourceURLsAsArray(context),this) },untraceAll:function(context){fbs.untraceAll(this) },monitorFunction:function(fn,mode){if(typeof(fn)=="function"||fn instanceof Function){var script=findScriptForFunctionInContext(Firebug.currentContext,fn); if(script){this.monitorScript(fn,script,mode) }else{Firebug.Console.logFormatted(["Firebug unable to locate jsdIScript for function",fn],Firebug.currentContext,"info") }}else{Firebug.Console.logFormatted(["Firebug.Debugger.monitorFunction requires a function",fn],Firebug.currentContext,"info") }},unmonitorFunction:function(fn,mode){if(typeof(fn)=="function"||fn instanceof Function){var script=findScriptForFunctionInContext(Firebug.currentContext,fn); if(script){this.unmonitorScript(fn,script,mode) }}},monitorScript:function(fn,script,mode){var scriptInfo=Firebug.SourceFile.getSourceFileAndLineByScript(Firebug.currentContext,script); if(scriptInfo){if(mode=="debug"){this.setBreakpoint(scriptInfo.sourceFile,scriptInfo.lineNo) }else{if(mode=="monitor"){fbs.monitor(scriptInfo.sourceFile,scriptInfo.lineNo,Firebug.Debugger) }}}},unmonitorScript:function(fn,script,mode){var scriptInfo=Firebug.SourceFile.getSourceFileAndLineByScript(Firebug.currentContext,script); if(scriptInfo){if(mode=="debug"){this.clearBreakpoint(scriptInfo.sourceFile,scriptInfo.lineNo) }else{if(mode=="monitor"){fbs.unmonitor(scriptInfo.sourceFile.href,scriptInfo.lineNo) }}}},traceCalls:function(context,fn){if(typeof(fn)=="function"||fn instanceof Function){var script=findScriptForFunctionInContext(context,fn); if(script){this.traceScriptCalls(context,script) }else{if(FBTrace.DBG_ERRORS){FBTrace.sysout("debugger.traceCalls no script found for "+fn,fn) }}}},untraceCalls:function(context,fn){if(typeof(fn)=="function"||fn instanceof Function){var script=findScriptForFunctionInContext(context,fn); if(script){this.untraceScriptCalls(context,script) }}},traceScriptCalls:function(context,script){var scriptInfo=Firebug.SourceFile.getSourceFileAndLineByScript(context,script); if(scriptInfo){fbs.traceCalls(scriptInfo.sourceFile,scriptInfo.lineNo,Firebug.Debugger) }},untraceScriptCalls:function(context,script){var scriptInfo=Firebug.SourceFile.getSourceFileAndLineByScript(context,script); if(scriptInfo){fbs.untraceCalls(scriptInfo.sourceFile,scriptInfo.lineNo,Firebug.Debugger) }},startDebugging:function(context){if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("startDebugging enter context.stopped:"+context.stopped+" for context: "+context.getName()+"\n") }try{fbs.lockDebugger(); context.executingSourceFile=Firebug.SourceFile.getSourceFileByScript(context,context.stoppedFrame.script); if(!context.executingSourceFile){if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("startDebugging resuming, no sourceFile for "+context.stoppedFrame.script.fileName,context.stoppedFrame.script.functionSource) }this.resume(context); return }var currentBreakable=Firebug.chrome.getGlobalAttribute("cmd_breakOnNext","breakable"); if(FBTrace.DBG_BP){FBTrace.sysout("debugger.startDebugging; currentBreakable "+currentBreakable+" in "+context.getName()) }if(currentBreakable=="false"){Firebug.chrome.setGlobalAttribute("cmd_breakOnNext","breakable","true") }if(context!=Firebug.currentContext||Firebug.isDetached()){Firebug.selectContext(context) }if(Firebug.isMinimized()){Firebug.unMinimize() }this.syncCommands(context); this.syncListeners(context); var panel=context.getPanel("script",true); Firebug.Breakpoint.updatePanelTab(panel,false); Firebug.chrome.syncPanel("script"); Firebug.chrome.select(context.stoppedFrame,"script",null,true); Firebug.chrome.focus() }catch(exc){if(FBTrace.DBG_ERRORS){FBTrace.sysout("Resuming debugger: error during debugging loop: "+exc,exc) }Firebug.Console.log("Resuming debugger: error during debugging loop: "+exc); this.resume(context) }dispatch(this.fbListeners,"onStartDebugging",[context]); if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("startDebugging exit context.stopped:"+context.stopped+" for context: "+context.getName()+"\n") }},stopDebugging:function(context){if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("stopDebugging enter context: "+context.getName()+"\n") }try{fbs.unlockDebugger(); if(context&&context.window&&!context.aborted){delete context.stopped; delete context.stoppedFrame; delete context.currentFrame; context.executingSourceFile=null; delete context.breakLineNumber; var chrome=Firebug.chrome; this.syncCommands(context); this.syncListeners(context); var panel=context.getPanel("script",true); if(panel&&panel==Firebug.chrome.getSelectedPanel()){panel.showNoStackFrame() }if(panel){panel.highlight(false) }chrome.syncSidePanels() }else{if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.stopDebugging else "+context.getName()+" "+safeGetWindowLocation(context.window)) }}}catch(exc){if(FBTrace.DBG_UI_LOOP){FBTrace.sysout("debugger.stopDebugging FAILS",exc) }ERROR(exc) }},syncCommands:function(context){var chrome=Firebug.chrome; if(!chrome){if(FBTrace.DBG_ERRORS){FBTrace.sysout("debugger.syncCommand, context with no chrome: "+context.getGlobalScope()) }return }if(context.stopped){chrome.setGlobalAttribute("fbDebuggerButtons","stopped","true"); chrome.setGlobalAttribute("cmd_rerun","disabled","false"); chrome.setGlobalAttribute("cmd_resumeExecution","disabled","false"); chrome.setGlobalAttribute("cmd_stepOver","disabled","false"); chrome.setGlobalAttribute("cmd_stepInto","disabled","false"); chrome.setGlobalAttribute("cmd_stepOut","disabled","false") }else{chrome.setGlobalAttribute("fbDebuggerButtons","stopped","false"); chrome.setGlobalAttribute("cmd_rerun","disabled","true"); chrome.setGlobalAttribute("cmd_stepOver","disabled","true"); chrome.setGlobalAttribute("cmd_stepInto","disabled","true"); chrome.setGlobalAttribute("cmd_stepOut","disabled","true"); chrome.setGlobalAttribute("cmd_resumeExecution","disabled","true") }},syncListeners:function(context){var chrome=Firebug.chrome; if(context.stopped){this.attachListeners(context,chrome) }else{this.detachListeners(context,chrome) }},attachListeners:function(context,chrome){this.keyListeners=[chrome.keyCodeListen("F8",null,bind(this.resume,this,context),true),chrome.keyListen("/",isControl,bind(this.resume,this,context)),chrome.keyCodeListen("F10",null,bind(this.stepOver,this,context),true),chrome.keyListen("'",isControl,bind(this.stepOver,this,context)),chrome.keyCodeListen("F11",null,bind(this.stepInto,this,context)),chrome.keyListen(";",isControl,bind(this.stepInto,this,context)),chrome.keyCodeListen("F11",isShift,bind(this.stepOut,this,context)),chrome.keyListen(",",isControlShift,bind(this.stepOut,this,context))] },detachListeners:function(context,chrome){if(this.keyListeners){for(var i=0; i1){var curFrame=frame; var curFrameSig=curFrame.script.tag+"."+curFrame.pc; for(var i=1; i "+context.getName()+" ("+context.uid+")\n") }Firebug.SourceFile.addScriptsToSourceFile(sourceFile,null,innerScriptEnumerator) }else{sourceFile=new Firebug.XULSourceFile(outerScript.fileName,outerScript,innerScriptEnumerator); this.watchSourceFile(context,sourceFile) }if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("debugger.onXULScriptCreated script.fileName="+outerScript.fileName+" in "+context.getName()+" "+sourceFile) }dispatch(this.fbListeners,"onXULScriptCreated",[context,frame,sourceFile.href]); return sourceFile }catch(e){if(FBTrace.DBG_TOPLEVEL||FBTrace.DBG_ERRORS){FBTrace.sysout("onXULScriptCreated FaILS "+e,e) }}},onEvalScriptCreated:function(frame,outerScript,innerScripts){try{if(FBTrace.DBG_EVAL){FBTrace.sysout("debugger.onEvalLevelScript script.fileName="+outerScript.fileName+"\n") }var context=this.breakContext; delete this.breakContext; var sourceFile=this.getEvalLevelSourceFile(frame,context,innerScripts); if(FBTrace.DBG_EVAL){FBTrace.sysout("debugger.onEvalScriptCreated url="+sourceFile.href,FBL.getCorrectedStackTrace(frame,context)) }dispatch(this.fbListeners,"onEvalScriptCreated",[context,frame,sourceFile.href]); return sourceFile }catch(e){if(FBTrace.DBG_EVAL||FBTrace.DBG_ERRORS){FBTrace.sysout("onEvalScriptCreated FaILS ",e) }}},onEventScriptCreated:function(frame,outerScript,innerScripts){if(FBTrace.DBG_EVENTS){FBTrace.sysout("debugger.onEventScriptCreated script.fileName="+outerScript.fileName+"\n") }var context=this.breakContext; delete this.breakContext; var script=frame.script; var creatorURL=normalizeURL(frame.script.fileName); var innerScriptArray=[]; try{var source=script.functionSource; while(innerScripts.hasMoreElements()){var inner=innerScripts.getNext(); source+="\n"+inner.functionSource; innerScriptArray.push(inner) }}catch(exc){var source=creatorURL+"/"+getUniqueId() }var lines=splitLines(source); var urlDescribed=this.getDynamicURL(context,normalizeURL(frame.script.fileName),lines,"event"); var url=urlDescribed.href; context.sourceCache.invalidate(url); context.sourceCache.storeSplitLines(url,lines); var sourceFile=new Firebug.EventSourceFile(url,frame.script,"event:"+script.functionName+"."+script.tag,lines,new ArrayEnumerator(innerScriptArray)); this.watchSourceFile(context,sourceFile); if(FBTrace.DBG_EVENTS){FBTrace.sysout("debugger.onEventScriptCreated url="+sourceFile.href+"\n") }if(FBTrace.DBG_EVENTS){FBTrace.sysout("debugger.onEventScriptCreated sourceFileMap:",context.sourceFileMap) }if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("debugger.onEventScriptCreated sourcefile="+sourceFile.toString()+" -> "+context.getName()+"\n") }dispatch(this.fbListeners,"onEventScriptCreated",[context,frame,url]); return sourceFile },onTopLevelScriptCreated:function(frame,outerScript,innerScripts){if(FBTrace.DBG_TOPLEVEL){FBTrace.sysout("debugger("+this.debuggerName+").onTopLevelScriptCreated script.fileName="+outerScript.fileName+"\n") }var context=this.breakContext; delete this.breakContext; var script=frame.script; var url=normalizeURL(script.fileName); if(FBTrace.DBG_TOPLEVEL){FBTrace.sysout("debugger.onTopLevelScriptCreated frame.script.tag="+frame.script.tag+" has url="+url) }var isInline=false; if(FBTrace.DBG_TOPLEVEL){FBTrace.sysout("debugger.onTopLevelScriptCreated has inLine:"+isInline+" url="+url) }if(isInline){var href=url+"/"+context.dynamicURLIndex++; sourceFile=new Firebug.ScriptTagAppendSourceFile(href,script,script.lineExtent,innerScripts); this.watchSourceFile(context,sourceFile); context.pendingScriptTagSourceFile=sourceFile }else{var sourceFile=context.sourceFileMap[url]; if(sourceFile&&(sourceFile instanceof Firebug.TopLevelSourceFile)){if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("debugger.onTopLevelScriptCreated reuse sourcefile="+sourceFile.toString()+" -> "+context.getName()+" ("+context.uid+")\n") }if(!sourceFile.outerScript||!sourceFile.outerScript.isValid){sourceFile.outerScript=outerScript }Firebug.SourceFile.addScriptsToSourceFile(sourceFile,outerScript,innerScripts) }else{sourceFile=new Firebug.TopLevelSourceFile(url,script,script.lineExtent,innerScripts); this.watchSourceFile(context,sourceFile); if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("debugger.onTopLevelScriptCreated create sourcefile="+sourceFile.toString()+" -> "+context.getName()+" ("+context.uid+")\n") }}}dispatch(this.fbListeners,"onTopLevelScriptCreated",[context,frame,sourceFile.href]); return sourceFile },getContextByFrame:function(frame){if(FBTrace.DBG_BP){FBTrace.sysout("debugger.getContextByFrame") }var win=fbs.getOutermostScope(frame); return win?TabWatcher.getContextByWindow(win):null },watchSourceFile:function(context,sourceFile){context.addSourceFile(sourceFile) },unwatchSourceFile:function(context,sourceFile){context.removeSourceFile(sourceFile) },onToggleBreakpoint:function(url,lineNo,isSet,props){if(props.debuggerName!=this.debuggerName){if(FBTrace.DBG_BP){FBTrace.sysout("debugger("+this.debuggerName+").onToggleBreakpoint ignoring toggle for "+props.debuggerName+" target "+lineNo+"@"+url+"\n") }return }var found=false; for(var i=0; i "+context.getName()+"\n") }return sourceFile },getConstructorExpression:function(caller_frame,context){var decompiled_lineno=getLineAtPC(caller_frame,context); if(FBTrace.DBG_EVAL){FBTrace.sysout("debugger.getConstructoreExpression decompiled_lineno:"+decompiled_lineno+"\n") }var decompiled_lines=splitLines(caller_frame.script.functionSource); if(FBTrace.DBG_EVAL){FBTrace.sysout("debugger.getConstructoreExpression decompiled_lines:",decompiled_lines) }var candidate_line=decompiled_lines[decompiled_lineno-1]; if(FBTrace.DBG_EVAL){FBTrace.sysout("debugger.getConstructoreExpression candidate_line:"+candidate_line+"\n") }if(candidate_line&&candidate_line!=null){var m=reFunction.exec(candidate_line); if(m){var arguments=m[1] }}if(FBTrace.DBG_EVAL){FBTrace.sysout("debugger.getConstructoreExpression arguments:"+arguments+"\n") }if(arguments){var lastComma=arguments.lastIndexOf(","); return arguments.substring(lastComma+1) }return null },getEvalLevelSourceFile:function(frame,context,innerScripts){var eval_expr=this.getEvalExpression(frame,context); if(FBTrace.DBG_EVAL){FBTrace.sysout("getEvalLevelSourceFile eval_expr:"+eval_expr+"\n") }if(eval_expr&&!Firebug.decompileEvals){var source=this.getEvalBody(frame,"lib.getEvalLevelSourceFile.getEvalBody",1,eval_expr); var mapType=PCMAP_SOURCETEXT }else{var source=frame.script.functionSource; var mapType=PCMAP_PRETTYPRINT }var lines=splitLines(source); if(FBTrace.DBG_EVAL){FBTrace.sysout("getEvalLevelSourceFile "+lines.length+"lines, mapType:"+((mapType==PCMAP_SOURCETEXT)?"SOURCE":"PRETTY")+" source:"+source+"\n") }var url=this.getDynamicURL(context,normalizeURL(frame.script.fileName),lines,"eval"); context.sourceCache.invalidate(url.href); context.sourceCache.storeSplitLines(url.href,lines); var sourceFile=new Firebug.EvalLevelSourceFile(url,frame.script,eval_expr,lines,mapType,innerScripts); this.watchSourceFile(context,sourceFile); if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("debugger.getEvalLevelSourceFile sourcefile="+sourceFile.toString()+" -> "+context.getName()+"\n") }return sourceFile },getDynamicURL:function(context,callerURL,lines,kind){var url=this.getURLFromLastLine(context,lines); if(url){return url }var url=this.getSequentialURL(context,callerURL,kind); if(url){return url }var url=this.getURLFromMD5(callerURL,lines,kind); if(url){return url }var url=this.getDataURLForScript(callerURL,lines); if(url){return url }return url },getURLFromLastLine:function(context,lines){var url=null; var reURIinComment=/\/\/@\ssourceURL=\s*(\S*?)\s*$/m; var m=reURIinComment.exec(lines[lines.length-1]); if(m){if(m[1]&&m[1].indexOf("://")==-1){var loc=context.window.location; if(m[1].charAt(0)!="/"){m[1]="/"+m[1] }m[1]=loc.protocol+"//"+loc.host+m[1] }var href=new String(m[1]); url={href:href,kind:"source"}; if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("debugger.getURLFromLastLine "+url.href,url) }}else{if(FBTrace.DBG_SOURCEFILES){FBTrace.sysout("debugger.getURLFromLastLine no match"+lines[lines.length-1]) }}return url },getSequentialURL:function(context,callerURL,kind){var url=null; if(!context.dynamicURLhasBP){var href=new String(callerURL+(kind?"/"+kind+"/":"/nokind/")+"seq/"+(context.dynamicURLIndex++)); url={href:href,kind:"seq"}; if(FBTrace.DBG_SOURCEFILES||isNaN(context.dynamicURLIndex)){FBTrace.sysout("debugger.getSequentialURL context:"+context.getName()+" url:"+url.href+" index: "+context.dynamicURLIndex,url) }}return url },getURLFromMD5:function(callerURL,lines,kind){this.hash_service.init(this.nsICryptoHash.MD5); var source=lines.join("\n"); byteArray=[]; for(var j=0; j0){context.invalidatePanels("script") }},destroyContext:function(context,persistedState){Firebug.ActivableModule.destroyContext.apply(this,arguments); context.window.document.removeEventListener("DOMNodeInserted",context.watchScriptAdditions,false); if(context.stopped){this.abort(context) }if(persistedState){if(context.dynamicURLhasBP){persistedState.dynamicURLhasBP=context.dynamicURLhasBP }else{delete persistedState.dynamicURLhasBP }}},updateOption:function(name,value){if(name=="breakOnErrors"){$("cmd_breakOnErrors").setAttribute("checked",value) }else{if(name=="decompileEvals"){$("cmd_decompileEvals").setAttribute("checked",value) }}},getObjectByURL:function(context,url){var sourceFile=getSourceFileByHref(url,context); if(sourceFile){return new SourceLink(sourceFile.href,0,"js") }},shutdown:function(){this.unregisterClient(Firebug); fbs.unregisterDebugger(this) },registerDebugger:function(){if(FBTrace.DBG_INITIALIZE){FBTrace.sysout("registerDebugger this.registered: "+this.registered) }if(this.registered){return }this.registered=true; var check=fbs.registerDebugger(this); if(FBTrace.DBG_INITIALIZE){FBTrace.sysout("debugger.registerDebugger "+check+" debuggers") }},unregisterDebugger:function(){if(FBTrace.DBG_INITIALIZE){FBTrace.sysout("debugger.unregisterDebugger this.registered: "+this.registered) }if(!this.registered){return }if(Firebug.Profiler.isProfiling()){return }var check=fbs.unregisterDebugger(this); this.registered=false; if(FBTrace.DBG_ACTIVATION){FBTrace.sysout("debugger.unregisterDebugger: "+check+" debuggers") }},onSourceFileCreated:function(context,sourceFile){context.invalidatePanels("script","breakpoints") },onObserverChange:function(observer){if(this.hasObservers()){this.activateDebugger() }else{this.deactivateDebugger() }},activateDebugger:function(){this.registerDebugger(); if(Firebug.currentContext&&!fbs.isJSDActive()){fbs.unPause() }if(FBTrace.DBG_PANELS||FBTrace.DBG_ACTIVATION){FBTrace.sysout("debugger.activate;") }},deactivateDebugger:function(){if(this.dependents&&this.dependents.length>0){for(var i=0; i0){if(!this.isAlwaysEnabled()){this.activateDebugger(); if(Firebug.currentContext){Firebug.Console.log("enabling javascript debugger to support "+dependentAddedOrRemoved.dispatchName,Firebug.currentContext) }}}},onSuspendingFirebug:function(){var anyStopped=TabWatcher.iterateContexts(function isAnyStopped(context){return context.stopped }); return anyStopped },onSuspendFirebug:function(){if(!Firebug.Debugger.isAlwaysEnabled()){return }var paused=fbs.pause(); if(FBTrace.DBG_ACTIVATION){FBTrace.sysout("debugger.onSuspendFirebug paused: "+paused+" isAlwaysEnabled "+Firebug.Debugger.isAlwaysEnabled()+"\n") }if(!paused){return true }return false },onResumeFirebug:function(){if(!Firebug.Debugger.isAlwaysEnabled()){return }var unpaused=fbs.unPause(); if(FBTrace.DBG_ACTIVATION){FBTrace.sysout("debugger.onResumeFirebug unpaused: "+unpaused+" isAlwaysEnabled "+Firebug.Debugger.isAlwaysEnabled()) }if(FBTrace.DBG_ERRORS&&!this.registered&&Firebug.Debugger.isAlwaysEnabled()){FBTrace.sysout("debugger.onResumeFirebug but debugger "+Firebug.Debugger.debuggerName+" not registered! *** ") }},ableWatchSidePanel:function(context){if(Firebug.Console.isAlwaysEnabled()){var watchPanel=context.getPanel("watches",true); if(watchPanel){return watchPanel }}return null },onScriptFilterMenuTooltipShowing:function(tooltip,context){if(FBTrace.DBG_OPTIONS){FBTrace.sysout("onScriptFilterMenuTooltipShowing not implemented") }},onScriptFilterMenuCommand:function(event,context){var menu=event.target; Firebug.setPref(Firebug.servicePrefDomain,"scriptsFilter",menu.value); Firebug.Debugger.filterMenuUpdate() },menuFullLabel:{"static":$STR("ScriptsFilterStatic"),evals:$STR("ScriptsFilterEval"),events:$STR("ScriptsFilterEvent"),all:$STR("ScriptsFilterAll")},menuShortLabel:{"static":$STR("ScriptsFilterStaticShort"),evals:$STR("ScriptsFilterEvalShort"),events:$STR("ScriptsFilterEventShort"),all:$STR("ScriptsFilterAllShort")},onScriptFilterMenuPopupShowing:function(menu,context){if(this.menuTooltip){this.menuTooltip.fbEnabled=false }var items=menu.getElementsByTagName("menuitem"); var value=this.filterButton.value; for(var i=0; isourceBox.lastViewableLine){break }lineNo++ }if(FBTrace.DBG_BP||FBTrace.DBG_LINETABLE){FBTrace.sysout("debugger.markExecutableLines DONE: "+sourceFile.toString()+"\n") }},setLineBreakpoints:function(sourceFile,sourceBox){return; fbs.enumerateBreakpoints(sourceFile.href,{call:function(url,line,props,scripts){var scriptRow=sourceBox.getLineNode(line); if(scriptRow){scriptRow.setAttribute("breakpoint","true"); if(props.disabled){scriptRow.setAttribute("disabledBreakpoint","true") }if(props.condition){scriptRow.setAttribute("condition","true") }}if(FBTrace.DBG_LINETABLE){FBTrace.sysout("debugger.setLineBreakpoints found "+scriptRow+" for "+line+"@"+sourceFile.href+"\n") }}}) }}); Firebug.ScriptPanel.prototype=extend(Firebug.SourceBoxPanel,{updateSourceBox:function(sourceBox){if(this.scrollInfo&&(this.scrollInfo.location==this.location)){this.scrollToLine(this.location,this.scrollInfo.previousCenterLine) }delete this.scrollInfo },getSourceType:function(){return"js" },getDecorator:function(sourceBox){return Firebug.ScriptPanel.decorator },create:function(){var doc=Firebug.chrome.document; var styleSheet=createStyleSheet(doc,Env.Location.skinDir+"debugger.css"); addStyleSheet(doc,styleSheet); var tempContext=new Firebug.TabContext(window,Firebug.browser,Firebug.chrome,{}); this.context=extend(Firebug.browser,tempContext); this.context.setTimeout=Firebug.browser.setTimeout; this.context.clearTimeout=Firebug.browser.clearTimeout; this.context.setInterval=Firebug.browser.setInterval; this.context.clearInterval=Firebug.browser.clearInterval; Firebug.SourceBoxPanel.create.apply(this,arguments) },initialize:function(context,doc){this.location=null; Firebug.SourceBoxPanel.initialize.apply(this,arguments) },showFunction:function(fn){var sourceLink=findSourceForFunction(fn,this.context); if(sourceLink){this.showSourceLink(sourceLink) }else{if(FBTrace.DBG_ERRORS){FBTrace.sysout("no sourcelink for function") }}},showSourceLink:function(sourceLink){var sourceFile=getSourceFileByHref(sourceLink.href,this.context); if(sourceFile){this.navigate(sourceFile); if(sourceLink.line){this.scrollToLine(sourceLink.href,sourceLink.line,this.jumpHighlightFactory(sourceLink.line,this.context)); dispatch(this.fbListeners,"onShowSourceLink",[this,sourceLink.line]) }if(sourceLink==this.selection){delete this.selection }}},highlightExecutionLine:function(){var highlightingAttribute="exe_line"; if(this.executionLine){this.executionLine.removeAttribute(highlightingAttribute) }var sourceBox=this.selectedSourceBox; var lineNode=sourceBox.getLineNode(this.executionLineNo); this.executionLine=lineNode; if(sourceBox.breakCauseBox){sourceBox.breakCauseBox.hide(); delete sourceBox.breakCauseBox }if(this.executionLine){lineNode.setAttribute(highlightingAttribute,"true"); if(this.context.breakingCause&&!this.context.breakingCause.shown){this.context.breakingCause.shown=true; var cause=this.context.breakingCause; if(cause){var sourceLine=getChildByClass(lineNode,"sourceLine"); sourceBox.breakCauseBox=new Firebug.Breakpoint.BreakNotification(this.document,cause); sourceBox.breakCauseBox.show(sourceLine,this,"not an editor, yet?") }}}if(FBTrace.DBG_BP||FBTrace.DBG_STACK||FBTrace.DBG_SOURCEFILES){FBTrace.sysout("sourceBox.highlightExecutionLine lineNo: "+this.executionLineNo+" lineNode="+lineNode+" in "+sourceBox.repObject.href) }return(this.executionLineNo>0) },showStackFrameXB:function(frameXB){if(this.context.stopped){this.setCurrentStackFrame(frameXB); this.showExecutingSourceFile(frameXB.sourceFile,frameXB) }else{this.showNoStackFrame() }},showStackFrame:function(frame){if(!frame||(frame&&!frame.isValid)){if(FBTrace.DBG_STACK){FBTrace.sysout("showStackFrame no valid frame\n") }this.showNoStackFrame(); return }var sourceFile=Firebug.SourceFile.getSourceFileByScript(this.context,frame.script); if(!sourceFile){if(FBTrace.DBG_STACK){FBTrace.sysout("showStackFrame no sourceFile in context "+this.context.getName()+"for frame.script: "+frame.script.fileName) }this.showNoStackFrame(); return }this.setCurrentStackFrame(frame); this.showExecutingSourceFile(sourceFile,frame) },showExecutingSourceFile:function(sourceFile,frame){this.context.executingSourceFile=sourceFile; this.executionFile=sourceFile; if(this.executionFile){var url=this.executionFile.href; var analyzer=this.executionFile.getScriptAnalyzer(frame.script); this.executionLineNo=analyzer.getSourceLineFromFrame(this.context,frame); if(FBTrace.DBG_STACK){FBTrace.sysout("showStackFrame executionFile:"+this.executionFile+"@"+this.executionLineNo+"\n") }if(this.context.breakingCause){this.context.breakingCause.lineNo=this.executionLineNo }this.scrollToLine(url,this.executionLineNo,bind(this.highlightExecutionLine,this)); this.context.throttle(this.updateInfoTip,this); return }else{if(FBTrace.DBG_STACK){FBTrace.sysout("showStackFrame no getSourceFileByScript for tag="+frame.script.tag+"\n") }this.showNoStackFrame() }},showNoStackFrame:function(){this.executionFile=null; this.executionLineNo=-1; if(this.selectedSourceBox){this.highlightExecutionLine() }var panelStatus=Firebug.chrome.getPanelStatusElements(); panelStatus.clear(); this.updateInfoTip(); var watchPanel=this.context.getPanel("watches",true); if(watchPanel){watchPanel.showEmptyMembers() }},setCurrentStackFrame:function(frame){if(frame instanceof Ci.jsdIStackFrame){this.context.currentFrame=frame }else{if(frame instanceof StackFrame){this.context.currentFrame=frame.getNativeFrame() }}},toggleBreakpoint:function(lineNo){var sourceFile=this.getSourceFileBySourceBox(this.selectedSourceBox); var lineNode=this.selectedSourceBox.getLineNode(lineNo); if(!sourceFile&&FBTrace.DBG_ERRORS){FBTrace.sysout("toggleBreakpoint no sourceFile! ",this) }if(FBTrace.DBG_BP){FBTrace.sysout("debugger.toggleBreakpoint lineNo="+lineNo+" sourceFile.href:"+sourceFile.href+" lineNode.breakpoint:"+(lineNode?lineNode.getAttribute("breakpoint"):"(no lineNode)")+"\n",this.selectedSourceBox) }if(lineNode.getAttribute("breakpoint")=="true"){fbs.clearBreakpoint(sourceFile.href,lineNo) }else{fbs.setBreakpoint(sourceFile,lineNo,null,Firebug.Debugger) }},toggleDisableBreakpoint:function(lineNo){var sourceFile=this.getSourceFileBySourceBox(this.selectedSourceBox); var lineNode=this.selectedSourceBox.getLineNode(lineNo); if(lineNode.getAttribute("disabledBreakpoint")=="true"){fbs.enableBreakpoint(sourceFile.href,lineNo) }else{fbs.disableBreakpoint(sourceFile.href,lineNo) }},editBreakpointCondition:function(lineNo){var sourceRow=this.selectedSourceBox.getLineNode(lineNo); var sourceLine=getChildByClass(sourceRow,"sourceLine"); var condition=fbs.getBreakpointCondition(this.location.href,lineNo); if(condition){var watchPanel=this.context.getPanel("watches",true); watchPanel.removeWatch(condition); watchPanel.rebuild() }Firebug.Editor.startEditing(sourceLine,condition) },addSelectionWatch:function(){var watchPanel=this.context.getPanel("watches",true); if(watchPanel){var selection=this.document.defaultView.getSelection(); var source=this.getSourceLinesFrom(selection); watchPanel.addWatch(source) }},copySource:function(){var selection=this.document.defaultView.getSelection(); var source=this.getSourceLinesFrom(selection); copyToClipboard(source) },updateInfoTip:function(){var infoTip=this.panelBrowser.infoTip; if(infoTip&&this.infoTipExpr){this.populateInfoTip(infoTip,this.infoTipExpr) }},populateInfoTip:function(infoTip,expr){if(!expr||isJavaScriptKeyword(expr)){return false }var self=this; Firebug.CommandLine.evaluate(expr,this.context,null,this.context.getGlobalScope(),function success(result,context){var rep=Firebug.getRep(result,context); var tag=rep.shortTag?rep.shortTag:rep.tag; if(FBTrace.DBG_STACK){FBTrace.sysout("populateInfoTip result is "+result,result) }tag.replace({object:result},infoTip); Firebug.chrome.contextMenuObject=result; self.infoTipExpr=expr },function failed(result,context){self.infoTipExpr="" }); return(self.infoTipExpr==expr) },onMouseDown:function(event){var target=event.target||event.srcElement; if(getAncestorByClass(target,"breakNotification")){return }var sourceLine=getAncestorByClass(target,"sourceLine"); if(!sourceLine){return }var sourceRow=sourceLine.parentNode; var sourceFile=sourceRow.parentNode.repObject; var lineNo=parseInt(sourceLine.textContent); if(isLeftClick(event)){this.toggleBreakpoint(lineNo) }else{if(isShiftClick(event)){this.toggleDisableBreakpoint(lineNo) }else{if(isControlClick(event)||isMiddleClick(event)){Firebug.Debugger.runUntil(this.context,sourceFile,lineNo,Firebug.Debugger); cancelEvent(event) }}}},onContextMenu:function(event){var sourceLine=getAncestorByClass(event.target||event.srcElement,"sourceLine"); if(!sourceLine){return }var lineNo=parseInt(sourceLine.textContent); this.editBreakpointCondition(lineNo); cancelEvent(event) },onMouseOver:function(event){var sourceLine=getAncestorByClass(event.target||event.srcElement,"sourceLine"); if(sourceLine){if(this.hoveredLine){removeClass(this.hoveredLine.parentNode,"hovered") }this.hoveredLine=sourceLine; if(sourceLine){setClass(sourceLine.parentNode,"hovered") }}},onMouseOut:function(event){var sourceLine=getAncestorByClass(event.relatedTarget,"sourceLine"); if(!sourceLine){if(this.hoveredLine){removeClass(this.hoveredLine.parentNode,"hovered") }delete this.hoveredLine }},onScroll:function(event){this.reView(this.selectedSourceBox) },name:"script2",title:"New Script",searchable:true,breakable:true,enableA11y:true,order:40,initialize:function(context,doc){this.onMouseDown=bind(this.onMouseDown,this); this.onContextMenu=bind(this.onContextMenu,this); this.onMouseOver=bind(this.onMouseOver,this); this.onMouseOut=bind(this.onMouseOut,this); this.onScroll=bind(this.onScroll,this); this.panelSplitter=$("fbPanelSplitter"); this.sidePanelDeck=$("fbSidePanelDeck"); Firebug.SourceBoxPanel.initialize.apply(this,arguments); this.panelNode.style.fontFamily="monospace"; Firebug.chrome.$=function(id){return $(id,Firebug.chrome.document) }; Firebug.uiListeners=Firebug.uiListeners||[]; Firebug.ActivablePanel.initializeNode=function(){}; Firebug.Panel.initializeNode=function(){}; this.document=Firebug.chrome.document; this.initializeNode(); var url=Env.Location.app; var source=new Firebug.ScriptTagSourceFile(this.context,url,0); this.showSourceFile(source) },shutdown:function(){if(this.selectedSourceBox){this.clearSourceBox(this.selectedSourceBox) }this.destroyNode(); Firebug.SourceBoxPanel.shutdown.apply(this,arguments) },destroy:function(state){state=state||{}; delete this.selection; persistObjects(this,state); var sourceBox=this.selectedSourceBox; if(sourceBox){state.previousCenterLine=sourceBox.centerLine; delete this.selectedSourceBox }Firebug.SourceBoxPanel.destroy.apply(this,arguments) },detach:function(oldChrome,newChrome){if(this.selectedSourceBox){this.lastSourceScrollTop=this.selectedSourceBox.scrollTop }if(this.context.stopped){Firebug.Debugger.detachListeners(this.context,oldChrome); Firebug.Debugger.attachListeners(this.context,newChrome) }Firebug.Debugger.syncCommands(this.context); Firebug.SourceBoxPanel.detach.apply(this,arguments) },reattach:function(doc){Firebug.SourceBoxPanel.reattach.apply(this,arguments); setTimeout(bind(function delayScrollToLastTop(){if(this.lastSourceScrollTop){this.selectedSourceBox.scrollTop=this.lastSourceScrollTop; delete this.lastSourceScrollTop }},this)) },initializeNode:function(oldPanelNode){this.tooltip=this.document.createElement("div"); setClass(this.tooltip,"scriptTooltip"); this.tooltip.setAttribute("aria-live","polite"); obscure(this.tooltip,true); this.panelNode.appendChild(this.tooltip); addEvent(this.panelNode,"mousedown",this.onMouseDown); addEvent(this.panelNode,"contextmenu",this.onContextMenu); addEvent(this.panelNode,"mouseover",this.onMouseOver); addEvent(this.panelNode,"mouseout",this.onMouseOut); addEvent(this.scrollingElement,"scroll",this.onScroll,true); Firebug.SourceBoxPanel.initializeNode.apply(this,arguments) },destroyNode:function(){if(this.tooltipTimeout){clearTimeout(this.tooltipTimeout) }removeEvent(this.panelNode,"mousedown",this.onMouseDown); removeEvent(this.panelNode,"contextmenu",this.onContextMenu); removeEvent(this.panelNode,"mouseover",this.onMouseOver); removeEvent(this.panelNode,"mouseout",this.onMouseOut); removeEvent(this.scrollingElement,"scroll",this.onScroll,true); Firebug.SourceBoxPanel.destroyNode.apply(this,arguments) },clear:function(){clearNode(this.panelNode) },showWarning:function(){var aLocation=this.getDefaultLocation(); var jsEnabled=Firebug.getPref("javascript","enabled"); if(FBL.fbs.activitySuspended&&!this.context.stopped){this.restored=false; this.activeWarningTag=WarningRep.showActivitySuspended(this.panelNode) }else{if(!jsEnabled){this.activeWarningTag=WarningRep.showNotEnabled(this.panelNode) }else{if(this.context.allScriptsWereFiltered){this.activeWarningTag=WarningRep.showFiltered(this.panelNode) }else{if(aLocation&&!this.context.jsDebuggerActive){this.activeWarningTag=WarningRep.showInactive(this.panelNode) }else{if(!aLocation){this.activeWarningTag=WarningRep.showNoScript(this.panelNode) }else{return false }}}}}return true },ishow:function(state){var enabled=Firebug.Debugger.isAlwaysEnabled(); if(!enabled){return }var active=!this.showWarning(); if(active){this.location=this.getDefaultLocation(); if(this.context.loaded){if(!this.restored){delete this.location; restoreLocation(this,state); this.restored=true }else{if(!this.selectedSourceBox){this.navigate(this.location) }else{this.location=this.selectedSourceBox.repObject }}if(state&&this.location){this.scrollInfo={location:this.location,previousCenterLine:state.previousCenterLine} }}else{this.navigate(this.location) }this.highlight(this.context.stopped); var breakpointPanel=this.context.getPanel("breakpoints",true); if(breakpointPanel){breakpointPanel.refresh() }}collapse(Firebug.chrome.$("fbToolbar"),!active); this.showToolbarButtons("fbLocationSeparator",active); this.showToolbarButtons("fbDebuggerButtons",active); this.showToolbarButtons("fbLocationButtons",active); this.showToolbarButtons("fbScriptButtons",active); this.showToolbarButtons("fbStatusButtons",active); this.panelSplitter.collapsed=!active; this.sidePanelDeck.collapsed=!active },ihide:function(state){this.highlight(this.context.stopped); var panelStatus=Firebug.chrome.getPanelStatusElements(); FBL.hide(panelStatus,false); delete this.infoTipExpr },search:function(text,reverse){var sourceBox=this.selectedSourceBox; if(!text||!sourceBox){delete this.currentSearch; return false }var m=reLineNumber.exec(text); if(m){if(!m[1]){return true }var lineNo=parseInt(m[1]); if(!isNaN(lineNo)&&(lineNo>0)&&(lineNo=priorScrollTop){panelNode.scrollTop=priorScrollTop }},delay)); delay+=insertInterval }}if(offscreen){timeouts.push(this.context.setTimeout(function(){if(panelNode.firstChild){panelNode.replaceChild(table,panelNode.firstChild) }else{panelNode.appendChild(table) }panelNode.scrollTop=priorScrollTop },delay)) }else{timeouts.push(this.context.setTimeout(function(){panelNode.scrollTop=scrollTop==undefined?0:scrollTop },delay)) }this.timeouts=timeouts },showEmptyMembers:function(){FirebugReps.Warning.tag.replace({object:"NoMembersWarning"},this.panelNode) },findPathObject:function(object){var pathIndex=-1; for(var i=0; i1){for(var i=1; i"); r.push(i==0?"window":path[i]||"Object"); r.push(""); if(i>') }}panel.statusBarNode.innerHTML=r.join("") }; var DOMMainPanel=Firebug.DOMPanel=function(){}; Firebug.DOMPanel.DirTable=DirTablePlate; DOMMainPanel.prototype=extend(Firebug.DOMBasePanel.prototype,{onClickStatusBar:function(event){var target=event.srcElement||event.target; var element=getAncestorByClass(target,"fbHover"); if(element){var pathIndex=element.getAttribute("pathIndex"); if(pathIndex){this.select(this.getPathObject(pathIndex)) }}},selectRow:function(row,target){if(!target){target=row.lastChild.firstChild }if(!target||!target.repObject){return }this.pathToAppend=getPath(row); var valueBox=row.lastChild.firstChild; if(hasClass(valueBox,"objectBox-array")){var arrayIndex=FirebugReps.Arr.getItemIndex(target); this.pathToAppend.push(arrayIndex) }this.select(target.repObject,true) },onClick:function(event){var target=event.srcElement||event.target; var repNode=Firebug.getRepNode(target); if(repNode){var row=getAncestorByClass(target,"memberRow"); if(row){this.selectRow(row,repNode); cancelEvent(event) }}},name:"DOM",title:"DOM",searchable:true,statusSeparator:">",options:{hasToolButtons:true,hasStatusBar:true},create:function(){Firebug.DOMBasePanel.prototype.create.apply(this,arguments); this.onClick=bind(this.onClick,this); this.onClickStatusBar=bind(this.onClickStatusBar,this); this.panelNode.style.padding="0 1px" },initialize:function(oldPanelNode){Firebug.DOMBasePanel.prototype.initialize.apply(this,arguments); addEvent(this.panelNode,"click",this.onClick); this.ishow(); addEvent(this.statusBarNode,"click",this.onClickStatusBar) },shutdown:function(){removeEvent(this.panelNode,"click",this.onClick); Firebug.DOMBasePanel.prototype.shutdown.apply(this,arguments) }}); Firebug.registerPanel(DOMMainPanel); var getMembers=function getMembers(object,level){if(!level){level=0 }var ordinals=[],userProps=[],userClasses=[],userFuncs=[],domProps=[],domFuncs=[],domConstants=[]; try{var domMembers=getDOMMembers(object); if(object.wrappedJSObject){var insecureObject=object.wrappedJSObject }else{var insecureObject=object }if(isIE&&isFunction(object)){addMember("user",userProps,"prototype",object.prototype,level) }for(var name in insecureObject){if(ignoreVars[name]==1){continue }var val; try{val=insecureObject[name] }catch(exc){if(FBTrace.DBG_ERRORS&&FBTrace.DBG_DOM){FBTrace.sysout("dom.getMembers cannot access "+name,exc) }}var ordinal=parseInt(name); if(ordinal||ordinal==0){addMember("ordinal",ordinals,name,val,level) }else{if(isFunction(val)){if(isClassFunction(val)&&!(name in domMembers)){addMember("userClass",userClasses,name,val,level) }else{if(name in domMembers){addMember("domFunction",domFuncs,name,val,level,domMembers[name]) }else{addMember("userFunction",userFuncs,name,val,level) }}}else{var prefix=""; if(name in domMembers&&!(name in domConstantMap)){addMember("dom",domProps,(prefix+name),val,level,domMembers[name]) }else{if(name in domConstantMap){addMember("dom",domConstants,(prefix+name),val,level) }else{addMember("user",userProps,(prefix+name),val,level) }}}}}}catch(exc){throw exc; if(FBTrace.DBG_ERRORS&&FBTrace.DBG_DOM){FBTrace.sysout("dom.getMembers FAILS: ",exc) }}function sortName(a,b){return a.name>b.name?1:-1 }function sortOrder(a,b){return a.order>b.order?1:-1 }var members=[]; members.push.apply(members,ordinals); Firebug.showUserProps=true; Firebug.showUserFuncs=true; Firebug.showDOMProps=true; Firebug.showDOMFuncs=true; Firebug.showDOMConstants=true; if(Firebug.showUserProps){userProps.sort(sortName); members.push.apply(members,userProps) }if(Firebug.showUserFuncs){userClasses.sort(sortName); members.push.apply(members,userClasses); userFuncs.sort(sortName); members.push.apply(members,userFuncs) }if(Firebug.showDOMProps){domProps.sort(sortName); members.push.apply(members,domProps) }if(Firebug.showDOMFuncs){domFuncs.sort(sortName); members.push.apply(members,domFuncs) }if(Firebug.showDOMConstants){members.push.apply(members,domConstants) }return members }; function expandMembers(members,toggles,offset,level){var expanded=0; for(var i=offset; ilevel){break }if(toggles.hasOwnProperty(member.name)){member.open="opened"; var newMembers=getMembers(member.value,level+1); var args=[i+1,0]; args.push.apply(args,newMembers); members.splice.apply(members,args); expanded+=newMembers.length; i+=newMembers.length+expandMembers(members,toggles[member.name],i+1,level+1) }}return expanded }function isClassFunction(fn){try{for(var name in fn.prototype){return true }}catch(exc){}return false }var hasProperties=function hasProperties(ob){try{for(var name in ob){return true }}catch(exc){}if(isFunction(ob)){return true }return false }; FBL.ErrorCopy=function(message){this.message=message }; var addMember=function addMember(type,props,name,value,level,order){var rep=Firebug.getRep(value); var tag=rep.shortTag?rep.shortTag:rep.tag; var ErrorCopy=function(){}; var valueType=typeof(value); var hasChildren=hasProperties(value)&&!(value instanceof ErrorCopy)&&(isFunction(value)||(valueType=="object"&&value!=null)||(valueType=="string"&&value.length>Firebug.stringCropLength)); props.push({name:name,value:value,type:type,rowClass:"memberRow-"+type,open:"",order:order,level:level,indent:level*16,hasChildren:hasChildren,tag:tag}) }; var getWatchRowIndex=function getWatchRowIndex(row){var index=-1; for(; row&&hasClass(row,"watchRow"); row=row.previousSibling){++index }return index }; var getRowName=function getRowName(row){var node=row.firstChild; return node.textContent?node.textContent:node.innerText }; var getRowValue=function getRowValue(row){return row.lastChild.firstChild.repObject }; var getRowOwnerObject=function getRowOwnerObject(row){var parentRow=getParentRow(row); if(parentRow){return getRowValue(parentRow) }}; var getParentRow=function getParentRow(row){var level=parseInt(row.getAttribute("level"))-1; for(row=row.previousSibling; row; row=row.previousSibling){if(parseInt(row.getAttribute("level"))==level){return row }}}; var getPath=function getPath(row){var name=getRowName(row); var path=[name]; var level=parseInt(row.getAttribute("level"))-1; for(row=row.previousSibling; row; row=row.previousSibling){if(parseInt(row.getAttribute("level"))==level){var name=getRowName(row); path.splice(0,0,name); --level }}return path }; Firebug.DOM=extend(Firebug.Module,{getPanel:function(){return Firebug.chrome?Firebug.chrome.getPanel("DOM"):null }}); Firebug.registerModule(Firebug.DOM); var lastHighlightedObject; function DOMSidePanel(){}DOMSidePanel.prototype=extend(Firebug.DOMBasePanel.prototype,{selectRow:function(row,target){if(!target){target=row.lastChild.firstChild }if(!target||!target.repObject){return }this.pathToAppend=getPath(row); var valueBox=row.lastChild.firstChild; if(hasClass(valueBox,"objectBox-array")){var arrayIndex=FirebugReps.Arr.getItemIndex(target); this.pathToAppend.push(arrayIndex) }var object=target.repObject; if(instanceOf(object,"Element")){Firebug.HTML.selectTreeNode(ElementCache(object)) }else{Firebug.chrome.selectPanel("DOM"); Firebug.chrome.getPanel("DOM").select(object,true) }},onClick:function(event){var target=event.srcElement||event.target; var repNode=Firebug.getRepNode(target); if(repNode){var row=getAncestorByClass(target,"memberRow"); if(row){this.selectRow(row,repNode); cancelEvent(event) }}},name:"DOMSidePanel",parentPanel:"HTML",title:"DOM",options:{hasToolButtons:true},isInitialized:false,create:function(){Firebug.DOMBasePanel.prototype.create.apply(this,arguments); this.onClick=bind(this.onClick,this) },initialize:function(){Firebug.DOMBasePanel.prototype.initialize.apply(this,arguments); addEvent(this.panelNode,"click",this.onClick); var selection=ElementCache.get(FirebugChrome.selectedHTMLElementId); if(selection){this.select(selection,true) }},shutdown:function(){removeEvent(this.panelNode,"click",this.onClick); Firebug.DOMBasePanel.prototype.shutdown.apply(this,arguments) },reattach:function(oldChrome){this.toggles=oldChrome.getPanel("DOMSidePanel").toggles }}); Firebug.registerPanel(DOMSidePanel) }}); FBL.FBTrace={}; (function(){var traceOptions={DBG_TIMESTAMP:1,DBG_INITIALIZE:1,DBG_CHROME:1,DBG_ERRORS:1,DBG_DISPATCH:1,DBG_CSS:1}; this.module=null; this.initialize=function(){if(!this.messageQueue){this.messageQueue=[] }for(var name in traceOptions){this[name]=traceOptions[name] }}; this.sysout=function(){return this.logFormatted(arguments,"") }; this.dumpProperties=function(title,object){return this.logFormatted("dumpProperties() not supported.","warning") }; this.dumpStack=function(){return this.logFormatted("dumpStack() not supported.","warning") }; this.flush=function(module){this.module=module; var queue=this.messageQueue; this.messageQueue=[]; for(var i=0; i"); appendText(object,html); html.push("") }else{appendText(object,html) }}return this.logRow(html,className) }; this.logRow=function(message,className){var panel=this.getPanel(); if(panel&&panel.panelNode){this.writeMessage(message,className) }else{this.messageQueue.push([message,className]) }return this.LOG_COMMAND }; this.writeMessage=function(message,className){var container=this.getPanel().containerNode; var isScrolledToBottom=container.scrollTop+container.offsetHeight>=container.scrollHeight; this.writeRow.call(this,message,className); if(isScrolledToBottom){container.scrollTop=container.scrollHeight-container.offsetHeight }}; this.appendRow=function(row){var container=this.getPanel().panelNode; container.appendChild(row) }; this.writeRow=function(message,className){var row=this.getPanel().panelNode.ownerDocument.createElement("div"); row.className="logRow"+(className?" logRow-"+className:""); row.innerHTML=message.join(""); this.appendRow(row) }; function appendText(object,html){html.push(escapeHTML(objectToString(object))) }function getTimestamp(){var now=new Date(); var ms=""+(now.getMilliseconds()/1000).toFixed(3); ms=ms.substr(2); return now.toLocaleTimeString()+"."+ms }var HTMLtoEntity={"<":"<",">":">","&":"&","'":"'",'"':"""}; function replaceChars(ch){return HTMLtoEntity[ch] }function escapeHTML(value){return(value+"").replace(/[<>&"']/g,replaceChars) }function objectToString(object){try{return object+"" }catch(exc){return null }}}).apply(FBL.FBTrace); FBL.ns(function(){with(FBL){if(!Env.Options.enableTrace){return }Firebug.Trace=extend(Firebug.Module,{getPanel:function(){return Firebug.chrome?Firebug.chrome.getPanel("Trace"):null },clear:function(){this.getPanel().panelNode.innerHTML="" }}); Firebug.registerModule(Firebug.Trace); function TracePanel(){}TracePanel.prototype=extend(Firebug.Panel,{name:"Trace",title:"Trace",options:{hasToolButtons:true,innerHTMLSync:true},create:function(){Firebug.Panel.create.apply(this,arguments); this.clearButton=new Button({caption:"Clear",title:"Clear FBTrace logs",owner:Firebug.Trace,onClick:Firebug.Trace.clear}) },initialize:function(){Firebug.Panel.initialize.apply(this,arguments); this.clearButton.initialize() }}); Firebug.registerPanel(TracePanel) }}); var codemirror=(function(){var Editor={}; var indentUnit=2; var window=this; function method(obj,name){return function(){obj[name].apply(obj,arguments) } }this.StopIteration={toString:function(){return"StopIteration" }}; this.forEach=function(iter,f){if(iter.next){try{while(true){f(iter.next()) }}catch(e){if(e!=StopIteration){throw e }}}else{for(var i=0; i!?|]/; var isHexDigit=/[0-9A-Fa-f]/; var isWordChar=/[\w\$_]/; function jsTokenState(inside,regexp){return function(source,setState){var newInside=inside; var type=jsToken(inside,regexp,source,function(c){newInside=c }); var newRegexp=type.type=="operator"||type.type=="keyword c"||type.type.match(/^[\[{}\(,;:]$/); if(newRegexp!=regexp||newInside!=inside){setState(jsTokenState(newInside,newRegexp)) }return type } }function jsToken(inside,regexp,source,setInside){function readHexNumber(){source.next(); source.nextWhileMatches(isHexDigit); return{type:"number",style:"js-atom"} }function readNumber(){source.nextWhileMatches(/[0-9]/); if(source.equals(".")){source.next(); source.nextWhileMatches(/[0-9]/) }if(source.equals("e")||source.equals("E")){source.next(); if(source.equals("-")){source.next() }source.nextWhileMatches(/[0-9]/) }return{type:"number",style:"js-atom"} }function readWord(){source.nextWhileMatches(isWordChar); var word=source.get(); var known=keywords.hasOwnProperty(word)&&keywords.propertyIsEnumerable(word)&&keywords[word]; return known?{type:known.type,style:known.style,content:word}:{type:"variable",style:"js-variable",content:word} }function readRegexp(){nextUntilUnescaped(source,"/"); source.nextWhileMatches(/[gi]/); return{type:"regexp",style:"js-string"} }function readMultilineComment(start){var newInside="/*"; var maybeEnd=(start=="*"); while(true){if(source.endOfLine()){break }var next=source.next(); if(next=="/"&&maybeEnd){newInside=null; break }maybeEnd=(next=="*") }setInside(newInside); return{type:"comment",style:"js-comment"} }function readOperator(){source.nextWhileMatches(isOperatorChar); return{type:"operator",style:"js-operator"} }function readString(quote){var endBackSlash=nextUntilUnescaped(source,quote); setInside(endBackSlash?quote:null); return{type:"string",style:"js-string"} }if(inside=='"'||inside=="'"){return readString(inside) }var ch=source.next(); if(inside=="/*"){return readMultilineComment(ch) }else{if(ch=='"'||ch=="'"){return readString(ch) }else{if(/[\[\]{}\(\),;\:\.]/.test(ch)){return{type:ch,style:"js-punctuation"} }else{if(ch=="0"&&(source.equals("x")||source.equals("X"))){return readHexNumber() }else{if(/[0-9]/.test(ch)){return readNumber() }else{if(ch=="/"){if(source.equals("*")){source.next(); return readMultilineComment(ch) }else{if(source.equals("/")){nextUntilUnescaped(source,null); return{type:"comment",style:"js-comment"} }else{if(regexp){return readRegexp() }else{return readOperator() }}}}else{if(isOperatorChar.test(ch)){return readOperator() }else{return readWord() }}}}}}}}return function(source,startState){return tokenizer(source,startState||jsTokenState(false,true)) } })(); this.JSParser=Editor.Parser=(function(){var atomicTypes={atom:true,number:true,variable:true,string:true,regexp:true}; var json=false; function JSLexical(indented,column,type,align,prev,info){this.indented=indented; this.column=column; this.type=type; if(align!=null){this.align=align }this.prev=prev; this.info=info }function indentJS(lexical){return function(firstChars){var firstChar=firstChars&&firstChars.charAt(0),type=lexical.type; var closing=firstChar==type; if(type=="vardef"){return lexical.indented+4 }else{if(type=="form"&&firstChar=="{"){return lexical.indented }else{if(type=="stat"||type=="form"){return lexical.indented+indentUnit }else{if(lexical.info=="switch"&&!closing){return lexical.indented+(/^(?:case|default)\b/.test(firstChars)?indentUnit:2*indentUnit) }else{if(lexical.align){return lexical.column-(closing?1:0) }else{return lexical.indented+(closing?0:indentUnit) }}}}}} }function parseJS(input,basecolumn){var tokens=tokenizeJavaScript(input); var cc=[json?expressions:statements]; var context=null; var lexical=new JSLexical((basecolumn||0)-indentUnit,0,"block",false); var column=0; var indented=0; var consume,marked; var parser={next:next,copy:copy}; function next(){while(cc[cc.length-1].lex){cc.pop()() }var token=tokens.next(); if(token.type=="whitespace"&&column==0){indented=token.value.length }column+=token.value.length; if(token.content=="\n"){indented=column=0; if(!("align" in lexical)){lexical.align=false }token.indentation=indentJS(lexical) }if(token.type=="whitespace"||token.type=="comment"){return token }if(!("align" in lexical)){lexical.align=true }while(true){consume=marked=false; cc.pop()(token.type,token.content); if(consume){if(marked){token.style=marked }else{if(token.type=="variable"&&inScope(token.content)){token.style="js-localvariable" }}return token }}}function copy(){var _context=context,_lexical=lexical,_cc=cc.concat([]),_tokenState=tokens.state; return function copyParser(input){context=_context; lexical=_lexical; cc=_cc.concat([]); column=indented=0; tokens=tokenizeJavaScript(input,_tokenState); return parser } }function push(fs){for(var i=fs.length-1; i>=0; i--){cc.push(fs[i]) }}function cont(){push(arguments); consume=true }function pass(){push(arguments); consume=false }function mark(style){marked=style }function pushcontext(){context={prev:context,vars:{"this":true,"arguments":true}} }function popcontext(){context=context.prev }function register(varname){if(context){mark("js-variabledef"); context.vars[varname]=true }}function inScope(varname){var cursor=context; while(cursor){if(cursor.vars[varname]){return true }cursor=cursor.prev }return false }function pushlex(type,info){var result=function(){lexical=new JSLexical(indented,column,type,null,lexical,info) }; result.lex=true; return result }function poplex(){if(lexical.type==")"){indented=lexical.indented }lexical=lexical.prev }poplex.lex=true; function expect(wanted){return function expecting(type){if(type==wanted){cont() }else{if(wanted==";"){pass() }else{cont(arguments.callee) }}} }function statements(type){return pass(statement,statements) }function expressions(type){return pass(expression,expressions) }function statement(type){if(type=="var"){cont(pushlex("vardef"),vardef1,expect(";"),poplex) }else{if(type=="keyword a"){cont(pushlex("form"),expression,statement,poplex) }else{if(type=="keyword b"){cont(pushlex("form"),statement,poplex) }else{if(type=="{"){cont(pushlex("}"),block,poplex) }else{if(type==";"){cont() }else{if(type=="function"){cont(functiondef) }else{if(type=="for"){cont(pushlex("form"),expect("("),pushlex(")"),forspec1,expect(")"),poplex,statement,poplex) }else{if(type=="variable"){cont(pushlex("stat"),maybelabel) }else{if(type=="switch"){cont(pushlex("form"),expression,pushlex("}","switch"),expect("{"),block,poplex,poplex) }else{if(type=="case"){cont(expression,expect(":")) }else{if(type=="default"){cont(expect(":")) }else{if(type=="catch"){cont(pushlex("form"),pushcontext,expect("("),funarg,expect(")"),statement,poplex,popcontext) }else{pass(pushlex("stat"),expression,expect(";"),poplex) }}}}}}}}}}}}}function expression(type){if(atomicTypes.hasOwnProperty(type)){cont(maybeoperator) }else{if(type=="function"){cont(functiondef) }else{if(type=="keyword c"){cont(expression) }else{if(type=="("){cont(pushlex(")"),expression,expect(")"),poplex,maybeoperator) }else{if(type=="operator"){cont(expression) }else{if(type=="["){cont(pushlex("]"),commasep(expression,"]"),poplex,maybeoperator) }else{if(type=="{"){cont(pushlex("}"),commasep(objprop,"}"),poplex,maybeoperator) }else{cont() }}}}}}}}function maybeoperator(type,value){if(type=="operator"&&/\+\+|--/.test(value)){cont(maybeoperator) }else{if(type=="operator"){cont(expression) }else{if(type==";"){pass() }else{if(type=="("){cont(pushlex(")"),commasep(expression,")"),poplex,maybeoperator) }else{if(type=="."){cont(property,maybeoperator) }else{if(type=="["){cont(pushlex("]"),expression,expect("]"),poplex,maybeoperator) }}}}}}}function maybelabel(type){if(type==":"){cont(poplex,statement) }else{pass(maybeoperator,expect(";"),poplex) }}function property(type){if(type=="variable"){mark("js-property"); cont() }}function objprop(type){if(type=="variable"){mark("js-property") }if(atomicTypes.hasOwnProperty(type)){cont(expect(":"),expression) }}function commasep(what,end){function proceed(type){if(type==","){cont(what,proceed) }else{if(type==end){cont() }else{cont(expect(end)) }}}return function commaSeparated(type){if(type==end){cont() }else{pass(what,proceed) }} }function block(type){if(type=="}"){cont() }else{pass(statement,block) }}function vardef1(type,value){if(type=="variable"){register(value); cont(vardef2) }else{cont() }}function vardef2(type,value){if(value=="="){cont(expression,vardef2) }else{if(type==","){cont(vardef1) }}}function forspec1(type){if(type=="var"){cont(vardef1,forspec2) }else{if(type==";"){pass(forspec2) }else{if(type=="variable"){cont(formaybein) }else{pass(forspec2) }}}}function formaybein(type,value){if(value=="in"){cont(expression) }else{cont(maybeoperator,forspec2) }}function forspec2(type,value){if(type==";"){cont(forspec3) }else{if(value=="in"){cont(expression) }else{cont(expression,expect(";"),forspec3) }}}function forspec3(type){if(type==")"){pass() }else{cont(expression) }}function functiondef(type,value){if(type=="variable"){register(value); cont(functiondef) }else{if(type=="("){cont(pushcontext,commasep(funarg,")"),statement,popcontext) }}}function funarg(type,value){if(type=="variable"){register(value); cont() }}return parser }return{make:parseJS,electricChars:"{}:",configure:function(obj){if(obj.json!=null){json=obj.json }}} })(); this.CSSParser=Editor.Parser=(function(){var tokenizeCSS=(function(){function normal(source,setState){var ch=source.next(); if(ch=="@"){source.nextWhileMatches(/\w/); return"css-at" }else{if(ch=="/"&&source.equals("*")){setState(inCComment); return null }else{if(ch=="<"&&source.equals("!")){setState(inSGMLComment); return null }else{if(ch=="="){return"css-compare" }else{if(source.equals("=")&&(ch=="~"||ch=="|")){source.next(); return"css-compare" }else{if(ch=='"'||ch=="'"){setState(inString(ch)); return null }else{if(ch=="#"){source.nextWhileMatches(/\w/); return"css-hash" }else{if(ch=="!"){source.nextWhileMatches(/[ \t]/); source.nextWhileMatches(/\w/); return"css-important" }else{if(/\d/.test(ch)){source.nextWhileMatches(/[\w.%]/); return"css-unit" }else{if(/[,.+>*\/]/.test(ch)){return"css-select-op" }else{if(/[;{}:\[\]]/.test(ch)){return"css-punctuation" }else{source.nextWhileMatches(/[\w\\\-_]/); return"css-identifier" }}}}}}}}}}}}function inCComment(source,setState){var maybeEnd=false; while(!source.endOfLine()){var ch=source.next(); if(maybeEnd&&ch=="/"){setState(normal); break }maybeEnd=(ch=="*") }return"css-comment" }function inSGMLComment(source,setState){var dashes=0; while(!source.endOfLine()){var ch=source.next(); if(dashes>=2&&ch==">"){setState(normal); break }dashes=(ch=="-")?dashes+1:0 }return"css-comment" }function inString(quote){return function(source,setState){var escaped=false; while(!source.endOfLine()){var ch=source.next(); if(ch==quote&&!escaped){break }escaped=!escaped&&ch=="\\" }if(!escaped){setState(normal) }return"css-string" } }return function(source,startState){return tokenizer(source,startState||normal) } })(); function indentCSS(inBraces,inRule,base){return function(nextChars){if(!inBraces||/^\}/.test(nextChars)){return base }else{if(inRule){return base+indentUnit*2 }else{return base+indentUnit }}} }function parseCSS(source,basecolumn){basecolumn=basecolumn||0; var tokens=tokenizeCSS(source); var inBraces=false,inRule=false,inDecl=false; var iter={next:function(){var token=tokens.next(),style=token.style,content=token.content; if(style=="css-hash"){style=token.style=inRule?"css-colorcode":"css-identifier" }if(style=="css-identifier"){if(inRule){token.style="css-value" }else{if(!inBraces&&!inDecl){token.style="css-selector" }}}if(content=="\n"){token.indentation=indentCSS(inBraces,inRule,basecolumn) }if(content=="{"&&inDecl=="@media"){inDecl=false }else{if(content=="{"){inBraces=true }else{if(content=="}"){inBraces=inRule=inDecl=false }else{if(content==";"){inRule=inDecl=false }else{if(inBraces&&style!="css-comment"&&style!="whitespace"){inRule=true }else{if(!inBraces&&style=="css-at"){inDecl=content }}}}}}return token },copy:function(){var _inBraces=inBraces,_inRule=inRule,_tokenState=tokens.state; return function(source){tokens=tokenizeCSS(source,_tokenState); inBraces=_inBraces; inRule=_inRule; return iter } }}; return iter }return{make:parseCSS,electricChars:"}"} })(); this.XMLParser=Editor.Parser=(function(){var Kludges={autoSelfClosers:{br:true,img:true,hr:true,link:true,input:true,meta:true,col:true,frame:true,base:true,area:true},doNotIndent:{pre:true,"!cdata":true}}; var NoKludges={autoSelfClosers:{},doNotIndent:{"!cdata":true}}; var UseKludges=Kludges; var alignCDATA=false; var tokenizeXML=(function(){function inText(source,setState){var ch=source.next(); if(ch=="<"){if(source.equals("!")){source.next(); if(source.equals("[")){if(source.lookAhead("[CDATA[",true)){setState(inBlock("xml-cdata","]]>")); return null }else{return"xml-text" }}else{if(source.lookAhead("--",true)){setState(inBlock("xml-comment","-->")); return null }else{if(source.lookAhead("DOCTYPE",true)){source.nextWhileMatches(/[\w\._\-]/); setState(inBlock("xml-doctype",">")); return"xml-doctype" }else{return"xml-text" }}}}else{if(source.equals("?")){source.next(); source.nextWhileMatches(/[\w\._\-]/); setState(inBlock("xml-processing","?>")); return"xml-processing" }else{if(source.equals("/")){source.next() }setState(inTag); return"xml-punctuation" }}}else{if(ch=="&"){while(!source.endOfLine()){if(source.next()==";"){break }}return"xml-entity" }else{source.nextWhileMatches(/[^&<\n]/); return"xml-text" }}}function inTag(source,setState){var ch=source.next(); if(ch==">"){setState(inText); return"xml-punctuation" }else{if(/[?\/]/.test(ch)&&source.equals(">")){source.next(); setState(inText); return"xml-punctuation" }else{if(ch=="="){return"xml-punctuation" }else{if(/[\'\"]/.test(ch)){setState(inAttribute(ch)); return null }else{source.nextWhileMatches(/[^\s\u00a0=<>\"\'\/?]/); return"xml-name" }}}}}function inAttribute(quote){return function(source,setState){while(!source.endOfLine()){if(source.next()==quote){setState(inTag); break }}return"xml-attribute" } }function inBlock(style,terminator){return function(source,setState){while(!source.endOfLine()){if(source.lookAhead(terminator,true)){setState(inText); break }source.next() }return style } }return function(source,startState){return tokenizer(source,startState||inText) } })(); function parseXML(source){var tokens=tokenizeXML(source),token; var cc=[base]; var tokenNr=0,indented=0; var currentTag=null,context=null; var consume; function push(fs){for(var i=fs.length-1; i>=0; i--){cc.push(fs[i]) }}function cont(){push(arguments); consume=true }function pass(){push(arguments); consume=false }function markErr(){token.style+=" xml-error" }function expect(text){return function(style,content){if(content==text){cont() }else{markErr(); cont(arguments.callee) }} }function pushContext(tagname,startOfLine){var noIndent=UseKludges.doNotIndent.hasOwnProperty(tagname)||(context&&context.noIndent); context={prev:context,name:tagname,indent:indented,startOfLine:startOfLine,noIndent:noIndent} }function popContext(){context=context.prev }function computeIndentation(baseContext){return function(nextChars,current){var context=baseContext; if(context&&context.noIndent){return current }if(alignCDATA&&/")) }else{if(style=="xml-cdata"){if(!context||context.name!="!cdata"){pushContext("!cdata") }if(/\]\]>$/.test(content)){popContext() }cont() }else{if(harmlessTokens.hasOwnProperty(style)){cont() }else{markErr(); cont() }}}}}function tagname(style,content){if(style=="xml-name"){currentTag=content.toLowerCase(); token.style="xml-tagname"; cont() }else{currentTag=null; pass() }}function closetagname(style,content){if(style=="xml-name"){token.style="xml-tagname"; if(context&&content.toLowerCase()==context.name){popContext() }else{markErr() }}cont() }function endtag(startOfLine){return function(style,content){if(content=="/>"||(content==">"&&UseKludges.autoSelfClosers.hasOwnProperty(currentTag))){cont() }else{if(content==">"){pushContext(currentTag,startOfLine); cont() }else{markErr(); cont(arguments.callee) }}} }function attributes(style){if(style=="xml-name"){token.style="xml-attname"; cont(attribute,attributes) }else{pass() }}function attribute(style,content){if(content=="="){cont(value) }else{if(content==">"||content=="/>"){pass(endtag) }else{pass() }}}function value(style){if(style=="xml-attribute"){cont(value) }else{pass() }}return{indentation:function(){return indented },next:function(){token=tokens.next(); if(token.style=="whitespace"&&tokenNr==0){indented=token.value.length }else{tokenNr++ }if(token.content=="\n"){indented=tokenNr=0; token.indentation=computeIndentation(context) }if(token.style=="whitespace"||token.type=="xml-comment"){return token }while(true){consume=false; cc.pop()(token.style,token.content); if(consume){return token }}},copy:function(){var _cc=cc.concat([]),_tokenState=tokens.state,_context=context; var parser=this; return function(input){cc=_cc.concat([]); tokenNr=indented=0; context=_context; tokens=tokenizeXML(input,_tokenState); return parser } }} }return{make:parseXML,electricChars:"/",configure:function(config){if(config.useHTMLKludges!=null){UseKludges=config.useHTMLKludges?Kludges:NoKludges }if(config.alignCDATA){alignCDATA=config.alignCDATA }}} })(); this.HTMLMixedParser=Editor.Parser=(function(){var triggers={script:"JSParser",style:"CSSParser"}; function checkDependencies(){var parsers=["XMLParser"]; for(var p in triggers){parsers.push(triggers[p]) }for(var i in parsers){if(!window[parsers[i]]){throw new Error(parsers[i]+" parser must be loaded for HTML mixed mode to work.") }}XMLParser.configure({useHTMLKludges:true}) }function parseMixed(stream){checkDependencies(); var htmlParser=XMLParser.make(stream),localParser=null,inTag=false; var iter={next:top,copy:copy}; function top(){var token=htmlParser.next(); if(token.content=="<"){inTag=true }else{if(token.style=="xml-tagname"&&inTag===true){inTag=token.content.toLowerCase() }else{if(token.content==">"){if(triggers[inTag]){var parser=window[triggers[inTag]]; iter.next=local(parser,"0){throw"End of stringstream reached without emptying buffer ('"+accum+"')." }else{throw StopIteration }}return current.charAt(pos++) },get:function(){var temp=accum; accum=""; if(pos>0){temp+=current.slice(0,pos); current=current.slice(pos); pos=0 }return temp },push:function(str){current=current.slice(0,pos)+str+current.slice(pos) },lookAhead:function(str,consume,skipSpaces,caseInsensitive){function cased(str){return caseInsensitive?str.toLowerCase():str }str=cased(str); var found=false; var _accum=accum,_pos=pos; if(skipSpaces){this.nextWhileMatches(/[\s\u00a0]/) }while(true){var end=pos+str.length,left=current.length-pos; if(end<=current.length){found=str==cased(current.slice(pos,end)); pos=end; break }else{if(str.slice(0,left)==cased(current.slice(pos))){accum+=current; current=""; try{current=source.next() }catch(e){break }pos=0; str=str.slice(left) }else{break }}}if(!(found&&consume)){current=accum.slice(_accum.length)+current; pos=_pos; accum=_accum }return found },more:function(){return this.peek()!==null },applies:function(test){var next=this.peek(); return(next!==null&&test(next)) },nextWhile:function(test){var next; while((next=this.peek())!==null&&test(next)){this.next() }},matches:function(re){var next=this.peek(); return(next!==null&&re.test(next)) },nextWhileMatches:function(re){var next; while((next=this.peek())!==null&&re.test(next)){this.next() }},equals:function(ch){return ch===this.peek() },endOfLine:function(){var next=this.peek(); return next==null||next=="\n" }} }; return this })(); FBL.ns(function(){with(FBL){Firebug.uiListeners=[]; var extensions=[]; append(Firebug,{registerExtension:function(){extensions.push.apply(extensions,arguments); for(var i=0; i'+escapeForSourceLine(val)+"" }; var processTokenStream=function(stream){var pieces=[]; for(var i=0; i0){var space=new Array(Firebug.replaceTabs+1).join(" "); output=output.replace(/\t/g,space) }return output }; Firebug.FireRainbowExtension=extend(Firebug.Extension,{onApplyDecorator:function(sourceBox){if(!sourceBox.rainbowPatched){sourceBox.rainbowPatched=true; if(sourceBox.getLineAsHTML){if(!sourceBox._rainbowOriginalGetLineAsHTML){sourceBox._rainbowOriginalGetLineAsHTML=sourceBox.getLineAsHTML; sourceBox.getLineAsHTML=function(lineNo){if(this.colorizedLines){var line=this.colorizedLines[lineNo]; if(line!==undefined){return line }}return this._rainbowOriginalGetLineAsHTML(lineNo) } }}if(sourceBox.decorator){if(!sourceBox.decorator._rainbowOriginalGetLineHTML){sourceBox.decorator._rainbowOriginalGetLineHTML=sourceBox.decorator.getLineHTML; sourceBox.decorator.getLineHTML=function(sourceBox,lineNo){if(sourceBox.colorizedLines){var line=sourceBox.colorizedLines[lineNo-1]; if(line!==undefined){return line }}return this._rainbowOriginalGetLineHTML(sourceBox,lineNo) } }}}if(sourceBox.preventRainbowRecursion){sourceBox.preventRainbowRecursion=undefined; return }Firebug.FireRainbowModule.colorizeSourceBox(sourceBox) }}); Firebug.FireRainbowModule=extend(Firebug.Module,{valid:false,pings:0,styleLibrary:{},defaultTheme:'.panelNode-script{background-color:#FFFFFF;color:black;font-family:Monaco,Monospace,Courier New !important;font-size:11px;} .sourceRow.hovered{background-color:#EEEEEE;} .sourceLine{background:#EEEEEE none no-repeat scroll 2px 0;border-bottom:1px solid #EEEEEE;border-right:1px solid #CCCCCC;color:#888888;} .sourceLine:hover{text-decoration:none;} .scriptTooltip{background:LightYellow none repeat scroll 0 0;border:1px solid #CBE087;color:#000000;} .sourceRow[exeline="true"]{background-color:lightgoldenrodyellow;outline-color:#D9D9B6;outline-style:solid;outline-width:1px;} .xml-text{color:black;} .whitespace{color:black;} .xml-punctuation{color:gray;} .xml-tagname{color:blue;} .xml-attname{color:darkred;} .xml-attribute{color:darkgreen;} .css-at{color:darkred;} .css-string{color:red;} .css-punctuation{color:midnightblue;} .js-keyword{color:blue;} .js-variable{color:black;} .js-operator{color:black;} .js-punctuation{color:darkBlue;} .js-variabledef{color:darkslategray;} .js-localvariable{color:darkslateBlue;} .js-property{color:teal;} .js-string{color:darkgreen;} .js-atom{color:saddleBrown;} .xml-comment{color:gray;} .css-identifier{color:midnightBlue;} .css-select-op{color:cadetblue;} .css-unit{color:orangered;} .css-value{color:black;} .css-colorcode{color:magenta;} .js-comment{color:gray;} .js-regexp{color:magenta;} .xml-entity{color:darkgoldenrod;} .xml-error{color:orangered;} .css-comment{color:gray;}',initialize:function(){this.actualScriptPanel=Firebug.chrome.getPanel("script2"); var doc=Firebug.chrome.document; var style=createElement("style"); var rules=document.createTextNode(this.defaultTheme); style.type="text/css"; if(style.styleSheet){style.styleSheet.cssText=rules.nodeValue }else{style.appendChild(rules) }addStyleSheet(doc,style); return Firebug.Module.initialize.apply(this,arguments) },showPanel:function(browser,panel){if(!this.valid){return }dbg("Rainbow: showPanel",panel); var isScriptPanel=panel&&panel.name=="script"; this.actualScriptPanel=isScriptPanel?panel:undefined },initContext:function(context){dbg("Rainbow: initContext",context); Firebug.Module.initContext.apply(this,arguments); this.hookPanel(context); this.valid=true },reattachContext:function(browser,context){Firebug.Module.reattachContext.apply(this,arguments); this.hookPanel(context) },convertOldCode:function(code,version){switch(version){case 1:return code.replace(/\.(\w+)\s*\{/g,".js-$1 {") }return code },getCodeVersion:function(code){var vc=code.match(/\/\* version:(.*) \*\//); if(!vc){return 1 }return parseInt(vc[1],10) },colorizeSourceBox:function(sourceBox){dbg("Rainbow: colorizeSourceBox",sourceBox); this.pingDaemon(sourceBox) },hookPanel:function(context){dbg("Rainbow: hookPanel",context); var chrome=context?context.chrome:FirebugChrome; var code=this.getPref("coloring"); var version=this.getCodeVersion(code); if(version=sourceBox.lines.length){return finish() }nextLine=sourceBox.lines[sourceBox.lineToBeColorized]+"\n"; sourceBox.parsedLine=[]; sourceBox.hasLine=true }codemirror.forEach(sourceBox.parser,function(token){var val=token.value; sourceBox.parsedLine.push([token.style,val]); that.styleLibrary[token.style]=true; if(--tokenQuota==0){throw StopIteration }}); if(!tokenQuota){return }sourceBox.colorizedLines.push(processTokenStream(sourceBox.parsedLine)); if(sourceBox.lineToBeColorized==sourceBox.lastViewableLine){refresh(); startLine=null }sourceBox.lineToBeColorized++; sourceBox.hasLine=false }}catch(ex){dbg("Rainbow: exception",ex); that.stopDaemon(); sourceBox.colorized=true; sourceBox.colorizationFailed=true; sourceBox.parser=undefined; return }},daemonInterval) },pingDaemon:function(sourceBox){this.valid=true; if(!this.valid){return }this.pings++; var pingMarker=this.pings; var that=this; setTimeout(function(){if(that.pings!=pingMarker){return }that.startDaemon(sourceBox) },200) },initSyntaxColoring:function(panelBar){if(this.lookupStyleElement(panelBar)){return }var browser=panelBar.browser; var doc=browser.contentDocument; var styleElement=doc.createElement("style"); styleElement.setAttribute("id","rainbow-style-sheet"); styleElement.setAttribute("type","text/css"); styleElement.appendChild(doc.createTextNode("/* Syntax coloring */")); var headElement; var headElementList=doc.getElementsByTagName("head"); if(headElementList.length){headElement=headElementList[0] }else{headElement=doc.documentElement }headElement.appendChild(styleElement) },lookupStyleElement:function(panelBar){var browser=panelBar.browser; var doc=browser.contentDocument; var styleElement=doc.getElementById("rainbow-style-sheet"); return styleElement },applySyntaxColoring:function(code,panelBar){var styleElement=this.lookupStyleElement(panelBar); if(!styleElement){return }styleElement.innerHTML=""; var browser=panelBar.browser; var doc=browser.contentDocument; styleElement.appendChild(doc.createTextNode(code)) },saveSyntaxColoring:function(rules){var code=rules; if(typeof code!="string"){var s=[]; for(var i=0; i .infoTipImage,.infoTipLoading > .infoTipCaption{display:none;}h1.groupHeader{padding:2px 4px;margin:0 0 4px 0;border-top:1px solid #CCCCCC;border-bottom:1px solid #CCCCCC;background:#eee url(https://getfirebug.com/releases/lite/latest/skin/xp/group.gif) repeat-x;font-size:11px;font-weight:bold;_position:relative;}.inlineEditor,.fixedWidthEditor{z-index:2147483647;position:absolute;display:none;}.inlineEditor{margin-left:-6px;margin-top:-3px;}.textEditorInner,.fixedWidthEditor{margin:0 0 0 0 !important;padding:0;border:none !important;font:inherit;text-decoration:inherit;background-color:#FFFFFF;}.fixedWidthEditor{border-top:1px solid #888888 !important;border-bottom:1px solid #888888 !important;}.textEditorInner{position:relative;top:-7px;left:-5px;outline:none;resize:none;}.textEditorInner1{padding-left:11px;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/textEditorBorders.png) repeat-y;_background:url(https://getfirebug.com/releases/lite/latest/skin/xp/textEditorBorders.gif) repeat-y;_overflow:hidden;}.textEditorInner2{position:relative;padding-right:2px;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/textEditorBorders.png) repeat-y 100% 0;_background:url(https://getfirebug.com/releases/lite/latest/skin/xp/textEditorBorders.gif) repeat-y 100% 0;_position:fixed;}.textEditorTop1{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/textEditorCorners.png) no-repeat 100% 0;margin-left:11px;height:10px;_background:url(https://getfirebug.com/releases/lite/latest/skin/xp/textEditorCorners.gif) no-repeat 100% 0;_overflow:hidden;}.textEditorTop2{position:relative;left:-11px;width:11px;height:10px;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/textEditorCorners.png) no-repeat;_background:url(https://getfirebug.com/releases/lite/latest/skin/xp/textEditorCorners.gif) no-repeat;}.textEditorBottom1{position:relative;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/textEditorCorners.png) no-repeat 100% 100%;margin-left:11px;height:12px;_background:url(https://getfirebug.com/releases/lite/latest/skin/xp/textEditorCorners.gif) no-repeat 100% 100%;}.textEditorBottom2{position:relative;left:-11px;width:11px;height:12px;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/textEditorCorners.png) no-repeat 0 100%;_background:url(https://getfirebug.com/releases/lite/latest/skin/xp/textEditorCorners.gif) no-repeat 0 100%;}.panelNode-css{overflow-x:hidden;}.cssSheet > .insertBefore{height:1.5em;}.cssRule{position:relative;margin:0;padding:1em 0 0 6px;font-family:Monaco,monospace;color:#000000;}.cssRule:first-child{padding-top:6px;}.cssElementRuleContainer{position:relative;}.cssHead{padding-right:150px;}.cssProp{}.cssPropName{color:DarkGreen;}.cssPropValue{margin-left:8px;color:DarkBlue;}.cssOverridden span{text-decoration:line-through;}.cssInheritedRule{}.cssInheritLabel{margin-right:0.5em;font-weight:bold;}.cssRule .objectLink-sourceLink{top:0;}.cssProp.editGroup:hover{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/disable.png) no-repeat 2px 1px;_background:url(https://getfirebug.com/releases/lite/latest/skin/xp/disable.gif) no-repeat 2px 1px;}.cssProp.editGroup.editing{background:none;}.cssProp.disabledStyle{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/disableHover.png) no-repeat 2px 1px;_background:url(https://getfirebug.com/releases/lite/latest/skin/xp/disableHover.gif) no-repeat 2px 1px;opacity:1;color:#CCCCCC;}.disabledStyle .cssPropName,.disabledStyle .cssPropValue{color:#CCCCCC;}.cssPropValue.editing + .cssSemi,.inlineExpander + .cssSemi{display:none;}.cssPropValue.editing{white-space:nowrap;}.stylePropName{font-weight:bold;padding:0 4px 4px 4px;width:50%;}.stylePropValue{width:50%;}.panelNode-net{overflow-x:hidden;}.netTable{width:100%;}.hideCategory-undefined .category-undefined,.hideCategory-html .category-html,.hideCategory-css .category-css,.hideCategory-js .category-js,.hideCategory-image .category-image,.hideCategory-xhr .category-xhr,.hideCategory-flash .category-flash,.hideCategory-txt .category-txt,.hideCategory-bin .category-bin{display:none;}.netHeadRow{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/group.gif) repeat-x #FFFFFF;}.netHeadCol{border-bottom:1px solid #CCCCCC;padding:2px 4px 2px 18px;font-weight:bold;}.netHeadLabel{white-space:nowrap;overflow:hidden;}.netHeaderRow{height:16px;}.netHeaderCell{cursor:pointer;-moz-user-select:none;border-bottom:1px solid #9C9C9C;padding:0 !important;font-weight:bold;background:#BBBBBB url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/tableHeader.gif) repeat-x;white-space:nowrap;}.netHeaderRow > .netHeaderCell:first-child > .netHeaderCellBox{padding:2px 14px 2px 18px;}.netHeaderCellBox{padding:2px 14px 2px 10px;border-left:1px solid #D9D9D9;border-right:1px solid #9C9C9C;}.netHeaderCell:hover:active{background:#959595 url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/tableHeaderActive.gif) repeat-x;}.netHeaderSorted{background:#7D93B2 url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/tableHeaderSorted.gif) repeat-x;}.netHeaderSorted > .netHeaderCellBox{border-right-color:#6B7C93;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/arrowDown.png) no-repeat right;}.netHeaderSorted.sortedAscending > .netHeaderCellBox{background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/arrowUp.png);}.netHeaderSorted:hover:active{background:#536B90 url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/tableHeaderSortedActive.gif) repeat-x;}.panelNode-net .netRowHeader{display:block;}.netRowHeader{cursor:pointer;display:none;height:15px;margin-right:0 !important;}.netRow .netRowHeader{background-position:5px 1px;}.netRow[breakpoint="true"] .netRowHeader{background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/breakpoint.png);}.netRow[breakpoint="true"][disabledBreakpoint="true"] .netRowHeader{background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/breakpointDisabled.png);}.netRow.category-xhr:hover .netRowHeader{background-color:#F6F6F6;}#netBreakpointBar{max-width:38px;}#netHrefCol > .netHeaderCellBox{border-left:0px;}.netRow .netRowHeader{width:3px;}.netInfoRow .netRowHeader{display:table-cell;}.netTable[hiddenCols~=netHrefCol] TD[id="netHrefCol"],.netTable[hiddenCols~=netHrefCol] TD.netHrefCol,.netTable[hiddenCols~=netStatusCol] TD[id="netStatusCol"],.netTable[hiddenCols~=netStatusCol] TD.netStatusCol,.netTable[hiddenCols~=netDomainCol] TD[id="netDomainCol"],.netTable[hiddenCols~=netDomainCol] TD.netDomainCol,.netTable[hiddenCols~=netSizeCol] TD[id="netSizeCol"],.netTable[hiddenCols~=netSizeCol] TD.netSizeCol,.netTable[hiddenCols~=netTimeCol] TD[id="netTimeCol"],.netTable[hiddenCols~=netTimeCol] TD.netTimeCol{display:none;}.netRow{background:LightYellow;}.netRow.loaded{background:#FFFFFF;}.netRow.loaded:hover{background:#EFEFEF;}.netCol{padding:0;vertical-align:top;border-bottom:1px solid #EFEFEF;white-space:nowrap;height:17px;}.netLabel{width:100%;}.netStatusCol{padding-left:10px;color:rgb(128,128,128);}.responseError > .netStatusCol{color:red;}.netDomainCol{padding-left:5px;}.netSizeCol{text-align:right;padding-right:10px;}.netHrefLabel{-moz-box-sizing:padding-box;overflow:hidden;z-index:10;position:absolute;padding-left:18px;padding-top:1px;max-width:15%;font-weight:bold;}.netFullHrefLabel{display:none;-moz-user-select:none;padding-right:10px;padding-bottom:3px;max-width:100%;background:#FFFFFF;z-index:200;}.netHrefCol:hover > .netFullHrefLabel{display:block;}.netRow.loaded:hover .netCol > .netFullHrefLabel{background-color:#EFEFEF;}.useA11y .a11yShowFullLabel{display:block;background-image:none !important;border:1px solid #CBE087;background-color:LightYellow;font-family:Monaco,monospace;color:#000000;font-size:10px;z-index:2147483647;}.netSizeLabel{padding-left:6px;}.netStatusLabel,.netDomainLabel,.netSizeLabel,.netBar{padding:1px 0 2px 0 !important;}.responseError{color:red;}.hasHeaders .netHrefLabel:hover{cursor:pointer;color:blue;text-decoration:underline;}.netLoadingIcon{position:absolute;border:0;margin-left:14px;width:16px;height:16px;background:transparent no-repeat 0 0;background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/loading_16.gif);display:inline-block;}.loaded .netLoadingIcon{display:none;}.netBar,.netSummaryBar{position:relative;border-right:50px solid transparent;}.netResolvingBar{position:absolute;left:0;top:0;bottom:0;background:#FFFFFF url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/netBarResolving.gif) repeat-x;z-index:60;}.netConnectingBar{position:absolute;left:0;top:0;bottom:0;background:#FFFFFF url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/netBarConnecting.gif) repeat-x;z-index:50;}.netBlockingBar{position:absolute;left:0;top:0;bottom:0;background:#FFFFFF url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/netBarWaiting.gif) repeat-x;z-index:40;}.netSendingBar{position:absolute;left:0;top:0;bottom:0;background:#FFFFFF url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/netBarSending.gif) repeat-x;z-index:30;}.netWaitingBar{position:absolute;left:0;top:0;bottom:0;background:#FFFFFF url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/netBarResponded.gif) repeat-x;z-index:20;min-width:1px;}.netReceivingBar{position:absolute;left:0;top:0;bottom:0;background:#38D63B url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/netBarLoading.gif) repeat-x;z-index:10;}.netWindowLoadBar,.netContentLoadBar{position:absolute;left:0;top:0;bottom:0;width:1px;background-color:red;z-index:70;opacity:0.5;display:none;margin-bottom:-1px;}.netContentLoadBar{background-color:Blue;}.netTimeLabel{-moz-box-sizing:padding-box;position:absolute;top:1px;left:100%;padding-left:6px;color:#444444;min-width:16px;}.loaded .netReceivingBar,.loaded.netReceivingBar{background:#B6B6B6 url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/netBarLoaded.gif) repeat-x;border-color:#B6B6B6;}.fromCache .netReceivingBar,.fromCache.netReceivingBar{background:#D6D6D6 url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/netBarCached.gif) repeat-x;border-color:#D6D6D6;}.netSummaryRow .netTimeLabel,.loaded .netTimeLabel{background:transparent;}.timeInfoTip{width:150px; height:40px}.timeInfoTipBar,.timeInfoTipEventBar{position:relative;display:block;margin:0;opacity:1;height:15px;width:4px;}.timeInfoTipEventBar{width:1px !important;}.timeInfoTipCell.startTime{padding-right:8px;}.timeInfoTipCell.elapsedTime{text-align:right;padding-right:8px;}.sizeInfoLabelCol{font-weight:bold;padding-right:10px;font-family:Lucida Grande,Tahoma,sans-serif;font-size:11px;}.sizeInfoSizeCol{font-weight:bold;}.sizeInfoDetailCol{color:gray;text-align:right;}.sizeInfoDescCol{font-style:italic;}.netSummaryRow .netReceivingBar{background:#BBBBBB;border:none;}.netSummaryLabel{color:#222222;}.netSummaryRow{background:#BBBBBB !important;font-weight:bold;}.netSummaryRow .netBar{border-right-color:#BBBBBB;}.netSummaryRow > .netCol{border-top:1px solid #999999;border-bottom:2px solid;-moz-border-bottom-colors:#EFEFEF #999999;padding-top:1px;padding-bottom:2px;}.netSummaryRow > .netHrefCol:hover{background:transparent !important;}.netCountLabel{padding-left:18px;}.netTotalSizeCol{text-align:right;padding-right:10px;}.netTotalTimeCol{text-align:right;}.netCacheSizeLabel{position:absolute;z-index:1000;left:0;top:0;}.netLimitRow{background:rgb(255,255,225) !important;font-weight:normal;color:black;font-weight:normal;}.netLimitLabel{padding-left:18px;}.netLimitRow > .netCol{border-bottom:2px solid;-moz-border-bottom-colors:#EFEFEF #999999;vertical-align:middle !important;padding-top:2px;padding-bottom:2px;}.netLimitButton{font-size:11px;padding-top:1px;padding-bottom:1px;}.netInfoCol{border-top:1px solid #EEEEEE;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/group.gif) repeat-x #FFFFFF;}.netInfoBody{margin:10px 0 4px 10px;}.netInfoTabs{position:relative;padding-left:17px;}.netInfoTab{position:relative;top:-3px;margin-top:10px;padding:4px 6px;border:1px solid transparent;border-bottom:none;_border:none;font-weight:bold;color:#565656;cursor:pointer;}.netInfoTabSelected{cursor:default !important;border:1px solid #D7D7D7 !important;border-bottom:none !important;-moz-border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;background-color:#FFFFFF;}.logRow-netInfo.error .netInfoTitle{color:red;}.logRow-netInfo.loading .netInfoResponseText{font-style:italic;color:#888888;}.loading .netInfoResponseHeadersTitle{display:none;}.netInfoResponseSizeLimit{font-family:Lucida Grande,Tahoma,sans-serif;padding-top:10px;font-size:11px;}.netInfoText{display:none;margin:0;border:1px solid #D7D7D7;border-right:none;padding:8px;background-color:#FFFFFF;font-family:Monaco,monospace;white-space:pre-wrap;}.netInfoTextSelected{display:block;}.netInfoParamName{padding-right:10px;font-family:Lucida Grande,Tahoma,sans-serif;font-weight:bold;vertical-align:top;text-align:right;white-space:nowrap;}.netInfoPostText .netInfoParamName{width:1px;}.netInfoParamValue{width:100%;}.netInfoHeadersText,.netInfoPostText,.netInfoPutText{padding-top:0;}.netInfoHeadersGroup,.netInfoPostParams,.netInfoPostSource{margin-bottom:4px;border-bottom:1px solid #D7D7D7;padding-top:8px;padding-bottom:2px;font-family:Lucida Grande,Tahoma,sans-serif;font-weight:bold;color:#565656;}.netInfoPostParamsTable,.netInfoPostPartsTable,.netInfoPostJSONTable,.netInfoPostXMLTable,.netInfoPostSourceTable{margin-bottom:10px;width:100%;}.netInfoPostContentType{color:#bdbdbd;padding-left:50px;font-weight:normal;}.netInfoHtmlPreview{border:0;width:100%;height:100%;}.netHeadersViewSource{color:#bdbdbd;margin-left:200px;font-weight:normal;}.netHeadersViewSource:hover{color:blue;cursor:pointer;}.netActivationRow,.netPageSeparatorRow{background:rgb(229,229,229) !important;font-weight:normal;color:black;}.netActivationLabel{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/chrome://firebug/skin/infoIcon.png) no-repeat 3px 2px;padding-left:22px;}.netPageSeparatorRow{height:5px !important;}.netPageSeparatorLabel{padding-left:22px;height:5px !important;}.netPageRow{background-color:rgb(255,255,255);}.netPageRow:hover{background:#EFEFEF;}.netPageLabel{padding:1px 0 2px 18px !important;font-weight:bold;}.netActivationRow > .netCol{border-bottom:2px solid;-moz-border-bottom-colors:#EFEFEF #999999;padding-top:2px;padding-bottom:3px;}.twisty,.logRow-errorMessage > .hasTwisty > .errorTitle,.logRow-log > .objectBox-array.hasTwisty,.logRow-spy .spyHead .spyTitle,.logGroup > .logRow,.memberRow.hasChildren > .memberLabelCell > .memberLabel,.hasHeaders .netHrefLabel,.netPageRow > .netCol > .netPageTitle{background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/tree_open.gif);background-repeat:no-repeat;background-position:2px 2px;min-height:12px;}.logRow-errorMessage > .hasTwisty.opened > .errorTitle,.logRow-log > .objectBox-array.hasTwisty.opened,.logRow-spy.opened .spyHead .spyTitle,.logGroup.opened > .logRow,.memberRow.hasChildren.opened > .memberLabelCell > .memberLabel,.nodeBox.highlightOpen > .nodeLabel > .twisty,.nodeBox.open > .nodeLabel > .twisty,.netRow.opened > .netCol > .netHrefLabel,.netPageRow.opened > .netCol > .netPageTitle{background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/tree_close.gif);}.twisty{background-position:4px 4px;}* html .logRow-spy .spyHead .spyTitle,* html .logGroup .logGroupLabel,* html .hasChildren .memberLabelCell .memberLabel,* html .hasHeaders .netHrefLabel{background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/tree_open.gif);background-repeat:no-repeat;background-position:2px 2px;}* html .opened .spyHead .spyTitle,* html .opened .logGroupLabel,* html .opened .memberLabelCell .memberLabel{background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/tree_close.gif);background-repeat:no-repeat;background-position:2px 2px;}.panelNode-console{overflow-x:hidden;}.objectLink{text-decoration:none;}.objectLink:hover{cursor:pointer;text-decoration:underline;}.logRow{position:relative;margin:0;border-bottom:1px solid #D7D7D7;padding:2px 4px 1px 6px;background-color:#FFFFFF;overflow:hidden !important;}.useA11y .logRow:focus{border-bottom:1px solid #000000 !important;outline:none !important;background-color:#FFFFAD !important;}.useA11y .logRow:focus a.objectLink-sourceLink{background-color:#FFFFAD;}.useA11y .a11yFocus:focus,.useA11y .objectBox:focus{outline:2px solid #FF9933;background-color:#FFFFAD;}.useA11y .objectBox-null:focus,.useA11y .objectBox-undefined:focus{background-color:#888888 !important;}.useA11y .logGroup.opened > .logRow{border-bottom:1px solid #ffffff;}.logGroup{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/group.gif) repeat-x #FFFFFF;padding:0 !important;border:none !important;}.logGroupBody{display:none;margin-left:16px;border-left:1px solid #D7D7D7;border-top:1px solid #D7D7D7;background:#FFFFFF;}.logGroup > .logRow{background-color:transparent !important;font-weight:bold;}.logGroup.opened > .logRow{border-bottom:none;}.logGroup.opened > .logGroupBody{display:block;}.logRow-command > .objectBox-text{font-family:Monaco,monospace;color:#0000FF;white-space:pre-wrap;}.logRow-info,.logRow-warn,.logRow-error,.logRow-assert,.logRow-warningMessage,.logRow-errorMessage{padding-left:22px;background-repeat:no-repeat;background-position:4px 2px;}.logRow-assert,.logRow-warningMessage,.logRow-errorMessage{padding-top:0;padding-bottom:0;}.logRow-info,.logRow-info .objectLink-sourceLink{background-color:#FFFFFF;}.logRow-warn,.logRow-warningMessage,.logRow-warn .objectLink-sourceLink,.logRow-warningMessage .objectLink-sourceLink{background-color:cyan;}.logRow-error,.logRow-assert,.logRow-errorMessage,.logRow-error .objectLink-sourceLink,.logRow-errorMessage .objectLink-sourceLink{background-color:LightYellow;}.logRow-error,.logRow-assert,.logRow-errorMessage{color:#FF0000;}.logRow-info{}.logRow-warn,.logRow-warningMessage{}.logRow-error,.logRow-assert,.logRow-errorMessage{}.objectBox-string,.objectBox-text,.objectBox-number,.objectLink-element,.objectLink-textNode,.objectLink-function,.objectBox-stackTrace,.objectLink-profile{font-family:Monaco,monospace;}.objectBox-string,.objectBox-text,.objectLink-textNode{white-space:pre-wrap;}.objectBox-number,.objectLink-styleRule,.objectLink-element,.objectLink-textNode{color:#000088;}.objectBox-string{color:#FF0000;}.objectLink-function,.objectBox-stackTrace,.objectLink-profile{color:DarkGreen;}.objectBox-null,.objectBox-undefined{padding:0 2px;border:1px solid #666666;background-color:#888888;color:#FFFFFF;}.objectBox-exception{padding:0 2px 0 18px;color:red;}.objectLink-sourceLink{position:absolute;right:4px;top:2px;padding-left:8px;font-family:Lucida Grande,sans-serif;font-weight:bold;color:#0000FF;}.errorTitle{margin-top:0px;margin-bottom:1px;padding-top:2px;padding-bottom:2px;}.errorTrace{margin-left:17px;}.errorSourceBox{margin:2px 0;}.errorSource-none{display:none;}.errorSource-syntax > .errorBreak{visibility:hidden;}.errorSource{cursor:pointer;font-family:Monaco,monospace;color:DarkGreen;}.errorSource:hover{text-decoration:underline;}.errorBreak{cursor:pointer;display:none;margin:0 6px 0 0;width:13px;height:14px;vertical-align:bottom;opacity:0.1;}.hasBreakSwitch .errorBreak{display:inline;}.breakForError .errorBreak{opacity:1;}.assertDescription{margin:0;}.logRow-profile > .logRow > .objectBox-text{font-family:Lucida Grande,Tahoma,sans-serif;color:#000000;}.logRow-profile > .logRow > .objectBox-text:last-child{color:#555555;font-style:italic;}.logRow-profile.opened > .logRow{padding-bottom:4px;}.profilerRunning > .logRow{padding-left:22px !important;}.profileSizer{width:100%;overflow-x:auto;overflow-y:scroll;}.profileTable{border-bottom:1px solid #D7D7D7;padding:0 0 4px 0;}.profileTable tr[odd="1"]{background-color:#F5F5F5;vertical-align:middle;}.profileTable a{vertical-align:middle;}.profileTable td{padding:1px 4px 0 4px;}.headerCell{cursor:pointer;-moz-user-select:none;border-bottom:1px solid #9C9C9C;padding:0 !important;font-weight:bold;}.headerCellBox{padding:2px 4px;border-left:1px solid #D9D9D9;border-right:1px solid #9C9C9C;}.headerCell:hover:active{}.headerSorted{}.headerSorted > .headerCellBox{border-right-color:#6B7C93;}.headerSorted.sortedAscending > .headerCellBox{}.headerSorted:hover:active{}.linkCell{text-align:right;}.linkCell > .objectLink-sourceLink{position:static;}.logRow-stackTrace{padding-top:0;background:#f8f8f8;}.logRow-stackTrace > .objectBox-stackFrame{position:relative;padding-top:2px;}.objectLink-object{font-family:Lucida Grande,sans-serif;font-weight:bold;color:DarkGreen;white-space:pre-wrap;}.objectProp-object{color:DarkGreen;}.objectProps{color:#000;font-weight:normal;}.objectPropName{color:#777;}.objectProps .objectProp-string{color:#f55;}.objectProps .objectProp-number{color:#55a;}.objectProps .objectProp-object{color:#585;}.selectorTag,.selectorId,.selectorClass{font-family:Monaco,monospace;font-weight:normal;}.selectorTag{color:#0000FF;}.selectorId{color:DarkBlue;}.selectorClass{color:red;}.selectorHidden > .selectorTag{color:#5F82D9;}.selectorHidden > .selectorId{color:#888888;}.selectorHidden > .selectorClass{color:#D86060;}.selectorValue{font-family:Lucida Grande,sans-serif;font-style:italic;color:#555555;}.panelNode.searching .logRow{display:none;}.logRow.matched{display:block !important;}.logRow.matching{position:absolute;left:-1000px;top:-1000px;max-width:0;max-height:0;overflow:hidden;}.objectLeftBrace,.objectRightBrace,.objectEqual,.objectComma,.arrayLeftBracket,.arrayRightBracket,.arrayComma{font-family:Monaco,monospace;}.objectLeftBrace,.objectRightBrace,.arrayLeftBracket,.arrayRightBracket{font-weight:bold;}.objectLeftBrace,.arrayLeftBracket{margin-right:4px;}.objectRightBrace,.arrayRightBracket{margin-left:4px;}.logRow-dir{padding:0;}.logRow-errorMessage .hasTwisty .errorTitle,.logRow-spy .spyHead .spyTitle,.logGroup .logRow{cursor:pointer;padding-left:18px;background-repeat:no-repeat;background-position:3px 3px;}.logRow-errorMessage > .hasTwisty > .errorTitle{background-position:2px 3px;}.logRow-errorMessage > .hasTwisty > .errorTitle:hover,.logRow-spy .spyHead .spyTitle:hover,.logGroup > .logRow:hover{text-decoration:underline;}.logRow-spy{padding:0 !important;}.logRow-spy,.logRow-spy .objectLink-sourceLink{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/group.gif) repeat-x #FFFFFF;padding-right:4px;right:0;}.logRow-spy.opened{padding-bottom:4px;border-bottom:none;}.spyTitle{color:#000000;font-weight:bold;-moz-box-sizing:padding-box;overflow:hidden;z-index:100;padding-left:18px;}.spyCol{padding:0;white-space:nowrap;height:16px;}.spyTitleCol:hover > .objectLink-sourceLink,.spyTitleCol:hover > .spyTime,.spyTitleCol:hover > .spyStatus,.spyTitleCol:hover > .spyTitle{display:none;}.spyFullTitle{display:none;-moz-user-select:none;max-width:100%;background-color:Transparent;}.spyTitleCol:hover > .spyFullTitle{display:block;}.spyStatus{padding-left:10px;color:rgb(128,128,128);}.spyTime{margin-left:4px;margin-right:4px;color:rgb(128,128,128);}.spyIcon{margin-right:4px;margin-left:4px;width:16px;height:16px;vertical-align:middle;background:transparent no-repeat 0 0;display:none;}.loading .spyHead .spyRow .spyIcon{background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/loading_16.gif);display:block;}.logRow-spy.loaded:not(.error) .spyHead .spyRow .spyIcon{width:0;margin:0;}.logRow-spy.error .spyHead .spyRow .spyIcon{background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/errorIcon-sm.png);display:block;background-position:2px 2px;}.logRow-spy .spyHead .netInfoBody{display:none;}.logRow-spy.opened .spyHead .netInfoBody{margin-top:10px;display:block;}.logRow-spy.error .spyTitle,.logRow-spy.error .spyStatus,.logRow-spy.error .spyTime{color:red;}.logRow-spy.loading .spyResponseText{font-style:italic;color:#888888;}.caption{font-family:Lucida Grande,Tahoma,sans-serif;font-weight:bold;color:#444444;}.warning{padding:10px;font-family:Lucida Grande,Tahoma,sans-serif;font-weight:bold;color:#888888;}.panelNode-dom{overflow-x:hidden !important;}.domTable{font-size:1em;width:100%;table-layout:fixed;background:#fff;}.domTableIE{width:auto;}.memberLabelCell{padding:2px 0 2px 0;vertical-align:top;}.memberValueCell{padding:1px 0 1px 5px;display:block;overflow:hidden;}.memberLabel{display:block;cursor:default;-moz-user-select:none;overflow:hidden;padding-left:18px;background-color:#FFFFFF;text-decoration:none;}.memberRow.hasChildren .memberLabelCell .memberLabel:hover{cursor:pointer;color:blue;text-decoration:underline;}.userLabel{color:#000000;font-weight:bold;}.userClassLabel{color:#E90000;font-weight:bold;}.userFunctionLabel{color:#025E2A;font-weight:bold;}.domLabel{color:#000000;}.domFunctionLabel{color:#025E2A;}.ordinalLabel{color:SlateBlue;font-weight:bold;}.scopesRow{padding:2px 18px;background-color:LightYellow;border-bottom:5px solid #BEBEBE;color:#666666;}.scopesLabel{background-color:LightYellow;}.watchEditCell{padding:2px 18px;background-color:LightYellow;border-bottom:1px solid #BEBEBE;color:#666666;}.editor-watchNewRow,.editor-memberRow{font-family:Monaco,monospace !important;}.editor-memberRow{padding:1px 0 !important;}.editor-watchRow{padding-bottom:0 !important;}.watchRow > .memberLabelCell{font-family:Monaco,monospace;padding-top:1px;padding-bottom:1px;}.watchRow > .memberLabelCell > .memberLabel{background-color:transparent;}.watchRow > .memberValueCell{padding-top:2px;padding-bottom:2px;}.watchRow > .memberLabelCell,.watchRow > .memberValueCell{background-color:#F5F5F5;border-bottom:1px solid #BEBEBE;}.watchToolbox{z-index:2147483647;position:absolute;right:0;padding:1px 2px;}#fbConsole{overflow-x:hidden !important;}#fbCSS{font:1em Monaco,monospace;padding:0 7px;}#fbstylesheetButtons select,#fbScriptButtons select{font:11px Lucida Grande,Tahoma,sans-serif;margin-top:1px;padding-left:3px;background:#fafafa;border:1px inset #fff;width:220px;outline:none;}.Selector{margin-top:10px}.CSSItem{margin-left:4%}.CSSText{padding-left:20px;}.CSSProperty{color:#005500;}.CSSValue{padding-left:5px; color:#000088;}#fbHTMLStatusBar{display:inline;}.fbToolbarButtons{display:none;}.fbStatusSeparator{display:block;float:left;padding-top:4px;}#fbStatusBarBox{display:none;}#fbToolbarContent{display:block;position:absolute;_position:absolute;top:0;padding-top:4px;height:23px;clip:rect(0,2048px,27px,0);}.fbTabMenuTarget{display:none !important;float:left;width:10px;height:10px;margin-top:6px;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/tabMenuTarget.png);}.fbTabMenuTarget:hover{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/tabMenuTargetHover.png);}.fbShadow{float:left;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/shadowAlpha.png) no-repeat bottom right !important;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/shadow2.gif) no-repeat bottom right;margin:10px 0 0 10px !important;margin:10px 0 0 5px;}.fbShadowContent{display:block;position:relative;background-color:#fff;border:1px solid #a9a9a9;top:-6px;left:-6px;}.fbMenu{display:none;position:absolute;font-size:11px;z-index:2147483647;}.fbMenuContent{padding:2px;}.fbMenuSeparator{display:block;position:relative;padding:1px 18px 0;text-decoration:none;color:#000;cursor:default;background:#ACA899;margin:4px 0;}.fbMenuOption{display:block;position:relative;padding:2px 18px;text-decoration:none;color:#000;cursor:default;}.fbMenuOption:hover{color:#fff;background:#316AC5;}.fbMenuGroup{background:transparent url(https://getfirebug.com/releases/lite/latest/skin/xp/tabMenuPin.png) no-repeat right 0;}.fbMenuGroup:hover{background:#316AC5 url(https://getfirebug.com/releases/lite/latest/skin/xp/tabMenuPin.png) no-repeat right -17px;}.fbMenuGroupSelected{color:#fff;background:#316AC5 url(https://getfirebug.com/releases/lite/latest/skin/xp/tabMenuPin.png) no-repeat right -17px;}.fbMenuChecked{background:transparent url(https://getfirebug.com/releases/lite/latest/skin/xp/tabMenuCheckbox.png) no-repeat 4px 0;}.fbMenuChecked:hover{background:#316AC5 url(https://getfirebug.com/releases/lite/latest/skin/xp/tabMenuCheckbox.png) no-repeat 4px -17px;}.fbMenuRadioSelected{background:transparent url(https://getfirebug.com/releases/lite/latest/skin/xp/tabMenuRadio.png) no-repeat 4px 0;}.fbMenuRadioSelected:hover{background:#316AC5 url(https://getfirebug.com/releases/lite/latest/skin/xp/tabMenuRadio.png) no-repeat 4px -17px;}.fbMenuShortcut{padding-right:85px;}.fbMenuShortcutKey{position:absolute;right:0;top:2px;width:77px;}#fbFirebugMenu{top:22px;left:0;}.fbMenuDisabled{color:#ACA899 !important;}#fbFirebugSettingsMenu{left:245px;top:99px;}#fbConsoleMenu{top:42px;left:48px;}.fbIconButton{display:block;}.fbIconButton{display:block;}.fbIconButton{display:block;float:left;height:20px;width:20px;color:#000;margin-right:2px;text-decoration:none;cursor:default;}.fbIconButton:hover{position:relative;top:-1px;left:-1px;margin-right:0;_margin-right:1px;color:#333;border:1px solid #fff;border-bottom:1px solid #bbb;border-right:1px solid #bbb;}.fbIconPressed{position:relative;margin-right:0;_margin-right:1px;top:0 !important;left:0 !important;height:19px;color:#333 !important;border:1px solid #bbb !important;border-bottom:1px solid #cfcfcf !important;border-right:1px solid #ddd !important;}#fbErrorPopup{position:absolute;right:0;bottom:0;height:19px;width:75px;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) #f1f2ee 0 0;z-index:999;}#fbErrorPopupContent{position:absolute;right:0;top:1px;height:18px;width:75px;_width:74px;border-left:1px solid #aca899;}#fbErrorIndicator{position:absolute;top:2px;right:5px;}.fbBtnInspectActive{background:#aaa;color:#fff !important;}.fbBody{margin:0;padding:0;overflow:hidden;font-family:Lucida Grande,Tahoma,sans-serif;font-size:11px;background:#fff;}.clear{clear:both;}#fbMiniChrome{display:none;right:0;height:27px;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) #f1f2ee 0 0;margin-left:1px;}#fbMiniContent{display:block;position:relative;left:-1px;right:0;top:1px;height:25px;border-left:1px solid #aca899;}#fbToolbarSearch{float:right;border:1px solid #ccc;margin:0 5px 0 0;background:#fff url(https://getfirebug.com/releases/lite/latest/skin/xp/search.png) no-repeat 4px 2px !important;background:#fff url(https://getfirebug.com/releases/lite/latest/skin/xp/search.gif) no-repeat 4px 2px;padding-left:20px;font-size:11px;}#fbToolbarErrors{float:right;margin:1px 4px 0 0;font-size:11px;}#fbLeftToolbarErrors{float:left;margin:7px 0px 0 5px;font-size:11px;}.fbErrors{padding-left:20px;height:14px;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/errorIcon.png) no-repeat !important;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/errorIcon.gif) no-repeat;color:#f00;font-weight:bold;}#fbMiniErrors{display:inline;display:none;float:right;margin:5px 2px 0 5px;}#fbMiniIcon{float:right;margin:3px 4px 0;height:20px;width:20px;float:right;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) 0 -135px;cursor:pointer;}#fbChrome{font-family:Lucida Grande,Tahoma,sans-serif;font-size:11px;position:absolute;_position:static;top:0;left:0;height:100%;width:100%;border-collapse:collapse;border-spacing:0;background:#fff;overflow:hidden;}#fbChrome > tbody > tr > td{padding:0;}#fbTop{height:49px;}#fbToolbar{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) #f1f2ee 0 0;height:27px;font-size:11px;}#fbPanelBarBox{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) #dbd9c9 0 -27px;height:22px;}#fbContent{height:100%;vertical-align:top;}#fbBottom{height:18px;background:#fff;}#fbToolbarIcon{float:left;padding:0 5px 0;}#fbToolbarIcon a{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) 0 -135px;}#fbToolbarButtons{padding:0 2px 0 5px;}#fbToolbarButtons{padding:0 2px 0 5px;}.fbButton{text-decoration:none;display:block;float:left;color:#000;padding:4px 6px 4px 7px;cursor:default;}.fbButton:hover{color:#333;background:#f5f5ef url(https://getfirebug.com/releases/lite/latest/skin/xp/buttonBg.png);padding:3px 5px 3px 6px;border:1px solid #fff;border-bottom:1px solid #bbb;border-right:1px solid #bbb;}.fbBtnPressed{background:#e3e3db url(https://getfirebug.com/releases/lite/latest/skin/xp/buttonBgHover.png) !important;padding:3px 4px 2px 6px !important;margin:1px 0 0 1px !important;border:1px solid #ACA899 !important;border-color:#ACA899 #ECEBE3 #ECEBE3 #ACA899 !important;}#fbStatusBarBox{top:4px;cursor:default;}.fbToolbarSeparator{overflow:hidden;border:1px solid;border-color:transparent #fff transparent #777;_border-color:#eee #fff #eee #777;height:7px;margin:6px 3px;float:left;}.fbBtnSelected{font-weight:bold;}.fbStatusBar{color:#aca899;}.fbStatusBar a{text-decoration:none;color:black;}.fbStatusBar a:hover{color:blue;cursor:pointer;}#fbWindowButtons{position:absolute;white-space:nowrap;right:0;top:0;height:17px;width:48px;padding:5px;z-index:6;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) #f1f2ee 0 0;}#fbPanelBar1{width:1024px; z-index:8;left:0;white-space:nowrap;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) #dbd9c9 0 -27px;position:absolute;left:4px;}#fbPanelBar2Box{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) #dbd9c9 0 -27px;position:absolute;height:22px;width:300px; z-index:9;right:0;}#fbPanelBar2{position:absolute;width:290px; height:22px;padding-left:4px;}.fbPanel{display:none;}#fbPanelBox1,#fbPanelBox2{max-height:inherit;height:100%;font-size:1em;}#fbPanelBox2{background:#fff;}#fbPanelBox2{width:300px;background:#fff;}#fbPanel2{margin-left:6px;background:#fff;}#fbLargeCommandLine{display:none;position:absolute;z-index:9;top:27px;right:0;width:294px;height:201px;border-width:0;margin:0;padding:2px 0 0 2px;resize:none;outline:none;font-size:11px;overflow:auto;border-top:1px solid #B9B7AF;_right:-1px;_border-left:1px solid #fff;}#fbLargeCommandButtons{display:none;background:#ECE9D8;bottom:0;right:0;width:294px;height:21px;padding-top:1px;position:fixed;border-top:1px solid #ACA899;z-index:9;}#fbSmallCommandLineIcon{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/down.png) no-repeat;position:absolute;right:2px;bottom:3px;z-index:99;}#fbSmallCommandLineIcon:hover{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/downHover.png) no-repeat;}.hide{overflow:hidden !important;position:fixed !important;display:none !important;visibility:hidden !important;}#fbCommand{height:18px;}#fbCommandBox{position:fixed;_position:absolute;width:100%;height:18px;bottom:0;overflow:hidden;z-index:9;background:#fff;border:0;border-top:1px solid #ccc;}#fbCommandIcon{position:absolute;color:#00f;top:2px;left:6px;display:inline;font:11px Monaco,monospace;z-index:10;}#fbCommandLine{position:absolute;width:100%;top:0;left:0;border:0;margin:0;padding:2px 0 2px 32px;font:11px Monaco,monospace;z-index:9;outline:none;}#fbLargeCommandLineIcon{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/up.png) no-repeat;position:absolute;right:1px;bottom:1px;z-index:10;}#fbLargeCommandLineIcon:hover{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/upHover.png) no-repeat;}div.fbFitHeight{overflow:auto;position:relative;}.fbSmallButton{overflow:hidden;width:16px;height:16px;display:block;text-decoration:none;cursor:default;}#fbWindowButtons .fbSmallButton{float:right;}#fbWindow_btClose{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/min.png);}#fbWindow_btClose:hover{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/minHover.png);}#fbWindow_btDetach{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/detach.png);}#fbWindow_btDetach:hover{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/detachHover.png);}#fbWindow_btDeactivate{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/off.png);}#fbWindow_btDeactivate:hover{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/offHover.png);}.fbTab{text-decoration:none;display:none;float:left;width:auto;float:left;cursor:default;font-family:Lucida Grande,Tahoma,sans-serif;font-size:11px;font-weight:bold;height:22px;color:#565656;}.fbPanelBar span{float:left;}.fbPanelBar .fbTabL,.fbPanelBar .fbTabR{height:22px;width:8px;}.fbPanelBar .fbTabText{padding:4px 1px 0;}a.fbTab:hover{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) 0 -73px;}a.fbTab:hover .fbTabL{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) -16px -96px;}a.fbTab:hover .fbTabR{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) -24px -96px;}.fbSelectedTab{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) #f1f2ee 0 -50px !important;color:#000;}.fbSelectedTab .fbTabL{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) 0 -96px !important;}.fbSelectedTab .fbTabR{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/sprite.png) -8px -96px !important;}#fbHSplitter{position:fixed;_position:absolute;left:0;top:0;width:100%;height:5px;overflow:hidden;cursor:n-resize !important;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/pixel_transparent.gif);z-index:9;}#fbHSplitter.fbOnMovingHSplitter{height:100%;z-index:100;}.fbVSplitter{background:#ece9d8;color:#000;border:1px solid #716f64;border-width:0 1px;border-left-color:#aca899;width:4px;cursor:e-resize;overflow:hidden;right:294px;text-decoration:none;z-index:10;position:absolute;height:100%;top:27px;}div.lineNo{font:1em Monaco,monospace;position:relative;float:left;top:0;left:0;margin:0 5px 0 0;padding:0 5px 0 10px;background:#eee;color:#888;border-right:1px solid #ccc;text-align:right;}.sourceBox{position:absolute;}.sourceCode{font:1em Monaco,monospace;overflow:hidden;white-space:pre;display:inline;}.nodeControl{margin-top:3px;margin-left:-14px;float:left;width:9px;height:9px;overflow:hidden;cursor:default;background:url(https://getfirebug.com/releases/lite/latest/skin/xp/tree_open.gif);_float:none;_display:inline;_position:absolute;}div.nodeMaximized{background:url(https://getfirebug.com/releases/lite/latest/skin/xp/tree_close.gif);}div.objectBox-element{padding:1px 3px;}.objectBox-selector{cursor:default;}.selectedElement{background:highlight;color:#fff !important;}.selectedElement span{color:#fff !important;}* html .selectedElement{position:relative;}@media screen and (-webkit-min-device-pixel-ratio:0){.selectedElement{background:#316AC5;color:#fff !important;}}.logRow *{font-size:1em;}.logRow{position:relative;border-bottom:1px solid #D7D7D7;padding:2px 4px 1px 6px;zbackground-color:#FFFFFF;}.logRow-command{font-family:Monaco,monospace;color:blue;}.objectBox-string,.objectBox-text,.objectBox-number,.objectBox-function,.objectLink-element,.objectLink-textNode,.objectLink-function,.objectBox-stackTrace,.objectLink-profile{font-family:Monaco,monospace;}.objectBox-null{padding:0 2px;border:1px solid #666666;background-color:#888888;color:#FFFFFF;}.objectBox-string{color:red;}.objectBox-number{color:#000088;}.objectBox-function{color:DarkGreen;}.objectBox-object{color:DarkGreen;font-weight:bold;font-family:Lucida Grande,sans-serif;}.objectBox-array{color:#000;}.logRow-info,.logRow-error,.logRow-warn{background:#fff no-repeat 2px 2px;padding-left:20px;padding-bottom:3px;}.logRow-info{background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/infoIcon.png) !important;background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/infoIcon.gif);}.logRow-warn{background-color:cyan;background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/warningIcon.png) !important;background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/warningIcon.gif);}.logRow-error{background-color:LightYellow;background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/errorIcon.png) !important;background-image:url(https://getfirebug.com/releases/lite/latest/skin/xp/errorIcon.gif);color:#f00;}.errorMessage{vertical-align:top;color:#f00;}.objectBox-sourceLink{position:absolute;right:4px;top:2px;padding-left:8px;font-family:Lucida Grande,sans-serif;font-weight:bold;color:#0000FF;}.selectorTag,.selectorId,.selectorClass{font-family:Monaco,monospace;font-weight:normal;}.selectorTag{color:#0000FF;}.selectorId{color:DarkBlue;}.selectorClass{color:red;}.objectBox-element{font-family:Monaco,monospace;color:#000088;}.nodeChildren{padding-left:26px;}.nodeTag{color:blue;cursor:pointer;}.nodeValue{color:#FF0000;font-weight:normal;}.nodeText,.nodeComment{margin:0 2px;vertical-align:top;}.nodeText{color:#333333;font-family:Monaco,monospace;}.nodeComment{color:DarkGreen;}.nodeHidden,.nodeHidden *{color:#888888;}.nodeHidden .nodeTag{color:#5F82D9;}.nodeHidden .nodeValue{color:#D86060;}.selectedElement .nodeHidden,.selectedElement .nodeHidden *{color:SkyBlue !important;}.log-object{}.property{position:relative;clear:both;height:15px;}.propertyNameCell{vertical-align:top;float:left;width:28%;position:absolute;left:0;z-index:0;}.propertyValueCell{float:right;width:68%;background:#fff;position:absolute;padding-left:5px;display:table-cell;right:0;z-index:1;}.propertyName{font-weight:bold;}.FirebugPopup{height:100% !important;}.FirebugPopup #fbWindowButtons{display:none !important;}.FirebugPopup #fbHSplitter{display:none !important;}',HTML:"undefined"} }}); FBL.initialize() })();