home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2005 October / DPPCPRO1005.ISO / Download / Web Developer / webdeveloper.xpi / chrome / webdeveloper.jar / content / webdeveloper / forms.js < prev    next >
Encoding:
JavaScript  |  2005-03-21  |  34.0 KB  |  804 lines

  1. // Clears all radio buttons
  2. function webdeveloper_clearRadioButtons()
  3. {
  4.     const mainTabBox   = getBrowser().mTabBox;
  5.     const documentList = webdeveloper_getDocuments(getBrowser().browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  6.     const stringBundle = document.getElementById("webdeveloper-string-bundle");
  7.  
  8.     var inputElement     = null;
  9.     var inputElementList = null;
  10.     var pageDocument     = null;
  11.  
  12.     // Loop through the documents
  13.     for(var i = 0; i < documentList.length; i++)
  14.     {
  15.         pageDocument     = documentList[i];
  16.         inputElementList = pageDocument.getElementsByTagName("input");
  17.  
  18.         // Loop through all the input tags
  19.         for(var j = 0; j < inputElementList.length; j++)
  20.         {
  21.             inputElement = inputElementList[j];
  22.  
  23.             // If the element is a radio button
  24.             if(inputElement.hasAttribute("type") && inputElement.getAttribute("type").toLowerCase() == "radio")
  25.             {
  26.                 inputElement.checked = false;
  27.             }
  28.             else
  29.             {
  30.                 // This stops the fields reordering
  31.                 inputElement.setAttribute("type", inputElement.getAttribute("type"));
  32.             }
  33.         }
  34.     }
  35.  
  36.     alert(stringBundle.getString("webdeveloper_clearRadioButtonsResult"));
  37. }
  38.  
  39. // Displays/hides the form details for the page
  40. function webdeveloper_displayFormDetails(element, applyStyle)
  41. {
  42.     const display      = element.getAttribute("checked");
  43.     const mainTabBox   = getBrowser().mTabBox;
  44.     const documentList = webdeveloper_getDocuments(getBrowser().browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  45.  
  46.     var inputElement        = null;
  47.     var inputElementList    = null;
  48.     var pageDocument        = null;
  49.     var selectElement       = null;
  50.     var selectElementList   = null;
  51.     var spanElement         = null;
  52.     var spanElementList     = null;
  53.     var text                = null;
  54.     var textareaElement     = null;
  55.     var textareaElementList = null;
  56.  
  57.     // Loop through the documents
  58.     for(var i = 0; i < documentList.length; i++)
  59.     {
  60.         pageDocument        = documentList[i];
  61.         inputElementList    = pageDocument.getElementsByTagName("input");
  62.         selectElementList   = pageDocument.getElementsByTagName("select");
  63.         spanElementList     = pageDocument.getElementsByTagName("span");
  64.         textareaElementList = pageDocument.getElementsByTagName("textarea");
  65.  
  66.         // Loop through all the span tags
  67.         for(var j = 0; j < spanElementList.length; j++)
  68.         {
  69.             spanElement = spanElementList[j];
  70.  
  71.             // If the class exists and is set to webdeveloper-form-span
  72.             if(spanElement.hasAttribute("class") && spanElement.getAttribute("class") == "webdeveloper-form-span")
  73.             {
  74.                 spanElement.parentNode.removeChild(spanElement);
  75.                 j--;
  76.             }
  77.         }
  78.  
  79.         // Loop through all the input tags
  80.         for(j = 0; j < inputElementList.length; j++)
  81.         {
  82.             inputElement = inputElementList[j];
  83.  
  84.             // If displaying
  85.             if(display)
  86.             {
  87.                 spanElement = pageDocument.createElement("span");
  88.                 text        = "<input";
  89.  
  90.                 // If the element is hidden
  91.                 if(inputElement.hasAttribute("type") && inputElement.getAttribute("type").toLowerCase() == "hidden")
  92.                 {
  93.                     inputElement.setAttribute("type", "text");
  94.  
  95.                     // If the element has a class attribute
  96.                     if(inputElement.hasAttribute("class"))
  97.                     {
  98.                         inputElement.setAttribute("class", inputElement.getAttribute("class") + " webdeveloper-unhidden");
  99.                     }
  100.                     else
  101.                     {
  102.                         inputElement.setAttribute("class", "webdeveloper-unhidden");
  103.                     }
  104.                 }
  105.  
  106.                 // If the element has an id attribute
  107.                 if(inputElement.hasAttribute("id"))
  108.                 {
  109.                     text += ' id="' + inputElement.getAttribute("id") + '"';
  110.                 }
  111.  
  112.                 // If the element has an name attribute
  113.                 if(inputElement.hasAttribute("name"))
  114.                 {
  115.                     text += ' name="' + inputElement.getAttribute("name") + '"';
  116.                 }
  117.  
  118.                 // If the element has a size attribute
  119.                 if(inputElement.hasAttribute("size"))
  120.                 {
  121.                     text += ' size="' + inputElement.getAttribute("size") + '"';
  122.                 }
  123.  
  124.                 // If the element has a maxlength attribute
  125.                 if(inputElement.hasAttribute("maxlength"))
  126.                 {
  127.                     text += ' maxlength="' + inputElement.getAttribute("maxlength") + '"';
  128.                 }
  129.  
  130.                 text += ">";
  131.  
  132.                 spanElement.setAttribute("class", "webdeveloper-form-span");
  133.                 spanElement.appendChild(pageDocument.createTextNode(text));
  134.                 inputElement.parentNode.insertBefore(spanElement, inputElement);
  135.             }
  136.             else if(inputElement.hasAttribute("class") && inputElement.getAttribute("class").indexOf("webdeveloper-unhidden") != -1)
  137.             {
  138.                 inputElement.setAttribute("type", "hidden");
  139.                 inputElement.setAttribute("class", webdeveloper_removeSubstring(inputElement.getAttribute("class"), "webdeveloper-unhidden").trim());
  140.             }
  141.  
  142.             // This stops the fields reordering
  143.             inputElement.setAttribute("type", inputElement.getAttribute("type"));
  144.         }
  145.  
  146.         // Loop through all the select tags
  147.         for(j = 0; j < selectElementList.length; j++)
  148.         {
  149.             selectElement = selectElementList[j];
  150.  
  151.             // If displaying
  152.             if(display)
  153.             {
  154.                 spanElement = pageDocument.createElement("span");
  155.                 text        = "<select";
  156.  
  157.                 // If the element has an id attribute
  158.                 if(selectElement.hasAttribute("id"))
  159.                 {
  160.                     text += ' id="' + selectElement.getAttribute("id") + '"';
  161.                 }
  162.  
  163.                 // If the element has an name attribute
  164.                 if(selectElement.hasAttribute("name"))
  165.                 {
  166.                     text += ' name="' + selectElement.getAttribute("name") + '"';
  167.                 }
  168.  
  169.                 text += ">";
  170.  
  171.                 spanElement.setAttribute("class", "webdeveloper-form-span");
  172.                 spanElement.appendChild(pageDocument.createTextNode(text));
  173.                 selectElement.parentNode.insertBefore(spanElement, selectElement);
  174.             }
  175.         }
  176.  
  177.         // Loop through all the textarea tags
  178.         for(j = 0; j < textareaElementList.length; j++)
  179.         {
  180.             textareaElement = textareaElementList[j];
  181.  
  182.             // If displaying
  183.             if(display)
  184.             {
  185.                 spanElement = pageDocument.createElement("span");
  186.                 text        = "<textarea";
  187.  
  188.                 // If the element has an id attribute
  189.                 if(textareaElement.hasAttribute("id"))
  190.                 {
  191.                     text += ' id="' + textareaElement.getAttribute("id") + '"';
  192.                 }
  193.  
  194.                 // If the element has an name attribute
  195.                 if(textareaElement.hasAttribute("name"))
  196.                 {
  197.                     text += ' name="' + textareaElement.getAttribute("name") + '"';
  198.                 }
  199.  
  200.                 text += ">";
  201.  
  202.                 spanElement.setAttribute("class", "webdeveloper-form-span");
  203.                 spanElement.appendChild(pageDocument.createTextNode(text));
  204.                 textareaElement.parentNode.insertBefore(spanElement, textareaElement);
  205.             }
  206.         }
  207.     }
  208.  
  209.     webdeveloper_toggleStyleSheet(element, "chrome://webdeveloper/content/stylesheets/display_form_details.css", "webdeveloper-display-form-details", applyStyle);
  210.     webdeveloper_toggleFeatureTooltipStyles(element, "webdeveloper-display-form-details-tooltips", "*:before, .webdeveloper-form-span");
  211. }
  212.  
  213. // Enables form auto completion
  214. function webdeveloper_enableFormAutoCompletion()
  215. {
  216.     const mainTabBox   = getBrowser().mTabBox;
  217.     const documentList = webdeveloper_getDocuments(getBrowser().browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  218.     const stringBundle = document.getElementById("webdeveloper-string-bundle");
  219.  
  220.     var enabledForms = 0;
  221.     var form         = null;
  222.     var formList     = null;
  223.     var pageDocument = null;
  224.  
  225.     // Loop through the documents
  226.     for(var i = 0; i < documentList.length; i++)
  227.     {
  228.         pageDocument = documentList[i];
  229.         formList     = pageDocument.getElementsByTagName("form");
  230.  
  231.         // Loop through all the forms
  232.         for(var j = 0; j < formList.length; j++)
  233.         {
  234.             form = formList[j];
  235.  
  236.             // If this form has autocomplete off
  237.             if(form.hasAttribute("autocomplete") && form.getAttribute("autocomplete").toLowerCase() == "off")
  238.             {
  239.                 form.setAttribute("autocomplete", "on");
  240.                 enabledForms++;
  241.             }
  242.         }
  243.     }
  244.  
  245.     // If one form was enabled
  246.     if(enabledForms == 1)
  247.     {
  248.         alert(stringBundle.getString("webdeveloper_enableAutoCompletionSingleResult"));
  249.     }
  250.     else
  251.     {
  252.         alert(stringBundle.getFormattedString("webdeveloper_enableAutoCompletionMultipleResult", [enabledForms]));
  253.     }
  254. }
  255.  
  256. // Makes all the form fields writable
  257. function webdeveloper_makeFormFieldsWritable()
  258. {
  259.     const mainTabBox   = getBrowser().mTabBox;
  260.     const documentList = webdeveloper_getDocuments(getBrowser().browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  261.     const stringBundle = document.getElementById("webdeveloper-string-bundle");
  262.  
  263.     var writableFields      = 0;
  264.     var inputElement        = null;
  265.     var inputElementType    = null;
  266.     var inputElementList    = null;
  267.     var pageDocument        = null;
  268.     var textAreaElement     = null;
  269.     var textAreaElementList = null;
  270.  
  271.     // Loop through the documents
  272.     for(var i = 0; i < documentList.length; i++)
  273.     {
  274.         pageDocument        = documentList[i];
  275.         inputElementList    = pageDocument.getElementsByTagName("input");
  276.         textAreaElementList = pageDocument.getElementsByTagName("textarea");
  277.  
  278.         // Loop through all the input tags
  279.         for(var j = 0; j < inputElementList.length; j++)
  280.         {
  281.             inputElement = inputElementList[j];
  282.  
  283.             // If the input element has a read only attribute
  284.             if(inputElement.hasAttribute("readonly"))
  285.             {
  286.                 inputElement.removeAttribute("readonly");
  287.                 writableFields++;
  288.             }
  289.         }
  290.  
  291.         // Loop through all the text area tags
  292.         for(j = 0; j < textAreaElementList.length; j++)
  293.         {
  294.             textAreaElement = textAreaElementList[j];
  295.  
  296.             // If the text area element has a read only attribute
  297.             if(textAreaElement.hasAttribute("readonly"))
  298.             {
  299.                 textAreaElement.removeAttribute("readonly");
  300.                 writableFields++;
  301.             }
  302.         }
  303.     }
  304.  
  305.     // If one field was made writable
  306.     if(writableFields == 1)
  307.     {
  308.         alert(stringBundle.getString("webdeveloper_makeFormFieldsWritableSingleResult"));
  309.     }
  310.     else
  311.     {
  312.         alert(stringBundle.getFormattedString("webdeveloper_makeFormFieldsWritableMultipleResult", [writableFields]));
  313.     }
  314. }
  315.  
  316. // Populates the form fields on the page
  317. function webdeveloper_populateFormFields()
  318. {
  319.     const mainTabBox         = getBrowser().mTabBox;
  320.     const documentList       = webdeveloper_getDocuments(getBrowser().browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  321.     const preferencesService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
  322.  
  323.     var inputElement        = null;
  324.     var inputElementList    = null;
  325.     var inputElementName    = null;
  326.     var inputElementType    = null;
  327.     var inputElementValue   = null;
  328.     var pageDocument        = null;
  329.     var selectElement       = null;
  330.     var selectElementList   = null;
  331.     var textAreaElement     = null;
  332.     var textAreaElementList = null;
  333.  
  334.     // Loop through the documents
  335.     for(var i = 0; i < documentList.length; i++)
  336.     {
  337.         pageDocument        = documentList[i];
  338.         inputElementList    = pageDocument.getElementsByTagName("input");
  339.         selectElementList   = pageDocument.getElementsByTagName("select");
  340.         textAreaElementList = pageDocument.getElementsByTagName("textarea");
  341.  
  342.         // Loop through all the input tags
  343.         for(var j = 0; j < inputElementList.length; j++)
  344.         {
  345.             inputElement      = inputElementList[j];
  346.             inputElementType  = inputElement.getAttribute("type");
  347.             inputElementValue = inputElement.value;
  348.  
  349.             // If the input element is not disabled
  350.             if(!inputElement.disabled)
  351.             {
  352.                 // If the input element value is not set and the type is not set or is password or text
  353.                 if((!inputElementValue || inputElementValue.trim() == "") && (!inputElementType || inputElementType == "password" || inputElementType == "text"))
  354.                 {
  355.                     inputElementName = inputElement.getAttribute("name");
  356.  
  357.                     // If the input element type is text, the name contains email and the populate form fields email preference is set
  358.                     if(inputElementType == "text" && inputElementName.toLowerCase().indexOf("email") != -1 && preferencesService.prefHasUserValue("webdeveloper.populate.form.fields.email"))
  359.                     {
  360.                         inputElement.value = preferencesService.getComplexValue("webdeveloper.populate.form.fields.email", Components.interfaces.nsISupportsString).data.trim();
  361.                     }
  362.                     else
  363.                     {
  364.                         inputElement.value = inputElementName;
  365.                     }
  366.                 }
  367.                 else if(inputElementType == "checkbox" || inputElementType == "radio")
  368.                 {
  369.                     inputElement.setAttribute("checked", true);
  370.                 }
  371.             }
  372.         }
  373.  
  374.         // Loop through all the select tags
  375.         for(j = 0; j < selectElementList.length; j++)
  376.         {
  377.             selectElement = selectElementList[j];
  378.  
  379.             // If the select element is not disabled and the size is set greater than 1
  380.             if(!selectElement.disabled && selectElement.hasAttribute("size") && selectElement.getAttribute("size") > 1)
  381.             {
  382.                 selectElement.selectedIndex = 0;
  383.             }
  384.         }
  385.  
  386.         // Loop through all the text area tags
  387.         for(j = 0; j < textAreaElementList.length; j++)
  388.         {
  389.             textAreaElement = textAreaElementList[j];
  390.  
  391.             // If the text area element is not disabled and the value is not set
  392.             if(!textAreaElement.disabled && textAreaElement.value.trim() == "")
  393.             {
  394.                 textAreaElement.value = textAreaElement.getAttribute("name");
  395.             }
  396.         }
  397.     }
  398. }
  399.  
  400. // Removes all maximum lengths on form elements
  401. function webdeveloper_removeMaximumLengths()
  402. {
  403.     const mainTabBox   = getBrowser().mTabBox;
  404.     const documentList = webdeveloper_getDocuments(getBrowser().browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  405.     const stringBundle = document.getElementById("webdeveloper-string-bundle");
  406.  
  407.     var inputElement     = null;
  408.     var inputElementList = null;
  409.     var pageDocument     = null;
  410.     var removed          = 0;
  411.  
  412.     // Loop through the documents
  413.     for(var i = 0; i < documentList.length; i++)
  414.     {
  415.         pageDocument     = documentList[i];
  416.         inputElementList = pageDocument.getElementsByTagName("input");
  417.  
  418.         // Loop through all the input tags
  419.         for(var j = 0; j < inputElementList.length; j++)
  420.         {
  421.             inputElement = inputElementList[j];
  422.  
  423.             // If the element has a maxlength attribute
  424.             if(inputElement.hasAttribute("maxlength"))
  425.             {
  426.                 inputElement.removeAttribute("maxlength");
  427.                 removed++;
  428.             }
  429.         }
  430.     }
  431.  
  432.     // If one maxlength was removed
  433.     if(removed == 1)
  434.     {
  435.         alert(stringBundle.getString("webdeveloper_removeMaximumLengthsSingleResult"));
  436.     }
  437.     else
  438.     {
  439.         alert(stringBundle.getFormattedString("webdeveloper_removeMaximumLengthsMultipleResult", [removed]));
  440.     }
  441. }
  442.  
  443. // Shows all passwords on a form
  444. function webdeveloper_showPasswords()
  445. {
  446.     const mainTabBox   = getBrowser().mTabBox;
  447.     const documentList = webdeveloper_getDocuments(getBrowser().browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  448.     const stringBundle = document.getElementById("webdeveloper-string-bundle");
  449.  
  450.     var inputElement     = null;
  451.     var inputElementList = null;
  452.     var pageDocument     = null;
  453.     var shownPasswords   = 0;
  454.  
  455.     // Loop through the documents
  456.     for(var i = 0; i < documentList.length; i++)
  457.     {
  458.         pageDocument     = documentList[i];
  459.         inputElementList = pageDocument.getElementsByTagName("input");
  460.  
  461.         // Loop through all the input tags
  462.         for(var j = 0; j < inputElementList.length; j++)
  463.         {
  464.             inputElement = inputElementList[j];
  465.  
  466.             // If the element is password
  467.             if(inputElement.hasAttribute("type") && inputElement.getAttribute("type").toLowerCase() == "password")
  468.             {
  469.                 inputElement.setAttribute("type", "text");
  470.                 shownPasswords++;
  471.             }
  472.             else
  473.             {
  474.                 // This stops the fields reordering
  475.                 inputElement.setAttribute("type", inputElement.getAttribute("type"));
  476.             }
  477.         }
  478.     }
  479.  
  480.     // If one password was shown
  481.     if(shownPasswords == 1)
  482.     {
  483.         alert(stringBundle.getString("webdeveloper_showPasswordsSingleResult"));
  484.     }
  485.     else
  486.     {
  487.         alert(stringBundle.getFormattedString("webdeveloper_showPasswordsMultipleResult", [shownPasswords]));
  488.     }
  489. }
  490.  
  491. // Toggles form methods
  492. function webdeveloper_toggleFormMethods(method)
  493. {
  494.     const displayFormDetailsMenu = document.getElementById("webdeveloper-display-form-details-menu");
  495.     const mainTabBox             = getBrowser().mTabBox;
  496.     const documentList           = webdeveloper_getDocuments(getBrowser().browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  497.     const stringBundle           = document.getElementById("webdeveloper-string-bundle");
  498.  
  499.     var convertedForms = 0;
  500.     var form           = null;
  501.     var formList       = null;
  502.     var pageDocument   = null;
  503.  
  504.     // Loop through the documents
  505.     for(var i = 0; i < documentList.length; i++)
  506.     {
  507.         pageDocument = documentList[i];
  508.         formList     = pageDocument.getElementsByTagName("form");
  509.  
  510.         // Loop through all the forms
  511.         for(var j = 0; j < formList.length; j++)
  512.         {
  513.             form = formList[j];
  514.  
  515.             // If this form is not already the right method
  516.             if(form.hasAttribute("method") && form.getAttribute("method") != method)
  517.             {
  518.                 form.setAttribute("method", method);
  519.                 convertedForms++;
  520.             }
  521.         }
  522.     }
  523.  
  524.     // Reapply the display form details style sheet if it is currently on - fixes bug with form method not updating
  525.     if(displayFormDetailsMenu.getAttribute("checked"))
  526.     {
  527.         webdeveloper_removeStyleSheet("webdeveloper-display-form-details", false);
  528.         webdeveloper_displayFormDetails(displayFormDetailsMenu, false);
  529.     }
  530.  
  531.     // If one form was converted
  532.     if(convertedForms == 1)
  533.     {
  534.         alert(stringBundle.getFormattedString("webdeveloper_toggleFormMethodsSingleResult", [method.toUpperCase()]));
  535.     }
  536.     else
  537.     {
  538.         alert(stringBundle.getFormattedString("webdeveloper_toggleFormMethodsMultipleResult", [convertedForms, method.toUpperCase()]));
  539.     }
  540. }
  541.  
  542. // Displays all the forms for the page
  543. function webdeveloper_viewFormInformation()
  544. {
  545.     const mainTabBox         = getBrowser().mTabBox;
  546.     const documentList       = webdeveloper_getDocuments(getBrowser().browsers[mainTabBox.selectedIndex].contentWindow, new Array());
  547.     const oldTab             = getBrowser().selectedTab;
  548.     const oldURL             = getBrowser().currentURI.spec;
  549.     const preferencesService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
  550.     const request            = new XMLHttpRequest();
  551.     const stringBundle       = document.getElementById("webdeveloper-string-bundle");
  552.     const title              = stringBundle.getFormattedString("webdeveloper_viewFormInformationTitle", [oldURL]);
  553.  
  554.     var cellDataElement   = null;
  555.     var cellHeaderElement = null;
  556.     var documentURL       = null;
  557.     var elementType       = null;
  558.     var elementValue      = null;
  559.     var form              = null;
  560.     var formElement       = null;
  561.     var formElementId     = null;
  562.     var formElementList   = null;
  563.     var formLength        = null;
  564.     var formList          = null;
  565.     var generatedPage     = null;
  566.     var headerElement     = null;
  567.     var label             = null;
  568.     var labelList         = null;
  569.     var labelValue        = null;
  570.     var linkElement       = null;
  571.     var pageDocument      = null;
  572.     var pElement          = null;
  573.     var preElement        = null;
  574.     var tableElement      = null;
  575.     var tableRowElement   = null;
  576.  
  577.     generatedPage = webdeveloper_generatePage("");
  578.  
  579.     // This must be done to make generated content render
  580.     request.open("get", "about:blank", false);
  581.     request.send("");
  582.  
  583.     generatedPage.content.document.title = title;
  584.  
  585.     linkElement = generatedPage.content.document.createElement("link");
  586.     linkElement.setAttribute("href", "chrome://webdeveloper/content/stylesheets/generated_content.css");
  587.     linkElement.setAttribute("media", "all");
  588.     linkElement.setAttribute("rel", "stylesheet");
  589.     linkElement.setAttribute("type", "text/css");
  590.     generatedPage.content.document.getElementsByTagName("head")[0].appendChild(linkElement);
  591.  
  592.     headerElement = generatedPage.content.document.createElement("h1");
  593.     headerElement.appendChild(generatedPage.content.document.createTextNode(title));
  594.     generatedPage.content.document.body.appendChild(headerElement);
  595.  
  596.     // Loop through the documents
  597.     for(var i = 0; i < documentList.length; i++)
  598.     {
  599.         pageDocument = documentList[i];
  600.         documentURL  = pageDocument.documentURI;
  601.         formList     = pageDocument.getElementsByTagName("form");
  602.         formLength   = formList.length;
  603.  
  604.         headerElement = generatedPage.content.document.createElement("h2");
  605.         linkElement   = generatedPage.content.document.createElement("a");
  606.         linkElement.setAttribute("href", documentURL);
  607.         linkElement.appendChild(generatedPage.content.document.createTextNode(documentURL));
  608.         headerElement.appendChild(linkElement);
  609.         generatedPage.content.document.body.appendChild(headerElement);
  610.  
  611.         // If there are no forms
  612.         if(formLength == 0)
  613.         {
  614.             pElement = generatedPage.content.document.createElement("p");
  615.             pElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_noForms")));
  616.             generatedPage.content.document.body.appendChild(pElement);
  617.         }
  618.         else
  619.         {
  620.             labelList = pageDocument.getElementsByTagName("label");
  621.  
  622.             // Loop through the forms
  623.             for(var j = 0; j < formLength; j++)
  624.             {
  625.                 form            = formList[j];
  626.                 formElementList = form.elements;
  627.                 headerElement   = generatedPage.content.document.createElement("h2");
  628.                 tableElement    = generatedPage.content.document.createElement("table");
  629.                 tableRowElement = generatedPage.content.document.createElement("tr");
  630.  
  631.                 headerElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewFormInformationForm")));
  632.                 generatedPage.content.document.body.appendChild(headerElement);
  633.  
  634.                 //  Form id heading
  635.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  636.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewFormInformationId")));
  637.                 tableRowElement.appendChild(cellHeaderElement);
  638.  
  639.                 //  Form name heading
  640.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  641.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewFormInformationName")));
  642.                 tableRowElement.appendChild(cellHeaderElement);
  643.  
  644.                 //  Form method heading
  645.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  646.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewFormInformationMethod")));
  647.                 tableRowElement.appendChild(cellHeaderElement);
  648.  
  649.                 //  Form action heading
  650.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  651.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewFormInformationAction")));
  652.                 tableRowElement.appendChild(cellHeaderElement);
  653.                 tableElement.appendChild(tableRowElement);
  654.  
  655.                 tableRowElement = generatedPage.content.document.createElement("tr");
  656.  
  657.                 //  Form id
  658.                 cellDataElement = generatedPage.content.document.createElement("td");
  659.                 cellDataElement.appendChild(generatedPage.content.document.createTextNode(form.getAttribute("id")));
  660.                 tableRowElement.appendChild(cellDataElement);
  661.  
  662.                 //  Form name
  663.                 cellDataElement = generatedPage.content.document.createElement("td");
  664.                 cellDataElement.appendChild(generatedPage.content.document.createTextNode(form.getAttribute("name")));
  665.                 tableRowElement.appendChild(cellDataElement);
  666.  
  667.                 //  Form method
  668.                 cellDataElement = generatedPage.content.document.createElement("td");
  669.                 cellDataElement.appendChild(generatedPage.content.document.createTextNode(form.getAttribute("method")));
  670.                 tableRowElement.appendChild(cellDataElement);
  671.  
  672.                 //  Form action
  673.                 cellDataElement = generatedPage.content.document.createElement("td");
  674.                 cellDataElement.appendChild(generatedPage.content.document.createTextNode(form.getAttribute("action")));
  675.                 tableRowElement.appendChild(cellDataElement);
  676.                 tableElement.appendChild(tableRowElement);
  677.  
  678.                 generatedPage.content.document.body.appendChild(tableElement);
  679.  
  680.                 pElement = generatedPage.content.document.createElement("p");
  681.                 generatedPage.content.document.body.appendChild(pElement);
  682.  
  683.                 headerElement = generatedPage.content.document.createElement("h2");
  684.                 tableElement  = generatedPage.content.document.createElement("table");
  685.                 tableRowElement = generatedPage.content.document.createElement("tr");
  686.  
  687.                 headerElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewFormInformationElements")));
  688.                 generatedPage.content.document.body.appendChild(headerElement);
  689.  
  690.                 //  Element label heading
  691.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  692.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewFormInformationLabel")));
  693.                 tableRowElement.appendChild(cellHeaderElement);
  694.  
  695.                 //  Element id heading
  696.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  697.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewFormInformationId")));
  698.                 tableRowElement.appendChild(cellHeaderElement);
  699.  
  700.                 //  Element name heading
  701.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  702.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewFormInformationName")));
  703.                 tableRowElement.appendChild(cellHeaderElement);
  704.                 tableElement.appendChild(tableRowElement);
  705.  
  706.                 //  Element type heading
  707.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  708.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewFormInformationType")));
  709.                 tableRowElement.appendChild(cellHeaderElement);
  710.                 tableElement.appendChild(tableRowElement);
  711.  
  712.                 //  Element value heading
  713.                 cellHeaderElement = generatedPage.content.document.createElement("th");
  714.                 cellHeaderElement.appendChild(generatedPage.content.document.createTextNode(stringBundle.getString("webdeveloper_viewFormInformationValue")));
  715.                 tableRowElement.appendChild(cellHeaderElement);
  716.                 tableElement.appendChild(tableRowElement);
  717.  
  718.                 // Loop through the form elements
  719.                 for(var k = 0; k < formElementList.length; k++)
  720.                 {
  721.                     formElement     = formElementList[k];
  722.                     formElementId   = formElement.getAttribute("id");
  723.                     elementType     = formElement.tagName.toLowerCase();
  724.                     elementValue    = "";
  725.                     label           = "";
  726.                     labelValue      = "";
  727.                     tableRowElement = generatedPage.content.document.createElement("tr");
  728.  
  729.                     // If the element has an id
  730.                     if(formElementId)
  731.                     {
  732.                         // Loop through the labels
  733.                         for(var l = 0; l < labelList.length; l++)
  734.                         {
  735.                             label = labelList[l];
  736.  
  737.                             // If this is the label for the element
  738.                             if(label.hasAttribute("for") && label.getAttribute("for") == formElementId)
  739.                             {
  740.                                 labelValue = label.innerHTML;
  741.                             }
  742.                         }
  743.                     }
  744.  
  745.                     // If this is an odd row
  746.                     if(k % 2 != 0)
  747.                     {
  748.                         tableRowElement.setAttribute("class", "odd");
  749.                     }
  750.  
  751.                     // If this is an input element
  752.                     if(elementType == "input")
  753.                     {
  754.                         elementType  = formElement.getAttribute("type");
  755.                         elementValue = formElement.value;
  756.                     }
  757.                     else if(elementType == "textarea")
  758.                     {
  759.                         elementValue = formElement.value;
  760.                     }
  761.  
  762.                     //  Element label
  763.                     cellDataElement = generatedPage.content.document.createElement("td");
  764.                     cellDataElement.appendChild(generatedPage.content.document.createTextNode(labelValue));
  765.                     tableRowElement.appendChild(cellDataElement);
  766.                     tableElement.appendChild(tableRowElement);
  767.  
  768.                     //  Element id
  769.                     cellDataElement = generatedPage.content.document.createElement("td");
  770.                     cellDataElement.appendChild(generatedPage.content.document.createTextNode(formElementId));
  771.                     tableRowElement.appendChild(cellDataElement);
  772.  
  773.                     //  Element name
  774.                     cellDataElement = generatedPage.content.document.createElement("td");
  775.                     cellDataElement.appendChild(generatedPage.content.document.createTextNode(formElement.getAttribute("name")));
  776.                     tableRowElement.appendChild(cellDataElement);
  777.                     tableElement.appendChild(tableRowElement);
  778.  
  779.                     //  Element type
  780.                     cellDataElement = generatedPage.content.document.createElement("td");
  781.                     cellDataElement.appendChild(generatedPage.content.document.createTextNode(elementType));
  782.                     tableRowElement.appendChild(cellDataElement);
  783.                     tableElement.appendChild(tableRowElement);
  784.  
  785.                     //  Element value
  786.                     cellDataElement = generatedPage.content.document.createElement("td");
  787.                     cellDataElement.appendChild(generatedPage.content.document.createTextNode(elementValue));
  788.                     tableRowElement.appendChild(cellDataElement);
  789.                     tableElement.appendChild(tableRowElement);
  790.                 }
  791.  
  792.                 generatedPage.content.document.body.appendChild(tableElement);
  793.                 generatedPage.content.document.body.appendChild(generatedPage.content.document.createElement("hr"));
  794.             }
  795.         }
  796.     }
  797.  
  798.     // If the open tabs in background preference is set to true
  799.     if(preferencesService.prefHasUserValue("webdeveloper.open.tabs.background") && preferencesService.getBoolPref("webdeveloper.open.tabs.background"))
  800.     {
  801.         getBrowser().selectedTab = oldTab;
  802.     }
  803. }
  804.