'
- );
-
- logRow(html, "error");
- };
-
- function onKeyDown(event)
- {
- if (event.keyCode == 123)
- toggleConsole();
- else if ((event.keyCode == 108 || event.keyCode == 76) && event.shiftKey
- && (event.metaKey || event.ctrlKey))
- focusCommandLine();
- else
- return;
-
- cancelEvent(event);
- }
-
- function onSplitterMouseDown(event)
- {
- if (isSafari || isOpera)
- return;
-
- addEvent(document, "mousemove", onSplitterMouseMove);
- addEvent(document, "mouseup", onSplitterMouseUp);
-
- for (var i = 0; i < frames.length; ++i)
- {
- addEvent(frames[i].document, "mousemove", onSplitterMouseMove);
- addEvent(frames[i].document, "mouseup", onSplitterMouseUp);
- }
- }
-
- function onSplitterMouseMove(event)
- {
- var win = document.all
- ? event.srcElement.ownerDocument.parentWindow
- : event.target.ownerDocument.defaultView;
-
- var clientY = event.clientY;
- if (win != win.parent)
- clientY += win.frameElement ? win.frameElement.offsetTop : 0;
-
- var height = consoleFrame.offsetTop + consoleFrame.clientHeight;
- var y = height - clientY;
-
- consoleFrame.style.height = y + "px";
- layout();
- }
-
- function onSplitterMouseUp(event)
- {
- removeEvent(document, "mousemove", onSplitterMouseMove);
- removeEvent(document, "mouseup", onSplitterMouseUp);
-
- for (var i = 0; i < frames.length; ++i)
- {
- removeEvent(frames[i].document, "mousemove", onSplitterMouseMove);
- removeEvent(frames[i].document, "mouseup", onSplitterMouseUp);
- }
- }
-
- function onCommandLineKeyDown(event)
- {
- if (event.keyCode == 13)
- evalCommandLine();
- else if (event.keyCode == 27)
- commandLine.value = "";
- }
-
- window.onerror = onError;
- addEvent(document, isIE || isSafari ? "keydown" : "keypress", onKeyDown);
-
- if (document.documentElement.getAttribute("debug") == "true")
- toggleConsole(true);
-})();
-}
diff --git a/branches/firebug1.1/firebugx.js b/branches/firebug1.1/firebugx.js
deleted file mode 100644
index 34368625..00000000
--- a/branches/firebug1.1/firebugx.js
+++ /dev/null
@@ -1,10 +0,0 @@
-
-if (!window.console || !console.firebug)
-{
- var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
- "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
-
- window.console = {};
- for (var i = 0; i < names.length; ++i)
- window.console[names[i]] = function() {}
-}
\ No newline at end of file
diff --git a/branches/firebug1.2/ChangeLog b/branches/firebug1.2/ChangeLog
deleted file mode 100644
index 7be78a99..00000000
--- a/branches/firebug1.2/ChangeLog
+++ /dev/null
@@ -1,167 +0,0 @@
-== Firebug Lite Change Log ==
-2009-08-28 Pedro Simonetti
- * firebug-lite.js: Fixed problem with selection of elements in HTML panel.
- It was trying to access getAttribute() function of comment
- nodes, and this was causing an error.
-
- Fixed problem with the "outline inspector". It was not
- possible to inspect child nodes of the currently inspected
- element, for example, if you are inspecting a UL element,
- you won't be able to select the LI elements inside of it.
-
-2009-05-08 Azer Koculu
- * deploy: A shell script that copies source files whose names starts
- with "firebug" to getfirebug.com's repo.
-
-2009-05-06 Mike Ratcliffe
- * firebug-lite.css: Fixed options dropdown arrow
- * firebug-lite.js: Script line numbering started at 2, changed it so that it starts at 1
- Moved env.liteFilename to internal vars as it is no longer necessary for users to change this value
- Fixed error when getting script name
- Fixed lib.util.Hash.clone (it was called out of scope)
- Added check for valid value when reading textNodeChars
-
-2009-05-06 Azer Koculu
- * firebug-lite.js: Changed filename search.
- Moved initializer part into a new function scope.
- Added 'firebugIgnore' filter to dom explorer.
- Setted firebugIgnore attributes in container elements.
- Optimized source code displayer in scripts tab.
- Refactored script line numbering code
- Changed code for getting script name
-
-2009-05-02 Mike Ratcliffe
- * firebug-lite.js: Issue 1713: If FB Lite is loaded over https IE warns of unsecured items being loaded
- Issue 1703: Firebug lite incorrect reports the evaluation result of "undefined" as "null"
- Issue 1702: Mac OS X CMD key press toggles popup/docked Firebug window
-
-2009-04-24 Mike Ratcliffe
- * firebug-lite.js: Issue 1683: Firebug lite delivered by Rails - Js Error
-
-2009-04-20 Mike Ratcliffe
- * firebug-lite.js, firebug-lite.css: Issue 1664: Text node text trimming should be configurable in FB Lite
- * firebug-lite.js: Issue 1654: Internal variables should not be accessible to users
-
-2009-04-19 Mike Ratcliffe
- * firebug-lite.js Fixed multiple issues with the HTML Tree:
- Issue 1658: FB Lite HTML view body tag occasionally has multiple + signs
- Issue 1659: FB Lite stops parsing childnodes when it reaches HTML comments
- Issue 1568: Firebug Lite: Inspect button often fails to scroll the html line into view when an element is clicked
- Simplified discovery of body tag
- Object tags displayed as function() in HTML tree
- Disabled trimming of text content, users expect to see things the same way they are displayed in Firebug.
-
-2009-04-16 Mike Ratcliffe
- * firebug-lite.js: Issue 1653: Removed reliability on firebug.liteFilename
- Fixed a security issue in IE 7 (introduced via Microsoft Update)
-
-2009-03-09 Mike Ratcliffe
- * firebug-lite.js: Issue 1637: Script missing linebreaks in IE7, line numbers broken in all browsers
-
-2009-03-09 Mike Ratcliffe
- * firebug-lite.js: Added title to popup window
-
-2009-03-09 Azer Koculu
- * firebug-lite.js: Removed getElementPosXY method.
- Added toggle method to settings object.
-
-2009-03-07 Mike Ratcliffe
- * firebug-lite.js: Fixed issue 1554: Text nodes could not be accessed through the inspect button.
-
-2009-03-07 Mike Ratcliffe
- * firebug-lite.js: Issue 1566: Added firebug.env.targetWindow variable to hold target window
-
-2009-03-06 Mike Ratcliffe
- * firebug-lite.js: Changed default for firebug.env.detectFirebug to false
- Fixed issue 1555: Ajax calls ... we should not assume that the same domain policy is applied, use try catch instead
- Fixed Issue 1541: Add XHR tab to Firebug Lite popup window
- progress.gif: Corrected mime type
-
-2009-03-03 Mike Ratcliffe
- * firebug-lite.js, firebug-lite.css, progress.gif: Fixed Issue 1544: Lite settings menu should have a "processing" gif
-
-2009-02-21 Mike Ratcliffe
- * firebug-lite.js: Fixed Issue 1542: FBLite F12 etc should dock the popup instead of hiding the panel
-
-2009-02-21 Mike Ratcliffe
- * firebug-lite.js, firebug-lite.css:
- o Issue 1513 ... added:
- - Settings dialog
- - Settings storage cookie (stores settings, panel height, popup window positions etc.)
- - firebug.env:
- openInPopup
- popupTop
- popupLeft
- popupWidth
- popupHeight
- o Various popup window bugfixes and performance improvements
-
-2009-02-21 Mike Ratcliffe
- * firebug-lite.js, firebug-lite.css, firebug_logo.png: Issue 1503: FBLite should have a visible sign it is running when starting hidden.
- Added FBLite icon when hidden and firebug.env.showIconWhenHidden (default true).
-
-2009-02-18 Mike Ratcliffe
- * firebug-lite.js: Fixed issue 1086 - FBLite can now be used locally over HTTPS if firebug.env.css is set.
-
-2009-02-17 Mike Ratcliffe
- * firebug-lite.js: Fixed problem with issue 1481 - A DIV was created instead of an IFRAME so the shield was ineffective.
-
-2009-02-14 Mike Ratcliffe
- * firebug-lite.js: Issue 1487 - Added firebug.env.liteFilename ... this allows for the renaming of the FBLite script for use in popup windows.
-
-2009-02-12 Azer Koculu
- * minifier.py, jsmin.py, minify: Added minifier library and compressing scripts.
-
-2009-02-12 Mike Ratcliffe
- * firebug-lite.js: Corrected 2 syntax errors
-
-2009-02-11 Mike Ratcliffe
- * firebug-lite.js: Issue 1400 - firebug.env.override is now false by default ... I have also added
- two methods to make it easier for the user to control the console:
- firebug.overrideConsole() & firebug.restoreConsole()
-
-2009-02-09 Mike Ratcliffe
- * firebug-lite.js: Issue 1400 - Re-implemented firebug.env.override. Default is now true ... it can only be manually changed in FBLite code.
- The reason this is needed is because a number of browsers have a window.console object.
-
-2009-02-08 Mike Ratcliffe
- * firebug-lite.js: Issue 1406 - Added firebug.env.hideDOMFunctions to allow hiding of DOM functions in the DOM tab.
-
-2009-02-06 Mike Ratcliffe
- * firebug-lite.js: Removed firebug.env.override to prevent problems when override is set in FF3 where window.console
- is a getter and allow more control over initialization.
- * firebug-lite.js: Refactored code to allow firebug.env.detectFirebug to be set from user code
- * firebug-lite.js: Moved console initialization code inside of the Firebug object to remove some global variables
- * firebug-lite.js & firebug-lite.css: Fixed Issue 1348 - String, Date and Boolean objects should be displayed similar
- to their primitive counterparts
- * firebug-lite.js & firebug-lite.css: Fixed Issue 1023 - Elements such as Flash in iframes and dropdowns in IE bleed through FBLite,
- I have put an iframe 'shield' behind FBLite to prevent this
- * Updated mime-types for all FBLite SVN files
-
-2009-02-05 Mike Ratcliffe
- * firebug-lite.js: Added firebug.env.detectFirebug to prevent FBLite opening when Firebug is enabled (actually the Firebug Console).
- To run FBLite and Firebug at the same time it is now necessary to change the value of detectFirebug directly in firebug-lite.js
- * Fixed multiple console initialization and override issues
-
-2009-02-05 Azer Koculu
- * firebug-lite.css: mime-type property has been set to "text/css".
-
-2009-02-04 Azer Koculu
- * firebug-lite.js: Changed default css url getfirebug.com to fbug.google.com
- * firebug-lite-compressed.js: It was unnecesseary, removed.
-
-2009-02-02 Azer Koculu
- * Copied latest source to googlecode repository.
-
-2009-01-31 Mike Ratcliffe
- * firebug-lite.js: Added extra hotkeys to show / hide FBLite:
- F12, (CTRL|CMD)+SHIFT+L, SHIFT+ENTER
- * firebug-lite.js: Added console.firebug command to show FBLite version number
- * firebug-lite.js: Fixed problem with Open in New Window in Safari
- * firebug-lite.js: Added debug="true/false" to show or hide FBLite on startup
-
-2009-01-01 Mike Ratcliffe
- * firebug-lite.js & firebug-lite.css: Added Open in New Window
- * firebug-lite.js: Fixed: HTML Inspect only worked in 1 very specific situation ... it now works in all situations
- * firebug-lite.js: Fixed: Permission was occasionally denied to inspect CSS or scripts when it should not have been
- * firebug-lite.js: Fixed: Domain check now works with domain names containing - and _
diff --git a/branches/firebug1.2/deploy b/branches/firebug1.2/deploy
deleted file mode 100644
index b1f352ce..00000000
--- a/branches/firebug1.2/deploy
+++ /dev/null
@@ -1,2 +0,0 @@
-cp firebug* ../../../getfirebug.com/trunk/releases/lite/1.2/.
-cp firebug* ../../../getfirebug.com/tags/production/releases/lite/1.2/.
diff --git a/branches/firebug1.2/firebug-lite-compressed.js b/branches/firebug1.2/firebug-lite-compressed.js
deleted file mode 100644
index 64385ae5..00000000
--- a/branches/firebug1.2/firebug-lite-compressed.js
+++ /dev/null
@@ -1,123 +0,0 @@
-var firebug={version:[1.231,20100118],el:{},env:{"css":"http://getfirebug.com/releases/lite/1.2/firebug-lite.css","debug":true,"detectFirebug":true,"dIndex":"console","height":295,"hideDOMFunctions":false,"openInPopup":false,"override":false,"ml":false,"showIconWhenHidden":true,"popupTop":1,"popupLeft":1,"popupWidth":undefined,"popupHeight":undefined,"textNodeChars":0},internal:{"cache":{},"extConsole":null,"init":false,"isPopup":false,"liteFilename":null,"minimized":false,"popupWin":null,"targetWindow":undefined},initConsole:function(){var command;try{if((!window.console||(window.console&&!window.console.firebug))||(firebug.env.override&&!(/Firefox\/3/i.test(navigator.userAgent)))){window.console={"provider":"Firebug Lite"};for(command in firebug.d.console.cmd){window.console[command]=firebug.lib.util.Curry(firebug.d.console.run,window,command);};}
-window.onerror=function(_message,_file,_line){firebug.d.console.run('error',firebug.lib.util.String.format('{0} ({1},{2})',_message,firebug.getFileName(_file),_line));};}catch(e){}},overrideConsole:function(){with(firebug){env.override=true;try{internal.extConsole=window.console;}catch(e){}
-initConsole();}},restoreConsole:function(){with(firebug){if(internal.extConsole){env.override=false;try{window.console=internal.extConsole;}catch(e){}
-internal.extConsole=null;}}},init:function(_css){var i,cssLoaded=false,iconTitle="Click here or press F12, (CTRL|CMD)+SHIFT+L or SHIFT+ENTER to show Firebug Lite. CTRL|CMD click this icon to hide it.";with(firebug){if(document.getElementsByTagName('html')[0].attributes.getNamedItem('debug')){env.debug=document.getElementsByTagName('html')[0].attributes.getNamedItem('debug').nodeValue!=="false";}
-if(internal.isPopup){env.openInPopup=false;internal.targetWindow=window.opener;env.popupWidth=window.opener.firebug.env.popupWidth||window.opener.firebug.lib.util.GetViewport().width;env.popupHeight=window.opener.firebug.env.popupHeight||window.opener.firebug.lib.util.GetViewport().height;}else{internal.targetWindow=window;env.popupWidth=env.popupWidth||lib.util.GetViewport().width;env.popupHeight=env.popupHeight||lib.util.GetViewport().height;}
-settings.readCookie();if(internal.init||(env.detectFirebug&&window.console&&window.console.firebug)){return;}
-for(i=0;i>>"));el.left.console.input=new lib.element("INPUT").attribute.set("type","text").attribute.addClass("Input").event.addListener("keydown",listen.consoleTextbox).insert(new lib.element("DIV").attribute.addClass("InputContainer").insert(el.left.console.container));el.right.console={};el.right.console.container=new lib.element("DIV").attribute.addClass("Console Container").insert(el.right.container);el.right.console.mlButton=new lib.element("A").attribute.addClass("MLButton CloseML").event.addListener("click",d.console.toggleML).insert(el.right.console.container);el.right.console.input=new lib.element("TEXTAREA").attribute.addClass("Input").insert(el.right.console.container);el.right.console.input.event.addListener("keydown",lib.util.Curry(tab,window,el.right.console.input.element));el.right.console.run=new lib.element("A").attribute.addClass("Button").event.addListener("click",listen.runMultiline).update("Run").insert(el.right.console.container);el.right.console.clear=new lib.element("A").attribute.addClass("Button").event.addListener("click",lib.util.Curry(d.clean,window,el.right.console.input)).update("Clear").insert(el.right.console.container);el.button.console={};el.button.console.container=new lib.element("DIV").attribute.addClass("ButtonSet").insert(el.button.container);el.button.console.clear=new lib.element("A").attribute.addClass("Button").event.addListener("click",d.console.clear).update("Clear").insert(el.button.console.container);el.left.html={};el.left.html.container=new lib.element("DIV").attribute.addClass("HTML").insert(el.left.container);el.right.html={};el.right.html.container=new lib.element("DIV").attribute.addClass("HTML Container").insert(el.right.container);el.right.html.nav={};el.right.html.nav.container=new lib.element("DIV").attribute.addClass("Nav").insert(el.right.html.container);el.right.html.nav.computedStyle=new lib.element("A").attribute.addClass("Tab Selected").event.addListener("click",lib.util.Curry(d.html.navigate,firebug,"computedStyle")).update("Computed Style").insert(el.right.html.nav.container);el.right.html.nav.dom=new lib.element("A").attribute.addClass("Tab").event.addListener("click",lib.util.Curry(d.html.navigate,firebug,"dom")).update("DOM").insert(el.right.html.nav.container);el.right.html.content=new lib.element("DIV").attribute.addClass("Content").insert(el.right.html.container);el.button.html={};el.button.html.container=new lib.element("DIV").attribute.addClass("ButtonSet HTML").insert(el.button.container);el.left.css={};el.left.css.container=new lib.element("DIV").attribute.addClass("CSS").insert(el.left.container);el.right.css={};el.right.css.container=new lib.element("DIV").attribute.addClass("CSS Container").insert(el.right.container);el.right.css.nav={};el.right.css.nav.container=new lib.element("DIV").attribute.addClass("Nav").insert(el.right.css.container);el.right.css.nav.runCSS=new lib.element("A").attribute.addClass("Tab Selected").update("Run CSS").insert(el.right.css.nav.container);el.right.css.mlButton=new lib.element("A").attribute.addClass("MLButton CloseML").event.addListener("click",d.console.toggleML).insert(el.right.css.container);el.right.css.input=new lib.element("TEXTAREA").attribute.addClass("Input").insert(el.right.css.container);el.right.css.input.event.addListener("keydown",lib.util.Curry(firebug.tab,window,el.right.css.input.element));el.right.css.run=new lib.element("A").attribute.addClass("Button").event.addListener("click",listen.runCSS).update("Run").insert(el.right.css.container);el.right.css.clear=new lib.element("A").attribute.addClass("Button").event.addListener("click",lib.util.Curry(d.clean,window,el.right.css.input)).update("Clear").insert(el.right.css.container);el.button.css={};el.button.css.container=new lib.element("DIV").attribute.addClass("ButtonSet CSS").insert(el.button.container);el.button.css.selectbox=new lib.element("SELECT").event.addListener("change",listen.cssSelectbox).insert(el.button.css.container);el.left.scripts={};el.left.scripts.container=new lib.element("DIV").attribute.addClass("Scripts").insert(el.left.container);el.right.scripts={};el.right.scripts.container=new lib.element("DIV").attribute.addClass("Scripts Container").insert(el.right.container);el.button.scripts={};el.button.scripts.container=new lib.element("DIV").attribute.addClass("ButtonSet Scripts").insert(el.button.container);el.button.scripts.selectbox=new lib.element("SELECT").event.addListener("change",listen.scriptsSelectbox).insert(el.button.scripts.container);el.button.scripts.lineNumbers=new lib.element("A").attribute.addClass("Button").event.addListener("click",d.scripts.toggleLineNumbers).update("Show Line Numbers").insert(el.button.scripts.container);el.left.dom={};el.left.dom.container=new lib.element("DIV").attribute.addClass("DOM").insert(el.left.container);el.right.dom={};el.right.dom.container=new lib.element("DIV").attribute.addClass("DOM Container").insert(el.right.container);el.button.dom={};el.button.dom.container=new lib.element("DIV").attribute.addClass("ButtonSet DOM").insert(el.button.container);el.button.dom.label=new lib.element("LABEL").update("Object Path:").insert(el.button.dom.container);el.button.dom.textbox=new lib.element("INPUT").event.addListener("keydown",listen.domTextbox).update(internal.isPopup?"window.opener":"window").insert(el.button.dom.container);el.left.str={};el.left.str.container=new lib.element("DIV").attribute.addClass("STR").insert(el.left.container);el.right.str={};el.right.str.container=new lib.element("DIV").attribute.addClass("STR").insert(el.left.container);el.button.str={};el.button.str.container=new lib.element("DIV").attribute.addClass("ButtonSet XHR").insert(el.button.container);el.button.str.watch=new lib.element("A").attribute.addClass("Button").event.addListener("click",lib.util.Curry(d.navigate,window,"xhr")).update("Back").insert(el.button.str.container);el.left.xhr={};el.left.xhr.container=new lib.element("DIV").attribute.addClass("XHR").insert(el.left.container);el.right.xhr={};el.right.xhr.container=new lib.element("DIV").attribute.addClass("XHR").insert(el.left.container);el.button.xhr={};el.button.xhr.container=new lib.element("DIV").attribute.addClass("ButtonSet XHR").insert(el.button.container);el.button.xhr.label=new lib.element("LABEL").update("XHR Path:").insert(el.button.xhr.container);el.button.xhr.textbox=new lib.element("INPUT").event.addListener("keydown",listen.xhrTextbox).insert(el.button.xhr.container);el.button.xhr.watch=new lib.element("A").attribute.addClass("Button").event.addListener("click",listen.addXhrObject).update("Watch").insert(el.button.xhr.container);el.settings={};el.settings.container=new lib.element("DIV").child.add(new lib.element("DIV").attribute.addClass("Header").child.add(new lib.element().attribute.addClass("Title").update('Firebug Lite Settings'))).attribute.addClass("SettingsDiv").insert(el.main);el.settings.content=new lib.element("DIV").attribute.addClass("Content").insert(el.settings.container);el.settings.progressDiv=new lib.element("DIV").attribute.addClass("ProgressDiv").insert(el.settings.content);el.settings.progress=new lib.element("DIV").attribute.addClass("Progress").insert(el.settings.progressDiv);el.settings.cbxDebug=new lib.element("INPUT").attribute.set("type","checkbox").attribute.addClass("SettingsCBX").insert(el.settings.content);el.settings.content.child.add(document.createTextNode("Start visible"));new lib.element("BR").insert(el.settings.content);el.settings.cbxDetectFirebug=new lib.element("INPUT").attribute.set("type","checkbox").attribute.addClass("SettingsCBX").insert(el.settings.content);el.settings.content.child.add(document.createTextNode("Hide when Firebug active"));new lib.element("BR").insert(el.settings.content);el.settings.cbxHideDOMFunctions=new lib.element("INPUT").attribute.set("type","checkbox").attribute.addClass("SettingsCBX").insert(el.settings.content);el.settings.content.child.add(document.createTextNode("Hide DOM functions"));new lib.element("BR").insert(el.settings.content);el.settings.cbxOverride=new lib.element("INPUT").attribute.set("type","checkbox").attribute.addClass("SettingsCBX").insert(el.settings.content);el.settings.content.child.add(document.createTextNode("Override window.console"));new lib.element("BR").insert(el.settings.content);el.settings.cbxShowIcon=new lib.element("INPUT").attribute.set("type","checkbox").attribute.addClass("SettingsCBX").insert(el.settings.content);el.settings.content.child.add(document.createTextNode("Show icon when hidden"));new lib.element("BR").insert(el.settings.content);el.settings.cbxOpenInPopup=new lib.element("INPUT").attribute.set("type","checkbox").attribute.addClass("SettingsCBX").insert(el.settings.content);el.settings.content.child.add(document.createTextNode("Open in popup"));new lib.element("BR").insert(el.settings.content);el.settings.content.child.add(document.createTextNode("Trim textnode to "));el.settings.textNodeChars=new lib.element("INPUT").attribute.set("type","text").attribute.addClass("SettingsTextbox").insert(el.settings.content);el.settings.content.child.add(document.createTextNode(" chars"));el.settings.buttonDiv=new lib.element("DIV").insert(el.settings.content);el.settings.buttonLeftDiv=new lib.element("DIV").attribute.addClass("ButtonsLeft").insert(el.settings.buttonDiv);el.settings.resetButton=new lib.element("INPUT").attribute.set("type","button").update("Reset").event.addListener("click",settings.reset).insert(el.settings.buttonLeftDiv);el.settings.buttonRightDiv=new lib.element("DIV").attribute.addClass("ButtonsRight").insert(el.settings.buttonDiv);el.settings.cancelButton=new lib.element("INPUT").attribute.set("type","button").update("Cancel").event.addListener("click",settings.hide).insert(el.settings.buttonRightDiv);el.settings.buttonRightDiv.child.add(document.createTextNode(" "));el.settings.saveButton=new lib.element("INPUT").attribute.set("type","button").update("Save").event.addListener("click",settings.saveClicked).insert(el.settings.buttonRightDiv);lib.util.AddEvent(document,"mousemove",listen.mouse)("mousemove",win.resizer.resize)("mouseup",win.resizer.stop)("keydown",listen.keyboard);internal.init=true;for(var i=0,len=d.console.cache.length;i0){fe.textNodeChars=elSet.textNodeChars.element.value;}else{fe.textNodeChars=0;}
-if(firebug.internal.isPopup){window.opener.firebug.env=firebug.lib.util.Hash.clone(fe);}
-with(firebug){settings.writeCookie();settings.hide();win.refreshDOM();d.html.openHtmlTree();if(internal.isPopup){with(opener.firebug){win.refreshDOM();d.html.openHtmlTree();}}}},reset:function(){var exdate=new Date();exdate.setTime(exdate.getTime()-1);document.cookie='FBLiteSettings=;expires='+exdate.toGMTString();location.reload(true);},readCookie:function(){var i,cookieArr,valueArr,item,value;with(firebug.env){if(firebug.internal.targetWindow.document.cookie.length>0){cookieArr=firebug.internal.targetWindow.document.cookie.split('; ');for(i=0;i-1){scriptPath=scripts[i].src;break;}}
-if(scriptPath){done=false;script=fi.popupWin.document.createElement('script');script.type='text/javascript';script.src=scriptPath;script[firebug.lib.env.ie?"onreadystatechange":"onload"]=function(){if(!done&&(!firebug.lib.env.ie||this.readyState=="complete"||this.readyState=="loaded")){done=true;if(fi.popupWin.firebug){with(fi.popupWin.firebug){internal.isPopup=true;env.css=fe.css;init();el.button.dock.environment.addStyle({"display":"block"});el.button.newWindow.environment.addStyle({"display":"none"});}}}};if(!done&&firebug.lib.env.webkit){interval=setInterval(function(){if(firebug.internal.popupWin.firebug){clearInterval(interval);done=true;with(firebug.internal.popupWin.firebug){internal.isPopup=true;env.css=fe.css;init();el.button.dock.environment.addStyle({"display":"block"});el.button.newWindow.environment.addStyle({"display":"none"});}}},10);};if(!firebug.lib.env.ie){firebug.internal.popupWin.document.write('Firebug Lite - '+document.location.href+'');}
-if(!done){firebug.internal.popupWin.document.getElementsByTagName('head')[0].appendChild(script);firebug.el.main.environment.addStyle({"display":"none"});firebug.el.mainiframe.environment.addStyle({"display":"none"});}}else{alert("Unable to detect the following script \""+firebug.internal.liteFilename+"\" ... if the script has been renamed then please set the value of firebug.internal.liteFilename to reflect this change");firebug.internal.popupWin.close();firebug.internal.popupWin=null;}}}},dock:function(){with(opener.firebug){internal.popupWin=null;el.main.environment.addStyle({"display":"block"});el.mainiframe.environment.addStyle({"display":"block"});settings.readCookie();window.close();};},unload:function(){with(firebug){if(internal.isPopup){win.dock();}else if(internal.popupWin){internal.popupWin.close();}}},fitToPopup:function(){with(firebug){var viewport=lib.util.GetViewport(window);win.setHeight((window.innerHeight||viewport.height)-38);el.main.environment.addStyle({"width":(viewport.width)+"px"});el.mainiframe.environment.addStyle({"width":(viewport.width)+"px"});}},resizer:{y:[],enabled:false,start:function(_event){with(firebug){if(internal.minimized)return;win.resizer.y=[el.main.element.offsetHeight,_event.clientY];if(lib.env.ie6){win.resizer.y[3]=parseInt(el.main.environment.getPosition().top);}
-win.resizer.enabled=true;}},resize:function(_event){with(firebug){if(!win.resizer.enabled)return;win.resizer.y[2]=(win.resizer.y[0]+(win.resizer.y[1]-_event.clientY));el.main.environment.addStyle({"height":win.resizer.y[2]+"px"});el.mainiframe.environment.addStyle({"height":win.resizer.y[2]+"px"});if(lib.env.ie6){el.main.environment.addStyle({"top":win.resizer.y[3]-(win.resizer.y[1]-_event.clientY)+"px"});el.mainiframe.environment.addStyle({"top":win.resizer.y[3]-(win.resizer.y[1]-_event.clientY)+"px"});}}},stop:function(_event){with(firebug){if(win.resizer.enabled){win.resizer.enabled=false;win.setHeight(win.resizer.y[2]-35);}}}},setHeight:function(_height){with(firebug){env.height=_height;el.left.container.environment.addStyle({"height":_height+"px"});el.right.container.environment.addStyle({"height":_height+"px"});el.main.environment.addStyle({"height":_height+38+"px"});el.mainiframe.environment.addStyle({"height":_height+38+"px"});win.refreshSize();el.left.console.monitor.element.parentNode.style.height=_height-47+"px";el.left.console.mlButton.environment.addStyle({"top":_height+19+"px"});el.right.console.mlButton.environment.addStyle({"top":_height+19+"px"});el.right.console.input.environment.addStyle({"height":_height-29+"px"});el.left.html.container.environment.addStyle({"height":_height-23+"px"});el.right.html.content.environment.addStyle({"height":_height-23+"px"});el.left.css.container.environment.addStyle({"height":_height-33+"px"});el.right.css.input.environment.addStyle({"height":_height-55+"px"});el.left.scripts.container.environment.addStyle({"height":_height-23+"px"});el.left.dom.container.environment.addStyle({"height":_height-31+"px"});el.left.xhr.container.environment.addStyle({"height":_height-32+"px"});el.left.str.container.environment.addStyle({"height":_height-32+"px"});}},refreshDOM:function(){with(firebug){d.dom.open(eval(el.button.dom.textbox.environment.getElement().value),el.left.dom.container);if(d.html.nIndex=="dom"){firebug.d.html.navigate("dom")}}},refreshSize:function(){with(firebug){if(!internal.init)
-return;var dim=lib.util.GetViewport();el.main.environment.addStyle({"width":dim.width+"px"});el.mainiframe.environment.addStyle({"width":dim.width+"px"});if(lib.env.ie6)
-win.setVerticalPosition(dim);}},setVerticalPosition:function(_dim,_event){with(firebug){var dim=_dim||lib.util.GetViewport();el.main.environment.addStyle({"top":dim.height-el.main.environment.getSize().offsetHeight+Math.max(document.documentElement.scrollTop,document.body.scrollTop)+"px"});el.mainiframe.environment.addStyle({"top":dim.height-el.main.environment.getSize().offsetHeight+Math.max(document.documentElement.scrollTop,document.body.scrollTop)+"px"});}}},d:{clean:function(_element){with(firebug){_element.update("");}},console:{addLine:function(){with(firebug){return new lib.element("DIV").attribute.addClass("Row").insert(el.left.console.monitor);}},cache:[],clear:function(){with(firebug){d.clean(el.left.console.monitor);d.console.cache=[];}},formatArgs:function(){with(firebug){var content=[];for(var i=0,len=arguments.length;i>> "+_cmd);d.console.addLine().update(d.highlight(_text,false,false,true));d.console.scroll();}},printException:function(_exception){with(firebug){var message=_exception.description||_exception.message||_exception;if(_exception.fileName){message+=' ('+(_exception.name&&(_exception.name+', ')||'')+getFileName(_exception.fileName)+', '+_exception.lineNumber+')';}
-d.console.addLine().attribute.addClass("Error").update("Error: "+message,true);}},eval:function(_cmd){var result;with(firebug){if(_cmd.length==0)
-return;el.left.console.input.environment.getElement().value="";d.console.historyIndex=d.console.history.push(_cmd);try{if(_cmd==='console.firebug'){d.console.addLine().attribute.addClass("Arrow").update(firebug.version);}else{result=eval.call(window,_cmd);d.console.print(_cmd,result);}}catch(e){d.console.addLine().attribute.addClass("Arrow").update(">>> "+_cmd);d.console.printException(e);}
-d.console.scroll();}},scroll:function(){with(firebug){el.left.console.monitor.environment.getElement().parentNode.scrollTop=Math.abs(el.left.console.monitor.environment.getSize().offsetHeight-(el.left.console.monitor.element.parentNode.offsetHeight-11));}},run:function(_command){with(firebug){if(!internal.init){d.console.cache.push({"command":_command,"arg":Array.prototype.slice.call(arguments,1)});}else{d.console.cmd[_command].apply(window,Array.prototype.slice.call(arguments,1));}}},toggleML:function(){with(firebug){var open=!env.ml;env.ml=!env.ml;d.navigateRightColumn("console",open);el[open?"left":"right"].console.mlButton.environment.addStyle({display:"none"});el[!open?"left":"right"].console.mlButton.environment.addStyle({display:"block"});el.left.console.mlButton.attribute[(open?"add":"remove")+"Class"]("CloseML");}},countMap:{},timeMap:{},cmd:{log:function(_value){with(firebug){var args=d.console.formatArgs.apply(window,arguments);d.console.addLine().attribute.addClass("Log").update(args);d.console.scroll();}},warn:function(_value){with(firebug){var args=d.console.formatArgs.apply(window,arguments);d.console.addLine().attribute.addClass("Warn").update(args);d.console.scroll();}},info:function(_value){with(firebug){var args=d.console.formatArgs.apply(window,arguments);d.console.addLine().attribute.addClass("Info").update(args);d.console.scroll();}},debug:function(_value){with(firebug){var args=d.console.formatArgs.apply(window,arguments);d.console.addLine().attribute.addClass("Debug").update(args);d.console.scroll();}},error:function(_value){with(firebug){var args=d.console.formatArgs.apply(window,arguments);d.console.addLine().attribute.addClass("Error").update(args);d.console.scroll();}},trace:function(_value){with(firebug){var stackAmt=3,f=arguments.caller,isArray=lib.util.IsArray(f);if((!isArray&&f)||(isArray&&f.length>0)){d.console.addLine().attribute.addClass("Arrow").update(">>> console.trace(stack)");for(var i=0;i>> console.dir("+_value+")");d.dom.open(_value,d.console.addLine());}},dirxml:function(){with(firebug){d.console.cmd.log.apply(this,arguments);}},time:function(_name){with(firebug){d.console.timeMap[_name]=new Date().getTime();}},timeEnd:function(_name){with(firebug){if(_name in d.console.timeMap){var delta=new Date().getTime()-d.console.timeMap[_name],args=d.console.formatArgs.apply(window,[_name+":",delta+"ms"]);d.console.addLine().attribute.addClass("log").update(args);delete d.console.timeMap[_name];}}},count:function(_name){with(firebug){if(!d.console.countMap[_name])
-d.console.countMap[_name]=0;d.console.countMap[_name]++;d.console.cmd.log.apply(window,[_name,d.console.countMap[_name]]);}},group:function(){with(firebug){d.console.cmd.log.apply(this,["console.group is not supported"]);}},groupEnd:function(){with(firebug){d.console.cmd.log.apply(this,["console.groupEnd is not supported"]);}},profile:function(){with(firebug){d.console.cmd.log.apply(this,["console.profile is not supported"]);}},profileEnd:function(){with(firebug){d.console.cmd.log.apply(this,["console.profileEnd is not supported"]);}}}},css:{index:-1,open:function(_index){with(firebug){var item=internal.targetWindow.document.styleSheets[_index],uri=item.href;try{var rules=item[lib.env.ie?"rules":"cssRules"],str="";for(var i=0;iAccess to restricted URI denied";}
-el.left.css.container.update(str);}},printRule:function(_selector,_css,_layer){with(firebug){var str="
- Your contribution is very important. Found a bug? Have a suggestion? Please
- report us. Wanna help with some code?
- Patches are welcome,
- let us know what you're thinking.
-
-
-
-
-
Firebug Lite 1.3 alpha release
-
-
- Spread the word:
- New Firebug Lite 1.3 alpha released
-
- We are releasing an alpha version of the next generation of Firebug Lite.
- If you would like to test this version, please star
- this issue
- so you can receive updates about the alpha versions,
- or follow up the discussion.
-
-
-
1. Overview
-
- This version was conceived to put the Firebug Lite in a new level,
- by allowing code reuse from Firebug's original codebase. A new core
- was created to accomplish the following goals:
-
-
- Performance - the core of Firebug Lite 1.3 was rewritten from scratch
- taking the performance into account in the first place.
-
-
- Modularity - the code is now more modular, making easier the process
- of adding new features and UI components such as panels, buttons, menus etc.
- The modularity also helps the development process. Once the modules can
- be isolated it is easier to detect the cause of complicated problems like
- memory leaks.
-
-
- Shared code - the core was designed to make it possible
- to port some code directly from the Firebug source, with as few as possible
- modifications. As a result, some features and UI elements behave exactly
- as in Firebug.
-
-
- Compatibility - the new core is compatible with XHTML and XML+XSL
- documents. Thanks to the new context-independent approach, it supports
- now the experimental persistent popups feature (popups that "live" across
- different page loads of the same domain), and will support cross-iframe
- inspection in the next version.
-
-
-
2. What's New?
-
-
- User Interface
-
-
-
Port of Firebug's Visual Object Representation (aka Reps)
-
Recreation of Firebug 1.3 User Interface with pixel precision
-
Menu options
-
Resizable sidePanel
-
Skinnable Interface
-
-
- Inspector
-
-
-
Full BoxModel Highlight including margin, border, padding and content boxes
-
The BoxModel is highlighted when you move your mouse over a representation
- of a HTML element, in any of the place of the User Interface
-
Elements are selected on-the-fly while using the Inspect tool
-
-
- Console
-
-
-
console.group() and console.groupEnd()
-
- console.trace() (thanks
- dongryphon
- for the contribution!)
-
-
command line API functions $(), $$(), and dir()
-
command line shortcuts $0 and $1 for recent selected elements
-
autocomplete (tab, shift+tab)
-
can capture console messages before DOM document creation
- when installed at the HTML header)
-
-
- Core
-
-
-
XHR watcher (works better when you load the script in the HEAD of your document)
-
Port most of the Firebug Library (aka Lib, FBL)
-
Port the Firebug DOM Templates Engine (aka Domplate), the magic behind Reps
-
Plugin system like Firebug
-
Context-independent (will allow cross-iframe debugging, and persistent popups)
-
Persistent popups
-
Synchronization across different windows (iframe, popup)
-
-
- And more...
-
-
-
- Fixed problem with Internet Explorer and inline styles representation (thanks
- christophe.blin
- for the contribution!)
-
-
- For a complete list of changes, check the
- changelog.
-
-
-
-
1.2. What's missing in Firebug Lite 1.3?
-
- Here are the features that are still missing, but should be available in the
- final Firebug Lite 1.3 release:
-
-
-
Live editing CSS rules
-
CSS cascading view
-
CSS inheritance view
-
-
-
1.3. What's Not in Lite?
-
- Some features are not included in Firebug Lite 1.3, but due the new core that
- supports code sharing from Firebug, are likely to be included in the
- Firebug Lite 1.4 version:
-
-
-
Live editing for all panels
-
Layout Panel
-
Context menu options
-
Tooltips (to show colors and images)
-
Search feature
-
-
- Other features though are too dependent in browser internals and will not be
- supported (at least in a near future*), such as:
-
-
-
Javascript debugger / Javascript profiler
-
Net panel / HTTP and XHR monitor
-
Access to restricted URI resources
-
Highlight HTML changes
-
-
- *Recent discussions about remote debugging
- indicates that should be possible to support JavaScript debugging in browsers
- like Google Chrome and Opera in a not so distant future, but the
- differences in the protocols
- may slow down this process (hey browser developers, what about adopting a standard?).
-
-
-
- **The trace enabled bookmarlet is intended to help identify error in Firebug Lite.
- If you find a bug, run the trace enabled bookmarlet and look for something
- strange in the logs.
-
-
b) Live link
-
- You can also link directly to the hosted version at getfirebug.com. Copy the
- following code, and paste it in the TOP of the HEAD of your document:
-
-
-
c) Local link (offline)
-
- If you need using Firebug Lite while offline,
- download the code,
- copy to a local destination, and link the firebug.jgz in the TOP
- of the HEAD of your document.
-
-
-
d) Development mode:
-
- If you want to debug Firebug Lite, fix a bug, or add a new feature, you will want
- to run the Firebug Lite in development mode. To do so, first
- checkout the latest version
- in our repository, and then insert a script at the TOP of the HEAD of your document.
-
-
-
- When in development mode, some things behave quite differently to make the
- development process easier, such as:
-
-
-
All script files are loaded separately, without compression.
-
The internal library that Firebug Lite uses (aka FBL) is exposed to the
- global namespace, allowing you to inspect its content. It is also exposed
- the domplate and its classes, and the FBTrace object
-
The skin is loaded in a separated file, allowing you to rapidly change
- the style and/or markup of the User Interface.
-
It will force to open Firebug Lite even when Firebug is active (which is
- not the default behavior), so you can use Firebug to debug it.
-
A new panel "Dev" will be available with tools to compress the skin,
- and the source code of the application in a single file.
-
-
-
4. Options
-
- The properties you can change include (with respective default values):
-
-
-
saveCookies - false
-
startOpened - false
-
startInNewWindow - false
-
showIconWhenHidden - true
-
overrideConsole - true
-
ignoreFirebugElements - true
-
disableWhenFirebugActive - true
-
enableTrace - false
-
enablePersistent - false
-
-
- You can change the options using any of the following methods
- (in ascendant order of priority):
-
-
a) debug="true"
-
- For backwards compatibility you can still use the debug="true" attribute
- in the <html> tag to make Firebug Lite starts opened, like:
-
-
<html debug="true">
-
-
b) Script URL options
-
- You can also set the options using URL fragment, specially handy to tweak
- options in your bookmarlet.
-
- Finally, you can override the options using cookies, via User Interface,
- by clicking in the Firebug icon in the upper-left corner.
-
-
-
5. What to test?
-
- That's a lot of things to test, but we're particularly interested in
- make sure the core of the application is working well before we move on
- to the beta stage. Here are the list of the most important things to test:
-
-
-
5.1. Loading
-
- Firebug Lite should run fine no matter how it was loaded.
-
-
- Bookmarlet - the current bookmarlet used in both Firebug Lite 1.2 and
- 1.3 versions contains some problems and limitations (it won't load
- for example in XHTML and/or XML+XSL documents). We're particularly
- insterested in find such problems in the bookmarlet now we're in
- alpha stage, because updating bookmarlets is a boring task, and
- should be done by the user individually, in each browser.
-
-
- Local include - Firebug Lite should load fine when using relative
- paths in the URL (when loaded locally).
-
-
- Live include - Firebug Lite should load fine when loaded directly
- from getfirebug.com.
-
-
-
5.2. Rendering
-
- Please report us if you see some weird behavior in the User Interface, such
- as misplaced elements, elements not rendered, abnormal flickering, partial
- rendered panels, or any other visual weirdness.
-
-
-
5.4. Document Types
-
- Firebug Lite should work in different types of documents such as
- XHTML and/or XML+XSL documents.
-
-
-
6. Contributing
-
- Your contribution is very important. Found a bug? Have a suggestion? Please
- report us.
-
-
- Found a fix for a particular issue?
- Patches are welcome.
- Also, if you are willing to help more deeply with coding,
- join our team.
-
-
-
- Spread the word:
- New Firebug Lite 1.3 alpha released
-
- Last, but not least, you can also helping us by spreading the word, inviting
- more people to test this new version. Feel free to post about it in your
- blog, social network, or use the retweet button on the left.
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/branches/firebug1.3/test/beta.html b/branches/firebug1.3/test/beta.html
deleted file mode 100644
index 797cd0f8..00000000
--- a/branches/firebug1.3/test/beta.html
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
-
-FirebugLite 1.3.1 Testing
-
-
-
-
-
-
- Use the "build" function to generate the full uncompressed js file,
- and the "compress" functions to compress the HTML and CSS of the
- User Interface files, to be used in the injected.js
- file, when in bookmarlet mode.
-
Lorem ipsum dolor sit amet consectetuer Lorem pretium molestie congue Curabitur. Et at augue at morbi at adipiscing condimentum wisi lorem In. Morbi porttitor nulla Praesent egestas lobortis nec Morbi nibh Curabitur tempor. Adipiscing Praesent Donec Vivamus condimentum sapien eget odio ac et urna. Ipsum egestas Nam laoreet amet magnis wisi Maecenas tincidunt faucibus sit. Lacinia dictumst lorem ac Aenean Nunc montes condimentum.
-
Amet pretium Nulla tempus ut tortor nibh dis Donec laoreet laoreet. Interdum velit consectetuer vitae nunc ut quis Nam ut neque cursus. Vitae vel orci id porta netus quis Pellentesque faucibus id congue. Elit semper libero auctor adipiscing lacus laoreet sit Maecenas vitae Nulla. Pede ipsum eu vitae dolor nisl nibh pellentesque Pellentesque at.
-
Quisque at aliquet dapibus laoreet at nunc magna ut Aenean id. Urna dictum Pellentesque semper in metus quis Curabitur est risus eget. Mauris semper leo id a augue lorem urna fames tellus magnis. In consequat magna gravida Nulla quam at Curabitur montes wisi malesuada. Leo Nam mollis laoreet odio felis euismod wisi ut iaculis eros. Quisque.
-
Mauris pellentesque ante quis pretium tempor consequat quis cursus tortor turpis. Quisque vel libero montes leo laoreet lobortis ante ligula auctor ornare. Vestibulum Phasellus et pellentesque porttitor orci vitae pharetra porta dolor a. Vivamus aliquam augue ut cursus id pretium ullamcorper neque pede sed. Quis eros Phasellus tellus elit dui ac Curabitur id ut leo. Urna nibh.
-
Nulla Pellentesque Aliquam ut vitae lacus vel et et vel ante. Ante dui a gravida urna urna semper consectetuer Lorem urna Ut. Pellentesque tempor parturient malesuada tempus fermentum congue sem massa metus Suspendisse. Enim semper senectus eget elit Morbi massa nunc dolor est tincidunt. A orci mi Aenean elit a eros.
-
In id Nam velit ut risus in tellus sapien nunc eros. Vitae pellentesque Pellentesque convallis tempus wisi nibh vitae porttitor pellentesque tristique. Et ridiculus turpis risus amet urna Aenean elit velit Nullam vitae. Lacus condimentum Aliquam elit justo lacinia commodo dolor facilisis Vestibulum porta. Urna enim tortor id dui Sed ultrices Lorem risus.
-
Pede cursus Ut Aenean tempor purus rhoncus Curabitur Sed et sapien. Et Duis Vivamus urna vel nunc rutrum Praesent Suspendisse eu nunc. Ligula wisi turpis nec quam Nullam tortor pede nisl hac et. Nulla et Morbi Pellentesque vel nec Integer porttitor lobortis nibh nascetur. At ac augue platea convallis eget vel Nullam pede dolor neque. Accumsan Sed Aenean porttitor tortor dolor Maecenas hendrerit sed Fusce.
-
Senectus tincidunt nec Morbi vitae mattis nonummy faucibus ipsum libero mauris. Risus lacus Nam orci velit interdum nec natoque Curabitur quis Duis. Tincidunt ornare Curabitur et Nam Sed interdum ut libero augue nulla. Enim porttitor in vitae Vestibulum scelerisque pretium In sapien velit lacus. Nam tellus elit ut dis tellus Morbi id nulla Proin quis. Pretium tortor Curabitur.
-
Eu id egestas nibh dis a consectetuer id sapien Nulla interdum. Semper ut sed justo adipiscing Suspendisse volutpat lacinia elit fringilla Praesent. Lacinia Phasellus sem felis Vestibulum eros pellentesque nibh fringilla venenatis metus. Et arcu quis Vestibulum condimentum fringilla a enim quis Nulla Sed. Feugiat Curabitur nibh ridiculus Curabitur ut porttitor nascetur pellentesque nisl magna. Phasellus mauris ut gravida Vestibulum turpis ac pretium.
-
A pretium dui euismod volutpat hendrerit consequat dis dolor Donec cursus. Et quis consequat tincidunt lacinia id elit commodo id condimentum habitant. Et nibh Mauris hac adipiscing sit a condimentum ac egestas orci. In adipiscing justo senectus nulla id Praesent Vivamus ligula orci nulla. Augue a Nam congue eget dui felis magna Duis neque vel.
-
-
-
-
-
\ No newline at end of file
diff --git a/branches/firebug1.3/test/firebugLite2.html b/branches/firebug1.3/test/firebugLite2.html
deleted file mode 100644
index d2afd4f5..00000000
--- a/branches/firebug1.3/test/firebugLite2.html
+++ /dev/null
@@ -1,145 +0,0 @@
-
-
-
-
-FirebugLite 1.3 Testing
-
-
-
-
-
-
-
- Use the "build" function to generate the full uncompressed js file,
- and the "compress" functions to compress the HTML and CSS of the
- User Interface files, to be used in the injected.js
- file, when in bookmarlet mode.
-
Lorem ipsum dolor sit amet consectetuer Lorem pretium molestie congue Curabitur. Et at augue at morbi at adipiscing condimentum wisi lorem In. Morbi porttitor nulla Praesent egestas lobortis nec Morbi nibh Curabitur tempor. Adipiscing Praesent Donec Vivamus condimentum sapien eget odio ac et urna. Ipsum egestas Nam laoreet amet magnis wisi Maecenas tincidunt faucibus sit. Lacinia dictumst lorem ac Aenean Nunc montes condimentum.
-
Amet pretium Nulla tempus ut tortor nibh dis Donec laoreet laoreet. Interdum velit consectetuer vitae nunc ut quis Nam ut neque cursus. Vitae vel orci id porta netus quis Pellentesque faucibus id congue. Elit semper libero auctor adipiscing lacus laoreet sit Maecenas vitae Nulla. Pede ipsum eu vitae dolor nisl nibh pellentesque Pellentesque at.
-
Quisque at aliquet dapibus laoreet at nunc magna ut Aenean id. Urna dictum Pellentesque semper in metus quis Curabitur est risus eget. Mauris semper leo id a augue lorem urna fames tellus magnis. In consequat magna gravida Nulla quam at Curabitur montes wisi malesuada. Leo Nam mollis laoreet odio felis euismod wisi ut iaculis eros. Quisque.
-
Mauris pellentesque ante quis pretium tempor consequat quis cursus tortor turpis. Quisque vel libero montes leo laoreet lobortis ante ligula auctor ornare. Vestibulum Phasellus et pellentesque porttitor orci vitae pharetra porta dolor a. Vivamus aliquam augue ut cursus id pretium ullamcorper neque pede sed. Quis eros Phasellus tellus elit dui ac Curabitur id ut leo. Urna nibh.
-
Nulla Pellentesque Aliquam ut vitae lacus vel et et vel ante. Ante dui a gravida urna urna semper consectetuer Lorem urna Ut. Pellentesque tempor parturient malesuada tempus fermentum congue sem massa metus Suspendisse. Enim semper senectus eget elit Morbi massa nunc dolor est tincidunt. A orci mi Aenean elit a eros.
-
In id Nam velit ut risus in tellus sapien nunc eros. Vitae pellentesque Pellentesque convallis tempus wisi nibh vitae porttitor pellentesque tristique. Et ridiculus turpis risus amet urna Aenean elit velit Nullam vitae. Lacus condimentum Aliquam elit justo lacinia commodo dolor facilisis Vestibulum porta. Urna enim tortor id dui Sed ultrices Lorem risus.
-
Pede cursus Ut Aenean tempor purus rhoncus Curabitur Sed et sapien. Et Duis Vivamus urna vel nunc rutrum Praesent Suspendisse eu nunc. Ligula wisi turpis nec quam Nullam tortor pede nisl hac et. Nulla et Morbi Pellentesque vel nec Integer porttitor lobortis nibh nascetur. At ac augue platea convallis eget vel Nullam pede dolor neque. Accumsan Sed Aenean porttitor tortor dolor Maecenas hendrerit sed Fusce.
-
Senectus tincidunt nec Morbi vitae mattis nonummy faucibus ipsum libero mauris. Risus lacus Nam orci velit interdum nec natoque Curabitur quis Duis. Tincidunt ornare Curabitur et Nam Sed interdum ut libero augue nulla. Enim porttitor in vitae Vestibulum scelerisque pretium In sapien velit lacus. Nam tellus elit ut dis tellus Morbi id nulla Proin quis. Pretium tortor Curabitur.
-
Eu id egestas nibh dis a consectetuer id sapien Nulla interdum. Semper ut sed justo adipiscing Suspendisse volutpat lacinia elit fringilla Praesent. Lacinia Phasellus sem felis Vestibulum eros pellentesque nibh fringilla venenatis metus. Et arcu quis Vestibulum condimentum fringilla a enim quis Nulla Sed. Feugiat Curabitur nibh ridiculus Curabitur ut porttitor nascetur pellentesque nisl magna. Phasellus mauris ut gravida Vestibulum turpis ac pretium.
-
A pretium dui euismod volutpat hendrerit consequat dis dolor Donec cursus. Et quis consequat tincidunt lacinia id elit commodo id condimentum habitant. Et nibh Mauris hac adipiscing sit a condimentum ac egestas orci. In adipiscing justo senectus nulla id Praesent Vivamus ligula orci nulla. Augue a Nam congue eget dui felis magna Duis neque vel.
-
-
-
-
-
\ No newline at end of file
diff --git a/branches/firebug1.3/test/full.html b/branches/firebug1.3/test/full.html
deleted file mode 100644
index aa49025c..00000000
--- a/branches/firebug1.3/test/full.html
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
-
-FirebugLite 1.3 Testing
-
-
-
-
-
-
([\s\S]+)<\/p>\s+<\/body>$/.exec(source);
- if (match)
- source = match[1];
-
- console.log(source);
- });
- }
-};
-
-// ************************************************************************************************
-
-Firebug.Lite.Proxy.fetchResourceDisabledMessage =
- "/* Firebug Lite resource fetching is disabled.\n" +
- "To enabled it set the Firebug Lite option \"disableResourceFetching\" to \"false\".\n" +
- "More info at http://getfirebug.com/firebuglite#Options */";
-
-var fetchResource = function(url)
-{
- if (Firebug.disableResourceFetching)
- {
- var source = sourceMap[url] = Firebug.Lite.Proxy.fetchResourceDisabledMessage;
- return source;
- }
-
- if (sourceMap.hasOwnProperty(url))
- return sourceMap[url];
-
- // Getting the native XHR object so our calls won't be logged in the Console Panel
- var xhr = FBL.getNativeXHRObject();
- xhr.open("get", url, false);
- xhr.send();
-
- var source = sourceMap[url] = xhr.responseText;
- return source;
-};
-
-var fetchProxyResource = function(url)
-{
- if (sourceMap.hasOwnProperty(url))
- return sourceMap[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.";
- }
-
- var source = data ? data.contents : "";
- return source;
-};
-
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-FBL.ns(function() { with (FBL) {
-// ************************************************************************************************
-
-Firebug.Lite.Style =
-{
-};
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-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";
- }
-};
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-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";
- }
-};
-
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-/*
- http://www.JSON.org/json2.js
- 2010-03-20
-
- Public Domain.
-
- NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
-
- See http://www.JSON.org/js.html
-
-
- This code should be minified before deployment.
- See http://javascript.crockford.com/jsmin.html
-
- USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
- NOT CONTROL.
-
-
- This file creates a global JSON object containing two methods: stringify
- and parse.
-
- JSON.stringify(value, replacer, space)
- value any JavaScript value, usually an object or array.
-
- replacer an optional parameter that determines how object
- values are stringified for objects. It can be a
- function or an array of strings.
-
- space an optional parameter that specifies the indentation
- of nested structures. If it is omitted, the text will
- be packed without extra whitespace. If it is a number,
- it will specify the number of spaces to indent at each
- level. If it is a string (such as '\t' or ' '),
- it contains the characters used to indent at each level.
-
- This method produces a JSON text from a JavaScript value.
-
- When an object value is found, if the object contains a toJSON
- method, its toJSON method will be called and the result will be
- stringified. A toJSON method does not serialize: it returns the
- value represented by the name/value pair that should be serialized,
- or undefined if nothing should be serialized. The toJSON method
- will be passed the key associated with the value, and this will be
- bound to the value
-
- For example, this would serialize Dates as ISO strings.
-
- Date.prototype.toJSON = function (key) {
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- return this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z';
- };
-
- You can provide an optional replacer method. It will be passed the
- key and value of each member, with this bound to the containing
- object. The value that is returned from your method will be
- serialized. If your method returns undefined, then the member will
- be excluded from the serialization.
-
- If the replacer parameter is an array of strings, then it will be
- used to select the members to be serialized. It filters the results
- such that only members with keys listed in the replacer array are
- stringified.
-
- Values that do not have JSON representations, such as undefined or
- functions, will not be serialized. Such values in objects will be
- dropped; in arrays they will be replaced with null. You can use
- a replacer function to replace those with JSON values.
- JSON.stringify(undefined) returns undefined.
-
- The optional space parameter produces a stringification of the
- value that is filled with line breaks and indentation to make it
- easier to read.
-
- If the space parameter is a non-empty string, then that string will
- be used for indentation. If the space parameter is a number, then
- the indentation will be that many spaces.
-
- Example:
-
- text = JSON.stringify(['e', {pluribus: 'unum'}]);
- // text is '["e",{"pluribus":"unum"}]'
-
-
- text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
- // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
-
- text = JSON.stringify([new Date()], function (key, value) {
- return this[key] instanceof Date ?
- 'Date(' + this[key] + ')' : value;
- });
- // text is '["Date(---current time---)"]'
-
-
- JSON.parse(text, reviver)
- This method parses a JSON text to produce an object or array.
- It can throw a SyntaxError exception.
-
- The optional reviver parameter is a function that can filter and
- transform the results. It receives each of the keys and values,
- and its return value is used instead of the original value.
- If it returns what it received, then the structure is not modified.
- If it returns undefined then the member is deleted.
-
- Example:
-
- // Parse the text. Values that look like ISO date strings will
- // be converted to Date objects.
-
- myData = JSON.parse(text, function (key, value) {
- var a;
- if (typeof value === 'string') {
- a =
-/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
- if (a) {
- return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
- +a[5], +a[6]));
- }
- }
- return value;
- });
-
- myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
- var d;
- if (typeof value === 'string' &&
- value.slice(0, 5) === 'Date(' &&
- value.slice(-1) === ')') {
- d = new Date(value.slice(5, -1));
- if (d) {
- return d;
- }
- }
- return value;
- });
-
-
- This is a reference implementation. You are free to copy, modify, or
- redistribute.
-*/
-
-/*jslint evil: true, strict: false */
-
-/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
- call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
- getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
- lastIndex, length, parse, prototype, push, replace, slice, stringify,
- test, toJSON, toString, valueOf
-*/
-
-
-// Create a JSON object only if one does not already exist. We create the
-// methods in a closure to avoid creating global variables.
-
-// ************************************************************************************************
-
-var JSON = window.JSON || {};
-
-// ************************************************************************************************
-
-(function () {
-
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- if (typeof Date.prototype.toJSON !== 'function') {
-
- Date.prototype.toJSON = function (key) {
-
- return isFinite(this.valueOf()) ?
- this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z' : null;
- };
-
- String.prototype.toJSON =
- Number.prototype.toJSON =
- Boolean.prototype.toJSON = function (key) {
- return this.valueOf();
- };
- }
-
- var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- gap,
- indent,
- meta = { // table of character substitutions
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '"' : '\\"',
- '\\': '\\\\'
- },
- rep;
-
-
- function quote(string) {
-
-// If the string contains no control characters, no quote characters, and no
-// backslash characters, then we can safely slap some quotes around it.
-// Otherwise we must also replace the offending characters with safe escape
-// sequences.
-
- escapable.lastIndex = 0;
- return escapable.test(string) ?
- '"' + string.replace(escapable, function (a) {
- var c = meta[a];
- return typeof c === 'string' ? c :
- '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- }) + '"' :
- '"' + string + '"';
- }
-
-
- function str(key, holder) {
-
-// Produce a string from holder[key].
-
- var i, // The loop counter.
- k, // The member key.
- v, // The member value.
- length,
- mind = gap,
- partial,
- value = holder[key];
-
-// If the value has a toJSON method, call it to obtain a replacement value.
-
- if (value && typeof value === 'object' &&
- typeof value.toJSON === 'function') {
- value = value.toJSON(key);
- }
-
-// If we were called with a replacer function, then call the replacer to
-// obtain a replacement value.
-
- if (typeof rep === 'function') {
- value = rep.call(holder, key, value);
- }
-
-// What happens next depends on the value's type.
-
- switch (typeof value) {
- case 'string':
- return quote(value);
-
- case 'number':
-
-// JSON numbers must be finite. Encode non-finite numbers as null.
-
- return isFinite(value) ? String(value) : 'null';
-
- case 'boolean':
- case 'null':
-
-// If the value is a boolean or null, convert it to a string. Note:
-// typeof null does not produce 'null'. The case is included here in
-// the remote chance that this gets fixed someday.
-
- return String(value);
-
-// If the type is 'object', we might be dealing with an object or an array or
-// null.
-
- case 'object':
-
-// Due to a specification blunder in ECMAScript, typeof null is 'object',
-// so watch out for that case.
-
- if (!value) {
- return 'null';
- }
-
-// Make an array to hold the partial results of stringifying this object value.
-
- gap += indent;
- partial = [];
-
-// Is the value an array?
-
- if (Object.prototype.toString.apply(value) === '[object Array]') {
-
-// The value is an array. Stringify every element. Use null as a placeholder
-// for non-JSON values.
-
- length = value.length;
- for (i = 0; i < length; i += 1) {
- partial[i] = str(i, value) || 'null';
- }
-
-// Join all of the elements together, separated with commas, and wrap them in
-// brackets.
-
- v = partial.length === 0 ? '[]' :
- gap ? '[\n' + gap +
- partial.join(',\n' + gap) + '\n' +
- mind + ']' :
- '[' + partial.join(',') + ']';
- gap = mind;
- return v;
- }
-
-// If the replacer is an array, use it to select the members to be stringified.
-
- if (rep && typeof rep === 'object') {
- length = rep.length;
- for (i = 0; i < length; i += 1) {
- k = rep[i];
- if (typeof k === 'string') {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- } else {
-
-// Otherwise, iterate through all of the keys in the object.
-
- for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- }
-
-// Join all of the member texts together, separated with commas,
-// and wrap them in braces.
-
- v = partial.length === 0 ? '{}' :
- gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
- mind + '}' : '{' + partial.join(',') + '}';
- gap = mind;
- return v;
- }
- }
-
-// If the JSON object does not yet have a stringify method, give it one.
-
- if (typeof JSON.stringify !== 'function') {
- JSON.stringify = function (value, replacer, space) {
-
-// The stringify method takes a value and an optional replacer, and an optional
-// space parameter, and returns a JSON text. The replacer can be a function
-// that can replace values, or an array of strings that will select the keys.
-// A default replacer method can be provided. Use of the space parameter can
-// produce text that is more easily readable.
-
- var i;
- gap = '';
- indent = '';
-
-// If the space parameter is a number, make an indent string containing that
-// many spaces.
-
- if (typeof space === 'number') {
- for (i = 0; i < space; i += 1) {
- indent += ' ';
- }
-
-// If the space parameter is a string, it will be used as the indent string.
-
- } else if (typeof space === 'string') {
- indent = space;
- }
-
-// If there is a replacer, it must be a function or an array.
-// Otherwise, throw an error.
-
- rep = replacer;
- if (replacer && typeof replacer !== 'function' &&
- (typeof replacer !== 'object' ||
- typeof replacer.length !== 'number')) {
- throw new Error('JSON.stringify');
- }
-
-// Make a fake root object containing our value under the key of ''.
-// Return the result of stringifying the value.
-
- return str('', {'': value});
- };
- }
-
-
-// If the JSON object does not yet have a parse method, give it one.
-
- if (typeof JSON.parse !== 'function') {
- JSON.parse = function (text, reviver) {
-
-// The parse method takes a text and an optional reviver function, and returns
-// a JavaScript value if the text is a valid JSON text.
-
- var j;
-
- function walk(holder, key) {
-
-// The walk method is used to recursively walk the resulting structure so
-// that modifications can be made.
-
- var k, v, value = holder[key];
- if (value && typeof value === 'object') {
- for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
- v = walk(value, k);
- if (v !== undefined) {
- value[k] = v;
- } else {
- delete value[k];
- }
- }
- }
- }
- return reviver.call(holder, key, value);
- }
-
-
-// Parsing happens in four stages. In the first stage, we replace certain
-// Unicode characters with escape sequences. JavaScript handles many characters
-// incorrectly, either silently deleting them, or treating them as line endings.
-
- text = String(text);
- cx.lastIndex = 0;
- if (cx.test(text)) {
- text = text.replace(cx, function (a) {
- return '\\u' +
- ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- });
- }
-
-// In the second stage, we run the text against regular expressions that look
-// for non-JSON patterns. We are especially concerned with '()' and 'new'
-// because they can cause invocation, and '=' because it can cause mutation.
-// But just to be safe, we want to reject all unexpected forms.
-
-// We split the second stage into 4 regexp operations in order to work around
-// crippling inefficiencies in IE's and Safari's regexp engines. First we
-// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
-// replace all simple value tokens with ']' characters. Third, we delete all
-// open brackets that follow a colon or comma or that begin the text. Finally,
-// we look to see that the remaining characters are only whitespace or ']' or
-// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
- if (/^[\],:{}\s]*$/.
-test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
-replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
-replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
-
-// In the third stage we use the eval function to compile the text into a
-// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
-// in JavaScript: it can begin a block or an object literal. We wrap the text
-// in parens to eliminate the ambiguity.
-
- j = eval('(' + text + ')');
-
-// In the optional fourth stage, we recursively walk the new structure, passing
-// each name/value pair to a reviver function for possible transformation.
-
- return typeof reviver === 'function' ?
- walk({'': j}, '') : j;
- }
-
-// If the text is not JSON parseable, then a SyntaxError is thrown.
-
- throw new SyntaxError('JSON.parse');
- };
- }
-
-// ************************************************************************************************
-// registration
-
-FBL.JSON = JSON;
-
-// ************************************************************************************************
-}());
-
-/* See license.txt for terms of usage */
-
-(function(){
-// ************************************************************************************************
-
-/* Copyright (c) 2010-2011 Marcus Westin
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-var store = (function(){
- var api = {},
- win = window,
- doc = win.document,
- localStorageName = 'localStorage',
- globalStorageName = 'globalStorage',
- namespace = '__firebug__storejs__',
- storage
-
- api.disabled = false
- api.set = function(key, value) {}
- api.get = function(key) {}
- api.remove = function(key) {}
- api.clear = function() {}
- api.transact = function(key, transactionFn) {
- var val = api.get(key)
- if (typeof val == 'undefined') { val = {} }
- transactionFn(val)
- api.set(key, val)
- }
-
- api.serialize = function(value) {
- return JSON.stringify(value)
- }
- api.deserialize = function(value) {
- if (typeof value != 'string') { return undefined }
- return JSON.parse(value)
- }
-
- // Functions to encapsulate questionable FireFox 3.6.13 behavior
- // when about.config::dom.storage.enabled === false
- // See https://github.com/marcuswestin/store.js/issues#issue/13
- function isLocalStorageNameSupported() {
- try { return (localStorageName in win && win[localStorageName]) }
- catch(err) { return false }
- }
-
- function isGlobalStorageNameSupported() {
- try { return (globalStorageName in win && win[globalStorageName] && win[globalStorageName][win.location.hostname]) }
- catch(err) { return false }
- }
-
- if (isLocalStorageNameSupported()) {
- storage = win[localStorageName]
- api.set = function(key, val) { storage.setItem(key, api.serialize(val)) }
- api.get = function(key) { return api.deserialize(storage.getItem(key)) }
- api.remove = function(key) { storage.removeItem(key) }
- api.clear = function() { storage.clear() }
-
- } else if (isGlobalStorageNameSupported()) {
- storage = win[globalStorageName][win.location.hostname]
- api.set = function(key, val) { storage[key] = api.serialize(val) }
- api.get = function(key) { return api.deserialize(storage[key] && storage[key].value) }
- api.remove = function(key) { delete storage[key] }
- api.clear = function() { for (var key in storage ) { delete storage[key] } }
-
- } else if (doc.documentElement.addBehavior) {
- var storage = doc.createElement('div')
- function withIEStorage(storeFunction) {
- return function() {
- var args = Array.prototype.slice.call(arguments, 0)
- args.unshift(storage)
- // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
- // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
- // TODO: xxxpedro doc.body is not always available so we must use doc.documentElement.
- // We need to make sure this change won't affect the behavior of this library.
- doc.documentElement.appendChild(storage)
- storage.addBehavior('#default#userData')
- storage.load(localStorageName)
- var result = storeFunction.apply(api, args)
- doc.documentElement.removeChild(storage)
- return result
- }
- }
- api.set = withIEStorage(function(storage, key, val) {
- storage.setAttribute(key, api.serialize(val))
- storage.save(localStorageName)
- })
- api.get = withIEStorage(function(storage, key) {
- return api.deserialize(storage.getAttribute(key))
- })
- api.remove = withIEStorage(function(storage, key) {
- storage.removeAttribute(key)
- storage.save(localStorageName)
- })
- api.clear = withIEStorage(function(storage) {
- var attributes = storage.XMLDocument.documentElement.attributes
- storage.load(localStorageName)
- for (var i=0, attr; attr = attributes[i]; i++) {
- storage.removeAttribute(attr.name)
- }
- storage.save(localStorageName)
- })
- }
-
- try {
- api.set(namespace, namespace)
- if (api.get(namespace) != namespace) { api.disabled = true }
- api.remove(namespace)
- } catch(e) {
- api.disabled = true
- }
-
- return api
-})();
-
-if (typeof module != 'undefined') { module.exports = store }
-
-
-// ************************************************************************************************
-// registration
-
-FBL.Store = store;
-
-// ************************************************************************************************
-})();
-
-/* See license.txt for terms of usage */
-
-FBL.ns( /**@scope s_selector*/ function() { with (FBL) {
-// ************************************************************************************************
-
-/*
- * 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 chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-// Thus far that includes Google Chrome.
-[0, 0].sort(function(){
- baseHasDuplicate = false;
- return 0;
-});
-
-/**
- * @name Firebug.Selector
- * @namespace
- */
-
-/**
- * @exports Sizzle as Firebug.Selector
- */
-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;
-
- // Reset the position of the chunker regexp (start from head)
- 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 {
- // Take a shortcut and set the context if the root selector is an ID
- // (but not if it'll be faster if the inner selector is an ID)
- 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 < results.length; i++ ) {
- if ( results[i] === results[i-1] ) {
- results.splice(i--, 1);
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function(expr, set){
- return Sizzle(expr, null, null, set);
-};
-
-Sizzle.find = function(expr, context, isXML){
- var set, match;
-
- if ( !expr ) {
- return [];
- }
-
- for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
- var type = Expr.order[i], match;
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- var left = match[1];
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace(/\\/g, "");
- set = Expr.find[ type ]( match, context, isXML );
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = context.getElementsByTagName("*");
- }
-
- return {set: set, expr: expr};
-};
-
-Sizzle.filter = function(expr, set, inplace, not){
- var old = expr, result = [], curLoop = set, match, anyFound,
- isXMLFilter = set && set[0] && isXML(set[0]);
-
- while ( expr && set.length ) {
- for ( var type in Expr.filter ) {
- if ( (match = Expr.match[ type ].exec( expr )) != null ) {
- var filter = Expr.filter[ type ], found, item;
- anyFound = false;
-
- if ( curLoop == result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- var pass = not ^ !!found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
- } else {
- curLoop[i] = false;
- }
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- // Improper expression
- if ( expr == old ) {
- if ( anyFound == null ) {
- throw "Syntax error, unrecognized expression: " + expr;
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-/**#@+ @ignore */
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
- },
- leftMatch: {},
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
- attrHandle: {
- href: function(elem){
- return elem.getAttribute("href");
- }
- },
- relative: {
- "+": function(checkSet, part, isXML){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !/\W/.test(part),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag && !isXML ) {
- part = part.toUpperCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
- ">": 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 < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName === part ? parent : false;
- }
- }
- } else {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
- "": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( !/\W/.test(part) ) {
- var nodeCheck = part = isXML ? part : part.toUpperCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
- },
- "~": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( typeof part === "string" && !/\W/.test(part) ) {
- var nodeCheck = part = isXML ? part : part.toUpperCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
- }
- },
- find: {
- ID: function(match, context, isXML){
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- return m ? [m] : [];
- }
- },
- NAME: function(match, context, isXML){
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [], results = context.getElementsByName(match[1]);
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
- TAG: function(match, context){
- return context.getElementsByTagName(match[1]);
- }
- },
- preFilter: {
- CLASS: function(match, curLoop, inplace, result, not, isXML){
- match = " " + match[1].replace(/\\/g, "") + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 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" ) {
- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
- match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- // calculate the numbers (first)n+(last) including if they are negative
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
-
- // TODO: Move to normal caching system
- 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 we're dealing with a complex expression, or a simple one
- 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){
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- 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 i < match[3] - 0;
- },
- gt: function(elem, i, match){
- return i > match[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 < l; i++ ) {
- if ( not[i] === elem ) {
- return false;
- }
- }
-
- return true;
- }
- },
- CHILD: function(elem, match){
- var type = match[1], node = elem;
- switch (type) {
- case 'only':
- case 'first':
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) return false;
- }
- if ( type == 'first') return true;
- node = elem;
- case 'last':
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) return false;
- }
- return true;
- case 'nth':
- var first = match[2], last = match[3];
-
- if ( first == 1 && last == 0 ) {
- return true;
- }
-
- var doneName = match[0],
- parent = elem.parentNode;
-
- if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
- var count = 0;
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
- parent.sizcache = doneName;
- }
-
- var diff = elem.nodeIndex - last;
- if ( first == 0 ) {
- return diff == 0;
- } else {
- return ( diff % first == 0 && diff / first >= 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;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 );
-
-// Provide a fallback method if it does not work
-} 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 < l; i++ ) {
- ret.push( array[i] );
- }
- } else {
- for ( var i = 0; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( "sourceIndex" in document.documentElement ) {
- sortOrder = function( a, b ) {
- if ( !a.sourceIndex || !b.sourceIndex ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var ret = a.sourceIndex - b.sourceIndex;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( document.createRange ) {
- sortOrder = function( a, b ) {
- if ( !a.ownerDocument || !b.ownerDocument ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
- aRange.setStart(a, 0);
- aRange.setEnd(a, 0);
- bRange.setStart(b, 0);
- bRange.setEnd(b, 0);
- var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
- // We're going to inject a fake input element with a specified name
- var form = document.createElement("div"),
- id = "script" + (new Date).getTime();
- form.innerHTML = "";
-
- // Inject it into the root element, check its status, and remove it quickly
- var root = document.documentElement;
- root.insertBefore( form, root.firstChild );
-
- // The workaround has to do additional checks after a getElementById
- // Which slows things down for other browsers (hence the branching)
- 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; // release memory in IE
-})();
-
-(function(){
- // Check to see if the browser returns only elements
- // when doing getElementsByTagName("*")
-
- // Create a fake element
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- // Make sure no comments are found
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function(match, context){
- var results = context.getElementsByTagName(match[1]);
-
- // Filter out possible comments
- 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;
- };
- }
-
- // Check to see if an attribute returns normalized href attributes
- 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; // release memory in IE
-})();
-
-if ( document.querySelectorAll ) (function(){
- var oldSizzle = Sizzle, div = document.createElement("div");
- div.innerHTML = "
([\s\S]+)<\/p>\s+<\/body>$/.exec(source);
- if (match)
- source = match[1];
-
- console.log(source);
- });
- }
-};
-
-// ************************************************************************************************
-
-Firebug.Lite.Proxy.fetchResourceDisabledMessage =
- "/* Firebug Lite resource fetching is disabled.\n" +
- "To enabled it set the Firebug Lite option \"disableResourceFetching\" to \"false\".\n" +
- "More info at http://getfirebug.com/firebuglite#Options */";
-
-var fetchResource = function(url)
-{
- if (Firebug.disableResourceFetching)
- {
- var source = sourceMap[url] = Firebug.Lite.Proxy.fetchResourceDisabledMessage;
- return source;
- }
-
- if (sourceMap.hasOwnProperty(url))
- return sourceMap[url];
-
- // Getting the native XHR object so our calls won't be logged in the Console Panel
- var xhr = FBL.getNativeXHRObject();
- xhr.open("get", url, false);
- xhr.send();
-
- var source = sourceMap[url] = xhr.responseText;
- return source;
-};
-
-var fetchProxyResource = function(url)
-{
- if (sourceMap.hasOwnProperty(url))
- return sourceMap[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.";
- }
-
- var source = data ? data.contents : "";
- return source;
-};
-
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-FBL.ns(function() { with (FBL) {
-// ************************************************************************************************
-
-Firebug.Lite.Style =
-{
-};
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-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";
- }
-};
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-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";
- }
-};
-
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-/*
- http://www.JSON.org/json2.js
- 2010-03-20
-
- Public Domain.
-
- NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
-
- See http://www.JSON.org/js.html
-
-
- This code should be minified before deployment.
- See http://javascript.crockford.com/jsmin.html
-
- USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
- NOT CONTROL.
-
-
- This file creates a global JSON object containing two methods: stringify
- and parse.
-
- JSON.stringify(value, replacer, space)
- value any JavaScript value, usually an object or array.
-
- replacer an optional parameter that determines how object
- values are stringified for objects. It can be a
- function or an array of strings.
-
- space an optional parameter that specifies the indentation
- of nested structures. If it is omitted, the text will
- be packed without extra whitespace. If it is a number,
- it will specify the number of spaces to indent at each
- level. If it is a string (such as '\t' or ' '),
- it contains the characters used to indent at each level.
-
- This method produces a JSON text from a JavaScript value.
-
- When an object value is found, if the object contains a toJSON
- method, its toJSON method will be called and the result will be
- stringified. A toJSON method does not serialize: it returns the
- value represented by the name/value pair that should be serialized,
- or undefined if nothing should be serialized. The toJSON method
- will be passed the key associated with the value, and this will be
- bound to the value
-
- For example, this would serialize Dates as ISO strings.
-
- Date.prototype.toJSON = function (key) {
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- return this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z';
- };
-
- You can provide an optional replacer method. It will be passed the
- key and value of each member, with this bound to the containing
- object. The value that is returned from your method will be
- serialized. If your method returns undefined, then the member will
- be excluded from the serialization.
-
- If the replacer parameter is an array of strings, then it will be
- used to select the members to be serialized. It filters the results
- such that only members with keys listed in the replacer array are
- stringified.
-
- Values that do not have JSON representations, such as undefined or
- functions, will not be serialized. Such values in objects will be
- dropped; in arrays they will be replaced with null. You can use
- a replacer function to replace those with JSON values.
- JSON.stringify(undefined) returns undefined.
-
- The optional space parameter produces a stringification of the
- value that is filled with line breaks and indentation to make it
- easier to read.
-
- If the space parameter is a non-empty string, then that string will
- be used for indentation. If the space parameter is a number, then
- the indentation will be that many spaces.
-
- Example:
-
- text = JSON.stringify(['e', {pluribus: 'unum'}]);
- // text is '["e",{"pluribus":"unum"}]'
-
-
- text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
- // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
-
- text = JSON.stringify([new Date()], function (key, value) {
- return this[key] instanceof Date ?
- 'Date(' + this[key] + ')' : value;
- });
- // text is '["Date(---current time---)"]'
-
-
- JSON.parse(text, reviver)
- This method parses a JSON text to produce an object or array.
- It can throw a SyntaxError exception.
-
- The optional reviver parameter is a function that can filter and
- transform the results. It receives each of the keys and values,
- and its return value is used instead of the original value.
- If it returns what it received, then the structure is not modified.
- If it returns undefined then the member is deleted.
-
- Example:
-
- // Parse the text. Values that look like ISO date strings will
- // be converted to Date objects.
-
- myData = JSON.parse(text, function (key, value) {
- var a;
- if (typeof value === 'string') {
- a =
-/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
- if (a) {
- return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
- +a[5], +a[6]));
- }
- }
- return value;
- });
-
- myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
- var d;
- if (typeof value === 'string' &&
- value.slice(0, 5) === 'Date(' &&
- value.slice(-1) === ')') {
- d = new Date(value.slice(5, -1));
- if (d) {
- return d;
- }
- }
- return value;
- });
-
-
- This is a reference implementation. You are free to copy, modify, or
- redistribute.
-*/
-
-/*jslint evil: true, strict: false */
-
-/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
- call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
- getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
- lastIndex, length, parse, prototype, push, replace, slice, stringify,
- test, toJSON, toString, valueOf
-*/
-
-
-// Create a JSON object only if one does not already exist. We create the
-// methods in a closure to avoid creating global variables.
-
-// ************************************************************************************************
-
-var JSON = window.JSON || {};
-
-// ************************************************************************************************
-
-(function () {
-
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- if (typeof Date.prototype.toJSON !== 'function') {
-
- Date.prototype.toJSON = function (key) {
-
- return isFinite(this.valueOf()) ?
- this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z' : null;
- };
-
- String.prototype.toJSON =
- Number.prototype.toJSON =
- Boolean.prototype.toJSON = function (key) {
- return this.valueOf();
- };
- }
-
- var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- gap,
- indent,
- meta = { // table of character substitutions
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '"' : '\\"',
- '\\': '\\\\'
- },
- rep;
-
-
- function quote(string) {
-
-// If the string contains no control characters, no quote characters, and no
-// backslash characters, then we can safely slap some quotes around it.
-// Otherwise we must also replace the offending characters with safe escape
-// sequences.
-
- escapable.lastIndex = 0;
- return escapable.test(string) ?
- '"' + string.replace(escapable, function (a) {
- var c = meta[a];
- return typeof c === 'string' ? c :
- '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- }) + '"' :
- '"' + string + '"';
- }
-
-
- function str(key, holder) {
-
-// Produce a string from holder[key].
-
- var i, // The loop counter.
- k, // The member key.
- v, // The member value.
- length,
- mind = gap,
- partial,
- value = holder[key];
-
-// If the value has a toJSON method, call it to obtain a replacement value.
-
- if (value && typeof value === 'object' &&
- typeof value.toJSON === 'function') {
- value = value.toJSON(key);
- }
-
-// If we were called with a replacer function, then call the replacer to
-// obtain a replacement value.
-
- if (typeof rep === 'function') {
- value = rep.call(holder, key, value);
- }
-
-// What happens next depends on the value's type.
-
- switch (typeof value) {
- case 'string':
- return quote(value);
-
- case 'number':
-
-// JSON numbers must be finite. Encode non-finite numbers as null.
-
- return isFinite(value) ? String(value) : 'null';
-
- case 'boolean':
- case 'null':
-
-// If the value is a boolean or null, convert it to a string. Note:
-// typeof null does not produce 'null'. The case is included here in
-// the remote chance that this gets fixed someday.
-
- return String(value);
-
-// If the type is 'object', we might be dealing with an object or an array or
-// null.
-
- case 'object':
-
-// Due to a specification blunder in ECMAScript, typeof null is 'object',
-// so watch out for that case.
-
- if (!value) {
- return 'null';
- }
-
-// Make an array to hold the partial results of stringifying this object value.
-
- gap += indent;
- partial = [];
-
-// Is the value an array?
-
- if (Object.prototype.toString.apply(value) === '[object Array]') {
-
-// The value is an array. Stringify every element. Use null as a placeholder
-// for non-JSON values.
-
- length = value.length;
- for (i = 0; i < length; i += 1) {
- partial[i] = str(i, value) || 'null';
- }
-
-// Join all of the elements together, separated with commas, and wrap them in
-// brackets.
-
- v = partial.length === 0 ? '[]' :
- gap ? '[\n' + gap +
- partial.join(',\n' + gap) + '\n' +
- mind + ']' :
- '[' + partial.join(',') + ']';
- gap = mind;
- return v;
- }
-
-// If the replacer is an array, use it to select the members to be stringified.
-
- if (rep && typeof rep === 'object') {
- length = rep.length;
- for (i = 0; i < length; i += 1) {
- k = rep[i];
- if (typeof k === 'string') {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- } else {
-
-// Otherwise, iterate through all of the keys in the object.
-
- for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- }
-
-// Join all of the member texts together, separated with commas,
-// and wrap them in braces.
-
- v = partial.length === 0 ? '{}' :
- gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
- mind + '}' : '{' + partial.join(',') + '}';
- gap = mind;
- return v;
- }
- }
-
-// If the JSON object does not yet have a stringify method, give it one.
-
- if (typeof JSON.stringify !== 'function') {
- JSON.stringify = function (value, replacer, space) {
-
-// The stringify method takes a value and an optional replacer, and an optional
-// space parameter, and returns a JSON text. The replacer can be a function
-// that can replace values, or an array of strings that will select the keys.
-// A default replacer method can be provided. Use of the space parameter can
-// produce text that is more easily readable.
-
- var i;
- gap = '';
- indent = '';
-
-// If the space parameter is a number, make an indent string containing that
-// many spaces.
-
- if (typeof space === 'number') {
- for (i = 0; i < space; i += 1) {
- indent += ' ';
- }
-
-// If the space parameter is a string, it will be used as the indent string.
-
- } else if (typeof space === 'string') {
- indent = space;
- }
-
-// If there is a replacer, it must be a function or an array.
-// Otherwise, throw an error.
-
- rep = replacer;
- if (replacer && typeof replacer !== 'function' &&
- (typeof replacer !== 'object' ||
- typeof replacer.length !== 'number')) {
- throw new Error('JSON.stringify');
- }
-
-// Make a fake root object containing our value under the key of ''.
-// Return the result of stringifying the value.
-
- return str('', {'': value});
- };
- }
-
-
-// If the JSON object does not yet have a parse method, give it one.
-
- if (typeof JSON.parse !== 'function') {
- JSON.parse = function (text, reviver) {
-
-// The parse method takes a text and an optional reviver function, and returns
-// a JavaScript value if the text is a valid JSON text.
-
- var j;
-
- function walk(holder, key) {
-
-// The walk method is used to recursively walk the resulting structure so
-// that modifications can be made.
-
- var k, v, value = holder[key];
- if (value && typeof value === 'object') {
- for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
- v = walk(value, k);
- if (v !== undefined) {
- value[k] = v;
- } else {
- delete value[k];
- }
- }
- }
- }
- return reviver.call(holder, key, value);
- }
-
-
-// Parsing happens in four stages. In the first stage, we replace certain
-// Unicode characters with escape sequences. JavaScript handles many characters
-// incorrectly, either silently deleting them, or treating them as line endings.
-
- text = String(text);
- cx.lastIndex = 0;
- if (cx.test(text)) {
- text = text.replace(cx, function (a) {
- return '\\u' +
- ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- });
- }
-
-// In the second stage, we run the text against regular expressions that look
-// for non-JSON patterns. We are especially concerned with '()' and 'new'
-// because they can cause invocation, and '=' because it can cause mutation.
-// But just to be safe, we want to reject all unexpected forms.
-
-// We split the second stage into 4 regexp operations in order to work around
-// crippling inefficiencies in IE's and Safari's regexp engines. First we
-// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
-// replace all simple value tokens with ']' characters. Third, we delete all
-// open brackets that follow a colon or comma or that begin the text. Finally,
-// we look to see that the remaining characters are only whitespace or ']' or
-// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
- if (/^[\],:{}\s]*$/.
-test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
-replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
-replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
-
-// In the third stage we use the eval function to compile the text into a
-// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
-// in JavaScript: it can begin a block or an object literal. We wrap the text
-// in parens to eliminate the ambiguity.
-
- j = eval('(' + text + ')');
-
-// In the optional fourth stage, we recursively walk the new structure, passing
-// each name/value pair to a reviver function for possible transformation.
-
- return typeof reviver === 'function' ?
- walk({'': j}, '') : j;
- }
-
-// If the text is not JSON parseable, then a SyntaxError is thrown.
-
- throw new SyntaxError('JSON.parse');
- };
- }
-
-// ************************************************************************************************
-// registration
-
-FBL.JSON = JSON;
-
-// ************************************************************************************************
-}());
-
-/* See license.txt for terms of usage */
-
-(function(){
-// ************************************************************************************************
-
-/* Copyright (c) 2010-2011 Marcus Westin
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-var store = (function(){
- var api = {},
- win = window,
- doc = win.document,
- localStorageName = 'localStorage',
- globalStorageName = 'globalStorage',
- namespace = '__firebug__storejs__',
- storage
-
- api.disabled = false
- api.set = function(key, value) {}
- api.get = function(key) {}
- api.remove = function(key) {}
- api.clear = function() {}
- api.transact = function(key, transactionFn) {
- var val = api.get(key)
- if (typeof val == 'undefined') { val = {} }
- transactionFn(val)
- api.set(key, val)
- }
-
- api.serialize = function(value) {
- return JSON.stringify(value)
- }
- api.deserialize = function(value) {
- if (typeof value != 'string') { return undefined }
- return JSON.parse(value)
- }
-
- // Functions to encapsulate questionable FireFox 3.6.13 behavior
- // when about.config::dom.storage.enabled === false
- // See https://github.com/marcuswestin/store.js/issues#issue/13
- function isLocalStorageNameSupported() {
- try { return (localStorageName in win && win[localStorageName]) }
- catch(err) { return false }
- }
-
- function isGlobalStorageNameSupported() {
- try { return (globalStorageName in win && win[globalStorageName] && win[globalStorageName][win.location.hostname]) }
- catch(err) { return false }
- }
-
- if (isLocalStorageNameSupported()) {
- storage = win[localStorageName]
- api.set = function(key, val) { storage.setItem(key, api.serialize(val)) }
- api.get = function(key) { return api.deserialize(storage.getItem(key)) }
- api.remove = function(key) { storage.removeItem(key) }
- api.clear = function() { storage.clear() }
-
- } else if (isGlobalStorageNameSupported()) {
- storage = win[globalStorageName][win.location.hostname]
- api.set = function(key, val) { storage[key] = api.serialize(val) }
- api.get = function(key) { return api.deserialize(storage[key] && storage[key].value) }
- api.remove = function(key) { delete storage[key] }
- api.clear = function() { for (var key in storage ) { delete storage[key] } }
-
- } else if (doc.documentElement.addBehavior) {
- var storage = doc.createElement('div')
- function withIEStorage(storeFunction) {
- return function() {
- var args = Array.prototype.slice.call(arguments, 0)
- args.unshift(storage)
- // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
- // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
- // TODO: xxxpedro doc.body is not always available so we must use doc.documentElement.
- // We need to make sure this change won't affect the behavior of this library.
- doc.documentElement.appendChild(storage)
- storage.addBehavior('#default#userData')
- storage.load(localStorageName)
- var result = storeFunction.apply(api, args)
- doc.documentElement.removeChild(storage)
- return result
- }
- }
- api.set = withIEStorage(function(storage, key, val) {
- storage.setAttribute(key, api.serialize(val))
- storage.save(localStorageName)
- })
- api.get = withIEStorage(function(storage, key) {
- return api.deserialize(storage.getAttribute(key))
- })
- api.remove = withIEStorage(function(storage, key) {
- storage.removeAttribute(key)
- storage.save(localStorageName)
- })
- api.clear = withIEStorage(function(storage) {
- var attributes = storage.XMLDocument.documentElement.attributes
- storage.load(localStorageName)
- for (var i=0, attr; attr = attributes[i]; i++) {
- storage.removeAttribute(attr.name)
- }
- storage.save(localStorageName)
- })
- }
-
- try {
- api.set(namespace, namespace)
- if (api.get(namespace) != namespace) { api.disabled = true }
- api.remove(namespace)
- } catch(e) {
- api.disabled = true
- }
-
- return api
-})();
-
-if (typeof module != 'undefined') { module.exports = store }
-
-
-// ************************************************************************************************
-// registration
-
-FBL.Store = store;
-
-// ************************************************************************************************
-})();
-
-/* See license.txt for terms of usage */
-
-FBL.ns( /**@scope s_selector*/ function() { with (FBL) {
-// ************************************************************************************************
-
-/*
- * 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 chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-// Thus far that includes Google Chrome.
-[0, 0].sort(function(){
- baseHasDuplicate = false;
- return 0;
-});
-
-/**
- * @name Firebug.Selector
- * @namespace
- */
-
-/**
- * @exports Sizzle as Firebug.Selector
- */
-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;
-
- // Reset the position of the chunker regexp (start from head)
- 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 {
- // Take a shortcut and set the context if the root selector is an ID
- // (but not if it'll be faster if the inner selector is an ID)
- 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 < results.length; i++ ) {
- if ( results[i] === results[i-1] ) {
- results.splice(i--, 1);
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function(expr, set){
- return Sizzle(expr, null, null, set);
-};
-
-Sizzle.find = function(expr, context, isXML){
- var set, match;
-
- if ( !expr ) {
- return [];
- }
-
- for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
- var type = Expr.order[i], match;
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- var left = match[1];
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace(/\\/g, "");
- set = Expr.find[ type ]( match, context, isXML );
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = context.getElementsByTagName("*");
- }
-
- return {set: set, expr: expr};
-};
-
-Sizzle.filter = function(expr, set, inplace, not){
- var old = expr, result = [], curLoop = set, match, anyFound,
- isXMLFilter = set && set[0] && isXML(set[0]);
-
- while ( expr && set.length ) {
- for ( var type in Expr.filter ) {
- if ( (match = Expr.match[ type ].exec( expr )) != null ) {
- var filter = Expr.filter[ type ], found, item;
- anyFound = false;
-
- if ( curLoop == result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- var pass = not ^ !!found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
- } else {
- curLoop[i] = false;
- }
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- // Improper expression
- if ( expr == old ) {
- if ( anyFound == null ) {
- throw "Syntax error, unrecognized expression: " + expr;
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-/**#@+ @ignore */
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
- },
- leftMatch: {},
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
- attrHandle: {
- href: function(elem){
- return elem.getAttribute("href");
- }
- },
- relative: {
- "+": function(checkSet, part, isXML){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !/\W/.test(part),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag && !isXML ) {
- part = part.toUpperCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
- ">": 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 < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName === part ? parent : false;
- }
- }
- } else {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
- "": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( !/\W/.test(part) ) {
- var nodeCheck = part = isXML ? part : part.toUpperCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
- },
- "~": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( typeof part === "string" && !/\W/.test(part) ) {
- var nodeCheck = part = isXML ? part : part.toUpperCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
- }
- },
- find: {
- ID: function(match, context, isXML){
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- return m ? [m] : [];
- }
- },
- NAME: function(match, context, isXML){
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [], results = context.getElementsByName(match[1]);
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
- TAG: function(match, context){
- return context.getElementsByTagName(match[1]);
- }
- },
- preFilter: {
- CLASS: function(match, curLoop, inplace, result, not, isXML){
- match = " " + match[1].replace(/\\/g, "") + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 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" ) {
- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
- match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- // calculate the numbers (first)n+(last) including if they are negative
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
-
- // TODO: Move to normal caching system
- 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 we're dealing with a complex expression, or a simple one
- 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){
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- 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 i < match[3] - 0;
- },
- gt: function(elem, i, match){
- return i > match[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 < l; i++ ) {
- if ( not[i] === elem ) {
- return false;
- }
- }
-
- return true;
- }
- },
- CHILD: function(elem, match){
- var type = match[1], node = elem;
- switch (type) {
- case 'only':
- case 'first':
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) return false;
- }
- if ( type == 'first') return true;
- node = elem;
- case 'last':
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) return false;
- }
- return true;
- case 'nth':
- var first = match[2], last = match[3];
-
- if ( first == 1 && last == 0 ) {
- return true;
- }
-
- var doneName = match[0],
- parent = elem.parentNode;
-
- if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
- var count = 0;
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
- parent.sizcache = doneName;
- }
-
- var diff = elem.nodeIndex - last;
- if ( first == 0 ) {
- return diff == 0;
- } else {
- return ( diff % first == 0 && diff / first >= 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;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 );
-
-// Provide a fallback method if it does not work
-} 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 < l; i++ ) {
- ret.push( array[i] );
- }
- } else {
- for ( var i = 0; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( "sourceIndex" in document.documentElement ) {
- sortOrder = function( a, b ) {
- if ( !a.sourceIndex || !b.sourceIndex ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var ret = a.sourceIndex - b.sourceIndex;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( document.createRange ) {
- sortOrder = function( a, b ) {
- if ( !a.ownerDocument || !b.ownerDocument ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
- aRange.setStart(a, 0);
- aRange.setEnd(a, 0);
- bRange.setStart(b, 0);
- bRange.setEnd(b, 0);
- var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
- // We're going to inject a fake input element with a specified name
- var form = document.createElement("div"),
- id = "script" + (new Date).getTime();
- form.innerHTML = "";
-
- // Inject it into the root element, check its status, and remove it quickly
- var root = document.documentElement;
- root.insertBefore( form, root.firstChild );
-
- // The workaround has to do additional checks after a getElementById
- // Which slows things down for other browsers (hence the branching)
- 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; // release memory in IE
-})();
-
-(function(){
- // Check to see if the browser returns only elements
- // when doing getElementsByTagName("*")
-
- // Create a fake element
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- // Make sure no comments are found
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function(match, context){
- var results = context.getElementsByTagName(match[1]);
-
- // Filter out possible comments
- 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;
- };
- }
-
- // Check to see if an attribute returns normalized href attributes
- 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; // release memory in IE
-})();
-
-if ( document.querySelectorAll ) (function(){
- var oldSizzle = Sizzle, div = document.createElement("div");
- div.innerHTML = "
([\s\S]+)<\/p>\s+<\/body>$/.exec(source);
- if (match)
- source = match[1];
-
- console.log(source);
- });
- }
-};
-
-// ************************************************************************************************
-
-Firebug.Lite.Proxy.fetchResourceDisabledMessage =
- "/* Firebug Lite resource fetching is disabled.\n" +
- "To enabled it set the Firebug Lite option \"disableResourceFetching\" to \"false\".\n" +
- "More info at http://getfirebug.com/firebuglite#Options */";
-
-var fetchResource = function(url)
-{
- if (Firebug.disableResourceFetching)
- {
- var source = sourceMap[url] = Firebug.Lite.Proxy.fetchResourceDisabledMessage;
- return source;
- }
-
- if (sourceMap.hasOwnProperty(url))
- return sourceMap[url];
-
- // Getting the native XHR object so our calls won't be logged in the Console Panel
- var xhr = FBL.getNativeXHRObject();
- xhr.open("get", url, false);
- xhr.send();
-
- var source = sourceMap[url] = xhr.responseText;
- return source;
-};
-
-var fetchProxyResource = function(url)
-{
- if (sourceMap.hasOwnProperty(url))
- return sourceMap[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.";
- }
-
- var source = data ? data.contents : "";
- return source;
-};
-
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-FBL.ns(function() { with (FBL) {
-// ************************************************************************************************
-
-Firebug.Lite.Style =
-{
-};
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-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";
- }
-};
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-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";
- }
-};
-
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-/*
- http://www.JSON.org/json2.js
- 2010-03-20
-
- Public Domain.
-
- NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
-
- See http://www.JSON.org/js.html
-
-
- This code should be minified before deployment.
- See http://javascript.crockford.com/jsmin.html
-
- USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
- NOT CONTROL.
-
-
- This file creates a global JSON object containing two methods: stringify
- and parse.
-
- JSON.stringify(value, replacer, space)
- value any JavaScript value, usually an object or array.
-
- replacer an optional parameter that determines how object
- values are stringified for objects. It can be a
- function or an array of strings.
-
- space an optional parameter that specifies the indentation
- of nested structures. If it is omitted, the text will
- be packed without extra whitespace. If it is a number,
- it will specify the number of spaces to indent at each
- level. If it is a string (such as '\t' or ' '),
- it contains the characters used to indent at each level.
-
- This method produces a JSON text from a JavaScript value.
-
- When an object value is found, if the object contains a toJSON
- method, its toJSON method will be called and the result will be
- stringified. A toJSON method does not serialize: it returns the
- value represented by the name/value pair that should be serialized,
- or undefined if nothing should be serialized. The toJSON method
- will be passed the key associated with the value, and this will be
- bound to the value
-
- For example, this would serialize Dates as ISO strings.
-
- Date.prototype.toJSON = function (key) {
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- return this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z';
- };
-
- You can provide an optional replacer method. It will be passed the
- key and value of each member, with this bound to the containing
- object. The value that is returned from your method will be
- serialized. If your method returns undefined, then the member will
- be excluded from the serialization.
-
- If the replacer parameter is an array of strings, then it will be
- used to select the members to be serialized. It filters the results
- such that only members with keys listed in the replacer array are
- stringified.
-
- Values that do not have JSON representations, such as undefined or
- functions, will not be serialized. Such values in objects will be
- dropped; in arrays they will be replaced with null. You can use
- a replacer function to replace those with JSON values.
- JSON.stringify(undefined) returns undefined.
-
- The optional space parameter produces a stringification of the
- value that is filled with line breaks and indentation to make it
- easier to read.
-
- If the space parameter is a non-empty string, then that string will
- be used for indentation. If the space parameter is a number, then
- the indentation will be that many spaces.
-
- Example:
-
- text = JSON.stringify(['e', {pluribus: 'unum'}]);
- // text is '["e",{"pluribus":"unum"}]'
-
-
- text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
- // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
-
- text = JSON.stringify([new Date()], function (key, value) {
- return this[key] instanceof Date ?
- 'Date(' + this[key] + ')' : value;
- });
- // text is '["Date(---current time---)"]'
-
-
- JSON.parse(text, reviver)
- This method parses a JSON text to produce an object or array.
- It can throw a SyntaxError exception.
-
- The optional reviver parameter is a function that can filter and
- transform the results. It receives each of the keys and values,
- and its return value is used instead of the original value.
- If it returns what it received, then the structure is not modified.
- If it returns undefined then the member is deleted.
-
- Example:
-
- // Parse the text. Values that look like ISO date strings will
- // be converted to Date objects.
-
- myData = JSON.parse(text, function (key, value) {
- var a;
- if (typeof value === 'string') {
- a =
-/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
- if (a) {
- return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
- +a[5], +a[6]));
- }
- }
- return value;
- });
-
- myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
- var d;
- if (typeof value === 'string' &&
- value.slice(0, 5) === 'Date(' &&
- value.slice(-1) === ')') {
- d = new Date(value.slice(5, -1));
- if (d) {
- return d;
- }
- }
- return value;
- });
-
-
- This is a reference implementation. You are free to copy, modify, or
- redistribute.
-*/
-
-/*jslint evil: true, strict: false */
-
-/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
- call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
- getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
- lastIndex, length, parse, prototype, push, replace, slice, stringify,
- test, toJSON, toString, valueOf
-*/
-
-
-// Create a JSON object only if one does not already exist. We create the
-// methods in a closure to avoid creating global variables.
-
-// ************************************************************************************************
-
-var JSON = window.JSON || {};
-
-// ************************************************************************************************
-
-(function () {
-
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- if (typeof Date.prototype.toJSON !== 'function') {
-
- Date.prototype.toJSON = function (key) {
-
- return isFinite(this.valueOf()) ?
- this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z' : null;
- };
-
- String.prototype.toJSON =
- Number.prototype.toJSON =
- Boolean.prototype.toJSON = function (key) {
- return this.valueOf();
- };
- }
-
- var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- gap,
- indent,
- meta = { // table of character substitutions
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '"' : '\\"',
- '\\': '\\\\'
- },
- rep;
-
-
- function quote(string) {
-
-// If the string contains no control characters, no quote characters, and no
-// backslash characters, then we can safely slap some quotes around it.
-// Otherwise we must also replace the offending characters with safe escape
-// sequences.
-
- escapable.lastIndex = 0;
- return escapable.test(string) ?
- '"' + string.replace(escapable, function (a) {
- var c = meta[a];
- return typeof c === 'string' ? c :
- '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- }) + '"' :
- '"' + string + '"';
- }
-
-
- function str(key, holder) {
-
-// Produce a string from holder[key].
-
- var i, // The loop counter.
- k, // The member key.
- v, // The member value.
- length,
- mind = gap,
- partial,
- value = holder[key];
-
-// If the value has a toJSON method, call it to obtain a replacement value.
-
- if (value && typeof value === 'object' &&
- typeof value.toJSON === 'function') {
- value = value.toJSON(key);
- }
-
-// If we were called with a replacer function, then call the replacer to
-// obtain a replacement value.
-
- if (typeof rep === 'function') {
- value = rep.call(holder, key, value);
- }
-
-// What happens next depends on the value's type.
-
- switch (typeof value) {
- case 'string':
- return quote(value);
-
- case 'number':
-
-// JSON numbers must be finite. Encode non-finite numbers as null.
-
- return isFinite(value) ? String(value) : 'null';
-
- case 'boolean':
- case 'null':
-
-// If the value is a boolean or null, convert it to a string. Note:
-// typeof null does not produce 'null'. The case is included here in
-// the remote chance that this gets fixed someday.
-
- return String(value);
-
-// If the type is 'object', we might be dealing with an object or an array or
-// null.
-
- case 'object':
-
-// Due to a specification blunder in ECMAScript, typeof null is 'object',
-// so watch out for that case.
-
- if (!value) {
- return 'null';
- }
-
-// Make an array to hold the partial results of stringifying this object value.
-
- gap += indent;
- partial = [];
-
-// Is the value an array?
-
- if (Object.prototype.toString.apply(value) === '[object Array]') {
-
-// The value is an array. Stringify every element. Use null as a placeholder
-// for non-JSON values.
-
- length = value.length;
- for (i = 0; i < length; i += 1) {
- partial[i] = str(i, value) || 'null';
- }
-
-// Join all of the elements together, separated with commas, and wrap them in
-// brackets.
-
- v = partial.length === 0 ? '[]' :
- gap ? '[\n' + gap +
- partial.join(',\n' + gap) + '\n' +
- mind + ']' :
- '[' + partial.join(',') + ']';
- gap = mind;
- return v;
- }
-
-// If the replacer is an array, use it to select the members to be stringified.
-
- if (rep && typeof rep === 'object') {
- length = rep.length;
- for (i = 0; i < length; i += 1) {
- k = rep[i];
- if (typeof k === 'string') {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- } else {
-
-// Otherwise, iterate through all of the keys in the object.
-
- for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- }
-
-// Join all of the member texts together, separated with commas,
-// and wrap them in braces.
-
- v = partial.length === 0 ? '{}' :
- gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
- mind + '}' : '{' + partial.join(',') + '}';
- gap = mind;
- return v;
- }
- }
-
-// If the JSON object does not yet have a stringify method, give it one.
-
- if (typeof JSON.stringify !== 'function') {
- JSON.stringify = function (value, replacer, space) {
-
-// The stringify method takes a value and an optional replacer, and an optional
-// space parameter, and returns a JSON text. The replacer can be a function
-// that can replace values, or an array of strings that will select the keys.
-// A default replacer method can be provided. Use of the space parameter can
-// produce text that is more easily readable.
-
- var i;
- gap = '';
- indent = '';
-
-// If the space parameter is a number, make an indent string containing that
-// many spaces.
-
- if (typeof space === 'number') {
- for (i = 0; i < space; i += 1) {
- indent += ' ';
- }
-
-// If the space parameter is a string, it will be used as the indent string.
-
- } else if (typeof space === 'string') {
- indent = space;
- }
-
-// If there is a replacer, it must be a function or an array.
-// Otherwise, throw an error.
-
- rep = replacer;
- if (replacer && typeof replacer !== 'function' &&
- (typeof replacer !== 'object' ||
- typeof replacer.length !== 'number')) {
- throw new Error('JSON.stringify');
- }
-
-// Make a fake root object containing our value under the key of ''.
-// Return the result of stringifying the value.
-
- return str('', {'': value});
- };
- }
-
-
-// If the JSON object does not yet have a parse method, give it one.
-
- if (typeof JSON.parse !== 'function') {
- JSON.parse = function (text, reviver) {
-
-// The parse method takes a text and an optional reviver function, and returns
-// a JavaScript value if the text is a valid JSON text.
-
- var j;
-
- function walk(holder, key) {
-
-// The walk method is used to recursively walk the resulting structure so
-// that modifications can be made.
-
- var k, v, value = holder[key];
- if (value && typeof value === 'object') {
- for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
- v = walk(value, k);
- if (v !== undefined) {
- value[k] = v;
- } else {
- delete value[k];
- }
- }
- }
- }
- return reviver.call(holder, key, value);
- }
-
-
-// Parsing happens in four stages. In the first stage, we replace certain
-// Unicode characters with escape sequences. JavaScript handles many characters
-// incorrectly, either silently deleting them, or treating them as line endings.
-
- text = String(text);
- cx.lastIndex = 0;
- if (cx.test(text)) {
- text = text.replace(cx, function (a) {
- return '\\u' +
- ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- });
- }
-
-// In the second stage, we run the text against regular expressions that look
-// for non-JSON patterns. We are especially concerned with '()' and 'new'
-// because they can cause invocation, and '=' because it can cause mutation.
-// But just to be safe, we want to reject all unexpected forms.
-
-// We split the second stage into 4 regexp operations in order to work around
-// crippling inefficiencies in IE's and Safari's regexp engines. First we
-// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
-// replace all simple value tokens with ']' characters. Third, we delete all
-// open brackets that follow a colon or comma or that begin the text. Finally,
-// we look to see that the remaining characters are only whitespace or ']' or
-// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
- if (/^[\],:{}\s]*$/.
-test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
-replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
-replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
-
-// In the third stage we use the eval function to compile the text into a
-// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
-// in JavaScript: it can begin a block or an object literal. We wrap the text
-// in parens to eliminate the ambiguity.
-
- j = eval('(' + text + ')');
-
-// In the optional fourth stage, we recursively walk the new structure, passing
-// each name/value pair to a reviver function for possible transformation.
-
- return typeof reviver === 'function' ?
- walk({'': j}, '') : j;
- }
-
-// If the text is not JSON parseable, then a SyntaxError is thrown.
-
- throw new SyntaxError('JSON.parse');
- };
- }
-
-// ************************************************************************************************
-// registration
-
-FBL.JSON = JSON;
-
-// ************************************************************************************************
-}());
-
-/* See license.txt for terms of usage */
-
-(function(){
-// ************************************************************************************************
-
-/* Copyright (c) 2010-2011 Marcus Westin
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-var store = (function(){
- var api = {},
- win = window,
- doc = win.document,
- localStorageName = 'localStorage',
- globalStorageName = 'globalStorage',
- namespace = '__firebug__storejs__',
- storage
-
- api.disabled = false
- api.set = function(key, value) {}
- api.get = function(key) {}
- api.remove = function(key) {}
- api.clear = function() {}
- api.transact = function(key, transactionFn) {
- var val = api.get(key)
- if (typeof val == 'undefined') { val = {} }
- transactionFn(val)
- api.set(key, val)
- }
-
- api.serialize = function(value) {
- return JSON.stringify(value)
- }
- api.deserialize = function(value) {
- if (typeof value != 'string') { return undefined }
- return JSON.parse(value)
- }
-
- // Functions to encapsulate questionable FireFox 3.6.13 behavior
- // when about.config::dom.storage.enabled === false
- // See https://github.com/marcuswestin/store.js/issues#issue/13
- function isLocalStorageNameSupported() {
- try { return (localStorageName in win && win[localStorageName]) }
- catch(err) { return false }
- }
-
- function isGlobalStorageNameSupported() {
- try { return (globalStorageName in win && win[globalStorageName] && win[globalStorageName][win.location.hostname]) }
- catch(err) { return false }
- }
-
- if (isLocalStorageNameSupported()) {
- storage = win[localStorageName]
- api.set = function(key, val) { storage.setItem(key, api.serialize(val)) }
- api.get = function(key) { return api.deserialize(storage.getItem(key)) }
- api.remove = function(key) { storage.removeItem(key) }
- api.clear = function() { storage.clear() }
-
- } else if (isGlobalStorageNameSupported()) {
- storage = win[globalStorageName][win.location.hostname]
- api.set = function(key, val) { storage[key] = api.serialize(val) }
- api.get = function(key) { return api.deserialize(storage[key] && storage[key].value) }
- api.remove = function(key) { delete storage[key] }
- api.clear = function() { for (var key in storage ) { delete storage[key] } }
-
- } else if (doc.documentElement.addBehavior) {
- var storage = doc.createElement('div')
- function withIEStorage(storeFunction) {
- return function() {
- var args = Array.prototype.slice.call(arguments, 0)
- args.unshift(storage)
- // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
- // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
- // TODO: xxxpedro doc.body is not always available so we must use doc.documentElement.
- // We need to make sure this change won't affect the behavior of this library.
- doc.documentElement.appendChild(storage)
- storage.addBehavior('#default#userData')
- storage.load(localStorageName)
- var result = storeFunction.apply(api, args)
- doc.documentElement.removeChild(storage)
- return result
- }
- }
- api.set = withIEStorage(function(storage, key, val) {
- storage.setAttribute(key, api.serialize(val))
- storage.save(localStorageName)
- })
- api.get = withIEStorage(function(storage, key) {
- return api.deserialize(storage.getAttribute(key))
- })
- api.remove = withIEStorage(function(storage, key) {
- storage.removeAttribute(key)
- storage.save(localStorageName)
- })
- api.clear = withIEStorage(function(storage) {
- var attributes = storage.XMLDocument.documentElement.attributes
- storage.load(localStorageName)
- for (var i=0, attr; attr = attributes[i]; i++) {
- storage.removeAttribute(attr.name)
- }
- storage.save(localStorageName)
- })
- }
-
- try {
- api.set(namespace, namespace)
- if (api.get(namespace) != namespace) { api.disabled = true }
- api.remove(namespace)
- } catch(e) {
- api.disabled = true
- }
-
- return api
-})();
-
-if (typeof module != 'undefined') { module.exports = store }
-
-
-// ************************************************************************************************
-// registration
-
-FBL.Store = store;
-
-// ************************************************************************************************
-})();
-
-/* See license.txt for terms of usage */
-
-FBL.ns( /**@scope s_selector*/ function() { with (FBL) {
-// ************************************************************************************************
-
-/*
- * 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 chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-// Thus far that includes Google Chrome.
-[0, 0].sort(function(){
- baseHasDuplicate = false;
- return 0;
-});
-
-/**
- * @name Firebug.Selector
- * @namespace
- */
-
-/**
- * @exports Sizzle as Firebug.Selector
- */
-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;
-
- // Reset the position of the chunker regexp (start from head)
- 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 {
- // Take a shortcut and set the context if the root selector is an ID
- // (but not if it'll be faster if the inner selector is an ID)
- 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 < results.length; i++ ) {
- if ( results[i] === results[i-1] ) {
- results.splice(i--, 1);
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function(expr, set){
- return Sizzle(expr, null, null, set);
-};
-
-Sizzle.find = function(expr, context, isXML){
- var set, match;
-
- if ( !expr ) {
- return [];
- }
-
- for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
- var type = Expr.order[i], match;
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- var left = match[1];
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace(/\\/g, "");
- set = Expr.find[ type ]( match, context, isXML );
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = context.getElementsByTagName("*");
- }
-
- return {set: set, expr: expr};
-};
-
-Sizzle.filter = function(expr, set, inplace, not){
- var old = expr, result = [], curLoop = set, match, anyFound,
- isXMLFilter = set && set[0] && isXML(set[0]);
-
- while ( expr && set.length ) {
- for ( var type in Expr.filter ) {
- if ( (match = Expr.match[ type ].exec( expr )) != null ) {
- var filter = Expr.filter[ type ], found, item;
- anyFound = false;
-
- if ( curLoop == result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- var pass = not ^ !!found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
- } else {
- curLoop[i] = false;
- }
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- // Improper expression
- if ( expr == old ) {
- if ( anyFound == null ) {
- throw "Syntax error, unrecognized expression: " + expr;
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-/**#@+ @ignore */
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
- },
- leftMatch: {},
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
- attrHandle: {
- href: function(elem){
- return elem.getAttribute("href");
- }
- },
- relative: {
- "+": function(checkSet, part, isXML){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !/\W/.test(part),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag && !isXML ) {
- part = part.toUpperCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
- ">": 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 < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName === part ? parent : false;
- }
- }
- } else {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
- "": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( !/\W/.test(part) ) {
- var nodeCheck = part = isXML ? part : part.toUpperCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
- },
- "~": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( typeof part === "string" && !/\W/.test(part) ) {
- var nodeCheck = part = isXML ? part : part.toUpperCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
- }
- },
- find: {
- ID: function(match, context, isXML){
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- return m ? [m] : [];
- }
- },
- NAME: function(match, context, isXML){
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [], results = context.getElementsByName(match[1]);
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
- TAG: function(match, context){
- return context.getElementsByTagName(match[1]);
- }
- },
- preFilter: {
- CLASS: function(match, curLoop, inplace, result, not, isXML){
- match = " " + match[1].replace(/\\/g, "") + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 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" ) {
- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
- match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- // calculate the numbers (first)n+(last) including if they are negative
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
-
- // TODO: Move to normal caching system
- 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 we're dealing with a complex expression, or a simple one
- 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){
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- 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 i < match[3] - 0;
- },
- gt: function(elem, i, match){
- return i > match[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 < l; i++ ) {
- if ( not[i] === elem ) {
- return false;
- }
- }
-
- return true;
- }
- },
- CHILD: function(elem, match){
- var type = match[1], node = elem;
- switch (type) {
- case 'only':
- case 'first':
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) return false;
- }
- if ( type == 'first') return true;
- node = elem;
- case 'last':
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) return false;
- }
- return true;
- case 'nth':
- var first = match[2], last = match[3];
-
- if ( first == 1 && last == 0 ) {
- return true;
- }
-
- var doneName = match[0],
- parent = elem.parentNode;
-
- if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
- var count = 0;
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
- parent.sizcache = doneName;
- }
-
- var diff = elem.nodeIndex - last;
- if ( first == 0 ) {
- return diff == 0;
- } else {
- return ( diff % first == 0 && diff / first >= 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;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 );
-
-// Provide a fallback method if it does not work
-} 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 < l; i++ ) {
- ret.push( array[i] );
- }
- } else {
- for ( var i = 0; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( "sourceIndex" in document.documentElement ) {
- sortOrder = function( a, b ) {
- if ( !a.sourceIndex || !b.sourceIndex ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var ret = a.sourceIndex - b.sourceIndex;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( document.createRange ) {
- sortOrder = function( a, b ) {
- if ( !a.ownerDocument || !b.ownerDocument ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
- aRange.setStart(a, 0);
- aRange.setEnd(a, 0);
- bRange.setStart(b, 0);
- bRange.setEnd(b, 0);
- var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
- // We're going to inject a fake input element with a specified name
- var form = document.createElement("div"),
- id = "script" + (new Date).getTime();
- form.innerHTML = "";
-
- // Inject it into the root element, check its status, and remove it quickly
- var root = document.documentElement;
- root.insertBefore( form, root.firstChild );
-
- // The workaround has to do additional checks after a getElementById
- // Which slows things down for other browsers (hence the branching)
- 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; // release memory in IE
-})();
-
-(function(){
- // Check to see if the browser returns only elements
- // when doing getElementsByTagName("*")
-
- // Create a fake element
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- // Make sure no comments are found
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function(match, context){
- var results = context.getElementsByTagName(match[1]);
-
- // Filter out possible comments
- 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;
- };
- }
-
- // Check to see if an attribute returns normalized href attributes
- 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; // release memory in IE
-})();
-
-if ( document.querySelectorAll ) (function(){
- var oldSizzle = Sizzle, div = document.createElement("div");
- div.innerHTML = "
([\s\S]+)<\/p>\s+<\/body>$/.exec(source);
- if (match)
- source = match[1];
-
- console.log(source);
- });
- }
-};
-
-// ************************************************************************************************
-
-Firebug.Lite.Proxy.fetchResourceDisabledMessage =
- "/* Firebug Lite resource fetching is disabled.\n" +
- "To enabled it set the Firebug Lite option \"disableResourceFetching\" to \"false\".\n" +
- "More info at http://getfirebug.com/firebuglite#Options */";
-
-var fetchResource = function(url)
-{
- if (Firebug.disableResourceFetching)
- {
- var source = sourceMap[url] = Firebug.Lite.Proxy.fetchResourceDisabledMessage;
- return source;
- }
-
- if (sourceMap.hasOwnProperty(url))
- return sourceMap[url];
-
- // Getting the native XHR object so our calls won't be logged in the Console Panel
- var xhr = FBL.getNativeXHRObject();
- xhr.open("get", url, false);
- xhr.send();
-
- var source = sourceMap[url] = xhr.responseText;
- return source;
-};
-
-var fetchProxyResource = function(url)
-{
- if (sourceMap.hasOwnProperty(url))
- return sourceMap[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.";
- }
-
- var source = data ? data.contents : "";
- return source;
-};
-
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-FBL.ns(function() { with (FBL) {
-// ************************************************************************************************
-
-Firebug.Lite.Style =
-{
-};
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-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";
- }
-};
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-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";
- }
-};
-
-
-// ************************************************************************************************
-}});
-
-
-/* See license.txt for terms of usage */
-
-/*
- http://www.JSON.org/json2.js
- 2010-03-20
-
- Public Domain.
-
- NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
-
- See http://www.JSON.org/js.html
-
-
- This code should be minified before deployment.
- See http://javascript.crockford.com/jsmin.html
-
- USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
- NOT CONTROL.
-
-
- This file creates a global JSON object containing two methods: stringify
- and parse.
-
- JSON.stringify(value, replacer, space)
- value any JavaScript value, usually an object or array.
-
- replacer an optional parameter that determines how object
- values are stringified for objects. It can be a
- function or an array of strings.
-
- space an optional parameter that specifies the indentation
- of nested structures. If it is omitted, the text will
- be packed without extra whitespace. If it is a number,
- it will specify the number of spaces to indent at each
- level. If it is a string (such as '\t' or ' '),
- it contains the characters used to indent at each level.
-
- This method produces a JSON text from a JavaScript value.
-
- When an object value is found, if the object contains a toJSON
- method, its toJSON method will be called and the result will be
- stringified. A toJSON method does not serialize: it returns the
- value represented by the name/value pair that should be serialized,
- or undefined if nothing should be serialized. The toJSON method
- will be passed the key associated with the value, and this will be
- bound to the value
-
- For example, this would serialize Dates as ISO strings.
-
- Date.prototype.toJSON = function (key) {
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- return this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z';
- };
-
- You can provide an optional replacer method. It will be passed the
- key and value of each member, with this bound to the containing
- object. The value that is returned from your method will be
- serialized. If your method returns undefined, then the member will
- be excluded from the serialization.
-
- If the replacer parameter is an array of strings, then it will be
- used to select the members to be serialized. It filters the results
- such that only members with keys listed in the replacer array are
- stringified.
-
- Values that do not have JSON representations, such as undefined or
- functions, will not be serialized. Such values in objects will be
- dropped; in arrays they will be replaced with null. You can use
- a replacer function to replace those with JSON values.
- JSON.stringify(undefined) returns undefined.
-
- The optional space parameter produces a stringification of the
- value that is filled with line breaks and indentation to make it
- easier to read.
-
- If the space parameter is a non-empty string, then that string will
- be used for indentation. If the space parameter is a number, then
- the indentation will be that many spaces.
-
- Example:
-
- text = JSON.stringify(['e', {pluribus: 'unum'}]);
- // text is '["e",{"pluribus":"unum"}]'
-
-
- text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
- // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
-
- text = JSON.stringify([new Date()], function (key, value) {
- return this[key] instanceof Date ?
- 'Date(' + this[key] + ')' : value;
- });
- // text is '["Date(---current time---)"]'
-
-
- JSON.parse(text, reviver)
- This method parses a JSON text to produce an object or array.
- It can throw a SyntaxError exception.
-
- The optional reviver parameter is a function that can filter and
- transform the results. It receives each of the keys and values,
- and its return value is used instead of the original value.
- If it returns what it received, then the structure is not modified.
- If it returns undefined then the member is deleted.
-
- Example:
-
- // Parse the text. Values that look like ISO date strings will
- // be converted to Date objects.
-
- myData = JSON.parse(text, function (key, value) {
- var a;
- if (typeof value === 'string') {
- a =
-/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
- if (a) {
- return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
- +a[5], +a[6]));
- }
- }
- return value;
- });
-
- myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
- var d;
- if (typeof value === 'string' &&
- value.slice(0, 5) === 'Date(' &&
- value.slice(-1) === ')') {
- d = new Date(value.slice(5, -1));
- if (d) {
- return d;
- }
- }
- return value;
- });
-
-
- This is a reference implementation. You are free to copy, modify, or
- redistribute.
-*/
-
-/*jslint evil: true, strict: false */
-
-/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
- call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
- getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
- lastIndex, length, parse, prototype, push, replace, slice, stringify,
- test, toJSON, toString, valueOf
-*/
-
-
-// Create a JSON object only if one does not already exist. We create the
-// methods in a closure to avoid creating global variables.
-
-// ************************************************************************************************
-
-var JSON = window.JSON || {};
-
-// ************************************************************************************************
-
-(function () {
-
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- if (typeof Date.prototype.toJSON !== 'function') {
-
- Date.prototype.toJSON = function (key) {
-
- return isFinite(this.valueOf()) ?
- this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z' : null;
- };
-
- String.prototype.toJSON =
- Number.prototype.toJSON =
- Boolean.prototype.toJSON = function (key) {
- return this.valueOf();
- };
- }
-
- var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- gap,
- indent,
- meta = { // table of character substitutions
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '"' : '\\"',
- '\\': '\\\\'
- },
- rep;
-
-
- function quote(string) {
-
-// If the string contains no control characters, no quote characters, and no
-// backslash characters, then we can safely slap some quotes around it.
-// Otherwise we must also replace the offending characters with safe escape
-// sequences.
-
- escapable.lastIndex = 0;
- return escapable.test(string) ?
- '"' + string.replace(escapable, function (a) {
- var c = meta[a];
- return typeof c === 'string' ? c :
- '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- }) + '"' :
- '"' + string + '"';
- }
-
-
- function str(key, holder) {
-
-// Produce a string from holder[key].
-
- var i, // The loop counter.
- k, // The member key.
- v, // The member value.
- length,
- mind = gap,
- partial,
- value = holder[key];
-
-// If the value has a toJSON method, call it to obtain a replacement value.
-
- if (value && typeof value === 'object' &&
- typeof value.toJSON === 'function') {
- value = value.toJSON(key);
- }
-
-// If we were called with a replacer function, then call the replacer to
-// obtain a replacement value.
-
- if (typeof rep === 'function') {
- value = rep.call(holder, key, value);
- }
-
-// What happens next depends on the value's type.
-
- switch (typeof value) {
- case 'string':
- return quote(value);
-
- case 'number':
-
-// JSON numbers must be finite. Encode non-finite numbers as null.
-
- return isFinite(value) ? String(value) : 'null';
-
- case 'boolean':
- case 'null':
-
-// If the value is a boolean or null, convert it to a string. Note:
-// typeof null does not produce 'null'. The case is included here in
-// the remote chance that this gets fixed someday.
-
- return String(value);
-
-// If the type is 'object', we might be dealing with an object or an array or
-// null.
-
- case 'object':
-
-// Due to a specification blunder in ECMAScript, typeof null is 'object',
-// so watch out for that case.
-
- if (!value) {
- return 'null';
- }
-
-// Make an array to hold the partial results of stringifying this object value.
-
- gap += indent;
- partial = [];
-
-// Is the value an array?
-
- if (Object.prototype.toString.apply(value) === '[object Array]') {
-
-// The value is an array. Stringify every element. Use null as a placeholder
-// for non-JSON values.
-
- length = value.length;
- for (i = 0; i < length; i += 1) {
- partial[i] = str(i, value) || 'null';
- }
-
-// Join all of the elements together, separated with commas, and wrap them in
-// brackets.
-
- v = partial.length === 0 ? '[]' :
- gap ? '[\n' + gap +
- partial.join(',\n' + gap) + '\n' +
- mind + ']' :
- '[' + partial.join(',') + ']';
- gap = mind;
- return v;
- }
-
-// If the replacer is an array, use it to select the members to be stringified.
-
- if (rep && typeof rep === 'object') {
- length = rep.length;
- for (i = 0; i < length; i += 1) {
- k = rep[i];
- if (typeof k === 'string') {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- } else {
-
-// Otherwise, iterate through all of the keys in the object.
-
- for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- }
-
-// Join all of the member texts together, separated with commas,
-// and wrap them in braces.
-
- v = partial.length === 0 ? '{}' :
- gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
- mind + '}' : '{' + partial.join(',') + '}';
- gap = mind;
- return v;
- }
- }
-
-// If the JSON object does not yet have a stringify method, give it one.
-
- if (typeof JSON.stringify !== 'function') {
- JSON.stringify = function (value, replacer, space) {
-
-// The stringify method takes a value and an optional replacer, and an optional
-// space parameter, and returns a JSON text. The replacer can be a function
-// that can replace values, or an array of strings that will select the keys.
-// A default replacer method can be provided. Use of the space parameter can
-// produce text that is more easily readable.
-
- var i;
- gap = '';
- indent = '';
-
-// If the space parameter is a number, make an indent string containing that
-// many spaces.
-
- if (typeof space === 'number') {
- for (i = 0; i < space; i += 1) {
- indent += ' ';
- }
-
-// If the space parameter is a string, it will be used as the indent string.
-
- } else if (typeof space === 'string') {
- indent = space;
- }
-
-// If there is a replacer, it must be a function or an array.
-// Otherwise, throw an error.
-
- rep = replacer;
- if (replacer && typeof replacer !== 'function' &&
- (typeof replacer !== 'object' ||
- typeof replacer.length !== 'number')) {
- throw new Error('JSON.stringify');
- }
-
-// Make a fake root object containing our value under the key of ''.
-// Return the result of stringifying the value.
-
- return str('', {'': value});
- };
- }
-
-
-// If the JSON object does not yet have a parse method, give it one.
-
- if (typeof JSON.parse !== 'function') {
- JSON.parse = function (text, reviver) {
-
-// The parse method takes a text and an optional reviver function, and returns
-// a JavaScript value if the text is a valid JSON text.
-
- var j;
-
- function walk(holder, key) {
-
-// The walk method is used to recursively walk the resulting structure so
-// that modifications can be made.
-
- var k, v, value = holder[key];
- if (value && typeof value === 'object') {
- for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
- v = walk(value, k);
- if (v !== undefined) {
- value[k] = v;
- } else {
- delete value[k];
- }
- }
- }
- }
- return reviver.call(holder, key, value);
- }
-
-
-// Parsing happens in four stages. In the first stage, we replace certain
-// Unicode characters with escape sequences. JavaScript handles many characters
-// incorrectly, either silently deleting them, or treating them as line endings.
-
- text = String(text);
- cx.lastIndex = 0;
- if (cx.test(text)) {
- text = text.replace(cx, function (a) {
- return '\\u' +
- ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- });
- }
-
-// In the second stage, we run the text against regular expressions that look
-// for non-JSON patterns. We are especially concerned with '()' and 'new'
-// because they can cause invocation, and '=' because it can cause mutation.
-// But just to be safe, we want to reject all unexpected forms.
-
-// We split the second stage into 4 regexp operations in order to work around
-// crippling inefficiencies in IE's and Safari's regexp engines. First we
-// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
-// replace all simple value tokens with ']' characters. Third, we delete all
-// open brackets that follow a colon or comma or that begin the text. Finally,
-// we look to see that the remaining characters are only whitespace or ']' or
-// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
- if (/^[\],:{}\s]*$/.
-test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
-replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
-replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
-
-// In the third stage we use the eval function to compile the text into a
-// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
-// in JavaScript: it can begin a block or an object literal. We wrap the text
-// in parens to eliminate the ambiguity.
-
- j = eval('(' + text + ')');
-
-// In the optional fourth stage, we recursively walk the new structure, passing
-// each name/value pair to a reviver function for possible transformation.
-
- return typeof reviver === 'function' ?
- walk({'': j}, '') : j;
- }
-
-// If the text is not JSON parseable, then a SyntaxError is thrown.
-
- throw new SyntaxError('JSON.parse');
- };
- }
-
-// ************************************************************************************************
-// registration
-
-FBL.JSON = JSON;
-
-// ************************************************************************************************
-}());
-
-/* See license.txt for terms of usage */
-
-(function(){
-// ************************************************************************************************
-
-/* Copyright (c) 2010-2011 Marcus Westin
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-var store = (function(){
- var api = {},
- win = window,
- doc = win.document,
- localStorageName = 'localStorage',
- globalStorageName = 'globalStorage',
- namespace = '__firebug__storejs__',
- storage
-
- api.disabled = false
- api.set = function(key, value) {}
- api.get = function(key) {}
- api.remove = function(key) {}
- api.clear = function() {}
- api.transact = function(key, transactionFn) {
- var val = api.get(key)
- if (typeof val == 'undefined') { val = {} }
- transactionFn(val)
- api.set(key, val)
- }
-
- api.serialize = function(value) {
- return JSON.stringify(value)
- }
- api.deserialize = function(value) {
- if (typeof value != 'string') { return undefined }
- return JSON.parse(value)
- }
-
- // Functions to encapsulate questionable FireFox 3.6.13 behavior
- // when about.config::dom.storage.enabled === false
- // See https://github.com/marcuswestin/store.js/issues#issue/13
- function isLocalStorageNameSupported() {
- try { return (localStorageName in win && win[localStorageName]) }
- catch(err) { return false }
- }
-
- function isGlobalStorageNameSupported() {
- try { return (globalStorageName in win && win[globalStorageName] && win[globalStorageName][win.location.hostname]) }
- catch(err) { return false }
- }
-
- if (isLocalStorageNameSupported()) {
- storage = win[localStorageName]
- api.set = function(key, val) { storage.setItem(key, api.serialize(val)) }
- api.get = function(key) { return api.deserialize(storage.getItem(key)) }
- api.remove = function(key) { storage.removeItem(key) }
- api.clear = function() { storage.clear() }
-
- } else if (isGlobalStorageNameSupported()) {
- storage = win[globalStorageName][win.location.hostname]
- api.set = function(key, val) { storage[key] = api.serialize(val) }
- api.get = function(key) { return api.deserialize(storage[key] && storage[key].value) }
- api.remove = function(key) { delete storage[key] }
- api.clear = function() { for (var key in storage ) { delete storage[key] } }
-
- } else if (doc.documentElement.addBehavior) {
- var storage = doc.createElement('div')
- function withIEStorage(storeFunction) {
- return function() {
- var args = Array.prototype.slice.call(arguments, 0)
- args.unshift(storage)
- // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
- // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
- // TODO: xxxpedro doc.body is not always available so we must use doc.documentElement.
- // We need to make sure this change won't affect the behavior of this library.
- doc.documentElement.appendChild(storage)
- storage.addBehavior('#default#userData')
- storage.load(localStorageName)
- var result = storeFunction.apply(api, args)
- doc.documentElement.removeChild(storage)
- return result
- }
- }
- api.set = withIEStorage(function(storage, key, val) {
- storage.setAttribute(key, api.serialize(val))
- storage.save(localStorageName)
- })
- api.get = withIEStorage(function(storage, key) {
- return api.deserialize(storage.getAttribute(key))
- })
- api.remove = withIEStorage(function(storage, key) {
- storage.removeAttribute(key)
- storage.save(localStorageName)
- })
- api.clear = withIEStorage(function(storage) {
- var attributes = storage.XMLDocument.documentElement.attributes
- storage.load(localStorageName)
- for (var i=0, attr; attr = attributes[i]; i++) {
- storage.removeAttribute(attr.name)
- }
- storage.save(localStorageName)
- })
- }
-
- try {
- api.set(namespace, namespace)
- if (api.get(namespace) != namespace) { api.disabled = true }
- api.remove(namespace)
- } catch(e) {
- api.disabled = true
- }
-
- return api
-})();
-
-if (typeof module != 'undefined') { module.exports = store }
-
-
-// ************************************************************************************************
-// registration
-
-FBL.Store = store;
-
-// ************************************************************************************************
-})();
-
-/* See license.txt for terms of usage */
-
-FBL.ns( /**@scope s_selector*/ function() { with (FBL) {
-// ************************************************************************************************
-
-/*
- * 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 chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-// Thus far that includes Google Chrome.
-[0, 0].sort(function(){
- baseHasDuplicate = false;
- return 0;
-});
-
-/**
- * @name Firebug.Selector
- * @namespace
- */
-
-/**
- * @exports Sizzle as Firebug.Selector
- */
-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;
-
- // Reset the position of the chunker regexp (start from head)
- 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 {
- // Take a shortcut and set the context if the root selector is an ID
- // (but not if it'll be faster if the inner selector is an ID)
- 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 < results.length; i++ ) {
- if ( results[i] === results[i-1] ) {
- results.splice(i--, 1);
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function(expr, set){
- return Sizzle(expr, null, null, set);
-};
-
-Sizzle.find = function(expr, context, isXML){
- var set, match;
-
- if ( !expr ) {
- return [];
- }
-
- for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
- var type = Expr.order[i], match;
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- var left = match[1];
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace(/\\/g, "");
- set = Expr.find[ type ]( match, context, isXML );
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = context.getElementsByTagName("*");
- }
-
- return {set: set, expr: expr};
-};
-
-Sizzle.filter = function(expr, set, inplace, not){
- var old = expr, result = [], curLoop = set, match, anyFound,
- isXMLFilter = set && set[0] && isXML(set[0]);
-
- while ( expr && set.length ) {
- for ( var type in Expr.filter ) {
- if ( (match = Expr.match[ type ].exec( expr )) != null ) {
- var filter = Expr.filter[ type ], found, item;
- anyFound = false;
-
- if ( curLoop == result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- var pass = not ^ !!found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
- } else {
- curLoop[i] = false;
- }
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- // Improper expression
- if ( expr == old ) {
- if ( anyFound == null ) {
- throw "Syntax error, unrecognized expression: " + expr;
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-/**#@+ @ignore */
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
- },
- leftMatch: {},
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
- attrHandle: {
- href: function(elem){
- return elem.getAttribute("href");
- }
- },
- relative: {
- "+": function(checkSet, part, isXML){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !/\W/.test(part),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag && !isXML ) {
- part = part.toUpperCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
- ">": 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 < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName === part ? parent : false;
- }
- }
- } else {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
- "": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( !/\W/.test(part) ) {
- var nodeCheck = part = isXML ? part : part.toUpperCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
- },
- "~": function(checkSet, part, isXML){
- var doneName = done++, checkFn = dirCheck;
-
- if ( typeof part === "string" && !/\W/.test(part) ) {
- var nodeCheck = part = isXML ? part : part.toUpperCase();
- checkFn = dirNodeCheck;
- }
-
- checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
- }
- },
- find: {
- ID: function(match, context, isXML){
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- return m ? [m] : [];
- }
- },
- NAME: function(match, context, isXML){
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [], results = context.getElementsByName(match[1]);
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
- TAG: function(match, context){
- return context.getElementsByTagName(match[1]);
- }
- },
- preFilter: {
- CLASS: function(match, curLoop, inplace, result, not, isXML){
- match = " " + match[1].replace(/\\/g, "") + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 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" ) {
- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
- match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- // calculate the numbers (first)n+(last) including if they are negative
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
-
- // TODO: Move to normal caching system
- 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 we're dealing with a complex expression, or a simple one
- 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){
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- 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 i < match[3] - 0;
- },
- gt: function(elem, i, match){
- return i > match[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 < l; i++ ) {
- if ( not[i] === elem ) {
- return false;
- }
- }
-
- return true;
- }
- },
- CHILD: function(elem, match){
- var type = match[1], node = elem;
- switch (type) {
- case 'only':
- case 'first':
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) return false;
- }
- if ( type == 'first') return true;
- node = elem;
- case 'last':
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) return false;
- }
- return true;
- case 'nth':
- var first = match[2], last = match[3];
-
- if ( first == 1 && last == 0 ) {
- return true;
- }
-
- var doneName = match[0],
- parent = elem.parentNode;
-
- if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
- var count = 0;
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
- parent.sizcache = doneName;
- }
-
- var diff = elem.nodeIndex - last;
- if ( first == 0 ) {
- return diff == 0;
- } else {
- return ( diff % first == 0 && diff / first >= 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;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 );
-
-// Provide a fallback method if it does not work
-} 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 < l; i++ ) {
- ret.push( array[i] );
- }
- } else {
- for ( var i = 0; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( "sourceIndex" in document.documentElement ) {
- sortOrder = function( a, b ) {
- if ( !a.sourceIndex || !b.sourceIndex ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var ret = a.sourceIndex - b.sourceIndex;
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-} else if ( document.createRange ) {
- sortOrder = function( a, b ) {
- if ( !a.ownerDocument || !b.ownerDocument ) {
- if ( a == b ) {
- hasDuplicate = true;
- }
- return 0;
- }
-
- var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
- aRange.setStart(a, 0);
- aRange.setEnd(a, 0);
- bRange.setStart(b, 0);
- bRange.setEnd(b, 0);
- var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
- if ( ret === 0 ) {
- hasDuplicate = true;
- }
- return ret;
- };
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
- // We're going to inject a fake input element with a specified name
- var form = document.createElement("div"),
- id = "script" + (new Date).getTime();
- form.innerHTML = "";
-
- // Inject it into the root element, check its status, and remove it quickly
- var root = document.documentElement;
- root.insertBefore( form, root.firstChild );
-
- // The workaround has to do additional checks after a getElementById
- // Which slows things down for other browsers (hence the branching)
- 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; // release memory in IE
-})();
-
-(function(){
- // Check to see if the browser returns only elements
- // when doing getElementsByTagName("*")
-
- // Create a fake element
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- // Make sure no comments are found
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function(match, context){
- var results = context.getElementsByTagName(match[1]);
-
- // Filter out possible comments
- 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;
- };
- }
-
- // Check to see if an attribute returns normalized href attributes
- 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; // release memory in IE
-})();
-
-if ( document.querySelectorAll ) (function(){
- var oldSizzle = Sizzle, div = document.createElement("div");
- div.innerHTML = "
";
-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){if(Env.Options.disableXHRListener){return
-}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(){if(supportsXHRIterator){for(var propName in xhrRequest){if(propName in updateSelfPropertiesIgnore){continue
-}try{var propValue=xhrRequest[propName];
-if(propValue&&!isFunction(propValue)){self[propName]=propValue
-}}catch(E){}}}else{if(xhrRequest.readyState==4){self.status=xhrRequest.status;
-self.statusText=xhrRequest.statusText;
-self.responseText=xhrRequest.responseText;
-self.responseXML=xhrRequest.responseXML
-}}};
-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;
-i0;
-return this
-};
-var _ActiveXObject;
-var isIE6=/msie 6/i.test(navigator.appVersion);
-if(isIE6){_ActiveXObject=window.ActiveXObject;
-var xhrObjects=" MSXML2.XMLHTTP.5.0 MSXML2.XMLHTTP.4.0 MSXML2.XMLHTTP.3.0 MSXML2.XMLHTTP Microsoft.XMLHTTP ";
-window.ActiveXObject=function(name){var error=null;
-try{var activeXObject=new _ActiveXObject(name)
-}catch(e){error=e
-}finally{if(!error){if(xhrObjects.indexOf(" "+name+" ")!=-1){return new XMLHttpRequestWrapper(activeXObject)
-}else{return activeXObject
-}}else{throw error.message
-}}}
-}if(!isIE6){var _XMLHttpRequest=XMLHttpRequest;
-window.XMLHttpRequest=function(){return new XMLHttpRequestWrapper()
-}
-}FBL.getNativeXHRObject=function(){var xhrObj=false;
-try{xhrObj=new _XMLHttpRequest()
-}catch(e){var progid=["MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
-for(var i=0;
-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=/
-
-
-
----------------------------------------------------------------------------------------------------
-XPATH
----------------------------------------------------------------------------------------------------
-
-function getXPath(node, path) {
- path = path || [];
- if(node.parentNode) {
- path = getXPath(node.parentNode, path);
- }
-
- if(node.previousSibling) {
- var count = 1;
- var sibling = node.previousSibling
- do {
- if(sibling.nodeType == 1 && sibling.nodeName == node.nodeName) {count++;}
- sibling = sibling.previousSibling;
- } while(sibling);
- if(count == 1) {count = null;}
- } else if(node.nextSibling) {
- var sibling = node.nextSibling;
- do {
- if(sibling.nodeType == 1 && sibling.nodeName == node.nodeName) {
- var count = 1;
- sibling = null;
- } else {
- var count = null;
- sibling = sibling.previousSibling;
- }
- } while(sibling);
- }
-
- if(node.nodeType == 1) {
- path.push(node.nodeName.toLowerCase() + (node.id ? "[@id='"+node.id+"']" : count > 0 ? "["+count+"]" : ''));
- }
- return path;
-};
-
-
-// Getting result
-document.evaluate("/html/body/div/ul/li[2]", document, null, XPathResult.ANY_TYPE, null ).iterateNext()
-
diff --git a/branches/firebug1.4/docs/beta/changelog.txt b/branches/firebug1.4/docs/beta/changelog.txt
deleted file mode 100644
index 7aa1e81c..00000000
--- a/branches/firebug1.4/docs/beta/changelog.txt
+++ /dev/null
@@ -1,485 +0,0 @@
-###################################################################################################
- 1.3.0b1 - 2009-02-05 - Revision: 6012
-###################################################################################################
-
--------------------------------------------------------------------------------
-CSS
--------------------------------------------------------------------------------
- - Implemented a more robust stylesheet scanner (will scan imported stylesheets)
- - Implemented a cascading styles analyser (will detect which CSS rules are applied
- to a particular element, in the proper cascading order)
-
- - Ported css.js file from Firebug, including the following features:
- - live edit of CSS properties
- - enable/disable CSS properties on-the-fly
- - Cascading visualization
- - Inheritance visualization (with overriden properties marked)
-
- - Ported the CSS Panel
- - Ported the Style Panel
- - Ported the Computed Panel divided in categories (in a separated tab)
- - Fixed the problem with external stylesheets (now shows a "Access restricted" message).
-
--------------------------------------------------------------------------------
-Editor
--------------------------------------------------------------------------------
- - Autocomplete feature with UP/DOWN keys
- - "Complete as you type" feature in most browsers (not working in Opera yet)
- - Increment/decrement with UP/DOWN, PAGE-UP/PAGE-DOWN
- - Navigation with TAB/SHIFT+TAB
- - Fixed the CSS of editor to work in all browsers
- - Pretty inline editor support in IE6
- - Fixed problem with inline editor in Safari/Chrome/IE: special keys doesn't
- trigger the onkeypress event, making some changes in the editor not apply
- to the CSS property.
-
--------------------------------------------------------------------------------
-Console
--------------------------------------------------------------------------------
- - Strings are properly rendered in console.* calls
-
--------------------------------------------------------------------------------
-CommandLine
--------------------------------------------------------------------------------
- - Fixed Issue 2764: Fix problem with commandLine API and jQuery's $ shortcut.
-
--------------------------------------------------------------------------------
-Script
--------------------------------------------------------------------------------
- - Don't show the Firebug Lite source code in the script list
- - Refactored Script panel
- - Fixed potential memory leak
- - Using the Warning template in the Script panel when failing to load external scripts.
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - When running as Chrome extension, all images used in the interface are
- stored in the extension directory, hugely improving the perceived loading
- time for GUI operations, specially in the startup.
-
- - Implemented the chrome.deactivate() method
-
--------------------------------------------------------------------------------
-GUI
--------------------------------------------------------------------------------
- - Added the "off" button to the UI
- - Updated "minimize" and "detach" buttons with new images used in Firebug 1.4+
- - Fixed problem with panel initialization that was breaking the scroll
- position persistence of the panels.
-
--------------------------------------------------------------------------------
-Domplate
--------------------------------------------------------------------------------
- - Added domplate tag.insertBefore method
-
--------------------------------------------------------------------------------
-Lib
--------------------------------------------------------------------------------
- - Added KeyEvent constants
- - Added bindFixed method
- - Added Whitespace and Entity conversions methods
- - Added String escaping methods
- - Added CSS methods
- - Added DOM queries methods
-
- - Fixed lib.collapse() method to work in IE6 (that doesn't support the "[collapsed]"
- CSS selector that was used to match the element)
-
- - Implemented a cross-browser lib.selectInputRange() and lib.getInputCaretPosition()
- to support text selection and caret position detection in editor module
-
- - Making instanceOf() work also for non HTML elements (elements without ownerDocument
- property), to avoid the use of the instanceof operator, that may cause error in other
- browsers when the Class is not defined in the global namespace.
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - Ported editor.js module from Firebug
- - Ported a simplified version of tabContext.js
- - Implemented a more robust Cache system that will be used internally
- - Implemented a message dispatching method to communicate with the Chrome extension
-
-
-###################################################################################################
- 1.3.0a5 - 2009-01-16 - Revision: 5719
-###################################################################################################
-
--------------------------------------------------------------------------------
-CommandLine
--------------------------------------------------------------------------------
- - Large Command Line
- - Refactoring CommandLine module for better readability and encapsulation (commandHistory
- is now a private variable in CommandLine module)
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - Fix problem in iframe creation that was blocking the UI creation via
- bookmarlet in IE, for some pages.
-
- - Allow Firebug Lite UI to load in "windowless mode", without creating an
- iframe. This is necessary to make the bookmarlet run in cases where it
- is not possible to create an iframe.
-
- - Refactoring Chrome module for better readability
-
--------------------------------------------------------------------------------
-User Interface
--------------------------------------------------------------------------------
- - refined the layout of buttons (added an image background)
- - refined the layout of log groups
-
--------------------------------------------------------------------------------
-Context
--------------------------------------------------------------------------------
- - Better context evaluation (commands with multiple lines are now properly evaluated)
- - context.evaluate() properly executes and returns the value of expressions with
- multiple commands (be it multilined or not).
-
--------------------------------------------------------------------------------
-Style
--------------------------------------------------------------------------------
- - Basic editing feature of inline styles (Style panel)
-
--------------------------------------------------------------------------------
-HTML
--------------------------------------------------------------------------------
- - properly format inline style of elements in IE to lower-case in HTML panel
-
--------------------------------------------------------------------------------
-Lib
--------------------------------------------------------------------------------
- - fixed visibility detection and visibility representation of elements
- - Fixed problems in IE with some event functions like isLeftClick(), isRightClick(),
- and others. IE has a different pattern for identifying mouse buttons.
-
--------------------------------------------------------------------------------
-Console
--------------------------------------------------------------------------------
- - Added the "category" of error in the error messages (like "Type Error", "Syntax Error", etc).
- - ported the consoleInjetor.js file that will be used with the new console (console2.js)
- - ported the console.js file from Firebug codebase (not enabled yet). This will replace
- the current implementation of the Console panel in the 1.3 final version.
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - new XHR watcher (with response and headers tabs)
- - fixed variable "root" leaking to global namespace (domplate.js)
- - improved development build functions
-
-
-###################################################################################################
- 1.3.0a4 - 2009-12-31 - Revision: 5505
-###################################################################################################
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - Improved the performance of the application initial loading time
- - Improved the performance of the popup loading time
- - Refactored the chrome synchronization mechanism
- - Implemented synchronization of the persistent popup
- - Fixed isFunction() problem with IE when dealing with external objects
-
- - Improved the memory consumption. Now each panel only uses resources (listen
- for events, etc) when is currently selected.
-
- - Implemented the "Duck Type Detection" system, to make possible identify
- native classes (Document, Element, etc) in IE, and therefore, generate
- the appropriate visual representation.
-
--------------------------------------------------------------------------------
-User Interface
--------------------------------------------------------------------------------
- - Moved all UI components to a separated gui.js file.
- - Implemented the Menu class (with normal, checkbox, radiobutton, group
- and separator items), that will be used in options menus at 1.3 verson
- and in contexts menus at 1.4 version.
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - StatusBar
- - SidePanel size and positioning
-
- - Long sequence of elements (like toolbar/statusbar buttons) don't "bleed"
- anymore (appears outside its container) when the chrome has small dimensions
-
- - Large panels now triggers automatically the appropriate scrollbars
- (some huge scripts with long lines wans't triggering the horizontal scrollbar)
-
--------------------------------------------------------------------------------
-Console
--------------------------------------------------------------------------------
- - Fixed problem in console.time() and console.timeEnd().
- - Implemented the console.trace (thanks dongryphon for the contribution!)
-
--------------------------------------------------------------------------------
-Inspector
--------------------------------------------------------------------------------
- - Implemented the border in the BoxModel Highlight
-
--------------------------------------------------------------------------------
-HTML
--------------------------------------------------------------------------------
- - Internet Explorer and inline styles representation (thanks christophe.blin
- for the contribution!)
-
- - Implemented a basic sidePanel synchronization to test the overall
- performance of the rendering when inspecting elements
-
--------------------------------------------------------------------------------
-DOM
--------------------------------------------------------------------------------
- - Ported the main part of the original DOM Panel in Firebug
- - Ported the DOM "views path" mechanism (click and "go into" DOM objects)
- - Improved the performance of the initial rendering
- - Implemented a basic DOM Panel subclass used in as HTML side panel
-
--------------------------------------------------------------------------------
-Script
--------------------------------------------------------------------------------
- - Implemented the basics of the Script panel, with some code ported from
- the Firebug Lite 1.2 version.
-
- - Better number of lines detection
-
--------------------------------------------------------------------------------
-CSS
--------------------------------------------------------------------------------
- - Implemented the basics of the CSS panel, with some code ported from
- the Firebug Lite 1.2 version.
-
- - Adjusted the rules and property names styles to lowercase
-
--------------------------------------------------------------------------------
-Domplate
--------------------------------------------------------------------------------
- - Removed the dependency on global variables (domplate, DomplateTag)
- - Adjusted the code so it can run in external contexts (persistent mode)
-
-
-
-###################################################################################################
- 1.3.0a3 - 2009-09-13 - Revision: 4882
-###################################################################################################
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - Better implementation of the chrome synchronization (detach and reattach methods)
- - Improvements the location detection
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - XML+XSL and XHTML support
- - Synchronization messages ("detach" and "reattach") are now dispatched to all panels
- - Fixed problem with Chrome synchronization in Opera
- - Fixed weird bug in layout in IE (horizontal splitter was disappearing sometimes)
-
--------------------------------------------------------------------------------
-Inspector
--------------------------------------------------------------------------------
- - Reimplemented the IE auto margin size calculator
- - Reimplemented the pointsToPixels function
- - Reimplemented the pixelsPerInch calculator
- - Outline Inspector is now "cropped" to avoid triggering the scrollbars
-
--------------------------------------------------------------------------------
-Bookmarlet
--------------------------------------------------------------------------------
- - More robust and maintainable bookmarlet
-
--------------------------------------------------------------------------------
-Domplate
--------------------------------------------------------------------------------
- - Ported the Domplate rendering engine
-
--------------------------------------------------------------------------------
-Reps
--------------------------------------------------------------------------------
- - Ported the visual representation rules of objects (Reps module)
-
--------------------------------------------------------------------------------
-Persist
--------------------------------------------------------------------------------
- - Reimplemented the application core to support in the future persisted
- Chromes, that is, UI windows that stays alive when the user reloads or
- changes the page (considering that the following page is in the same domain).
-
-
-
-###################################################################################################
- 1.3.0a2 - 2009-08-03 - Revision: 3847
-###################################################################################################
-
--------------------------------------------------------------------------------
-Core Changes
--------------------------------------------------------------------------------
- - Context Class implemented to allow inspect different windows (contexts)
-
- - better settings handling:
- - modes: BookmarletMode, PersistentMode, TraceMode, DevelopmentMode
- - skin: xp, classic, light
-
- - all components were revised to better handling memory consumption.
- create()/destroy() methods (called when something is created) and
- initialize()/shutdown() when something is activated, or made visible.
-
- - console.log calls are now captured even when the UI is not loaded
- - better location detection
- - library initialization reimplemented to support future persistent applications
-
--------------------------------------------------------------------------------
-User Interface Changes
--------------------------------------------------------------------------------
- - Created "xp" and "classic" skins. The old skin was based in a Firefox
- non-default theme.
-
- - HTML and CSS revised to render properly in different browsers, running
- on different compatibility modes (quirks mode, standards mode).
-
--------------------------------------------------------------------------------
-Chrome Changes
--------------------------------------------------------------------------------
- - better positioning calculation, when running on different compatibility
- modes (quirks mode, standards mode).
-
- - better window size, scrollSize and scollPosition calculations, when
- running on different compatibility modes (quirks mode, standards mode).
-
- - element:hover now works also in IE7 & IE8 when in quirks mode.
-
- - resize chrome performance (buffered frame-skip technique)
-
- - mini-chrome implemented
-
--------------------------------------------------------------------------------
-Core Additions
--------------------------------------------------------------------------------
- - FBTrace - internal logging system
-
- - DOM methods:
- - createElement()
- - createGlobalElement()
-
- - Event methods:
- - bind()
- - cancelEvent()
- - addGlobalEvent()
- - removeGlobalEvent()
- - dispatch()
- - disableTextSelection()
-
- - className methods:
- - addClass()
- - removeClass()
- - hasClass()
- - toggleClass()
-
--------------------------------------------------------------------------------
-Chrome Additions
--------------------------------------------------------------------------------
- - Controller Class
- - Module Class
- - Panel Class
- - PanelBar Class
- - Button Class (normal and toggle buttons)
-
- - FBTrace Panel
-
-
-
-
-###################################################################################################
- 1.3.0a1 - 2009-05-03 - Revision: 2729
-###################################################################################################
-
--------------------------------------------------------------------------------
-Inspector
--------------------------------------------------------------------------------
- - Inspect function implemented.
-
- - onInspecting highlight element in HTML Tree behaviour implemented.
- When inspecting, the elements are being highlighted, and the scroll
- is being changed to make the element visible in the tree.
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - Problem with scope in event handlers. All functions that need to access
- the "shared scope" must be assigned to a local variable.
-
- var onClick = function onClick(e)
- {
- ...
-
- - Revised "extend" and "append" functions
-
- - problem with the new Firebug for FF3, it seems that it doesn't allow
- extending the console namespace anymore.
-
- - CommandLineAPI --> $, $$, dir, dirxml...
-
- - Fixed bug in getLocation function, the relative path calculation wasn't
- working in all cases.
-
- - Fixed bug in commandLine. Commands that doesn't return a value (if, for,
- while) wasn't being properly executed.
-
--------------------------------------------------------------------------------
-Events
--------------------------------------------------------------------------------
- - Opera problem with the TAB key in commandLine
-
- - Better handling of the F12 key press, which wasn't being properly
- attached to the Chrome Frame window.
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - Problem with multiple iframes and the resizing of the Chrome, that
- tries to add events on them.
-
- - Fixed problem in IE when resizing the Chrome, when the relative position
- of the mouse wasnt being computed in all frames of the document,
- resulting in strange flickerings when resizing it.
-
- - Fixed problem in Opera when resizing the Chrome.
-
- - Problem when resizing with the fbVSplitter, when it reaches the side of
- the screen. Problem with negative pixel numbers.
-
- - fbVSplitter is bigger than the frame in firefox. Problem with mouse scroll.
-
- - isScrolledToBottom is not working in Firefox, it seems that this is
- happening because the scrollable panel is some pixels higher than
- it should be.
-
--------------------------------------------------------------------------------
-Inspector
--------------------------------------------------------------------------------
- - Selected element in HTML tree isn't being highlighted (boxmodel)
-
- - BoxModel functions entirely revised. Now the position, size, padding
- and margin are being computed correctly, in all units: pt, px, em, ex
- and % (need to test more deeply the percentage values).
-
--------------------------------------------------------------------------------
-commandLine
--------------------------------------------------------------------------------
- - better handling of scope of commandLine.eval(), if you type "this" it will
- refer to the CommandLine module, and it should refer to "window" instead
-
-
-
-
-###################################################################################################
- 1.3.0a0 - 2009-01-24 - Revision: 1765
-###################################################################################################
-
-1.3.0 prototype
\ No newline at end of file
diff --git a/branches/firebug1.4/docs/beta/index.html b/branches/firebug1.4/docs/beta/index.html
deleted file mode 100644
index 13ae5ed4..00000000
--- a/branches/firebug1.4/docs/beta/index.html
+++ /dev/null
@@ -1,791 +0,0 @@
-
-
-
-
-
-
-Firebug Lite 1.3.0 beta
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Spread the word:
- Firebug Lite 1.3.0 beta released
-
- The next generation of Firebug Lite graduated to beta! This version
- is pretty stable but we need your help to make sure it is stable enough
- to make a wider release.
-
- This version was conceived to put the Firebug Lite in a new level,
- by allowing code reuse from Firebug's original source. A new core
- was created to accomplish the following goals:
-
-
- Performance - the core of Firebug Lite 1.3 was rewritten from scratch
- taking the performance into account in the first place.
-
-
- Modularity - the code is now more modular, making easier the process
- of adding new features and UI components such as panels, buttons, menus etc.
- The modularity also helps the development process. Once the modules can
- be isolated it is easier to detect the cause of complicated problems like
- memory leaks.
-
-
- Shared code - the core was designed to make it possible
- to port some code directly from the Firebug source, with as few as possible
- modifications. As a result, some features and UI elements behave exactly
- as in Firebug.
-
-
- Compatibility - the new core is compatible with XHTML and XML+XSL
- documents. Thanks to the new context-independent approach, it supports
- now the experimental persistent popups feature (popups that "live" across
- different page loads of the same domain), and will support cross-iframe
- inspection in the next version.
-
Port of Firebug's Visual Object Representation (aka Reps)
-
Recreation of Firebug 1.3 User Interface with pixel precision
-
Menu options
-
Resizable sidePanel
-
Skinnable Interface
-
-
- CSS
-
-
-
CSS cascading view
-
CSS inheritance view
-
Live editing CSS rules and properties
-
Smart autocomplete (you'll get only the suggestions you need for each property)
-
Autocomplete as you type feature
-
Increment/decrement with UP/DOWN and PAGE UP/PAGE DOWN keys
-
-
- Inspector
-
-
-
Full BoxModel Highlight including margin, border, padding and content boxes
-
The BoxModel is highlighted when you move your mouse over a representation
- of a HTML element, in any of the place of the User Interface
-
Elements are selected on-the-fly while using the Inspect tool
-
-
- Console
-
-
-
console.group() and console.groupEnd()
-
- console.trace() (thanks
- dongryphon
- for the contribution!)
-
-
command line API functions $(), $$(), and dir()
-
command line shortcuts $0 and $1 for recent selected elements
-
autocomplete (tab, shift+tab)
-
can capture console messages before DOM document creation
- (when installed at the HTML header)
-
-
- Core
-
-
-
XHR watcher (works better when you load the script in the HEAD of your document)
-
Port most of the Firebug Library (aka Lib, FBL)
-
Port the Firebug DOM Templates Engine (aka Domplate), the magic behind Reps
-
Plugin system like Firebug
-
Context-independent (will allow cross-iframe debugging, and persistent popups)
-
Persistent popups
-
Synchronization across different windows (iframe, popup)
-
-
- And more...
-
-
-
- Fixed problem with Internet Explorer and inline styles representation (thanks
- christophe.blin
- for the contribution!)
-
-
- For a complete list of changes, check the
- changelog.
-
-
-
-
1.2. What's missing in Firebug Lite 1.3?
-
- Here are the features that are still missing, but should be available in the
- final Firebug Lite 1.3 release:
-
-
-
Object links in console should be clickable
-
XHR watching need to work with synchronous requests
-
Some internal code need to be refactored (Chrome and Panels API)
-
Make sure the code is stable enough
-
-
-
1.3. What's Not in Lite?
-
- Some features are not included in Firebug Lite 1.3, but due the new core that
- supports code sharing from Firebug, are likely to be included in the
- Firebug Lite 1.4 version:
-
-
-
Live editing for all panels
-
Layout Panel
-
Context menu options
-
Tooltips (to show colors and images)
-
Search feature
-
-
- Other features though are too dependent in browser internals and will not be
- supported (at least in a near future*), such as:
-
-
-
Javascript debugger / Javascript profiler
-
Net panel / HTTP and XHR monitor
-
Access to restricted URI resources
-
Highlight HTML changes
-
-
- *Recent discussions about remote debugging
- indicates that should be possible to support JavaScript debugging in browsers
- like Google Chrome and Opera in a not so distant future, but the
- differences in the protocols
- may slow down this process (hey browser developers, what about adopting a standard?).
-
-
- **The trace enabled bookmarlet is intended to help identify error in Firebug Lite.
- If you find a bug, run the trace enabled bookmarlet and look for something
- strange in the logs.
-
-
b) Live link
-
- You can also link directly to the hosted version at getfirebug.com. Copy the
- following code, and paste it in the TOP of the HEAD of your document:
-
-
-
c) Local link (offline)
-
- If you need using Firebug Lite while offline,
- download the code,
- copy to a local destination, and link the firebug.jgz in the TOP
- of the HEAD of your document.
-
-
-
d) Development mode:
-
- If you want to debug Firebug Lite, fix a bug, or add a new feature, you will want
- to run the Firebug Lite in development mode. To do so, first
- checkout the latest version
- in our repository, and then insert a script at the TOP of the HEAD of your document.
-
-
-
- When in development mode, some things behave quite differently to make the
- development process easier, such as:
-
-
-
All script files are loaded separately, without compression.
-
The internal library that Firebug Lite uses (aka FBL) is exposed to the
- global namespace, allowing you to inspect its content. It is also exposed
- the domplate and its classes, and the FBTrace object
-
The skin is loaded in a separated file, allowing you to rapidly change
- the style and/or markup of the User Interface.
-
It will force to open Firebug Lite even when Firebug is active (which is
- not the default behavior), so you can use Firebug to debug it.
-
A new panel "Dev" will be available with tools to compress the skin,
- and the source code of the application in a single file.
- That's a lot of things to test, but we're particularly interested in
- make sure the core of the application is working well before we move on
- to the beta stage. Here are the list of the most important things to test:
-
-
-
5.1. Loading
-
- Firebug Lite should run fine no matter how it was loaded.
-
-
- Bookmarlet - the current bookmarlet used in both Firebug Lite 1.2 and
- 1.3 versions contains some problems and limitations (it won't load
- for example in XHTML and/or XML+XSL documents). We're particularly
- insterested in find such problems in the bookmarlet now we're in
- beta stage, because updating bookmarlets is a boring task, and
- should be done by the user individually, in each browser.
-
-
- Local include - Firebug Lite should load fine when using relative
- paths in the URL (when loaded locally).
-
-
- Live include - Firebug Lite should load fine when loaded directly
- from getfirebug.com.
-
-
-
5.2. Rendering
-
- Please report us if you see some weird behavior in the User Interface, such
- as misplaced elements, elements not rendered, abnormal flickering, partial
- rendered panels, or any other visual weirdness.
-
-
-
5.4. Document Types
-
- Firebug Lite should work in different types of documents such as
- XHTML and/or XML+XSL documents.
-
- Your contribution is very important. Found a bug? Have a suggestion? Please
- report us.
-
-
- Found a fix for a particular issue?
- Patches are welcome.
- Also, if you are willing to help more deeply with coding,
- join our team.
-
-
-
- Spread the word:
- Firebug Lite 1.3.0 beta released
-
- Last, but not least, you can also helping us by spreading the word, inviting
- more people to test this new version. Feel free to post about it in your
- blog, social network, or use the retweet button on the left.
-
-
-
-
\ No newline at end of file
diff --git a/branches/firebug1.4/docs/beta/retweet.js b/branches/firebug1.4/docs/beta/retweet.js
deleted file mode 100644
index dd8eb372..00000000
--- a/branches/firebug1.4/docs/beta/retweet.js
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Easy Retweet Button
- * http://ejohn.org/blog/retweet/
- * by John Resig (ejohn.org)
- *
- * Licensed under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
- */
-
-(function(){
-
-window.RetweetJS = {
- // Your Bit.ly Username
- bitly_user: "retweetjs",
-
- // Your Bit.ly API Key
- // Found here: http://bit.ly/account
- bitly_key: "R_6287c92ecaf9efc6f39e4f33bdbf80b1",
-
- // The text to replace the links with
- link_text: (/windows/i.test( navigator.userAgent) ? "►" : "♻") +
- " Retweet",
-
- // What # to show (Use "clicks" for # of clicks or "none" for nothing)
- count_type: "clicks",
-
- // Tweet Prefix text
- // "RT @jeresig " would result in: "RT @jeresig Link Title http://bit.ly/asdf"
- prefix: "",
-
- // Style information
- styling: "a.retweet { font: 12px Helvetica,Arial; color: #000; text-decoration: none; border: 0px; }" +
- "a.retweet span { color: #FFF; background: #94CC3D; margin-left: 2px; border: 1px solid #43A52A; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; padding: 3px; }" +
- "a.vert { display: block; text-align: center; font-size: 16px; float: left; margin: 4px; }" +
- "a.retweet strong.vert { display: block; margin-bottom: 4px; background: #F5F5F5; border: 1px solid #EEE; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; padding: 3px; }" +
- "a.retweet span.vert { display: block; font-size: 12px; margin-left: 0px; }"
-};
-
-//////////////// No Need to Configure Below Here ////////////////
-
-var loadCount = 1;
-
-// Asynchronously load the Bit.ly JavaScript API
-// If it hasn't been loaded already
-if ( typeof BitlyClient === "undefined" ) {
- var head = document.getElementsByTagName("head")[0] ||
- document.documentElement;
- var script = document.createElement("script");
- script.src = "http://bit.ly/javascript-api.js?version=latest&login=" +
- RetweetJS.bitly_user + "&apiKey=" + RetweetJS.bitly_key;
- script.charSet = "utf-8";
- head.appendChild( script );
-
- var check = setInterval(function(){
- if ( typeof BitlyCB !== "undefined" ) {
- clearInterval( check );
- head.removeChild( script );
- loaded();
- }
- }, 10);
-
- loadCount = 0;
-}
-
-if ( document.addEventListener ) {
- document.addEventListener("DOMContentLoaded", loaded, false);
-
-} else if ( window.attachEvent ) {
- window.attachEvent("onload", loaded);
-}
-
-function loaded(){
- // Need to wait for doc ready and js ready
- if ( ++loadCount < 2 ) {
- return;
- }
-
- var elems = [], urlElem = {}, hashURL = {};
-
- BitlyCB.shortenResponse = function(data) {
- for ( var url in data.results ) {
- var hash = data.results[url].userHash;
- hashURL[hash] = url;
-
- var elems = urlElem[ url ];
-
- for ( var i = 0; i < elems.length; i++ ) {
- elems[i].href += hash;
- }
-
- if ( RetweetJS.count_type === "clicks" ) {
- BitlyClient.stats(hash, 'BitlyCB.statsResponse');
- }
- }
- };
-
- BitlyCB.statsResponse = function(data) {
- var clicks = data.results.clicks, hash = data.results.userHash;
- var url = hashURL[ hash ], elems = urlElem[ url ];
-
- if ( clicks > 0 ) {
- for ( var i = 0; i < elems.length; i++ ) {
- var strong = document.createElement("strong");
- strong.appendChild( document.createTextNode( clicks + " " ) );
- elems[i].insertBefore(strong, elems[i].firstChild);
-
- if ( /(^|\s)vert(\s|$)/.test( elems[i].className ) ) {
- elems[i].firstChild.className = elems[i].lastChild.className = "vert";
- }
- }
- }
-
- hashURL[ hash ] = urlElem[ url ] = null;
- };
-
- if ( document.getElementsByClassName ) {
- elems = document.getElementsByClassName("retweet");
- } else {
- var tmp = document.getElementsByTagName("a");
- for ( var i = 0; i < tmp.length; i++ ) {
- if ( /(^|\s)retweet(\s|$)/.test( tmp[i].className ) ) {
- elems.push( tmp[i] );
- }
- }
- }
-
- if ( elems.length && RetweetJS.styling ) {
- var style = document.createElement("style");
- style.type = "text/css";
-
- try {
- style.appendChild( document.createTextNode( RetweetJS.styling ) );
- } catch (e) {
- if ( style.styleSheet ) {
- style.styleSheet.cssText = RetweetJS.styling;
- }
- }
-
- document.body.appendChild( style );
- }
-
- for ( var i = 0; i < elems.length; i++ ) {
- var elem = elems[i];
-
- if ( /(^|\s)self(\s|$)/.test( elem.className ) ) {
- elem.href = window.location;
- elem.title = document.title;
- }
-
- var origText = elem.title || elem.textContent || elem.innerText,
- href = elem.href;
-
- elem.innerHTML = "" + RetweetJS.link_text + "";
- elem.title = "";
- elem.href = "http://twitter.com/home?status=" +
- encodeURIComponent(RetweetJS.prefix + origText + " http://bit.ly/");
-
- if ( urlElem[ href ] ) {
- urlElem[ href ].push( elem );
- } else {
- urlElem[ href ] = [ elem ];
- BitlyClient.shorten(href, 'BitlyCB.shortenResponse');
- }
- }
-
-}
-
-})();
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img01.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img01.png
deleted file mode 100644
index 5e0c9dde..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img01.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img02.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img02.png
deleted file mode 100644
index d47d47f3..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img02.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img03.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img03.png
deleted file mode 100644
index aeadf4e8..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img03.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img04.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img04.png
deleted file mode 100644
index 641027d6..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img04.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img05.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img05.png
deleted file mode 100644
index 1828933b..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img05.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img06.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img06.png
deleted file mode 100644
index 07534179..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img06.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img07.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img07.png
deleted file mode 100644
index 5a705cd4..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img07.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img08.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img08.png
deleted file mode 100644
index 3b368ec3..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img08.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img09.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img09.png
deleted file mode 100644
index 65f37559..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img09.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img10.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img10.png
deleted file mode 100644
index e420131d..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img10.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img11.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img11.png
deleted file mode 100644
index 8454dd7c..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img11.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img12.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img12.png
deleted file mode 100644
index 1e818684..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img12.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img13.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img13.png
deleted file mode 100644
index 850d7846..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-img13.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-small.png b/branches/firebug1.4/docs/beta/screenshots/firebug1.3-small.png
deleted file mode 100644
index d66f197b..00000000
Binary files a/branches/firebug1.4/docs/beta/screenshots/firebug1.3-small.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/chrome/changelog.txt b/branches/firebug1.4/docs/chrome/changelog.txt
deleted file mode 100644
index 7aa1e81c..00000000
--- a/branches/firebug1.4/docs/chrome/changelog.txt
+++ /dev/null
@@ -1,485 +0,0 @@
-###################################################################################################
- 1.3.0b1 - 2009-02-05 - Revision: 6012
-###################################################################################################
-
--------------------------------------------------------------------------------
-CSS
--------------------------------------------------------------------------------
- - Implemented a more robust stylesheet scanner (will scan imported stylesheets)
- - Implemented a cascading styles analyser (will detect which CSS rules are applied
- to a particular element, in the proper cascading order)
-
- - Ported css.js file from Firebug, including the following features:
- - live edit of CSS properties
- - enable/disable CSS properties on-the-fly
- - Cascading visualization
- - Inheritance visualization (with overriden properties marked)
-
- - Ported the CSS Panel
- - Ported the Style Panel
- - Ported the Computed Panel divided in categories (in a separated tab)
- - Fixed the problem with external stylesheets (now shows a "Access restricted" message).
-
--------------------------------------------------------------------------------
-Editor
--------------------------------------------------------------------------------
- - Autocomplete feature with UP/DOWN keys
- - "Complete as you type" feature in most browsers (not working in Opera yet)
- - Increment/decrement with UP/DOWN, PAGE-UP/PAGE-DOWN
- - Navigation with TAB/SHIFT+TAB
- - Fixed the CSS of editor to work in all browsers
- - Pretty inline editor support in IE6
- - Fixed problem with inline editor in Safari/Chrome/IE: special keys doesn't
- trigger the onkeypress event, making some changes in the editor not apply
- to the CSS property.
-
--------------------------------------------------------------------------------
-Console
--------------------------------------------------------------------------------
- - Strings are properly rendered in console.* calls
-
--------------------------------------------------------------------------------
-CommandLine
--------------------------------------------------------------------------------
- - Fixed Issue 2764: Fix problem with commandLine API and jQuery's $ shortcut.
-
--------------------------------------------------------------------------------
-Script
--------------------------------------------------------------------------------
- - Don't show the Firebug Lite source code in the script list
- - Refactored Script panel
- - Fixed potential memory leak
- - Using the Warning template in the Script panel when failing to load external scripts.
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - When running as Chrome extension, all images used in the interface are
- stored in the extension directory, hugely improving the perceived loading
- time for GUI operations, specially in the startup.
-
- - Implemented the chrome.deactivate() method
-
--------------------------------------------------------------------------------
-GUI
--------------------------------------------------------------------------------
- - Added the "off" button to the UI
- - Updated "minimize" and "detach" buttons with new images used in Firebug 1.4+
- - Fixed problem with panel initialization that was breaking the scroll
- position persistence of the panels.
-
--------------------------------------------------------------------------------
-Domplate
--------------------------------------------------------------------------------
- - Added domplate tag.insertBefore method
-
--------------------------------------------------------------------------------
-Lib
--------------------------------------------------------------------------------
- - Added KeyEvent constants
- - Added bindFixed method
- - Added Whitespace and Entity conversions methods
- - Added String escaping methods
- - Added CSS methods
- - Added DOM queries methods
-
- - Fixed lib.collapse() method to work in IE6 (that doesn't support the "[collapsed]"
- CSS selector that was used to match the element)
-
- - Implemented a cross-browser lib.selectInputRange() and lib.getInputCaretPosition()
- to support text selection and caret position detection in editor module
-
- - Making instanceOf() work also for non HTML elements (elements without ownerDocument
- property), to avoid the use of the instanceof operator, that may cause error in other
- browsers when the Class is not defined in the global namespace.
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - Ported editor.js module from Firebug
- - Ported a simplified version of tabContext.js
- - Implemented a more robust Cache system that will be used internally
- - Implemented a message dispatching method to communicate with the Chrome extension
-
-
-###################################################################################################
- 1.3.0a5 - 2009-01-16 - Revision: 5719
-###################################################################################################
-
--------------------------------------------------------------------------------
-CommandLine
--------------------------------------------------------------------------------
- - Large Command Line
- - Refactoring CommandLine module for better readability and encapsulation (commandHistory
- is now a private variable in CommandLine module)
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - Fix problem in iframe creation that was blocking the UI creation via
- bookmarlet in IE, for some pages.
-
- - Allow Firebug Lite UI to load in "windowless mode", without creating an
- iframe. This is necessary to make the bookmarlet run in cases where it
- is not possible to create an iframe.
-
- - Refactoring Chrome module for better readability
-
--------------------------------------------------------------------------------
-User Interface
--------------------------------------------------------------------------------
- - refined the layout of buttons (added an image background)
- - refined the layout of log groups
-
--------------------------------------------------------------------------------
-Context
--------------------------------------------------------------------------------
- - Better context evaluation (commands with multiple lines are now properly evaluated)
- - context.evaluate() properly executes and returns the value of expressions with
- multiple commands (be it multilined or not).
-
--------------------------------------------------------------------------------
-Style
--------------------------------------------------------------------------------
- - Basic editing feature of inline styles (Style panel)
-
--------------------------------------------------------------------------------
-HTML
--------------------------------------------------------------------------------
- - properly format inline style of elements in IE to lower-case in HTML panel
-
--------------------------------------------------------------------------------
-Lib
--------------------------------------------------------------------------------
- - fixed visibility detection and visibility representation of elements
- - Fixed problems in IE with some event functions like isLeftClick(), isRightClick(),
- and others. IE has a different pattern for identifying mouse buttons.
-
--------------------------------------------------------------------------------
-Console
--------------------------------------------------------------------------------
- - Added the "category" of error in the error messages (like "Type Error", "Syntax Error", etc).
- - ported the consoleInjetor.js file that will be used with the new console (console2.js)
- - ported the console.js file from Firebug codebase (not enabled yet). This will replace
- the current implementation of the Console panel in the 1.3 final version.
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - new XHR watcher (with response and headers tabs)
- - fixed variable "root" leaking to global namespace (domplate.js)
- - improved development build functions
-
-
-###################################################################################################
- 1.3.0a4 - 2009-12-31 - Revision: 5505
-###################################################################################################
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - Improved the performance of the application initial loading time
- - Improved the performance of the popup loading time
- - Refactored the chrome synchronization mechanism
- - Implemented synchronization of the persistent popup
- - Fixed isFunction() problem with IE when dealing with external objects
-
- - Improved the memory consumption. Now each panel only uses resources (listen
- for events, etc) when is currently selected.
-
- - Implemented the "Duck Type Detection" system, to make possible identify
- native classes (Document, Element, etc) in IE, and therefore, generate
- the appropriate visual representation.
-
--------------------------------------------------------------------------------
-User Interface
--------------------------------------------------------------------------------
- - Moved all UI components to a separated gui.js file.
- - Implemented the Menu class (with normal, checkbox, radiobutton, group
- and separator items), that will be used in options menus at 1.3 verson
- and in contexts menus at 1.4 version.
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - StatusBar
- - SidePanel size and positioning
-
- - Long sequence of elements (like toolbar/statusbar buttons) don't "bleed"
- anymore (appears outside its container) when the chrome has small dimensions
-
- - Large panels now triggers automatically the appropriate scrollbars
- (some huge scripts with long lines wans't triggering the horizontal scrollbar)
-
--------------------------------------------------------------------------------
-Console
--------------------------------------------------------------------------------
- - Fixed problem in console.time() and console.timeEnd().
- - Implemented the console.trace (thanks dongryphon for the contribution!)
-
--------------------------------------------------------------------------------
-Inspector
--------------------------------------------------------------------------------
- - Implemented the border in the BoxModel Highlight
-
--------------------------------------------------------------------------------
-HTML
--------------------------------------------------------------------------------
- - Internet Explorer and inline styles representation (thanks christophe.blin
- for the contribution!)
-
- - Implemented a basic sidePanel synchronization to test the overall
- performance of the rendering when inspecting elements
-
--------------------------------------------------------------------------------
-DOM
--------------------------------------------------------------------------------
- - Ported the main part of the original DOM Panel in Firebug
- - Ported the DOM "views path" mechanism (click and "go into" DOM objects)
- - Improved the performance of the initial rendering
- - Implemented a basic DOM Panel subclass used in as HTML side panel
-
--------------------------------------------------------------------------------
-Script
--------------------------------------------------------------------------------
- - Implemented the basics of the Script panel, with some code ported from
- the Firebug Lite 1.2 version.
-
- - Better number of lines detection
-
--------------------------------------------------------------------------------
-CSS
--------------------------------------------------------------------------------
- - Implemented the basics of the CSS panel, with some code ported from
- the Firebug Lite 1.2 version.
-
- - Adjusted the rules and property names styles to lowercase
-
--------------------------------------------------------------------------------
-Domplate
--------------------------------------------------------------------------------
- - Removed the dependency on global variables (domplate, DomplateTag)
- - Adjusted the code so it can run in external contexts (persistent mode)
-
-
-
-###################################################################################################
- 1.3.0a3 - 2009-09-13 - Revision: 4882
-###################################################################################################
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - Better implementation of the chrome synchronization (detach and reattach methods)
- - Improvements the location detection
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - XML+XSL and XHTML support
- - Synchronization messages ("detach" and "reattach") are now dispatched to all panels
- - Fixed problem with Chrome synchronization in Opera
- - Fixed weird bug in layout in IE (horizontal splitter was disappearing sometimes)
-
--------------------------------------------------------------------------------
-Inspector
--------------------------------------------------------------------------------
- - Reimplemented the IE auto margin size calculator
- - Reimplemented the pointsToPixels function
- - Reimplemented the pixelsPerInch calculator
- - Outline Inspector is now "cropped" to avoid triggering the scrollbars
-
--------------------------------------------------------------------------------
-Bookmarlet
--------------------------------------------------------------------------------
- - More robust and maintainable bookmarlet
-
--------------------------------------------------------------------------------
-Domplate
--------------------------------------------------------------------------------
- - Ported the Domplate rendering engine
-
--------------------------------------------------------------------------------
-Reps
--------------------------------------------------------------------------------
- - Ported the visual representation rules of objects (Reps module)
-
--------------------------------------------------------------------------------
-Persist
--------------------------------------------------------------------------------
- - Reimplemented the application core to support in the future persisted
- Chromes, that is, UI windows that stays alive when the user reloads or
- changes the page (considering that the following page is in the same domain).
-
-
-
-###################################################################################################
- 1.3.0a2 - 2009-08-03 - Revision: 3847
-###################################################################################################
-
--------------------------------------------------------------------------------
-Core Changes
--------------------------------------------------------------------------------
- - Context Class implemented to allow inspect different windows (contexts)
-
- - better settings handling:
- - modes: BookmarletMode, PersistentMode, TraceMode, DevelopmentMode
- - skin: xp, classic, light
-
- - all components were revised to better handling memory consumption.
- create()/destroy() methods (called when something is created) and
- initialize()/shutdown() when something is activated, or made visible.
-
- - console.log calls are now captured even when the UI is not loaded
- - better location detection
- - library initialization reimplemented to support future persistent applications
-
--------------------------------------------------------------------------------
-User Interface Changes
--------------------------------------------------------------------------------
- - Created "xp" and "classic" skins. The old skin was based in a Firefox
- non-default theme.
-
- - HTML and CSS revised to render properly in different browsers, running
- on different compatibility modes (quirks mode, standards mode).
-
--------------------------------------------------------------------------------
-Chrome Changes
--------------------------------------------------------------------------------
- - better positioning calculation, when running on different compatibility
- modes (quirks mode, standards mode).
-
- - better window size, scrollSize and scollPosition calculations, when
- running on different compatibility modes (quirks mode, standards mode).
-
- - element:hover now works also in IE7 & IE8 when in quirks mode.
-
- - resize chrome performance (buffered frame-skip technique)
-
- - mini-chrome implemented
-
--------------------------------------------------------------------------------
-Core Additions
--------------------------------------------------------------------------------
- - FBTrace - internal logging system
-
- - DOM methods:
- - createElement()
- - createGlobalElement()
-
- - Event methods:
- - bind()
- - cancelEvent()
- - addGlobalEvent()
- - removeGlobalEvent()
- - dispatch()
- - disableTextSelection()
-
- - className methods:
- - addClass()
- - removeClass()
- - hasClass()
- - toggleClass()
-
--------------------------------------------------------------------------------
-Chrome Additions
--------------------------------------------------------------------------------
- - Controller Class
- - Module Class
- - Panel Class
- - PanelBar Class
- - Button Class (normal and toggle buttons)
-
- - FBTrace Panel
-
-
-
-
-###################################################################################################
- 1.3.0a1 - 2009-05-03 - Revision: 2729
-###################################################################################################
-
--------------------------------------------------------------------------------
-Inspector
--------------------------------------------------------------------------------
- - Inspect function implemented.
-
- - onInspecting highlight element in HTML Tree behaviour implemented.
- When inspecting, the elements are being highlighted, and the scroll
- is being changed to make the element visible in the tree.
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - Problem with scope in event handlers. All functions that need to access
- the "shared scope" must be assigned to a local variable.
-
- var onClick = function onClick(e)
- {
- ...
-
- - Revised "extend" and "append" functions
-
- - problem with the new Firebug for FF3, it seems that it doesn't allow
- extending the console namespace anymore.
-
- - CommandLineAPI --> $, $$, dir, dirxml...
-
- - Fixed bug in getLocation function, the relative path calculation wasn't
- working in all cases.
-
- - Fixed bug in commandLine. Commands that doesn't return a value (if, for,
- while) wasn't being properly executed.
-
--------------------------------------------------------------------------------
-Events
--------------------------------------------------------------------------------
- - Opera problem with the TAB key in commandLine
-
- - Better handling of the F12 key press, which wasn't being properly
- attached to the Chrome Frame window.
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - Problem with multiple iframes and the resizing of the Chrome, that
- tries to add events on them.
-
- - Fixed problem in IE when resizing the Chrome, when the relative position
- of the mouse wasnt being computed in all frames of the document,
- resulting in strange flickerings when resizing it.
-
- - Fixed problem in Opera when resizing the Chrome.
-
- - Problem when resizing with the fbVSplitter, when it reaches the side of
- the screen. Problem with negative pixel numbers.
-
- - fbVSplitter is bigger than the frame in firefox. Problem with mouse scroll.
-
- - isScrolledToBottom is not working in Firefox, it seems that this is
- happening because the scrollable panel is some pixels higher than
- it should be.
-
--------------------------------------------------------------------------------
-Inspector
--------------------------------------------------------------------------------
- - Selected element in HTML tree isn't being highlighted (boxmodel)
-
- - BoxModel functions entirely revised. Now the position, size, padding
- and margin are being computed correctly, in all units: pt, px, em, ex
- and % (need to test more deeply the percentage values).
-
--------------------------------------------------------------------------------
-commandLine
--------------------------------------------------------------------------------
- - better handling of scope of commandLine.eval(), if you type "this" it will
- refer to the CommandLine module, and it should refer to "window" instead
-
-
-
-
-###################################################################################################
- 1.3.0a0 - 2009-01-24 - Revision: 1765
-###################################################################################################
-
-1.3.0 prototype
\ No newline at end of file
diff --git a/branches/firebug1.4/docs/chrome/index.html b/branches/firebug1.4/docs/chrome/index.html
deleted file mode 100644
index adff58ba..00000000
--- a/branches/firebug1.4/docs/chrome/index.html
+++ /dev/null
@@ -1,349 +0,0 @@
-
-
-
-
-
-Firebug Lite for Google Chrome : Firebug
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Firebug Lite for Google Chrome is not a substitute for Firebug,
- or Chrome Developer Tools. It is a tool to be used in conjunction
- with these tools. Firebug Lite provides the rich visual representation
- we are used to see in Firebug when it comes to HTML elements,
- DOM elements, and Box Model shading. It provides also some cool
- features like inspecting HTML elemements with your mouse,
- and live editing CSS properties.
-
-
- To get more information about
- what's new
- in Firebug Lite (which is compatible with all major browsers) please visit the
- Firebug Lite page.
-
-
-
Benefits over Firebug Lite
-
- Firebug Lite for Google Chrome is basically the same you'll see
- when using the bookmarklet, or including a script tag
- in your page. There are, though, some benefits by using the extension
- for Google Chrome, including:
-
-
-
Browser toolbar integration, providing a quick access to Firebug Lite
-
It works without internet connection
-
Faster loading and no FOUC (Flash of Unstyled Content), once resources
- will be stored in the extension's directory on your machine
-
Firebug Lite will be loaded before all other scripts, allowing it
- to capture all console calls and all XHR requests for that page
-
It is possible to activate the Firebug Lite for a particular domain, so next
- time you visit a page in that domain it will be automatically active.
-
-
-
Limitations
-
- The main limitations of the Firebug Lite version are:
-
- The Firebug Lite activation scheme is very simple. When you first visit
- a web page Firebug Lite icon will be gray, indicating that it is deactivated.
- Clicking on it will activate Firebug Lite for all pages in that domain and the
- icon will become orange.
-
-
- Next time you visit a page in that domain, Firebug Lite will be automatically
- active, and the UI will be open or minimized according to the last time
- you used it.
-
-
- To deactivate Firebug Lite for a particular domain, go to a page in that domain
- and click on the "off" button. Since Firebug Lite uses localStorage to store
- the activation info when you clear your browser's cache, Firebug Lite
- will be deactivated for all pages.
-
- Your contribution is very important.
- If you have a specific issue, like a bug or feature request, please
- post a detailed description
- of the issue, and we will do our best to make it happen.
- If you have a more general issue or have something to say,
- let us know.
- Found a fix for a particular issue?
- Patches are welcome.
- If you would like to help with some code or would like to develop
- an extension for Firebug Lite, don't hesitate:
- join our team.
-
-
-
-
\ No newline at end of file
diff --git a/branches/firebug1.4/docs/chrome/info.txt b/branches/firebug1.4/docs/chrome/info.txt
deleted file mode 100644
index c7799536..00000000
--- a/branches/firebug1.4/docs/chrome/info.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-Overview
--------------
-
-Firebug Lite is not a substitute for Firebug, or Chrome Developer Tools. It is a tool to be used in conjunction with these tools. Firebug Lite provides the rich visual representation we are used to see in Firebug when it comes to HTML elements, DOM elements, and Box Model shading. It provides also some cool features like inspecting HTML elemements with your mouse, and live editing CSS properties.
-
-For more detailed information, visit:
-http://getfirebug.com/releases/lite/chrome/
-
-
-Benefits over Firebug Lite bookmarlet
------------------------------------------------------
-
- * Browser toolbar integration
- * Able to activate Firebug Lite for a particular domain
- * Firebug Lite will be loaded before all other scripts, allowing it to capture all console calls, and all XHR requests for that page
- * It is faster to load, because all code and images will be store in the extension's directory in your machine
- * Will be able to read external resources in the next version
-
-
-Limitations
-----------------
-
- * Cannot read external resources
- * Won't work well on pages with frames
- * JavaScript debugger isn't available
- * Net Panel isn't available
-
-
-Activation
---------------
-
-The Firebug Lite activation scheme is very simple. When you first visit a web page, Firebug icon will be gray, indicating that it is deactivated. Clicking on it will activate Firebug for all pages in that domain, and the icon will become orange.
-
-To deactivate for a particular domain, go to a page in that domain, and click on the "off" button.
-
-
-Contributing
------------------
-
-Your contribution is very important. Found a bug? Have a suggestion? Please
-report us: http://code.google.com/p/fbug/issues/list
-
-If you would like to help with some code, or would like to develop an extension for Firebug Lite, don't hesitate, join our team: http://groups.google.com/group/firebug-working-group
\ No newline at end of file
diff --git a/branches/firebug1.4/docs/latest/changelog.txt b/branches/firebug1.4/docs/latest/changelog.txt
deleted file mode 100644
index 7aa1e81c..00000000
--- a/branches/firebug1.4/docs/latest/changelog.txt
+++ /dev/null
@@ -1,485 +0,0 @@
-###################################################################################################
- 1.3.0b1 - 2009-02-05 - Revision: 6012
-###################################################################################################
-
--------------------------------------------------------------------------------
-CSS
--------------------------------------------------------------------------------
- - Implemented a more robust stylesheet scanner (will scan imported stylesheets)
- - Implemented a cascading styles analyser (will detect which CSS rules are applied
- to a particular element, in the proper cascading order)
-
- - Ported css.js file from Firebug, including the following features:
- - live edit of CSS properties
- - enable/disable CSS properties on-the-fly
- - Cascading visualization
- - Inheritance visualization (with overriden properties marked)
-
- - Ported the CSS Panel
- - Ported the Style Panel
- - Ported the Computed Panel divided in categories (in a separated tab)
- - Fixed the problem with external stylesheets (now shows a "Access restricted" message).
-
--------------------------------------------------------------------------------
-Editor
--------------------------------------------------------------------------------
- - Autocomplete feature with UP/DOWN keys
- - "Complete as you type" feature in most browsers (not working in Opera yet)
- - Increment/decrement with UP/DOWN, PAGE-UP/PAGE-DOWN
- - Navigation with TAB/SHIFT+TAB
- - Fixed the CSS of editor to work in all browsers
- - Pretty inline editor support in IE6
- - Fixed problem with inline editor in Safari/Chrome/IE: special keys doesn't
- trigger the onkeypress event, making some changes in the editor not apply
- to the CSS property.
-
--------------------------------------------------------------------------------
-Console
--------------------------------------------------------------------------------
- - Strings are properly rendered in console.* calls
-
--------------------------------------------------------------------------------
-CommandLine
--------------------------------------------------------------------------------
- - Fixed Issue 2764: Fix problem with commandLine API and jQuery's $ shortcut.
-
--------------------------------------------------------------------------------
-Script
--------------------------------------------------------------------------------
- - Don't show the Firebug Lite source code in the script list
- - Refactored Script panel
- - Fixed potential memory leak
- - Using the Warning template in the Script panel when failing to load external scripts.
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - When running as Chrome extension, all images used in the interface are
- stored in the extension directory, hugely improving the perceived loading
- time for GUI operations, specially in the startup.
-
- - Implemented the chrome.deactivate() method
-
--------------------------------------------------------------------------------
-GUI
--------------------------------------------------------------------------------
- - Added the "off" button to the UI
- - Updated "minimize" and "detach" buttons with new images used in Firebug 1.4+
- - Fixed problem with panel initialization that was breaking the scroll
- position persistence of the panels.
-
--------------------------------------------------------------------------------
-Domplate
--------------------------------------------------------------------------------
- - Added domplate tag.insertBefore method
-
--------------------------------------------------------------------------------
-Lib
--------------------------------------------------------------------------------
- - Added KeyEvent constants
- - Added bindFixed method
- - Added Whitespace and Entity conversions methods
- - Added String escaping methods
- - Added CSS methods
- - Added DOM queries methods
-
- - Fixed lib.collapse() method to work in IE6 (that doesn't support the "[collapsed]"
- CSS selector that was used to match the element)
-
- - Implemented a cross-browser lib.selectInputRange() and lib.getInputCaretPosition()
- to support text selection and caret position detection in editor module
-
- - Making instanceOf() work also for non HTML elements (elements without ownerDocument
- property), to avoid the use of the instanceof operator, that may cause error in other
- browsers when the Class is not defined in the global namespace.
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - Ported editor.js module from Firebug
- - Ported a simplified version of tabContext.js
- - Implemented a more robust Cache system that will be used internally
- - Implemented a message dispatching method to communicate with the Chrome extension
-
-
-###################################################################################################
- 1.3.0a5 - 2009-01-16 - Revision: 5719
-###################################################################################################
-
--------------------------------------------------------------------------------
-CommandLine
--------------------------------------------------------------------------------
- - Large Command Line
- - Refactoring CommandLine module for better readability and encapsulation (commandHistory
- is now a private variable in CommandLine module)
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - Fix problem in iframe creation that was blocking the UI creation via
- bookmarlet in IE, for some pages.
-
- - Allow Firebug Lite UI to load in "windowless mode", without creating an
- iframe. This is necessary to make the bookmarlet run in cases where it
- is not possible to create an iframe.
-
- - Refactoring Chrome module for better readability
-
--------------------------------------------------------------------------------
-User Interface
--------------------------------------------------------------------------------
- - refined the layout of buttons (added an image background)
- - refined the layout of log groups
-
--------------------------------------------------------------------------------
-Context
--------------------------------------------------------------------------------
- - Better context evaluation (commands with multiple lines are now properly evaluated)
- - context.evaluate() properly executes and returns the value of expressions with
- multiple commands (be it multilined or not).
-
--------------------------------------------------------------------------------
-Style
--------------------------------------------------------------------------------
- - Basic editing feature of inline styles (Style panel)
-
--------------------------------------------------------------------------------
-HTML
--------------------------------------------------------------------------------
- - properly format inline style of elements in IE to lower-case in HTML panel
-
--------------------------------------------------------------------------------
-Lib
--------------------------------------------------------------------------------
- - fixed visibility detection and visibility representation of elements
- - Fixed problems in IE with some event functions like isLeftClick(), isRightClick(),
- and others. IE has a different pattern for identifying mouse buttons.
-
--------------------------------------------------------------------------------
-Console
--------------------------------------------------------------------------------
- - Added the "category" of error in the error messages (like "Type Error", "Syntax Error", etc).
- - ported the consoleInjetor.js file that will be used with the new console (console2.js)
- - ported the console.js file from Firebug codebase (not enabled yet). This will replace
- the current implementation of the Console panel in the 1.3 final version.
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - new XHR watcher (with response and headers tabs)
- - fixed variable "root" leaking to global namespace (domplate.js)
- - improved development build functions
-
-
-###################################################################################################
- 1.3.0a4 - 2009-12-31 - Revision: 5505
-###################################################################################################
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - Improved the performance of the application initial loading time
- - Improved the performance of the popup loading time
- - Refactored the chrome synchronization mechanism
- - Implemented synchronization of the persistent popup
- - Fixed isFunction() problem with IE when dealing with external objects
-
- - Improved the memory consumption. Now each panel only uses resources (listen
- for events, etc) when is currently selected.
-
- - Implemented the "Duck Type Detection" system, to make possible identify
- native classes (Document, Element, etc) in IE, and therefore, generate
- the appropriate visual representation.
-
--------------------------------------------------------------------------------
-User Interface
--------------------------------------------------------------------------------
- - Moved all UI components to a separated gui.js file.
- - Implemented the Menu class (with normal, checkbox, radiobutton, group
- and separator items), that will be used in options menus at 1.3 verson
- and in contexts menus at 1.4 version.
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - StatusBar
- - SidePanel size and positioning
-
- - Long sequence of elements (like toolbar/statusbar buttons) don't "bleed"
- anymore (appears outside its container) when the chrome has small dimensions
-
- - Large panels now triggers automatically the appropriate scrollbars
- (some huge scripts with long lines wans't triggering the horizontal scrollbar)
-
--------------------------------------------------------------------------------
-Console
--------------------------------------------------------------------------------
- - Fixed problem in console.time() and console.timeEnd().
- - Implemented the console.trace (thanks dongryphon for the contribution!)
-
--------------------------------------------------------------------------------
-Inspector
--------------------------------------------------------------------------------
- - Implemented the border in the BoxModel Highlight
-
--------------------------------------------------------------------------------
-HTML
--------------------------------------------------------------------------------
- - Internet Explorer and inline styles representation (thanks christophe.blin
- for the contribution!)
-
- - Implemented a basic sidePanel synchronization to test the overall
- performance of the rendering when inspecting elements
-
--------------------------------------------------------------------------------
-DOM
--------------------------------------------------------------------------------
- - Ported the main part of the original DOM Panel in Firebug
- - Ported the DOM "views path" mechanism (click and "go into" DOM objects)
- - Improved the performance of the initial rendering
- - Implemented a basic DOM Panel subclass used in as HTML side panel
-
--------------------------------------------------------------------------------
-Script
--------------------------------------------------------------------------------
- - Implemented the basics of the Script panel, with some code ported from
- the Firebug Lite 1.2 version.
-
- - Better number of lines detection
-
--------------------------------------------------------------------------------
-CSS
--------------------------------------------------------------------------------
- - Implemented the basics of the CSS panel, with some code ported from
- the Firebug Lite 1.2 version.
-
- - Adjusted the rules and property names styles to lowercase
-
--------------------------------------------------------------------------------
-Domplate
--------------------------------------------------------------------------------
- - Removed the dependency on global variables (domplate, DomplateTag)
- - Adjusted the code so it can run in external contexts (persistent mode)
-
-
-
-###################################################################################################
- 1.3.0a3 - 2009-09-13 - Revision: 4882
-###################################################################################################
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - Better implementation of the chrome synchronization (detach and reattach methods)
- - Improvements the location detection
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - XML+XSL and XHTML support
- - Synchronization messages ("detach" and "reattach") are now dispatched to all panels
- - Fixed problem with Chrome synchronization in Opera
- - Fixed weird bug in layout in IE (horizontal splitter was disappearing sometimes)
-
--------------------------------------------------------------------------------
-Inspector
--------------------------------------------------------------------------------
- - Reimplemented the IE auto margin size calculator
- - Reimplemented the pointsToPixels function
- - Reimplemented the pixelsPerInch calculator
- - Outline Inspector is now "cropped" to avoid triggering the scrollbars
-
--------------------------------------------------------------------------------
-Bookmarlet
--------------------------------------------------------------------------------
- - More robust and maintainable bookmarlet
-
--------------------------------------------------------------------------------
-Domplate
--------------------------------------------------------------------------------
- - Ported the Domplate rendering engine
-
--------------------------------------------------------------------------------
-Reps
--------------------------------------------------------------------------------
- - Ported the visual representation rules of objects (Reps module)
-
--------------------------------------------------------------------------------
-Persist
--------------------------------------------------------------------------------
- - Reimplemented the application core to support in the future persisted
- Chromes, that is, UI windows that stays alive when the user reloads or
- changes the page (considering that the following page is in the same domain).
-
-
-
-###################################################################################################
- 1.3.0a2 - 2009-08-03 - Revision: 3847
-###################################################################################################
-
--------------------------------------------------------------------------------
-Core Changes
--------------------------------------------------------------------------------
- - Context Class implemented to allow inspect different windows (contexts)
-
- - better settings handling:
- - modes: BookmarletMode, PersistentMode, TraceMode, DevelopmentMode
- - skin: xp, classic, light
-
- - all components were revised to better handling memory consumption.
- create()/destroy() methods (called when something is created) and
- initialize()/shutdown() when something is activated, or made visible.
-
- - console.log calls are now captured even when the UI is not loaded
- - better location detection
- - library initialization reimplemented to support future persistent applications
-
--------------------------------------------------------------------------------
-User Interface Changes
--------------------------------------------------------------------------------
- - Created "xp" and "classic" skins. The old skin was based in a Firefox
- non-default theme.
-
- - HTML and CSS revised to render properly in different browsers, running
- on different compatibility modes (quirks mode, standards mode).
-
--------------------------------------------------------------------------------
-Chrome Changes
--------------------------------------------------------------------------------
- - better positioning calculation, when running on different compatibility
- modes (quirks mode, standards mode).
-
- - better window size, scrollSize and scollPosition calculations, when
- running on different compatibility modes (quirks mode, standards mode).
-
- - element:hover now works also in IE7 & IE8 when in quirks mode.
-
- - resize chrome performance (buffered frame-skip technique)
-
- - mini-chrome implemented
-
--------------------------------------------------------------------------------
-Core Additions
--------------------------------------------------------------------------------
- - FBTrace - internal logging system
-
- - DOM methods:
- - createElement()
- - createGlobalElement()
-
- - Event methods:
- - bind()
- - cancelEvent()
- - addGlobalEvent()
- - removeGlobalEvent()
- - dispatch()
- - disableTextSelection()
-
- - className methods:
- - addClass()
- - removeClass()
- - hasClass()
- - toggleClass()
-
--------------------------------------------------------------------------------
-Chrome Additions
--------------------------------------------------------------------------------
- - Controller Class
- - Module Class
- - Panel Class
- - PanelBar Class
- - Button Class (normal and toggle buttons)
-
- - FBTrace Panel
-
-
-
-
-###################################################################################################
- 1.3.0a1 - 2009-05-03 - Revision: 2729
-###################################################################################################
-
--------------------------------------------------------------------------------
-Inspector
--------------------------------------------------------------------------------
- - Inspect function implemented.
-
- - onInspecting highlight element in HTML Tree behaviour implemented.
- When inspecting, the elements are being highlighted, and the scroll
- is being changed to make the element visible in the tree.
-
--------------------------------------------------------------------------------
-Core
--------------------------------------------------------------------------------
- - Problem with scope in event handlers. All functions that need to access
- the "shared scope" must be assigned to a local variable.
-
- var onClick = function onClick(e)
- {
- ...
-
- - Revised "extend" and "append" functions
-
- - problem with the new Firebug for FF3, it seems that it doesn't allow
- extending the console namespace anymore.
-
- - CommandLineAPI --> $, $$, dir, dirxml...
-
- - Fixed bug in getLocation function, the relative path calculation wasn't
- working in all cases.
-
- - Fixed bug in commandLine. Commands that doesn't return a value (if, for,
- while) wasn't being properly executed.
-
--------------------------------------------------------------------------------
-Events
--------------------------------------------------------------------------------
- - Opera problem with the TAB key in commandLine
-
- - Better handling of the F12 key press, which wasn't being properly
- attached to the Chrome Frame window.
-
--------------------------------------------------------------------------------
-Chrome
--------------------------------------------------------------------------------
- - Problem with multiple iframes and the resizing of the Chrome, that
- tries to add events on them.
-
- - Fixed problem in IE when resizing the Chrome, when the relative position
- of the mouse wasnt being computed in all frames of the document,
- resulting in strange flickerings when resizing it.
-
- - Fixed problem in Opera when resizing the Chrome.
-
- - Problem when resizing with the fbVSplitter, when it reaches the side of
- the screen. Problem with negative pixel numbers.
-
- - fbVSplitter is bigger than the frame in firefox. Problem with mouse scroll.
-
- - isScrolledToBottom is not working in Firefox, it seems that this is
- happening because the scrollable panel is some pixels higher than
- it should be.
-
--------------------------------------------------------------------------------
-Inspector
--------------------------------------------------------------------------------
- - Selected element in HTML tree isn't being highlighted (boxmodel)
-
- - BoxModel functions entirely revised. Now the position, size, padding
- and margin are being computed correctly, in all units: pt, px, em, ex
- and % (need to test more deeply the percentage values).
-
--------------------------------------------------------------------------------
-commandLine
--------------------------------------------------------------------------------
- - better handling of scope of commandLine.eval(), if you type "this" it will
- refer to the CommandLine module, and it should refer to "window" instead
-
-
-
-
-###################################################################################################
- 1.3.0a0 - 2009-01-24 - Revision: 1765
-###################################################################################################
-
-1.3.0 prototype
\ No newline at end of file
diff --git a/branches/firebug1.4/docs/latest/index.html b/branches/firebug1.4/docs/latest/index.html
deleted file mode 100644
index c7216f4a..00000000
--- a/branches/firebug1.4/docs/latest/index.html
+++ /dev/null
@@ -1,919 +0,0 @@
-
-
-
-
-
-Firebug Lite : Firebug
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This version was conceived to put the Firebug Lite in a new level,
- by allowing code reuse from Firebug's original source. A new core
- was created to accomplish the following goals:
-
-
- Performance - the core of Firebug Lite 1.3 was rewritten from scratch
- taking the performance into account in the first place.
-
-
- Modularity - the code is now more modular, making it easier to add
- new features and UI components such as panels, buttons, menus etc.
- The modularity also helps the development process. Once the modules can
- be isolated it is easier to detect the cause of complicated problems like
- memory leaks.
-
-
- Shared code - the core was designed to make it possible
- to port some code directly from the Firebug source with as few as possible
- modifications. As a result some features and UI elements behave exactly
- as in Firebug.
-
-
- Compatibility - the new core is compatible with XHTML and XML+XSLT
- documents. Thanks to the new context-independent approach it supports
- now the experimental persistent popups feature (popups that "live" across
- different page loads of the same domain).
-
Port of Firebug's Visual Object Representation (aka Reps)
-
Recreation of Firebug 1.3 User Interface with pixel precision
-
Menu options
-
Resizable Side Panel
-
Skinnable Interface
-
-
- CSS
-
-
-
CSS cascading view
-
CSS inheritance view
-
Live editing CSS rules and properties
-
Autocomplete as you type feature, with smart suggestions (you'll get only the suggestions you need for each property)
-
Increment/decrement with UP/DOWN and PAGE UP/PAGE DOWN keys
-
-
- Inspector
-
-
-
Full BoxModel Highlight including margin, border, padding and content boxes
-
The BoxModel is highlighted when you move your mouse over a representation
- of a HTML element, in any of the place of the User Interface
-
Elements are selected on-the-fly while using the Inspect tool
-
-
- Console
-
-
-
console.group(), console.groupCollapsed() and console.groupEnd()
-
console.trace() (now with file name and line numbers for some browsers)
-
Command line API functions $(), $$(), and dir()
-
Command line shortcuts $0 and $1 for recent selected elements
-
Autocomplete (tab, shift+tab)
-
can capture console messages before DOM document creation
- (when installed at the HTML header)
-
-
- Core
-
-
-
XHR watcher (with Headers, Response, Post and Params tabs)
-
Port of Firebug Library (aka Lib, FBL)
-
Port of Firebug DOM Templates Engine (aka Domplate), the magic behind Reps
-
Plugin system like Firebug
-
Context-independent (will allow cross-iframe debugging, and persistent popups)
-
Persistent popups
-
Synchronization across different windows (iframe, popup)
-
-
- And more...
-
-
-
- For a complete list of changes, check the
- changelog.
-
-
-
-
1.3. What's Not in Lite?
-
- Some features are not included in Firebug Lite 1.3, but due the new core that
- supports code sharing from Firebug, are likely to be included in the
- Firebug Lite 1.4 version:
-
-
-
Live editing for all panels
-
Layout Side Panel
-
Context menu options
-
Tooltips (to show colors and images)
-
Search feature
-
-
- Other features though are too dependent in browser internals and will not be
- supported (at least in a near future*), such as:
-
-
-
Javascript debugger / Javascript profiler
-
Net panel / HTTP and XHR monitor
-
Access to restricted URI resources
-
Highlight HTML changes
-
-
- *Discussions about remote debugging
- indicates that should be possible to support JavaScript debugging in browsers
- like Google Chrome and Opera in the future.
-
-
- You can also link directly to the hosted version at getfirebug.com. Copy the
- following code, and paste it in the TOP of the HEAD of your document:
-
-
-
Stable channel
-
- Firebug Lite:
-
-
-
- Firebug Lite debug:
-
-
-
-
Beta channel
-
- Firebug Lite beta:
-
-
-
-
Local link (offline)
-
- If you need using Firebug Lite while offline,
- download the code,
- copy it to a local destination, and link the firebug-lite.js in the TOP
- of the HEAD of your document:
-
-
-
-
-
- If you want to debug the local installation, use the
- firebug-lite-debug.js file instead:
-
- The properties you can change include (with respective default values):
-
-
-
saveCookies - false
-
startOpened - false
-
startInNewWindow - false
-
showIconWhenHidden - true
-
overrideConsole - true
-
ignoreFirebugElements - true
-
disableWhenFirebugActive - true
-
enableTrace - false
-
enablePersistent - false
-
-
- Here is the list of methods you can use to change the options,
- in ascendant order of priority, that is, a particular method
- will override the options of preceding methods:
-
-
<html debug="true">
-
- For backwards compatibility you can still use the debug="true" attribute
- in the <html> tag to make Firebug Lite starts opened, like:
-
-
<html debug="true">
-
-
Script URL options
-
- You can also set the options using URL fragments, specially handy to tweak
- options in your bookmarklet.
-
- If you are familiar with Firebug extension development, you will
- see that developing an extension for Firebug Lite is very similar.
- In a Firebug extension all code is encapsulated in a strange at
- first glance but very clever way:
-
- In a Firebug Lite extension the code is encapsulated in a
- similar way but using Firebug.extend instead, once
- the FBL module (Firebug internal's library) is not
- exposed to the global namespace:
-
- If you are not familiar with Firebug extension development,
- I suggest looking at Honza's series of tutorials, including
- Firebug Tutorial
- and Domplate Tutorial.
-
-
- Here's a sample of how to create a new panel in Firebug Lite:
-
-
- The debug mode helps detecting errors in Firebug Lite. When in
- debug mode, Firebug Lite will behave as explained below:
-
-
-
-
Firebug Lite starts opened.
-
The internal library used by Firebug Lite (aka FBL)
- is exposed to the global namespace allowing the inspection of its content.
-
Firebug Lite will be forced to open even when Firebug is active
- (which is not the default behavior), so you can use Firebug to debug it.
-
The "Trace Panel" is enabled (in which internal log messages of
- Firebug Lite are printed).
-
-
-
- The debug mode will be activated when you run the
- Firebug Lite debug bookmarklet, and
- when you the load the "firebug-lite-debug.js" or
- "firebug-lite-dev.js" files. You can also activate
- it manually by setting a special option "debug"
- to "true", using the
- Script URL or
- Script JSON methods.
-
- If you want to debug Firebug Lite, fix a bug or add a new feature, you will want
- to run Firebug Lite in development mode. To do so, first
- checkout the latest version
- in our repository, and then insert a script at the TOP of the HEAD of your document.
-
-
-
- When in development mode, some things behave quite differently to make the
- development process easier, such as:
-
-
-
All script files are loaded separately, without compression.
-
The internal library used by Firebug Lite (aka FBL) is exposed to the
- global namespace allowing you to inspect its content. It is also exposed
- the domplate and its classes, and the FBTrace object
-
The skin is loaded in a separated file allowing you to rapidly change
- the style and/or markup of the User Interface.
-
Firebug Lite will be forced to open even when Firebug is active
- (which is not the default behavior), so you can use Firebug to debug it.
-
The "Trace Panel" is enabled (in which internal log messages of
- Firebug Lite are printed).
-
A new "Dev Panel" will be available with tools to compress the skin
- and the source code of the application in a single file.
-
-
-
\ No newline at end of file
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img01.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img01.png
deleted file mode 100644
index 5e0c9dde..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img01.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img02.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img02.png
deleted file mode 100644
index d47d47f3..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img02.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img03.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img03.png
deleted file mode 100644
index aeadf4e8..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img03.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img04.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img04.png
deleted file mode 100644
index 641027d6..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img04.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img05.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img05.png
deleted file mode 100644
index 1828933b..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img05.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img06.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img06.png
deleted file mode 100644
index 07534179..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img06.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img07.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img07.png
deleted file mode 100644
index 5a705cd4..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img07.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img08.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img08.png
deleted file mode 100644
index 3b368ec3..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img08.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img09.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img09.png
deleted file mode 100644
index 65f37559..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img09.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img10.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img10.png
deleted file mode 100644
index e420131d..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img10.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img11.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img11.png
deleted file mode 100644
index 8454dd7c..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img11.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img12.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img12.png
deleted file mode 100644
index 1e818684..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img12.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img13.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img13.png
deleted file mode 100644
index 850d7846..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-img13.png and /dev/null differ
diff --git a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-small.png b/branches/firebug1.4/docs/latest/screenshots/firebug1.3-small.png
deleted file mode 100644
index d66f197b..00000000
Binary files a/branches/firebug1.4/docs/latest/screenshots/firebug1.3-small.png and /dev/null differ
diff --git a/branches/firebug1.4/license.txt b/branches/firebug1.4/license.txt
deleted file mode 100644
index ba43b751..00000000
--- a/branches/firebug1.4/license.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-Software License Agreement (BSD License)
-
-Copyright (c) 2007, Parakey Inc.
-All rights reserved.
-
-Redistribution and use of this software in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above
- copyright notice, this list of conditions and the
- following disclaimer.
-
-* Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the
- following disclaimer in the documentation and/or other
- materials provided with the distribution.
-
-* Neither the name of Parakey Inc. nor the names of its
- contributors may be used to endorse or promote products
- derived from this software without specific prior
- written permission of Parakey Inc.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/branches/firebug1.4/plugin/proxy/proxy.php b/branches/firebug1.4/plugin/proxy/proxy.php
deleted file mode 100644
index 3bf3f92a..00000000
--- a/branches/firebug1.4/plugin/proxy/proxy.php
+++ /dev/null
@@ -1,258 +0,0 @@
- and
-// are disabled by default, see for more information.
-// callback - If specified, the response JSON will be wrapped in this named
-// function call. This parameter and are disabled by
-// default, see for more information.
-// user_agent - This value will be sent to the remote URL request as the
-// `User-Agent:` HTTP request header. If omitted, the browser user agent
-// will be passed through.
-// send_cookies - If send_cookies=1, all cookies will be forwarded through to
-// the remote URL request.
-// send_session - If send_session=1 and send_cookies=1, the SID cookie will be
-// forwarded through to the remote URL request.
-// full_headers - If a JSON request and full_headers=1, the JSON response will
-// contain detailed header information.
-// full_status - If a JSON request and full_status=1, the JSON response will
-// contain detailed cURL status information, otherwise it will just contain
-// the `http_code` property.
-//
-// Topic: POST Parameters
-//
-// All POST parameters are automatically passed through to the remote URL
-// request.
-//
-// Topic: JSON requests
-//
-// This request will return the contents of the specified url in JSON format.
-//
-// Request:
-//
-// > ba-simple-proxy.php?url=http://example.com/
-//
-// Response:
-//
-// > { "contents": "...", "headers": {...}, "status": {...} }
-//
-// JSON object properties:
-//
-// contents - (String) The contents of the remote URL resource.
-// headers - (Object) A hash of HTTP headers returned by the remote URL
-// resource.
-// status - (Object) A hash of status codes returned by cURL.
-//
-// Topic: JSONP requests
-//
-// This request will return the contents of the specified url in JSONP format
-// (but only if $enable_jsonp is enabled in the PHP script).
-//
-// Request:
-//
-// > ba-simple-proxy.php?url=http://example.com/&callback=foo
-//
-// Response:
-//
-// > foo({ "contents": "...", "headers": {...}, "status": {...} })
-//
-// JSON object properties:
-//
-// contents - (String) The contents of the remote URL resource.
-// headers - (Object) A hash of HTTP headers returned by the remote URL
-// resource.
-// status - (Object) A hash of status codes returned by cURL.
-//
-// Topic: Native requests
-//
-// This request will return the contents of the specified url in the format it
-// was received in, including the same content-type and other headers (but only
-// if $enable_native is enabled in the PHP script).
-//
-// Request:
-//
-// > ba-simple-proxy.php?url=http://example.com/&mode=native
-//
-// Response:
-//
-// > ...
-//
-// Topic: Notes
-//
-// * Assumes magic_quotes_gpc = Off in php.ini
-//
-// Topic: Configuration Options
-//
-// These variables can be manually edited in the PHP file if necessary.
-//
-// $enable_jsonp - Only enable if you really need to. If you
-// install this script on the same server as the page you're calling it
-// from, plain JSON will work. Defaults to false.
-// $enable_native - You can enable , but you should only do
-// this if you also whitelist specific URLs using $valid_url_regex, to avoid
-// possible XSS vulnerabilities. Defaults to false.
-// $valid_url_regex - This regex is matched against the url parameter to
-// ensure that it is valid. This setting only needs to be used if either
-// $enable_jsonp or $enable_native are enabled. Defaults to '/.*/' which
-// validates all URLs.
-//
-// ############################################################################
-
-// Change these configuration options if needed, see above descriptions for info.
-$enable_jsonp = false;
-$enable_native = false;
-$valid_url_regex = '/.*/';
-
-// ############################################################################
-
-$url = $_GET['url'];
-
-if ( !$url ) {
-
- // Passed url not specified.
- $contents = 'ERROR: url not specified';
- $status = array( 'http_code' => 'ERROR' );
-
-} else if ( !preg_match( $valid_url_regex, $url ) ) {
-
- // Passed url doesn't match $valid_url_regex.
- $contents = 'ERROR: invalid url';
- $status = array( 'http_code' => 'ERROR' );
-
-} else {
- $ch = curl_init( $url );
-
- if ( strtolower($_SERVER['REQUEST_METHOD']) == 'post' ) {
- curl_setopt( $ch, CURLOPT_POST, true );
- curl_setopt( $ch, CURLOPT_POSTFIELDS, $_POST );
- }
-
- if ( $_GET['send_cookies'] ) {
- $cookie = array();
- foreach ( $_COOKIE as $key => $value ) {
- $cookie[] = $key . '=' . $value;
- }
- if ( $_GET['send_session'] ) {
- $cookie[] = SID;
- }
- $cookie = implode( '; ', $cookie );
-
- curl_setopt( $ch, CURLOPT_COOKIE, $cookie );
- }
-
- curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
- curl_setopt( $ch, CURLOPT_HEADER, true );
- curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
-
- curl_setopt( $ch, CURLOPT_USERAGENT, $_GET['user_agent'] ? $_GET['user_agent'] : $_SERVER['HTTP_USER_AGENT'] );
-
- list( $header, $contents ) = preg_split( '/([\r\n][\r\n])\\1/', curl_exec( $ch ), 2 );
-
- $status = curl_getinfo( $ch );
-
- curl_close( $ch );
-}
-
-// Split header text into an array.
-$header_text = preg_split( '/[\r\n]+/', $header );
-
-if ( $_GET['mode'] == 'native' ) {
- if ( !$enable_native ) {
- $contents = 'ERROR: invalid mode';
- $status = array( 'http_code' => 'ERROR' );
- }
-
- // Propagate headers to response.
- foreach ( $header_text as $header ) {
- if ( preg_match( '/^(?:Content-Type|Content-Language|Set-Cookie):/i', $header ) ) {
- header( $header );
- }
- }
-
- print $contents;
-
-} else {
-
- // $data will be serialized into JSON data.
- $data = array();
-
- // Propagate all HTTP headers into the JSON data object.
- if ( $_GET['full_headers'] ) {
- $data['headers'] = array();
-
- foreach ( $header_text as $header ) {
- preg_match( '/^(.+?):\s+(.*)$/', $header, $matches );
- if ( $matches ) {
- $data['headers'][ $matches[1] ] = $matches[2];
- }
- }
- }
-
- // Propagate all cURL request / response info to the JSON data object.
- if ( $_GET['full_status'] ) {
- $data['status'] = $status;
- } else {
- $data['status'] = array();
- $data['status']['http_code'] = $status['http_code'];
- }
-
- // Set the JSON data object contents, decoding it from JSON if possible.
- $decoded_json = json_decode( $contents );
- $data['contents'] = $decoded_json ? $decoded_json : $contents;
-
- // Generate appropriate content-type header.
- $is_xhr = strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
- header( 'Content-type: application/' . ( $is_xhr ? 'json' : 'x-javascript' ) );
- header('Access-Control-Allow-Origin: *');
-
- // Get JSONP callback.
- $jsonp_callback = $enable_jsonp && isset($_GET['callback']) ? $_GET['callback'] : null;
-
- // Generate JSON/JSONP string
- $json = json_encode( $data );
-
- print $jsonp_callback ? "$jsonp_callback($json)" : $json;
-
-}
-
-?>
diff --git a/branches/firebug1.4/sandbox/HelloModule/app/skin/classic/images/twistyClosed.png b/branches/firebug1.4/sandbox/HelloModule/app/skin/classic/images/twistyClosed.png
deleted file mode 100644
index f80319b0..00000000
Binary files a/branches/firebug1.4/sandbox/HelloModule/app/skin/classic/images/twistyClosed.png and /dev/null differ
diff --git a/branches/firebug1.4/sandbox/HelloModule/app/skin/classic/images/twistyOpen.png b/branches/firebug1.4/sandbox/HelloModule/app/skin/classic/images/twistyOpen.png
deleted file mode 100644
index 86801243..00000000
Binary files a/branches/firebug1.4/sandbox/HelloModule/app/skin/classic/images/twistyOpen.png and /dev/null differ
diff --git a/branches/firebug1.4/sandbox/css/css.css b/branches/firebug1.4/sandbox/css/css.css
deleted file mode 100644
index 448a20d1..00000000
--- a/branches/firebug1.4/sandbox/css/css.css
+++ /dev/null
@@ -1,4 +0,0 @@
-div #build {
- position: absolute;
- height: 200px;
-}
\ No newline at end of file
diff --git a/branches/firebug1.4/sandbox/css/css.imported.css b/branches/firebug1.4/sandbox/css/css.imported.css
deleted file mode 100644
index d4eb7797..00000000
--- a/branches/firebug1.4/sandbox/css/css.imported.css
+++ /dev/null
@@ -1,3 +0,0 @@
-div#build {
- color: red;
-}
\ No newline at end of file
diff --git a/branches/firebug1.4/sandbox/css/test.html b/branches/firebug1.4/sandbox/css/test.html
deleted file mode 100644
index dbc3bfe6..00000000
--- a/branches/firebug1.4/sandbox/css/test.html
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
-FirebugLite 1.3 Testing
-
-
-
-
-
-
-
- Use the "build" function to generate the full uncompressed js file,
- and the "compress" functions to compress the HTML and CSS of the
- User Interface files, to be used in the injected.js
- file, when in bookmarlet mode.
-
Lorem ipsum dolor sit amet consectetuer Lorem pretium molestie congue Curabitur. Et at augue at morbi at adipiscing condimentum wisi lorem In. Morbi porttitor nulla Praesent egestas lobortis nec Morbi nibh Curabitur tempor. Adipiscing Praesent Donec Vivamus condimentum sapien eget odio ac et urna. Ipsum egestas Nam laoreet amet magnis wisi Maecenas tincidunt faucibus sit. Lacinia dictumst lorem ac Aenean Nunc montes condimentum.
-
Amet pretium Nulla tempus ut tortor nibh dis Donec laoreet laoreet. Interdum velit consectetuer vitae nunc ut quis Nam ut neque cursus. Vitae vel orci id porta netus quis Pellentesque faucibus id congue. Elit semper libero auctor adipiscing lacus laoreet sit Maecenas vitae Nulla. Pede ipsum eu vitae dolor nisl nibh pellentesque Pellentesque at.
-
Quisque at aliquet dapibus laoreet at nunc magna ut Aenean id. Urna dictum Pellentesque semper in metus quis Curabitur est risus eget. Mauris semper leo id a augue lorem urna fames tellus magnis. In consequat magna gravida Nulla quam at Curabitur montes wisi malesuada. Leo Nam mollis laoreet odio felis euismod wisi ut iaculis eros. Quisque.
-
Mauris pellentesque ante quis pretium tempor consequat quis cursus tortor turpis. Quisque vel libero montes leo laoreet lobortis ante ligula auctor ornare. Vestibulum Phasellus et pellentesque porttitor orci vitae pharetra porta dolor a. Vivamus aliquam augue ut cursus id pretium ullamcorper neque pede sed. Quis eros Phasellus tellus elit dui ac Curabitur id ut leo. Urna nibh.
-
Nulla Pellentesque Aliquam ut vitae lacus vel et et vel ante. Ante dui a gravida urna urna semper consectetuer Lorem urna Ut. Pellentesque tempor parturient malesuada tempus fermentum congue sem massa metus Suspendisse. Enim semper senectus eget elit Morbi massa nunc dolor est tincidunt. A orci mi Aenean elit a eros.
-
In id Nam velit ut risus in tellus sapien nunc eros. Vitae pellentesque Pellentesque convallis tempus wisi nibh vitae porttitor pellentesque tristique. Et ridiculus turpis risus amet urna Aenean elit velit Nullam vitae. Lacus condimentum Aliquam elit justo lacinia commodo dolor facilisis Vestibulum porta. Urna enim tortor id dui Sed ultrices Lorem risus.
-
Pede cursus Ut Aenean tempor purus rhoncus Curabitur Sed et sapien. Et Duis Vivamus urna vel nunc rutrum Praesent Suspendisse eu nunc. Ligula wisi turpis nec quam Nullam tortor pede nisl hac et. Nulla et Morbi Pellentesque vel nec Integer porttitor lobortis nibh nascetur. At ac augue platea convallis eget vel Nullam pede dolor neque. Accumsan Sed Aenean porttitor tortor dolor Maecenas hendrerit sed Fusce.
-
Senectus tincidunt nec Morbi vitae mattis nonummy faucibus ipsum libero mauris. Risus lacus Nam orci velit interdum nec natoque Curabitur quis Duis. Tincidunt ornare Curabitur et Nam Sed interdum ut libero augue nulla. Enim porttitor in vitae Vestibulum scelerisque pretium In sapien velit lacus. Nam tellus elit ut dis tellus Morbi id nulla Proin quis. Pretium tortor Curabitur.
-
Eu id egestas nibh dis a consectetuer id sapien Nulla interdum. Semper ut sed justo adipiscing Suspendisse volutpat lacinia elit fringilla Praesent. Lacinia Phasellus sem felis Vestibulum eros pellentesque nibh fringilla venenatis metus. Et arcu quis Vestibulum condimentum fringilla a enim quis Nulla Sed. Feugiat Curabitur nibh ridiculus Curabitur ut porttitor nascetur pellentesque nisl magna. Phasellus mauris ut gravida Vestibulum turpis ac pretium.
-
A pretium dui euismod volutpat hendrerit consequat dis dolor Donec cursus. Et quis consequat tincidunt lacinia id elit commodo id condimentum habitant. Et nibh Mauris hac adipiscing sit a condimentum ac egestas orci. In adipiscing justo senectus nulla id Praesent Vivamus ligula orci nulla. Augue a Nam congue eget dui felis magna Duis neque vel.
-
-
-
-
-
\ No newline at end of file
diff --git a/branches/firebug1.4/sandbox/domplate.html b/branches/firebug1.4/sandbox/domplate.html
deleted file mode 100644
index 0b651050..00000000
--- a/branches/firebug1.4/sandbox/domplate.html
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-