--- /dev/null
+var webdeveloper_accessibilityValidator = new WebDeveloperValidateAccessibility();
+var webdeveloper_cssValidator = new WebDeveloperValidateCSS();
+var webdeveloper_htmlValidator = new WebDeveloperValidateHTML();
+var webdeveloper_selectedValidationTab = -1;
+
+// Clears the accessibility validation details for the page
+function webdeveloper_clearPageAccessibilityValidation()
+{
+ var validationButton = document.getElementById("webdeveloper-accessibility-validation");
+
+ // If the validation button is set
+ if(validationButton)
+ {
+ validationButton.label = "";
+
+ // If the validation button has a class attribute
+ if(validationButton.hasAttribute("class"))
+ {
+ validationButton.removeAttribute("class");
+ }
+ }
+
+ webdeveloper_accessibilityValidator.cleanUp();
+}
+
+// Clears the CSS validation details for the page
+function webdeveloper_clearPageCSSValidation()
+{
+ var validationButton = document.getElementById("webdeveloper-css-validation");
+
+ // If the validation button is set
+ if(validationButton)
+ {
+ validationButton.label = "";
+
+ // If the validation button has a class attribute
+ if(validationButton.hasAttribute("class"))
+ {
+ validationButton.removeAttribute("class");
+ }
+ }
+
+ webdeveloper_cssValidator.cleanUp();
+}
+
+// Clears the HTML validation details for the page
+function webdeveloper_clearPageHTMLValidation()
+{
+ var validationButton = document.getElementById("webdeveloper-html-validation");
+
+ // If the validation button is set
+ if(validationButton)
+ {
+ validationButton.label = "";
+
+ // If the validation button has a class attribute
+ if(validationButton.hasAttribute("class"))
+ {
+ validationButton.removeAttribute("class");
+ }
+ }
+
+ webdeveloper_htmlValidator.cleanUp();
+}
+
+// Displays page validation
+function webdeveloper_displayPageValidation(element)
+{
+ var checked = false;
+ var windowContent = window.document.getElementById("content");
+
+ // If the element is set
+ if(element)
+ {
+ checked = element.getAttribute("checked");
+ }
+
+ webdeveloper_configureElement(document.getElementById("webdeveloper-page-validation-toolbar"), "hidden", !checked);
+
+ // If the window content is set
+ if(windowContent)
+ {
+ var tabBox = windowContent.mTabBox;
+
+ webdeveloper_clearPageAccessibilityValidation();
+ webdeveloper_clearPageCSSValidation();
+ webdeveloper_clearPageHTMLValidation();
+
+ // If displaying page validation
+ if(checked)
+ {
+ var contentDocument = webdeveloper_getContentDocument();
+
+ webdeveloper_updatePageAccessibilityValidation(contentDocument);
+ webdeveloper_updatePageCSSValidation(contentDocument);
+ webdeveloper_updatePageHTMLValidation(contentDocument);
+
+ windowContent.addEventListener("load", webdeveloper_pageValidationLoad, true);
+ windowContent.addEventListener("unload", webdeveloper_pageValidationUnload, true);
+
+ // If the tab box is set
+ if(tabBox)
+ {
+ tabBox.addEventListener("select", webdeveloper_tabValidationSelect, false);
+ }
+ }
+ else
+ {
+ // Try to remove the event listener
+ try
+ {
+ windowContent.removeEventListener("load", webdeveloper_pageValidationLoad, true);
+ }
+ catch(exception)
+ {
+ // Do nothing
+ }
+
+ // Try to remove the event listener
+ try
+ {
+ windowContent.removeEventListener("unload", webdeveloper_pageValidationUnload, true);
+ }
+ catch(exception)
+ {
+ // Do nothing
+ }
+
+ // If the tab box is set
+ if(tabBox)
+ {
+ // Try to remove the event listener
+ try
+ {
+ tabBox.removeEventListener("select", webdeveloper_tabValidationSelect, false);
+ }
+ catch(exception)
+ {
+ // Do nothing
+ }
+ }
+ }
+ }
+
+ webdeveloper_toggleAppliedStyle(element, "webdeveloper-display-page-validation");
+}
+
+// Checks if the page is validatable
+function webdeveloper_isValidatablePage(uri)
+{
+ // If the URI is set and is validatable
+ if(uri && uri != "about:blank" && uri != "http://www.hermish.com/check_this.cfm" && uri != "http://jigsaw.w3.org/css-validator/validator" && uri != "http://validator.w3.org/check")
+ {
+ return true;
+ }
+
+ return false;
+}
+
+// Handles the page being loaded
+function webdeveloper_pageValidationLoad(event)
+{
+ var eventTarget = event.target;
+
+ // If the page is the target
+ if(eventTarget && eventTarget.hasAttribute && eventTarget.hasAttribute("id") && eventTarget.getAttribute("id").toLowerCase() == "content")
+ {
+ var contentDocument = eventTarget.contentDocument;
+
+ // Try to get the original target
+ try
+ {
+ var loadedDocument = event.originalTarget;
+
+ // If the content document is set, the loaded document is set and has the same URI as the content document
+ if(contentDocument && loadedDocument && contentDocument.documentURI == loadedDocument.documentURI)
+ {
+ webdeveloper_clearPageAccessibilityValidation();
+ webdeveloper_clearPageCSSValidation();
+ webdeveloper_clearPageHTMLValidation();
+
+ // If the page is validatable
+ if(webdeveloper_isValidatablePage(contentDocument.documentURI))
+ {
+ webdeveloper_updatePageAccessibilityValidation(contentDocument);
+ webdeveloper_updatePageCSSValidation(contentDocument);
+ webdeveloper_updatePageHTMLValidation(contentDocument);
+ }
+ }
+ }
+ catch(exception)
+ {
+ // Do nothing
+ }
+ }
+}
+
+// Handles the page being unloaded
+function webdeveloper_pageValidationUnload(event)
+{
+ var eventTarget = event.target;
+
+ // Try to get the original target
+ try
+ {
+ var originalTarget = event.originalTarget;
+
+ // If the page is the target and the URI matches
+ if(eventTarget && originalTarget && eventTarget.contentDocument && eventTarget.hasAttribute && eventTarget.hasAttribute("id") && eventTarget.getAttribute("id").toLowerCase() == "content" && eventTarget.contentDocument.documentURI == originalTarget.documentURI)
+ {
+ webdeveloper_clearPageAccessibilityValidation();
+ webdeveloper_clearPageCSSValidation();
+ webdeveloper_clearPageHTMLValidation();
+ }
+ }
+ catch(exception)
+ {
+ // Do nothing
+ }
+}
+
+// Handles a tab being selected
+function webdeveloper_tabValidationSelect(event)
+{
+ var selectedTab = getBrowser().mTabBox.selectedIndex;
+
+ // If the selected tab is different
+ if(selectedTab != webdeveloper_selectedValidationTab)
+ {
+ var contentDocument = webdeveloper_getContentDocument();
+
+ webdeveloper_selectedValidationTab = selectedTab;
+
+ webdeveloper_clearPageAccessibilityValidation();
+ webdeveloper_clearPageCSSValidation();
+ webdeveloper_clearPageHTMLValidation();
+ webdeveloper_updatePageAccessibilityValidation(contentDocument);
+ webdeveloper_updatePageCSSValidation(contentDocument);
+ webdeveloper_updatePageHTMLValidation(contentDocument);
+ }
+}
+
+// Updates the accessibility validation for the page
+function webdeveloper_updatePageAccessibilityValidation(contentDocument)
+{
+ var validationButton = document.getElementById("webdeveloper-accessibility-validation");
+
+ // If the validation button is set
+ if(validationButton)
+ {
+ webdeveloper_accessibilityValidator.cleanUp();
+ webdeveloper_accessibilityValidator.validateBackgroundAccessibility(Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService).newURI(contentDocument.documentURI, null, null));
+
+ validationButton.label = document.getElementById("webdeveloper-string-bundle").getString("webdeveloper_validating");
+ }
+}
+
+// Updates the accessibility validation details for the page
+function webdeveloper_updatePageAccessibilityValidationDetails()
+{
+ // If the accessibility validation request is set and is ready
+ if(webdeveloper_accessibilityValidator.validationRequest && webdeveloper_accessibilityValidator.validationRequest.readyState == 4)
+ {
+ // Try to check the accessibility validation status
+ try
+ {
+ // If the accessibility validation status is set to success
+ if(webdeveloper_accessibilityValidator.validationRequest.status == 200)
+ {
+ var errors = webdeveloper_accessibilityValidator.parseValidationResultsByType("violation");
+ var validationButton = document.getElementById("webdeveloper-accessibility-validation");
+ var warnings = webdeveloper_accessibilityValidator.parseValidationResultsByType("caution");
+
+ // If the validation button is set
+ if(validationButton)
+ {
+ var stringBundle = document.getElementById("webdeveloper-string-bundle");
+
+ // If there are errors
+ if(errors > 0)
+ {
+ var labelValue = stringBundle.getString("webdeveloper_invalid") + ": " + errors + " " + stringBundle.getString("webdeveloper_errors").toLowerCase();
+
+ // If there are warnings
+ if(warnings > 0)
+ {
+ labelValue += ", " + warnings + " " + stringBundle.getString("webdeveloper_warnings").toLowerCase();
+ }
+
+ validationButton.label = labelValue;
+
+ validationButton.setAttribute("class", "error");
+ }
+ else if(warnings > 0)
+ {
+ validationButton.label = stringBundle.getString("webdeveloper_warning") + ": " + warnings + " " + stringBundle.getString("webdeveloper_warnings").toLowerCase();
+
+ validationButton.setAttribute("class", "warning");
+ }
+ else
+ {
+ validationButton.label = stringBundle.getString("webdeveloper_valid");
+
+ validationButton.setAttribute("class", "valid");
+ }
+ }
+ }
+ }
+ catch(exception)
+ {
+ // Do nothing
+ }
+
+ webdeveloper_accessibilityValidator.cleanUp();
+ }
+}
+
+// Updates the CSS validation for the page
+function webdeveloper_updatePageCSSValidation(contentDocument)
+{
+ var validationButton = document.getElementById("webdeveloper-css-validation");
+
+ // If the validation button is set
+ if(validationButton)
+ {
+ webdeveloper_cssValidator.cleanUp();
+ webdeveloper_cssValidator.validateBackgroundCSS(Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService).newURI(contentDocument.documentURI, null, null), webdeveloper_getDocuments(webdeveloper_getContentWindow()));
+
+ validationButton.label = document.getElementById("webdeveloper-string-bundle").getString("webdeveloper_validating");
+ }
+}
+
+// Updates the CSS validation details for the page
+function webdeveloper_updatePageCSSValidationDetails()
+{
+ // If the CSS validation request is set and is ready
+ if(webdeveloper_cssValidator.validationRequest && webdeveloper_cssValidator.validationRequest.readyState == 4)
+ {
+ // Try to check the CSS validation status
+ try
+ {
+ // If the CSS validation status is set to success
+ if(webdeveloper_cssValidator.validationRequest.status == 200)
+ {
+ var errors = webdeveloper_cssValidator.parseValidationResultsByType("errors");
+ var validationButton = document.getElementById("webdeveloper-css-validation");
+ var warnings = webdeveloper_cssValidator.parseValidationResultsByType("warnings");
+
+ // If the validation button is set
+ if(validationButton)
+ {
+ var stringBundle = document.getElementById("webdeveloper-string-bundle");
+
+ // If there are errors
+ if(errors > 0)
+ {
+ var labelValue = stringBundle.getString("webdeveloper_invalid") + ": " + errors + " " + stringBundle.getString("webdeveloper_errors").toLowerCase();
+
+ // If there are warnings
+ if(warnings > 0)
+ {
+ labelValue += ", " + warnings + " " + stringBundle.getString("webdeveloper_warnings").toLowerCase();
+ }
+
+ validationButton.label = labelValue;
+
+ validationButton.setAttribute("class", "error");
+ }
+ else if(warnings > 0)
+ {
+ validationButton.label = stringBundle.getString("webdeveloper_warning") + ": " + warnings + " " + stringBundle.getString("webdeveloper_warnings").toLowerCase();
+
+ validationButton.setAttribute("class", "warning");
+ }
+ else
+ {
+ validationButton.label = stringBundle.getString("webdeveloper_valid");
+
+ validationButton.setAttribute("class", "valid");
+ }
+ }
+ }
+ }
+ catch(exception)
+ {
+ // Do nothing
+ }
+
+ webdeveloper_cssValidator.cleanUp();
+ }
+}
+
+// Updates the HTML validation for the page
+function webdeveloper_updatePageHTMLValidation(contentDocument)
+{
+ var validationButton = document.getElementById("webdeveloper-html-validation");
+
+ // If the validation button is set
+ if(validationButton)
+ {
+ webdeveloper_htmlValidator.cleanUp();
+ webdeveloper_htmlValidator.validateBackgroundHTML(Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService).newURI(contentDocument.documentURI, null, null));
+
+ validationButton.label = document.getElementById("webdeveloper-string-bundle").getString("webdeveloper_validating");
+ }
+}
+
+// Updates the HTML validation details for the page
+function webdeveloper_updatePageHTMLValidationDetails()
+{
+ // If the HTML validation request is set and is ready
+ if(webdeveloper_htmlValidator.validationRequest && webdeveloper_htmlValidator.validationRequest.readyState == 4)
+ {
+ // Try to check the HTML validation status
+ try
+ {
+ // If the HTML validation status is set to success
+ if(webdeveloper_htmlValidator.validationRequest.status == 200)
+ {
+ var validationButton = document.getElementById("webdeveloper-html-validation");
+ var validationStatus = webdeveloper_htmlValidator.validationRequest.getResponseHeader("X-W3C-Validator-Status");
+
+ // If the validation button and validation status are set
+ if(validationButton && validationStatus)
+ {
+ var stringBundle = document.getElementById("webdeveloper-string-bundle");
+
+ // If the validation status is valid
+ if(validationStatus == "Valid")
+ {
+ validationButton.label = stringBundle.getString("webdeveloper_valid");
+
+ validationButton.setAttribute("class", "valid");
+ }
+ else
+ {
+ validationButton.label = stringBundle.getString("webdeveloper_invalid") + ": " + webdeveloper_htmlValidator.validationRequest.getResponseHeader("X-W3C-Validator-Errors") + " " + stringBundle.getString("webdeveloper_errors").toLowerCase();
+
+ validationButton.setAttribute("class", "invalid");
+ }
+ }
+ }
+ }
+ catch(exception)
+ {
+ // Do nothing
+ }
+
+ webdeveloper_htmlValidator.cleanUp();
+ }
+}