home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 123 / cdrom123.iso / essenc / extens / wweb / Web Developer.xpi / chrome / webdeveloper.jar / content / webdeveloper / css.js < prev    next >
Encoding:
JavaScript  |  2004-11-21  |  24.3 KB  |  602 lines

  1. // Adds a user style sheet to the page
  2. function webdeveloper_addUserStyleSheet(element, applyStyle)
  3. {
  4.     const addStyleSheet = element.getAttribute("checked");
  5.  
  6.     // If adding a style sheet and applying styles
  7.     if(addStyleSheet && applyStyle)
  8.     {
  9.         const filePicker   = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
  10.         const stringBundle = document.getElementById("webdeveloper-string-bundle");
  11.  
  12.         filePicker.appendFilter(stringBundle.getString("webdeveloper_styleSheetDescription"), "*.css");
  13.         filePicker.init(window, stringBundle.getString("webdeveloper_addUserStyleSheetTitle"), filePicker.modeOpen);
  14.  
  15.         // If the user selected a style sheet
  16.         if(filePicker.show() == filePicker.returnOK)
  17.         {
  18.             const inputStream      = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
  19.             const scriptableStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
  20.  
  21.             inputStream.init(filePicker.file, 0x01, 0444, null);
  22.             scriptableStream.init(inputStream);
  23.  
  24.             webdeveloper_userStyleSheet = scriptableStream.read(scriptableStream.available());
  25.  
  26.             scriptableStream.close();
  27.             inputStream.close();
  28.         }
  29.         else
  30.         {
  31.             addStyleSheet               = false;
  32.             webdeveloper_userStyleSheet = null;
  33.         }
  34.     }
  35.  
  36.     // If adding a style sheet and the style sheet is not empty
  37.     if(addStyleSheet && webdeveloper_userStyleSheet)
  38.     {
  39.         const content      = window.document.getElementById("content");
  40.         const mainTabBox   = content.mTabBox;
  41.         const documentList = webdeveloper_getDocuments(content.browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  42.  
  43.         var headElementList = null;
  44.         var pageDocument    = null;
  45.         var styleElement    = null;
  46.  
  47.         // Loop through the documents
  48.         for(var i = 0; i < documentList.length; i++)
  49.         {
  50.             pageDocument    = documentList[i];
  51.             headElementList = pageDocument.getElementsByTagName("head");
  52.             styleElement    = pageDocument.createElement("style");
  53.  
  54.             styleElement.setAttribute("id", "webdeveloper-add-user-style-sheet");
  55.             styleElement.setAttribute("type", "text/css");
  56.             styleElement.appendChild(pageDocument.createTextNode(webdeveloper_userStyleSheet));
  57.  
  58.             // If there is a head element
  59.             if(headElementList.length > 0)
  60.             {
  61.                 headElementList[0].appendChild(styleElement);
  62.             }
  63.             else
  64.             {
  65.                 pageDocument.documentElement.appendChild(styleElement);
  66.             }
  67.         }
  68.  
  69.         // If applying styles
  70.         if(applyStyle)
  71.         {
  72.             webdeveloper_addAppliedStyle("webdeveloper-add-user-style-sheet");
  73.         }
  74.     }
  75.     else
  76.     {
  77.         webdeveloper_userStyleSheet = null;
  78.         webdeveloper_removeStyleSheet("webdeveloper-add-user-style-sheet", true);
  79.     }
  80.  
  81.     webdeveloper_configureEquivalentElements(element, "checked", addStyleSheet);
  82. }
  83.  
  84. // Display CSS for the given media type
  85. function webdeveloper_displayCSSMediaType(type)
  86. {
  87.     const content      = window.document.getElementById("content");
  88.     const mainTabBox   = content.mTabBox;
  89.     const documentList = webdeveloper_getDocuments(content.browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  90.  
  91.     var media          = null;
  92.     var mediaText      = null;
  93.     var ownerNode      = null;
  94.     var pageDocument   = null;
  95.     var styleSheet     = null;
  96.     var styleSheetList = null;
  97.  
  98.     // Loop through the documents
  99.     for(var i = 0; i < documentList.length; i++)
  100.     {
  101.         pageDocument   = documentList[i];
  102.         styleSheetList = pageDocument.styleSheets;
  103.  
  104.         // Loop through the style sheets
  105.         for(var j = 0; j < styleSheetList.length; j++)
  106.         {
  107.             styleSheet = styleSheetList[j];
  108.  
  109.             // If the style sheet is set
  110.             if(styleSheet)
  111.             {
  112.                 media     = styleSheet.media;
  113.                 ownerNode = styleSheet.ownerNode;
  114.  
  115.                 // If the style sheet has an owner node
  116.                 if(ownerNode)
  117.                 {
  118.                     // If the owner node is a processing instruction or is an alternate style sheet
  119.                     if(ownerNode.nodeType == 7 || (ownerNode.hasAttribute("rel") && ownerNode.getAttribute("rel") == "alternate stylesheet"))
  120.                     {
  121.                         styleSheet.disabled = true;
  122.                     }
  123.                     else
  124.                     {
  125.                         // If the owner node has a webdeveloper-added-medium attribute
  126.                         if(ownerNode.hasAttribute("webdeveloper-added-medium"))
  127.                         {
  128.                             media.deleteMedium("screen");
  129.                             ownerNode.removeAttribute("webdeveloper-added-medium");
  130.                         }
  131.  
  132.                         mediaText = media.mediaText;
  133.  
  134.                         // If there is no media text and the type is not screen or there is media text and it does not contain all or the type
  135.                         if((!mediaText && type != "screen") || (mediaText && mediaText.indexOf("all") == -1 && mediaText.indexOf(type) == -1))
  136.                         {
  137.                             styleSheet.disabled = true;
  138.                         }
  139.                         else
  140.                         {
  141.                             styleSheet.disabled = false;
  142.  
  143.                             // If the media text does not contain screen
  144.                             if(mediaText.indexOf("screen") == -1)
  145.                             {
  146.                                 ownerNode.setAttribute("webdeveloper-added-medium", "true");
  147.                                 media.appendMedium("screen");
  148.                             }
  149.                         }
  150.                     }
  151.                 }
  152.                 else
  153.                 {
  154.                     styleSheet.disabled = true;
  155.                 }
  156.             }
  157.         }
  158.     }
  159. }
  160.  
  161. // Display the disable individual style sheet menu
  162. function webdeveloper_displayDisableIndividualStyleSheetMenu(menu, tooltips)
  163. {
  164.     const content         = window.document.getElementById("content");
  165.     const mainTabBox      = content.mTabBox;
  166.     const currentDocument = content.browsers[mainTabBox.selectedIndex].contentDocument;
  167.     const stringBundle    = document.getElementById("webdeveloper-string-bundle");
  168.  
  169.     var mediaList       = null;
  170.     var menuItem        = null;
  171.     var ownerNode       = null;
  172.     var styleSheet      = null;
  173.     var styleSheetHref  = null;
  174.     var styleSheetLabel = null;
  175.     var styleSheetList  = currentDocument.styleSheets;
  176.  
  177.     webdeveloper_removeGeneratedMenuItems(menu);
  178.  
  179.     // Loop through the style sheets
  180.     for(var i = 0; i < styleSheetList.length; i++)
  181.     {
  182.         styleSheet     = styleSheetList[i];
  183.         mediaList      = styleSheet.media.mediaText;
  184.         ownerNode      = styleSheet.ownerNode;
  185.         styleSheetHref = styleSheet.href;
  186.  
  187.         // If this is not an inline style sheet is for the screen and is not an alternate style sheet
  188.         if(styleSheetHref != currentDocument.documentURI && (!mediaList || mediaList.indexOf("screen") != -1 || mediaList.indexOf("all") != -1) && (!ownerNode || ownerNode.nodeType == 7 || !ownerNode.hasAttribute("rel") || ownerNode.getAttribute("rel") != "alternate stylesheet"))
  189.         {
  190.             menuItem = document.createElement("menuitem");
  191.  
  192.             // If the style sheet is imported from a processing instruction or does not have a title
  193.             if(ownerNode.nodeType == 7 || !ownerNode.hasAttribute("title"))
  194.             {
  195.                 styleSheetLabel = styleSheetHref;
  196.             }
  197.             else
  198.             {
  199.                 styleSheetLabel = ownerNode.getAttribute("title");
  200.             }
  201.  
  202.             menuItem.setAttribute("class", "webdeveloper-generated-menu");
  203.             menuItem.setAttribute("label", styleSheetLabel);
  204.             menuItem.setAttribute("oncommand", "webdeveloper_toggleIndividualStyleSheet('" + styleSheetHref + "')");
  205.             menuItem.setAttribute("type", "checkbox");
  206.  
  207.             // If displaying tooltips
  208.             if(tooltips)
  209.             {
  210.                 menuItem.setAttribute("tooltiptext", styleSheetLabel);
  211.             }
  212.  
  213.             // If the style sheet is disabled
  214.             if(!styleSheet.disabled)
  215.             {
  216.                 menuItem.setAttribute("checked", true);
  217.             }
  218.  
  219.             menu.appendChild(menuItem);
  220.         }
  221.     }
  222.  
  223.     // If the menu has no children
  224.     if(!menu.hasChildNodes())
  225.     {
  226.         menuItem = document.createElement("menuitem");
  227.         styleSheetLabel = stringBundle.getString("webdeveloper_noStyleSheets");
  228.  
  229.         menuItem.setAttribute("class", "webdeveloper-generated-menu");
  230.         menuItem.setAttribute("disabled", true);
  231.         menuItem.setAttribute("label", styleSheetLabel);
  232.  
  233.         // If displaying tooltips
  234.         if(tooltips)
  235.         {
  236.             menuItem.setAttribute("tooltiptext", styleSheetLabel);
  237.         }
  238.  
  239.         menu.appendChild(menuItem);
  240.     }
  241. }
  242.  
  243. // Displays a style sheet
  244. function webdeveloper_displayStyleSheet(styleSheet, generatedPage)
  245. {
  246.     const request        = new XMLHttpRequest();
  247.     const styleSheetHref = styleSheet.href;
  248.  
  249.     var cssRule       = null;
  250.     var headerElement = null;
  251.     var linkElement   = null;
  252.     var preElement    = null;
  253.  
  254.     request.open("GET", styleSheetHref, false);
  255.     request.send("");
  256.  
  257.     headerElement = generatedPage.content.document.createElement("h2");
  258.     linkElement   = generatedPage.content.document.createElement("a");
  259.     linkElement.setAttribute("href", styleSheetHref);
  260.     linkElement.appendChild(generatedPage.content.document.createTextNode(styleSheetHref));
  261.     headerElement.appendChild(linkElement);
  262.     generatedPage.content.document.body.appendChild(headerElement);
  263.  
  264.     preElement = generatedPage.content.document.createElement("pre");
  265.     preElement.appendChild(generatedPage.content.document.createTextNode(request.responseText));
  266.     generatedPage.content.document.body.appendChild(preElement);
  267.  
  268.     // Loop through the the style sheet rules
  269.     for(i = 0; i < styleSheet.cssRules.length; i++)
  270.     {
  271.         cssRule = styleSheet.cssRules[i];
  272.  
  273.         // If this is an import rule
  274.         if(cssRule.type == 3)
  275.         {
  276.             webdeveloper_displayStyleSheet(cssRule.styleSheet, generatedPage);
  277.         }
  278.     }
  279. }
  280.  
  281. // Allows the user to edit the CSS of the current page
  282. function webdeveloper_editCSS(force)
  283. {
  284.     toggleSidebar("webdeveloper-edit-css-sidebar", force);
  285. }
  286.  
  287. // Toggles the default browser styles
  288. function webdeveloper_toggleDefaultStyles(element, applyStyle)
  289. {
  290.     webdeveloper_toggleStyleSheet(element, "chrome://webdeveloper/content/stylesheets/disable_default_styles.css", "webdeveloper-disable-default-styles", applyStyle);
  291. }
  292.  
  293. // Uses the border box model
  294. function webdeveloper_useBorderBoxModel(element, applyStyle)
  295. {
  296.     webdeveloper_toggleStyleSheet(element, "chrome://webdeveloper/content/stylesheets/border_box_model.css", "webdeveloper-use-border-box-model", applyStyle);
  297. }
  298.  
  299. // View CSS
  300. function webdeveloper_viewCSS()
  301. {
  302.     const content            = window.document.getElementById("content");
  303.     const mainTabBox         = content.mTabBox;
  304.     const documentList       = webdeveloper_getDocuments(content.browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  305.     const oldTab             = getBrowser().selectedTab;
  306.     const oldURL             = window.content.document.documentURI;
  307.     const preferencesService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
  308.     const request            = new XMLHttpRequest();
  309.     const stringBundle       = document.getElementById("webdeveloper-string-bundle");
  310.     const title              = stringBundle.getFormattedString("webdeveloper_viewCSSTitle", [oldURL]);
  311.  
  312.     var cssRule          = null;
  313.     var documentURL      = null;
  314.     var generatedPage    = null;
  315.     var headerElement    = null;
  316.     var inlineStylesText = "";
  317.     var linkElement      = null;
  318.     var pageDocument     = null;
  319.     var preElement       = null;
  320.     var styleSheet       = null;
  321.     var styleSheetList   = new Array();
  322.  
  323.     generatedPage = webdeveloper_generatePage("");
  324.  
  325.     // This must be done to make generated content render
  326.     request.open("GET", "about:blank", false);
  327.     request.send("");
  328.  
  329.     generatedPage.content.document.title = title;
  330.  
  331.     linkElement = generatedPage.content.document.createElement("link");
  332.     linkElement.setAttribute("href", "chrome://webdeveloper/content/stylesheets/generated_content.css");
  333.     linkElement.setAttribute("media", "all");
  334.     linkElement.setAttribute("rel", "stylesheet");
  335.     linkElement.setAttribute("type", "text/css");
  336.     generatedPage.content.document.getElementsByTagName("head")[0].appendChild(linkElement);
  337.  
  338.     headerElement = generatedPage.content.document.createElement("h1");
  339.     headerElement.appendChild(generatedPage.content.document.createTextNode(title));
  340.     generatedPage.content.document.body.appendChild(headerElement);
  341.  
  342.     // Loop through the documents
  343.     for(var i = 0; i < documentList.length; i++)
  344.     {
  345.         inlineStylesText = "";
  346.         pageDocument     = documentList[i];
  347.         documentURL      = pageDocument.documentURI;
  348.         styleSheetList   = pageDocument.getElementsByTagName("style");
  349.  
  350.         headerElement = generatedPage.content.document.createElement("h2");
  351.         linkElement   = generatedPage.content.document.createElement("a");
  352.         linkElement.setAttribute("href", documentURL);
  353.         linkElement.appendChild(generatedPage.content.document.createTextNode(documentURL));
  354.         headerElement.appendChild(linkElement);
  355.         generatedPage.content.document.body.appendChild(headerElement);
  356.  
  357.         // Loop through the inline style sheets
  358.         for(var j = 0; j < styleSheetList.length; j++)
  359.         {
  360.             inlineStylesText += styleSheetList[j].innerHTML.trim() + "\n\n";
  361.         }
  362.  
  363.         // If there are inline styles
  364.         if(inlineStylesText != "")
  365.         {
  366.             headerElement = generatedPage.content.document.createElement("h2");
  367.             preElement    = generatedPage.content.document.createElement("pre");
  368.             headerElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getFormattedString("webdeveloper_inlineStyles", [documentURL])));
  369.             generatedPage.content.document.body.appendChild(headerElement);
  370.             preElement.appendChild(generatedPage.content.document.createTextNode(inlineStylesText));
  371.             generatedPage.content.document.body.appendChild(preElement);
  372.         }
  373.  
  374.         styleSheetList = pageDocument.styleSheets;
  375.  
  376.         // Loop through the style sheets
  377.         for(j = 0; j < styleSheetList.length; j++)
  378.         {
  379.             styleSheet = styleSheetList[j];
  380.  
  381.             // If this is an inline style sheet
  382.             if(styleSheet.href == documentURL)
  383.             {
  384.                 // Loop through the the style sheet rules
  385.                 for(var k = 0; k < styleSheet.cssRules.length; k++)
  386.                 {
  387.                     cssRule = styleSheet.cssRules[k];
  388.  
  389.                     // If this is an import rule
  390.                     if(cssRule.type == 3)
  391.                     {
  392.                         webdeveloper_displayStyleSheet(cssRule.styleSheet, generatedPage);
  393.                     }
  394.                 }
  395.             }
  396.             else
  397.             {
  398.                 webdeveloper_displayStyleSheet(styleSheet, generatedPage);
  399.             }
  400.         }
  401.     }
  402.  
  403.     // If the open tabs in background preference is set to true
  404.     if(preferencesService.prefHasUserValue("webdeveloper.open.tabs.background") && preferencesService.getBoolPref("webdeveloper.open.tabs.background"))
  405.     {
  406.         getBrowser().selectedTab = oldTab;
  407.     }
  408. }
  409.  
  410. // View style information
  411. function webdeveloper_viewStyleInformation(element, applyStyle)
  412. {
  413.     const content      = window.document.getElementById("content");
  414.     const mainTabBox   = content.mTabBox;
  415.     const documentList = webdeveloper_getDocuments(content.browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  416.  
  417.     var checked      = null;
  418.     var pageDocument = null;
  419.  
  420.     // If the element is not set we are coming from a keyboard shortcut
  421.     if(!element)
  422.     {
  423.         element = document.getElementById("webdeveloper-view-style-information-menu");
  424.  
  425.         if(element.getAttribute("checked"))
  426.         {
  427.             element.removeAttribute("checked");
  428.         }
  429.         else
  430.         {
  431.             element.setAttribute("checked", true);
  432.         }
  433.     }
  434.  
  435.     checked = element.getAttribute("checked");
  436.  
  437.     // Loop through the documents
  438.     for(var i = 0; i < documentList.length; i++)
  439.     {
  440.         pageDocument = documentList[i];
  441.  
  442.         // If viewing style information
  443.         if(checked)
  444.         {
  445.             pageDocument.addEventListener("mouseover", webdeveloper_displayElementAncestors, true);
  446.             pageDocument.addEventListener("click", webdeveloper_viewStyleInformationForElement, true);
  447.         }
  448.         else
  449.         {
  450.             var sidebar = document.getElementById("sidebar-box");
  451.  
  452.             pageDocument.removeEventListener("mouseover", webdeveloper_displayElementAncestors, true);
  453.             pageDocument.removeEventListener("click", webdeveloper_viewStyleInformationForElement, true);
  454.             window.content.status = null;
  455.  
  456.             // If the sidebar exists, is visible and is showing view style information
  457.             if(sidebar && !sidebar.getAttribute("hidden") && sidebar.getAttribute("src") == "chrome://webdeveloper/content/sidebar/view_style_information.xul")
  458.             {
  459.                 toggleSidebar("webdeveloper-view-style-information-sidebar");
  460.             }
  461.         }
  462.     }
  463.  
  464.     webdeveloper_toggleStyleSheet(element, "chrome://webdeveloper/content/stylesheets/view_style_information.css", "webdeveloper-view-style-information", applyStyle);
  465. }
  466.  
  467. // View style information for an element
  468. function webdeveloper_viewStyleInformationForElement(event)
  469. {
  470.     // If there is an event target and the click was not a right click
  471.     if(event.target && event.button != 2)
  472.     {
  473.         const domUtils           = Components.classes["@mozilla.org/inspector/dom-utils;1"].getService(Components.interfaces.inIDOMUtils);
  474.         const oldTab             = getBrowser().selectedTab;
  475.         const oldURL             = window.content.document.documentURI;
  476.         const preferencesService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
  477.         const displayInSidebar   = preferencesService.prefHasUserValue("webdeveloper.view.style.information.sidebar") && preferencesService.getBoolPref("webdeveloper.view.style.information.sidebar");
  478.         const request            = new XMLHttpRequest();
  479.         const ruleList           = domUtils.getCSSStyleRules(event.target);
  480.         const stringBundle       = document.getElementById("webdeveloper-string-bundle");
  481.         const title              = stringBundle.getFormattedString("webdeveloper_viewStyleInformationTitle", [oldURL]);
  482.  
  483.         var elementRule       = null;
  484.         var generatedDocument = null;
  485.         var headerElement     = null;
  486.         var line              = null;
  487.         var linkElement       = null;
  488.         var preElement        = null;
  489.         var styleRule         = null;
  490.         var styleRuleList     = null;
  491.         var styleSheetArray   = new Array();
  492.         var styleSheet        = null;
  493.         var styleText         = null;
  494.  
  495.         // If displaying in the sidebar
  496.         if(displayInSidebar)
  497.         {
  498.             var elements = null;
  499.             var parent   = null;
  500.  
  501.             toggleSidebar("webdeveloper-view-style-information-sidebar", true);
  502.  
  503.             // This must be done to make generated content render
  504.             request.open("GET", "about:blank", false);
  505.             request.send("");
  506.  
  507.             generatedDocument = document.getElementById("sidebar-box").getElementsByAttribute("id", "sidebar")[0].contentDocument.getElementById("webdeveloper-view-style-information-iframe").contentDocument;
  508.  
  509.             parent = generatedDocument.getElementsByTagName("head")[0];
  510.  
  511.             webdeveloper_removeAllChildNodes(parent);
  512.  
  513.             parent = generatedDocument.body;
  514.  
  515.             webdeveloper_removeAllChildNodes(parent);
  516.         }
  517.         else
  518.         {
  519.             var generatedPage = webdeveloper_generatePage("");
  520.  
  521.             // This must be done to make generated content render
  522.             request.open("GET", "about:blank", false);
  523.             request.send("");
  524.  
  525.             generatedDocument = generatedPage.content.document;
  526.         }
  527.  
  528.         generatedDocument.title = title;
  529.  
  530.         linkElement = generatedDocument.createElement("link");
  531.         linkElement.setAttribute("href", "chrome://webdeveloper/content/stylesheets/generated_content.css");
  532.         linkElement.setAttribute("media", "all");
  533.         linkElement.setAttribute("rel", "stylesheet");
  534.         linkElement.setAttribute("type", "text/css");
  535.         generatedDocument.getElementsByTagName("head")[0].appendChild(linkElement);
  536.  
  537.         headerElement = generatedDocument.createElement("h1");
  538.         headerElement.appendChild(generatedDocument.createTextNode(title));
  539.         generatedDocument.body.appendChild(headerElement);
  540.  
  541.         // Loop through the element rules
  542.         for(var i = 0; i < ruleList.Count(); i++)
  543.         {
  544.             elementRule = ruleList.GetElementAt(i).QueryInterface(Components.interfaces.nsIDOMCSSStyleRule);
  545.             line        = domUtils.getRuleLine(elementRule);
  546.  
  547.             // If there is a parent style sheet
  548.             if(elementRule.parentStyleSheet)
  549.             {
  550.                 styleSheet = elementRule.parentStyleSheet.href;
  551.             }
  552.  
  553.             // If it's not a rule from the browser
  554.             if(styleSheet && styleSheet.indexOf("resource://") == -1 && styleSheet.indexOf("about:PreferenceStyleSheet") == -1 && styleSheet.indexOf("jar:file://") == -1 && styleSheet.indexOf("chrome://") == -1)
  555.             {
  556.                 styleRuleList = elementRule.style;
  557.                 styleText     = elementRule.selectorText + "    (" + stringBundle.getString("webdeveloper_viewStyleInformationLine") + " " + line + ")\n{";
  558.  
  559.                 // Loop through the style rules
  560.                 for(var j = 0; j < styleRuleList.length; j++)
  561.                 {
  562.                     styleRule  = styleRuleList[j];
  563.                     styleText += "\n    " + styleRule + ": " + styleRuleList.getPropertyValue(styleRule) + ";";
  564.                 }
  565.  
  566.                 styleText += "\n}\n\n";
  567.  
  568.                 // If this style sheet has rules already stored
  569.                 if(styleSheetArray[styleSheet])
  570.                 {
  571.                     styleSheetArray[styleSheet] += styleText;
  572.                 }
  573.                 else
  574.                 {
  575.                     styleSheetArray[styleSheet] = styleText;
  576.                 }
  577.             }
  578.         }
  579.  
  580.         // Loop through the style sheets
  581.         for(styleSheet in styleSheetArray)
  582.         {
  583.             linkElement = generatedDocument.createElement("a");
  584.             linkElement.setAttribute("href", styleSheet);
  585.             linkElement.appendChild(generatedDocument.createTextNode(styleSheet));
  586.             generatedDocument.body.appendChild(linkElement);
  587.  
  588.             preElement = generatedDocument.createElement("pre");
  589.             preElement.appendChild(generatedDocument.createTextNode(styleSheetArray[styleSheet]));
  590.             generatedDocument.body.appendChild(preElement);
  591.         }
  592.  
  593.         // If not displaying in the sidebar and the open tabs in background preference is set to true
  594.         if(!displayInSidebar && preferencesService.prefHasUserValue("webdeveloper.open.tabs.background") && preferencesService.getBoolPref("webdeveloper.open.tabs.background"))
  595.         {
  596.             getBrowser().selectedTab = oldTab;
  597.         }
  598.  
  599.         event.preventDefault();
  600.     }
  601. }
  602.