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 / information.js < prev    next >
Encoding:
JavaScript  |  2004-11-21  |  40.1 KB  |  921 lines

  1. // Filter for display access key tree walker
  2. function webdeveloper_accessKeyFilter(node)
  3. {
  4.     // If the node has an accesskey attribute
  5.     if(node.hasAttribute("accesskey"))
  6.     {
  7.         return NodeFilter.FILTER_ACCEPT;
  8.     }
  9.     else
  10.     {
  11.         return NodeFilter.FILTER_SKIP;
  12.     }
  13. }
  14.  
  15. // Filter for display anchors tree walker
  16. function webdeveloper_anchorFilter(node)
  17. {
  18.     // If the node has an id attribute or is an a tag with a name attribute
  19.     if(node.hasAttribute("id") || (node.nodeName == "a" && node.hasAttribute("name")))
  20.     {
  21.         return NodeFilter.FILTER_ACCEPT;
  22.     }
  23.     else
  24.     {
  25.         return NodeFilter.FILTER_SKIP;
  26.     }
  27. }
  28.  
  29. // Displays all access keys
  30. function webdeveloper_displayAccessKeys(element, applyStyle)
  31. {
  32.     const content      = window.document.getElementById("content");
  33.     const mainTabBox   = content.mTabBox;
  34.     const documentList = webdeveloper_getDocuments(content.browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  35.  
  36.     var accessKeyElement     = null;
  37.     var accessKeyElementList = null;
  38.     var pageDocument         = null;
  39.     var spanElement          = null;
  40.     var spanElementList      = null;
  41.  
  42.     // Loop through the documents
  43.     for(var i = 0; i < documentList.length; i++)
  44.     {
  45.         pageDocument     = documentList[i];
  46.         spanElementList  = pageDocument.getElementsByTagName("span");
  47.  
  48.         // Loop through all the span tags
  49.         for(var j = 0; j < spanElementList.length; j++)
  50.         {
  51.             spanElement = spanElementList[j];
  52.  
  53.             // If the class exists and is set to webdeveloper-access-key-span
  54.             if(spanElement.hasAttribute("class") && spanElement.getAttribute("class") == "webdeveloper-access-key-span")
  55.             {
  56.                 spanElement.parentNode.removeChild(spanElement);
  57.                 j--;
  58.             }
  59.         }
  60.  
  61.         // If the element is checked
  62.         if(element.getAttribute("checked"))
  63.         {
  64.             const treeWalker = pageDocument.createTreeWalker(pageDocument.body, NodeFilter.SHOW_ELEMENT, webdeveloper_accessKeyFilter, false);
  65.  
  66.             accessKeyElementList = new Array();
  67.  
  68.             // Loop through the access key elements
  69.             while((accessKeyElement = treeWalker.nextNode()) != null)
  70.             {
  71.                 accessKeyElementList.push(accessKeyElement);
  72.             }
  73.  
  74.             // Loop through all the access key elements
  75.             for(j = 0; j < accessKeyElementList.length; j++)
  76.             {
  77.                 accessKeyElement = accessKeyElementList[j];
  78.                 spanElement      = pageDocument.createElement("span");
  79.  
  80.                 spanElement.setAttribute("class", "webdeveloper-access-key-span");
  81.                 spanElement.appendChild(pageDocument.createTextNode("accesskey=" + accessKeyElement.getAttribute("accesskey")));
  82.                 accessKeyElement.parentNode.insertBefore(spanElement, accessKeyElement);
  83.             }
  84.         }
  85.     }
  86.  
  87.     webdeveloper_toggleStyleSheet(element, "chrome://webdeveloper/content/stylesheets/display_access_keys.css", "webdeveloper-display-access-keys", applyStyle);
  88.     webdeveloper_toggleFeatureTooltipStyles(element, "webdeveloper-display-access-keys-tooltips", ".webdeveloper-access-key-span");
  89. }
  90.  
  91. // Displays all anchors
  92. function webdeveloper_displayAnchors(element, applyStyle)
  93. {
  94.     const content      = window.document.getElementById("content");
  95.     const mainTabBox   = content.mTabBox;
  96.     const documentList = webdeveloper_getDocuments(content.browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  97.  
  98.     var anchorElement     = null;
  99.     var anchorElementList = null;
  100.     var anchorText        = null;
  101.     var pageDocument      = null;
  102.     var spanElement       = null;
  103.     var spanElementList   = null;
  104.  
  105.     // Loop through the documents
  106.     for(var i = 0; i < documentList.length; i++)
  107.     {
  108.         pageDocument     = documentList[i];
  109.         spanElementList  = pageDocument.getElementsByTagName("span");
  110.  
  111.         // Loop through all the span tags
  112.         for(var j = 0; j < spanElementList.length; j++)
  113.         {
  114.             spanElement = spanElementList[j];
  115.  
  116.             // If the class exists and is set to webdeveloper-anchor-span
  117.             if(spanElement.hasAttribute("class") && spanElement.getAttribute("class") == "webdeveloper-anchor-span")
  118.             {
  119.                 spanElement.parentNode.removeChild(spanElement);
  120.                 j--;
  121.             }
  122.         }
  123.  
  124.         // If the element is checked
  125.         if(element.getAttribute("checked"))
  126.         {
  127.             const treeWalker = pageDocument.createTreeWalker(pageDocument.body, NodeFilter.SHOW_ELEMENT, webdeveloper_anchorFilter, false);
  128.  
  129.             anchorElementList = new Array();
  130.  
  131.             // Loop through the anchor elements
  132.             while((anchorElement = treeWalker.nextNode()) != null)
  133.             {
  134.                 anchorElementList.push(anchorElement);
  135.             }
  136.  
  137.             // Loop through all the anchor elements
  138.             for(j = 0; j < anchorElementList.length; j++)
  139.             {
  140.                 anchorElement = anchorElementList[j];
  141.                 spanElement   = pageDocument.createElement("span");
  142.  
  143.                 // If the anchor element has an id attribute
  144.                 if(anchorElement.hasAttribute("id"))
  145.                 {
  146.                     anchorText = "#" + anchorElement.getAttribute("id");
  147.                 }
  148.                 else if(anchorElement.hasAttribute("name"))
  149.                 {
  150.                     anchorText = "#" + anchorElement.getAttribute("name");
  151.                 }
  152.  
  153.                 spanElement.setAttribute("class", "webdeveloper-anchor-span");
  154.                 spanElement.appendChild(pageDocument.createTextNode(anchorText));
  155.                 anchorElement.parentNode.insertBefore(spanElement, anchorElement);
  156.             }
  157.         }
  158.     }
  159.  
  160.     webdeveloper_toggleStyleSheet(element, "chrome://webdeveloper/content/stylesheets/display_anchors.css", "webdeveloper-display-anchors", applyStyle);
  161.     webdeveloper_toggleFeatureTooltipStyles(element, "webdeveloper-display-anchors-tooltips", ".webdeveloper-anchor-span");
  162. }
  163.  
  164. // Displays all block sizes
  165. function webdeveloper_displayBlockSize(element, applyStyle)
  166. {
  167.     const content      = window.document.getElementById("content");
  168.     const display      = element.getAttribute("checked");
  169.     const mainTabBox   = content.mTabBox;
  170.     const documentList = webdeveloper_getDocuments(content.browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  171.  
  172.     var pageDocument = null;
  173.  
  174.     // Loop through the documents
  175.     for(var i = 0; i < documentList.length; i++)
  176.     {
  177.         var blockSizeElement     = null;
  178.         var blockSizeElementList = null;
  179.  
  180.         pageDocument = documentList[i];
  181.  
  182.         // If displaying
  183.         if(display)
  184.         {
  185.             const blockSizeElementTypes = new Array("div", "form", "table");
  186.  
  187.             var blockSize         = null;
  188.             var height            = null;
  189.             var left              = null;
  190.             var top               = null;
  191.             var width             = null;
  192.  
  193.             // Loop through the block size elements
  194.             for(var j = 0; j < blockSizeElementTypes.length; j++)
  195.             {
  196.                 blockSizeElementList = pageDocument.getElementsByTagName(blockSizeElementTypes[j]);
  197.  
  198.                 // Loop through the block size elements
  199.                 for(var k = 0; k < blockSizeElementList.length; k++)
  200.                 {
  201.                     blockSize        = pageDocument.createElement("span");
  202.                     blockSizeElement = blockSizeElementList[k];
  203.                     height           = blockSizeElement.offsetHeight;
  204.                     left             = blockSizeElement.offsetLeft;
  205.                     top              = blockSizeElement.offsetTop;
  206.                     width            = blockSizeElement.offsetWidth;
  207.  
  208.                     blockSize.appendChild(pageDocument.createTextNode(width + "x" + height));
  209.                     blockSize.setAttribute("class", "webdeveloper-block-size");
  210.                     blockSize.style.left = left + "px";
  211.                     blockSize.style.position = "absolute";
  212.                     blockSize.style.top = top + "px";
  213.  
  214.                     blockSizeElement.appendChild(blockSize);
  215.                 }
  216.             }
  217.         }
  218.         else
  219.         {
  220.             const treeWalker = pageDocument.createTreeWalker(pageDocument.body, NodeFilter.SHOW_ELEMENT, webdeveloper_displayBlockSizeFilter, false);
  221.  
  222.             blockSizeElementList = new Array();
  223.  
  224.             // Loop through the block size elements
  225.             while((blockSizeElement = treeWalker.nextNode()) != null)
  226.             {
  227.                 blockSizeElementList.push(blockSizeElement);
  228.             }
  229.  
  230.             // Loop through the block size elements
  231.             for(j = 0; j < blockSizeElementList.length; j++)
  232.             {
  233.                 blockSizeElement = blockSizeElementList[j];
  234.                 blockSizeElement.parentNode.removeChild(blockSizeElement);
  235.             }
  236.         }
  237.     }
  238.  
  239.     webdeveloper_toggleStyleSheet(element, "chrome://webdeveloper/content/stylesheets/display_block_size.css", "webdeveloper-display-block-size", applyStyle);
  240.     webdeveloper_toggleFeatureTooltipStyles(element, "webdeveloper-display-block-size-tooltips", ".webdeveloper-block-size");
  241. }
  242.  
  243. // Filter for display block size tree walker
  244. function webdeveloper_displayBlockSizeFilter(node)
  245. {
  246.     // If the class of the node is webdeveloper block size
  247.     if(node.getAttribute("class") == "webdeveloper-block-size")
  248.     {
  249.         return NodeFilter.FILTER_ACCEPT;
  250.     }
  251.     else
  252.     {
  253.         return NodeFilter.FILTER_SKIP;
  254.     }
  255. }
  256.  
  257. // Displays ID and class details for the page
  258. function webdeveloper_displayIDClassDetails(element, applyStyle)
  259. {
  260.     // If the menu is checked
  261.     if(element.getAttribute("checked"))
  262.     {
  263.         const content            = window.document.getElementById("content");
  264.         const mainTabBox         = content.mTabBox;
  265.         const documentList       = webdeveloper_getDocuments(content.browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  266.         const preferencesService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
  267.  
  268.         var headElementList = null;
  269.         var pageDocument    = null;
  270.         var styleElement    = null;
  271.  
  272.         // Loop through the documents
  273.         for(var i = 0; i < documentList.length; i++)
  274.         {
  275.             pageDocument    = documentList[i];
  276.             headElementList = pageDocument.getElementsByTagName("head");
  277.             styleElement    = pageDocument.createElement("style");
  278.  
  279.             styleElement.setAttribute("id", "webdeveloper-display-id-class-details");
  280.             styleElement.setAttribute("type", "text/css");
  281.  
  282.             // If the class colors are set
  283.             if(preferencesService.prefHasUserValue("webdeveloper.color.class.background") && preferencesService.prefHasUserValue("webdeveloper.color.class.text"))
  284.             {
  285.                 styleElement.appendChild(pageDocument.createTextNode("*[class]:before { background-color: " + preferencesService.getCharPref("webdeveloper.color.class.background").trim() + " !important; color: " + preferencesService.getCharPref("webdeveloper.color.class.text").trim() + ' !important; content: "class=" attr(class) !important; }'));
  286.             }
  287.  
  288.             // If the ID colors are set
  289.             if(preferencesService.prefHasUserValue("webdeveloper.color.id.background") && preferencesService.prefHasUserValue("webdeveloper.color.id.text"))
  290.             {
  291.                 styleElement.appendChild(pageDocument.createTextNode("*[id]:before { background-color: " + preferencesService.getCharPref("webdeveloper.color.id.background").trim() + " !important; color: " + preferencesService.getCharPref("webdeveloper.color.id.text").trim() + ' !important; content: "id=" attr(id) !important; }'));
  292.             }
  293.  
  294.             // If the ID and class colors are set
  295.             if(preferencesService.prefHasUserValue("webdeveloper.color.id.class.background") && preferencesService.prefHasUserValue("webdeveloper.color.id.class.text"))
  296.             {
  297.                 styleElement.appendChild(pageDocument.createTextNode("*[id][class]:before { background-color: " + preferencesService.getCharPref("webdeveloper.color.id.class.background").trim() + " !important; color: " + preferencesService.getCharPref("webdeveloper.color.id.class.text").trim() + ' !important; content: "id=" attr(id) ", class=" attr(class) !important; }'));
  298.             }
  299.  
  300.             // If there is a head element
  301.             if(headElementList.length > 0)
  302.             {
  303.                 headElementList[0].appendChild(styleElement);
  304.             }
  305.             else
  306.             {
  307.                 pageDocument.documentElement.appendChild(styleElement);
  308.             }
  309.         }
  310.  
  311.         // If applying styles
  312.         if(applyStyle)
  313.         {
  314.             webdeveloper_addAppliedStyle("webdeveloper-display-id-class-details");
  315.         }
  316.     }
  317.     else
  318.     {
  319.         webdeveloper_removeStyleSheet("webdeveloper-display-id-class-details", true);
  320.     }
  321.  
  322.     webdeveloper_toggleStyleSheet(element, "chrome://webdeveloper/content/stylesheets/imports/before.css", "webdeveloper-display-id-class-details-before", applyStyle);
  323.     webdeveloper_toggleFeatureTooltipStyles(element, "webdeveloper-display-id-class-details-tooltips", "*:before");
  324. }
  325.  
  326. // Displays all link paths
  327. function webdeveloper_displayLinkPaths(element, applyStyle)
  328. {
  329.     webdeveloper_toggleStyleSheet(element, "chrome://webdeveloper/content/stylesheets/display_link_paths.css", "webdeveloper-display-link-paths", applyStyle);
  330.     webdeveloper_toggleFeatureTooltipStyles(element, "webdeveloper-display-link-paths-tooltips", "*:before");
  331. }
  332.  
  333. // Displays all tab indices
  334. function webdeveloper_displayTabIndex(element, applyStyle)
  335. {
  336.     const content      = window.document.getElementById("content");
  337.     const mainTabBox   = content.mTabBox;
  338.     const documentList = webdeveloper_getDocuments(content.browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  339.  
  340.     var pageDocument        = null;
  341.     var spanElement         = null;
  342.     var spanElementList     = null;
  343.     var tabIndexElement     = null;
  344.     var tabIndexElementList = null;
  345.  
  346.     // Loop through the documents
  347.     for(var i = 0; i < documentList.length; i++)
  348.     {
  349.         pageDocument     = documentList[i];
  350.         spanElementList  = pageDocument.getElementsByTagName("span");
  351.  
  352.         // Loop through all the span tags
  353.         for(var j = 0; j < spanElementList.length; j++)
  354.         {
  355.             spanElement = spanElementList[j];
  356.  
  357.             // If the class exists and is set to webdeveloper-tab-index-span
  358.             if(spanElement.hasAttribute("class") && spanElement.getAttribute("class") == "webdeveloper-tab-index-span")
  359.             {
  360.                 spanElement.parentNode.removeChild(spanElement);
  361.                 j--;
  362.             }
  363.         }
  364.  
  365.         // If the element is checked
  366.         if(element.getAttribute("checked"))
  367.         {
  368.             const treeWalker = pageDocument.createTreeWalker(pageDocument.body, NodeFilter.SHOW_ELEMENT, webdeveloper_tabIndexFilter, false);
  369.  
  370.             tabIndexElementList = new Array();
  371.  
  372.             // Loop through the tab index elements
  373.             while((tabIndexElement = treeWalker.nextNode()) != null)
  374.             {
  375.                 tabIndexElementList.push(tabIndexElement);
  376.             }
  377.  
  378.             // Loop through all the tab index elements
  379.             for(j = 0; j < tabIndexElementList.length; j++)
  380.             {
  381.                 tabIndexElement = tabIndexElementList[j];
  382.  
  383.                 spanElement = pageDocument.createElement("span");
  384.  
  385.                 spanElement.setAttribute("class", "webdeveloper-tab-index-span");
  386.                 spanElement.appendChild(document.createTextNode("tabindex=" + tabIndexElement.getAttribute("tabindex")));
  387.                 tabIndexElement.parentNode.insertBefore(spanElement, tabIndexElement);
  388.             }
  389.         }
  390.     }
  391.  
  392.     webdeveloper_toggleStyleSheet(element, "chrome://webdeveloper/content/stylesheets/display_tab_index.css", "webdeveloper-display-tab-index", applyStyle);
  393.     webdeveloper_toggleFeatureTooltipStyles(element, "webdeveloper-display-tab-index-tooltips", ".webdeveloper-tab-index-span");
  394. }
  395.  
  396. // Displays the topographic information for all elements
  397. function webdeveloper_displayTopographicInformation(element, applyStyle)
  398. {
  399.     webdeveloper_toggleStyleSheet(element, "chrome://webdeveloper/content/stylesheets/display_topographic_information.css", "webdeveloper-display-topographic-information", applyStyle);
  400. }
  401.  
  402. // Sorts two links
  403. function webdeveloper_sortLinks(linkOne, linkTwo)
  404. {
  405.     const linkOneHref = linkOne.href;
  406.     const linkTwoHref = linkTwo.href;
  407.  
  408.     var sortValue = 1;
  409.  
  410.     // If the links are equal
  411.     if(linkOneHref == linkTwoHref)
  412.     {
  413.         sortValue = 0;
  414.     }
  415.     else if(linkOneHref < linkTwoHref)
  416.     {
  417.         sortValue = -1;
  418.     }
  419.  
  420.     return sortValue;
  421. }
  422.  
  423. // Filter for display tab index tree walker
  424. function webdeveloper_tabIndexFilter(node)
  425. {
  426.     // If the node has an tabindex attribute
  427.     if(node.hasAttribute("tabindex"))
  428.     {
  429.         return NodeFilter.FILTER_ACCEPT;
  430.     }
  431.     else
  432.     {
  433.         return NodeFilter.FILTER_SKIP;
  434.     }
  435. }
  436.  
  437. // Tidies a list of links by removing duplicates and sorting
  438. function webdeveloper_tidyLinks(linkList)
  439. {
  440.     var link              = null;
  441.     var newLinkList       = new Array();
  442.     var newLinkListLength = new Array();
  443.     var tidiedLinkList    = new Array();
  444.  
  445.     // Loop through the links
  446.     for(var i = 0; i < linkList.length; i++)
  447.     {
  448.         link = linkList[i];
  449.  
  450.         // If this link is set
  451.         if(link.href)
  452.         {
  453.             newLinkList.push(link);
  454.         }
  455.     }
  456.  
  457.     newLinkList.sort(webdeveloper_sortLinks);
  458.     newLinkListLength = newLinkList.length;
  459.  
  460.     // Loop through the links
  461.     for(i = 0; i < newLinkListLength; i++)
  462.     {
  463.         link = newLinkList[i];
  464.  
  465.         // If this is not the last link and the link is the same as the next link
  466.         if(i + 1 < newLinkListLength && link.href == newLinkList[i + 1].href)
  467.         {
  468.             continue;
  469.         }
  470.  
  471.         tidiedLinkList.push(link);
  472.     }
  473.  
  474.     return tidiedLinkList;
  475. }
  476.  
  477. // Displays all the cookies for the page
  478. function webdeveloper_viewCookieInformation()
  479. {
  480.     const dateService        = Components.classes["@mozilla.org/intl/scriptabledateformat;1"].getService(Components.interfaces.nsIScriptableDateFormat);
  481.     const content            = window.document.getElementById("content");
  482.     const mainTabBox         = content.mTabBox;
  483.     const documentList       = webdeveloper_getDocuments(content.browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  484.     const oldTab             = getBrowser().selectedTab;
  485.     const oldURL             = window.content.document.documentURI;
  486.     const preferencesService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
  487.     const request            = new XMLHttpRequest();
  488.     const stringBundle       = document.getElementById("webdeveloper-string-bundle");
  489.     const title              = stringBundle.getFormattedString("webdeveloper_viewCookieInformationTitle", [oldURL]);
  490.  
  491.     var cellDataElement   = null;
  492.     var cellHeaderElement = null;
  493.     var cookie            = null;
  494.     var cookieExpires     = null;
  495.     var cookieHost        = null;
  496.     var cookieLength      = null;
  497.     var cookieSecure      = null;
  498.     var cookies           = null;
  499.     var date              = null;
  500.     var generatedPage     = null;
  501.     var headerElement     = null;
  502.     var linkElement       = null;
  503.     var pageDocument      = null;
  504.     var pElement          = null;
  505.     var preElement        = null;
  506.     var tableElement      = null;
  507.     var tableRowElement   = null;
  508.  
  509.     generatedPage = webdeveloper_generatePage("");
  510.  
  511.     // This must be done to make generated content render
  512.     request.open("GET", "about:blank", false);
  513.     request.send("");
  514.  
  515.     generatedPage.content.document.title = title;
  516.  
  517.     linkElement = generatedPage.content.document.createElement("link");
  518.     linkElement.setAttribute("href", "chrome://webdeveloper/content/stylesheets/generated_content.css");
  519.     linkElement.setAttribute("media", "all");
  520.     linkElement.setAttribute("rel", "stylesheet");
  521.     linkElement.setAttribute("type", "text/css");
  522.     generatedPage.content.document.getElementsByTagName("head")[0].appendChild(linkElement);
  523.  
  524.     headerElement = generatedPage.content.document.createElement("h1");
  525.     headerElement.appendChild(generatedPage.content.document.createTextNode(title));
  526.     generatedPage.content.document.body.appendChild(headerElement);
  527.  
  528.     // Loop through the documents
  529.     for(var i = 0; i < documentList.length; i++)
  530.     {
  531.         pageDocument = documentList[i];
  532.         cookies      = webdeveloper_getCookies(pageDocument.location.hostname, true);
  533.         cookieLength = cookies.length;
  534.  
  535.         headerElement = generatedPage.content.document.createElement("h2");
  536.         linkElement   = generatedPage.content.document.createElement("a");
  537.         linkElement.setAttribute("href", pageDocument.documentURI);
  538.         linkElement.appendChild(generatedPage.content.document.createTextNode(pageDocument.documentURI));
  539.         headerElement.appendChild(linkElement);
  540.         generatedPage.content.document.body.appendChild(headerElement);
  541.  
  542.         // If there are no cookies
  543.         if(cookieLength == 0)
  544.         {
  545.             pElement = generatedPage.content.document.createElement("p");
  546.             pElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_noCookies")));
  547.             generatedPage.content.document.body.appendChild(pElement);
  548.         }
  549.         else
  550.         {
  551.             // Loop through the cookies
  552.             for(var j = 0; j < cookieLength; j++)
  553.             {
  554.                 cookie       = cookies[j];
  555.                 cookieHost   = cookie.host;
  556.                 cookieSecure = cookie.isSecure;
  557.                 tableElement = generatedPage.content.document.createElement("table");
  558.  
  559.                 //  Cookie name
  560.                 cellDataElement   = generatedPage.content.document.createElement("td");
  561.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  562.                 tableRowElement   = generatedPage.content.document.createElement("tr");
  563.  
  564.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewCookieInformationName")));
  565.                 tableRowElement.appendChild(cellHeaderElement);
  566.                 cellDataElement.appendChild(generatedPage.content.document.createTextNode(cookie.name));
  567.                 tableRowElement.appendChild(cellDataElement);
  568.                 tableElement.appendChild(tableRowElement);
  569.  
  570.                 //  Cookie value
  571.                 cellDataElement   = generatedPage.content.document.createElement("td");
  572.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  573.                 tableRowElement   = generatedPage.content.document.createElement("tr");
  574.  
  575.                 tableRowElement.setAttribute("class", "odd");
  576.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewCookieInformationValue")));
  577.                 tableRowElement.appendChild(cellHeaderElement);
  578.                 cellDataElement.appendChild(generatedPage.content.document.createTextNode(cookie.value));
  579.                 tableRowElement.appendChild(cellDataElement);
  580.                 tableElement.appendChild(tableRowElement);
  581.  
  582.                 // If the cookie host starts with '.'
  583.                 if(cookieHost.charAt(0) == ".")
  584.                 {
  585.                     cookieHost = cookieHost.substring(1);
  586.                 }
  587.  
  588.                 //  Cookie host
  589.                 cellDataElement   = generatedPage.content.document.createElement("td");
  590.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  591.                 tableRowElement   = generatedPage.content.document.createElement("tr");
  592.  
  593.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewCookieInformationHost")));
  594.                 tableRowElement.appendChild(cellHeaderElement);
  595.                 cellDataElement.appendChild(generatedPage.content.document.createTextNode(cookieHost));
  596.                 tableRowElement.appendChild(cellDataElement);
  597.                 tableElement.appendChild(tableRowElement);
  598.  
  599.                 //  Cookie path
  600.                 cellDataElement   = generatedPage.content.document.createElement("td");
  601.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  602.                 tableRowElement   = generatedPage.content.document.createElement("tr");
  603.  
  604.                 tableRowElement.setAttribute("class", "odd");
  605.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewCookieInformationPath")));
  606.                 tableRowElement.appendChild(cellHeaderElement);
  607.                 cellDataElement.appendChild(generatedPage.content.document.createTextNode(cookie.path));
  608.                 tableRowElement.appendChild(cellDataElement);
  609.                 tableElement.appendChild(tableRowElement);
  610.  
  611.                 //  Cookie secure
  612.                 cellDataElement   = generatedPage.content.document.createElement("td");
  613.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  614.                 tableRowElement   = generatedPage.content.document.createElement("tr");
  615.  
  616.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewCookieInformationSecure")));
  617.                 tableRowElement.appendChild(cellHeaderElement);
  618.  
  619.                 // If the cookie is secure
  620.                 if(cookieSecure)
  621.                 {
  622.                     cellDataElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_yes")));
  623.                 }
  624.                 else
  625.                 {
  626.                     cellDataElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_no")));
  627.                 }
  628.  
  629.                 tableRowElement.appendChild(cellDataElement);
  630.                 tableElement.appendChild(tableRowElement);
  631.  
  632.                 // If the cookie has an expiration date
  633.                 if(cookie.expires)
  634.                 {
  635.                     date          = new Date(cookie.expires * 1000);
  636.                     cookieExpires = dateService.FormatDateTime("", dateService.dateFormatLong, dateService.timeFormatSeconds, date.getFullYear(), date.getMonth()+1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());
  637.                 }
  638.                 else
  639.                 {
  640.                     cookieExpires = stringBundle.getString("webdeveloper_viewCookieInformationSession");
  641.                 }
  642.  
  643.                 //  Cookie expires
  644.                 cellDataElement   = generatedPage.content.document.createElement("td");
  645.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  646.                 tableRowElement   = generatedPage.content.document.createElement("tr");
  647.  
  648.                 tableRowElement.setAttribute("class", "odd");
  649.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewCookieInformationExpires")));
  650.                 tableRowElement.appendChild(cellHeaderElement);
  651.                 cellDataElement.appendChild(generatedPage.content.document.createTextNode(cookieExpires));
  652.                 tableRowElement.appendChild(cellDataElement);
  653.                 tableElement.appendChild(tableRowElement);
  654.  
  655.                 generatedPage.content.document.body.appendChild(tableElement);
  656.  
  657.                 pElement = generatedPage.content.document.createElement("p");
  658.                 generatedPage.content.document.body.appendChild(pElement);
  659.             }
  660.         }
  661.     }
  662.  
  663.     // If the open tabs in background preference is set to true
  664.     if(preferencesService.prefHasUserValue("webdeveloper.open.tabs.background") && preferencesService.getBoolPref("webdeveloper.open.tabs.background"))
  665.     {
  666.         getBrowser().selectedTab = oldTab;
  667.     }
  668. }
  669.  
  670. // View JavaScript
  671. function webdeveloper_viewJavaScript()
  672. {
  673.     const content            = window.document.getElementById("content");
  674.     const mainTabBox         = content.mTabBox;
  675.     const documentList       = webdeveloper_getDocuments(content.browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  676.     const oldTab             = getBrowser().selectedTab;
  677.     const oldURL             = window.content.document.documentURI;
  678.     const preferencesService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
  679.     const request            = new XMLHttpRequest();
  680.     const stringBundle       = document.getElementById("webdeveloper-string-bundle");
  681.     const title              = stringBundle.getFormattedString("webdeveloper_viewJavaScriptTitle", [oldURL]);
  682.  
  683.     var documentURL   = null;
  684.     var generatedPage = null;
  685.     var headerElement = null;
  686.     var linkElement   = null;
  687.     var pageDocument  = null;
  688.     var preElement    = null;
  689.     var scriptElement = null;
  690.     var scriptList    = new Array();
  691.     var scriptSource  = null;
  692.  
  693.     generatedPage = webdeveloper_generatePage("");
  694.  
  695.     // This must be done to make generated content render
  696.     request.open("GET", "about:blank", false);
  697.     request.send("");
  698.  
  699.     generatedPage.content.document.title = title;
  700.  
  701.     linkElement = generatedPage.content.document.createElement("link");
  702.     linkElement.setAttribute("href", "chrome://webdeveloper/content/stylesheets/generated_content.css");
  703.     linkElement.setAttribute("media", "all");
  704.     linkElement.setAttribute("rel", "stylesheet");
  705.     linkElement.setAttribute("type", "text/css");
  706.     generatedPage.content.document.getElementsByTagName("head")[0].appendChild(linkElement);
  707.  
  708.     headerElement = generatedPage.content.document.createElement("h1");
  709.     headerElement.appendChild(generatedPage.content.document.createTextNode(title));
  710.     generatedPage.content.document.body.appendChild(headerElement);
  711.  
  712.     // Loop through the documents
  713.     for(var i = 0; i < documentList.length; i++)
  714.     {
  715.         pageDocument = documentList[i];
  716.         documentURL  = pageDocument.documentURI;
  717.         scriptList   = pageDocument.getElementsByTagName("script");
  718.  
  719.         headerElement = generatedPage.content.document.createElement("h2");
  720.         linkElement   = generatedPage.content.document.createElement("a");
  721.         linkElement.setAttribute("href", pageDocument.documentURI);
  722.         linkElement.appendChild(generatedPage.content.document.createTextNode(documentURL));
  723.         headerElement.appendChild(linkElement);
  724.         generatedPage.content.document.body.appendChild(headerElement);
  725.  
  726.         // Loop through the scripts
  727.         for(var j = 0; j < scriptList.length; j++)
  728.         {
  729.             scriptElement = scriptList[j];
  730.             scriptSource  = scriptElement.src;
  731.  
  732.             // If the script is external
  733.             if(scriptSource)
  734.             {
  735.                 request.open("GET", scriptSource, false);
  736.                 request.send("");
  737.  
  738.                 headerElement = generatedPage.content.document.createElement("h2");
  739.                 linkElement   = generatedPage.content.document.createElement("a");
  740.                 linkElement.setAttribute("href", scriptSource);
  741.                 linkElement.appendChild(generatedPage.content.document.createTextNode(scriptSource));
  742.                 headerElement.appendChild(linkElement);
  743.                 generatedPage.content.document.body.appendChild(headerElement);
  744.  
  745.                 preElement = generatedPage.content.document.createElement("pre");
  746.                 preElement.appendChild(generatedPage.content.document.createTextNode(request.responseText));
  747.                 generatedPage.content.document.body.appendChild(preElement);
  748.             }
  749.             else
  750.             {
  751.                 headerElement = generatedPage.content.document.createElement("h2");
  752.                 headerElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getFormattedString("webdeveloper_inlineScript", [documentURL])));
  753.                 generatedPage.content.document.body.appendChild(headerElement);
  754.  
  755.                 preElement = generatedPage.content.document.createElement("pre");
  756.                 preElement.appendChild(generatedPage.content.document.createTextNode(scriptElement.innerHTML));
  757.                 generatedPage.content.document.body.appendChild(preElement);
  758.             }
  759.         }
  760.     }
  761.  
  762.     // If the open tabs in background preference is set to true
  763.     if(preferencesService.prefHasUserValue("webdeveloper.open.tabs.background") && preferencesService.getBoolPref("webdeveloper.open.tabs.background"))
  764.     {
  765.         getBrowser().selectedTab = oldTab;
  766.     }
  767. }
  768.  
  769. // Displays all the links for the page
  770. function webdeveloper_viewLinkInformation()
  771. {
  772.     const content            = window.document.getElementById("content");
  773.     const mainTabBox         = content.mTabBox;
  774.     const documentList       = webdeveloper_getDocuments(content.browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  775.     const oldTab             = getBrowser().selectedTab;
  776.     const oldURL             = window.content.document.documentURI;
  777.     const preferencesService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
  778.     const request            = new XMLHttpRequest();
  779.     const stringBundle       = document.getElementById("webdeveloper-string-bundle");
  780.     const title              = stringBundle.getFormattedString("webdeveloper_viewLinkInformationTitle", [oldURL]);
  781.  
  782.     var documentURL       = null;
  783.     var generatedPage     = null;
  784.     var headerElement     = null;
  785.     var link              = null;
  786.     var linkElement       = null;
  787.     var linkHref          = null;
  788.     var linkLength        = null;
  789.     var links             = null;
  790.     var listElement       = null;
  791.     var listItemElement   = null;
  792.     var pageDocument      = null;
  793.     var pElement          = null;
  794.  
  795.     generatedPage = webdeveloper_generatePage("");
  796.  
  797.     // This must be done to make generated content render
  798.     request.open("GET", "about:blank", false);
  799.     request.send("");
  800.  
  801.     generatedPage.content.document.title = title;
  802.  
  803.     linkElement = generatedPage.content.document.createElement("link");
  804.     linkElement.setAttribute("href", "chrome://webdeveloper/content/stylesheets/generated_content.css");
  805.     linkElement.setAttribute("media", "all");
  806.     linkElement.setAttribute("rel", "stylesheet");
  807.     linkElement.setAttribute("type", "text/css");
  808.     generatedPage.content.document.getElementsByTagName("head")[0].appendChild(linkElement);
  809.  
  810.     headerElement = generatedPage.content.document.createElement("h1");
  811.     headerElement.appendChild(generatedPage.content.document.createTextNode(title));
  812.     generatedPage.content.document.body.appendChild(headerElement);
  813.  
  814.     // Loop through the documents
  815.     for(var i = 0; i < documentList.length; i++)
  816.     {
  817.         pageDocument = documentList[i];
  818.         documentURL  = pageDocument.documentURI;
  819.         links        = webdeveloper_tidyLinks(pageDocument.getElementsByTagName("a"));
  820.         linkLength   = links.length;
  821.  
  822.         headerElement = generatedPage.content.document.createElement("h2");
  823.         linkElement   = generatedPage.content.document.createElement("a");
  824.         linkElement.setAttribute("href", documentURL);
  825.         linkElement.appendChild(generatedPage.content.document.createTextNode(documentURL));
  826.         headerElement.appendChild(linkElement);
  827.         generatedPage.content.document.body.appendChild(headerElement);
  828.  
  829.         // If there are no links
  830.         if(linkLength == 0)
  831.         {
  832.             pElement = generatedPage.content.document.createElement("p");
  833.             pElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_noLinks")));
  834.             generatedPage.content.document.body.appendChild(pElement);
  835.         }
  836.         else
  837.         {
  838.             listElement = generatedPage.content.document.createElement("ol");
  839.  
  840.             // Loop through the links
  841.             for(var j = 0; j < linkLength; j++)
  842.             {
  843.                 link     = links[j];
  844.                 linkHref = link.href;
  845.  
  846.                 // If the link is set
  847.                 if(linkHref)
  848.                 {
  849.                     listItemElement = generatedPage.content.document.createElement("li");
  850.                     linkElement     = generatedPage.content.document.createElement("a");
  851.                     linkElement.setAttribute("href", linkHref);
  852.                     linkElement.appendChild(generatedPage.content.document.createTextNode(linkHref));
  853.                     listItemElement.appendChild(linkElement);
  854.                     listElement.appendChild(listItemElement);
  855.                 }
  856.             }
  857.  
  858.             generatedPage.content.document.body.appendChild(listElement);
  859.         }
  860.     }
  861.  
  862.     // If the open tabs in background preference is set to true
  863.     if(preferencesService.prefHasUserValue("webdeveloper.open.tabs.background") && preferencesService.getBoolPref("webdeveloper.open.tabs.background"))
  864.     {
  865.         getBrowser().selectedTab = oldTab;
  866.     }
  867. }
  868.  
  869. // View page information
  870. function webdeveloper_viewPageInformation(chromeLocation)
  871. {
  872.     window.openDialog(chromeLocation, "webdeveloper-page-information-dialog", "chrome,dialog=no,resizable", window.content.document);
  873. }
  874.  
  875. // View the response headers
  876. function webdeveloper_viewResponseHeaders()
  877. {
  878.     const oldTab             = getBrowser().selectedTab;
  879.     const oldURL             = window.content.document.documentURI;
  880.     const preferencesService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
  881.     const request            = new XMLHttpRequest();
  882.     const stringBundle       = document.getElementById("webdeveloper-string-bundle");
  883.     const title              = stringBundle.getFormattedString("webdeveloper_viewResponseHeadersTitle", [oldURL]);
  884.  
  885.     var generatedPage   = null;
  886.     var headerElement   = null;
  887.     var linkElement     = null;
  888.     var preElement      = null;
  889.     var responseHeaders = null;
  890.  
  891.     generatedPage = webdeveloper_generatePage("");
  892.  
  893.     // This must be done to make generated content render
  894.     request.open("GET", oldURL, false);
  895.     request.send("");
  896.     responseHeaders = request.getAllResponseHeaders();
  897.  
  898.     generatedPage.content.document.title = title;
  899.  
  900.     linkElement = generatedPage.content.document.createElement("link");
  901.     linkElement.setAttribute("href", "chrome://webdeveloper/content/stylesheets/generated_content.css");
  902.     linkElement.setAttribute("media", "all");
  903.     linkElement.setAttribute("rel", "stylesheet");
  904.     linkElement.setAttribute("type", "text/css");
  905.     generatedPage.content.document.getElementsByTagName("head")[0].appendChild(linkElement);
  906.  
  907.     headerElement = generatedPage.content.document.createElement("h1");
  908.     headerElement.appendChild(generatedPage.content.document.createTextNode(title));
  909.     generatedPage.content.document.body.appendChild(headerElement);
  910.  
  911.     preElement = generatedPage.content.document.createElement("pre");
  912.     preElement.appendChild(generatedPage.content.document.createTextNode(responseHeaders));
  913.     generatedPage.content.document.body.appendChild(preElement);
  914.  
  915.     // If the open tabs in background preference is set to true
  916.     if(preferencesService.prefHasUserValue("webdeveloper.open.tabs.background") && preferencesService.getBoolPref("webdeveloper.open.tabs.background"))
  917.     {
  918.         getBrowser().selectedTab = oldTab;
  919.     }
  920. }
  921.