+++ /dev/null
-var webdeveloper_elementInformationBlockSelected = false;
-var webdeveloper_informationElement = null;
-
-// Creates the element information block
-function webdeveloper_createElementInformationBlock(ownerDocument)
-{
- var definitionElement = ownerDocument.createElement("dd");
- var divElement = ownerDocument.createElement("div");
- var headerElement = ownerDocument.createElement("h2");
- var listElement = ownerDocument.createElement("dl");
- var stringBundle = document.getElementById("webdeveloper-string-bundle");
- var termElement = ownerDocument.createElement("dt");
-
- headerElement.addEventListener("mousedown", webdeveloper_selectElementInformation, false);
- headerElement.addEventListener("mouseup", webdeveloper_deselectElementInformation, false);
- headerElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_elementInformation")));
- divElement.appendChild(headerElement);
-
- termElement.addEventListener("click", webdeveloper_toggleElementInformationBlock, false);
- termElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_attributes")));
- definitionElement.setAttribute("id", "webdeveloper-element-information-attributes");
- listElement.appendChild(termElement);
- listElement.appendChild(definitionElement);
- divElement.appendChild(listElement);
-
- definitionElement = ownerDocument.createElement("dd");
- listElement = ownerDocument.createElement("dl");
- termElement = ownerDocument.createElement("dt");
-
- termElement.addEventListener("click", webdeveloper_toggleElementInformationBlock, false);
- termElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_position")));
- definitionElement.setAttribute("id", "webdeveloper-element-information-position");
- listElement.appendChild(termElement);
- listElement.appendChild(definitionElement);
- divElement.appendChild(listElement);
-
- definitionElement = ownerDocument.createElement("dd");
- listElement = ownerDocument.createElement("dl");
- termElement = ownerDocument.createElement("dt");
-
- termElement.addEventListener("click", webdeveloper_toggleElementInformationBlock, false);
- termElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_other")));
- definitionElement.setAttribute("id", "webdeveloper-element-information-other");
- listElement.appendChild(termElement);
- listElement.appendChild(definitionElement);
- divElement.appendChild(listElement);
-
- definitionElement = ownerDocument.createElement("dd");
- listElement = ownerDocument.createElement("dl");
- termElement = ownerDocument.createElement("dt");
-
- termElement.addEventListener("click", webdeveloper_toggleElementInformationBlock, false);
- termElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_ancestors")));
- definitionElement.setAttribute("id", "webdeveloper-element-information-ancestors");
- listElement.appendChild(termElement);
- listElement.appendChild(definitionElement);
- divElement.appendChild(listElement);
-
- definitionElement = ownerDocument.createElement("dd");
- listElement = ownerDocument.createElement("dl");
- termElement = ownerDocument.createElement("dt");
-
- termElement.addEventListener("click", webdeveloper_toggleElementInformationBlock, false);
- termElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_children")));
- definitionElement.setAttribute("id", "webdeveloper-element-information-children");
- listElement.appendChild(termElement);
- listElement.appendChild(definitionElement);
- divElement.appendChild(listElement);
-
- divElement.setAttribute("id", "webdeveloper-element-information");
- webdeveloper_getDocumentBodyElement(ownerDocument).appendChild(divElement);
-}
-
-// Called when the element information is deselected
-function webdeveloper_deselectElementInformation(event)
-{
- webdeveloper_elementInformationBlockSelected = false;
-}
-
-// Displays information about the element
-function webdeveloper_displayElementInformation(element)
-{
- var checked = true;
- var contentDocument = webdeveloper_getContentDocument();
- var contentWindow = webdeveloper_getContentWindow();
- var divElement = null;
- var documentList = webdeveloper_getDocuments(contentWindow);
- var documentLength = documentList.length;
- var leftOffset = contentWindow.pageXOffset;
- var pageDocument = null;
- var topOffset = contentWindow.pageYOffset;
-
- // If the element is set
- if(element)
- {
- checked = element.getAttribute("checked");
- }
- else
- {
- var currentDocument = contentWindow.document;
-
- element = document.getElementById("webdeveloper-display-element-information-menu");
-
- // If the display element information element is set
- if(currentDocument.getElementById("webdeveloper-display-element-information"))
- {
- checked = false;
- }
-
- webdeveloper_configureElement(element, "checked", checked);
- }
-
- webdeveloper_configureElement(document.getElementById("webdeveloper-information-text-toolbar"), "hidden", !checked);
-
- // Loop through the documents
- for(var i = 0; i < documentLength; i++)
- {
- pageDocument = documentList[i];
-
- // If displaying element information
- if(checked)
- {
- webdeveloper_createElementInformationBlock(pageDocument);
-
- // If this is the content document
- if(pageDocument == contentDocument)
- {
- divElement = pageDocument.getElementById("webdeveloper-element-information");
-
- // If the div element was found
- if(divElement)
- {
- divElement.style.left = (leftOffset + 5) + "px";
- divElement.style.top = (topOffset + 5) + "px";
- }
- }
-
- pageDocument.addEventListener("click", webdeveloper_displayElementInformationForElement, false);
- pageDocument.addEventListener("keypress", webdeveloper_displayElementInformationKeyPress, false);
- pageDocument.addEventListener("mousemove", webdeveloper_displayElementInformationMouseMove, false);
- pageDocument.addEventListener("mouseover", webdeveloper_displayElementInformationMouseOver, false);
- }
- else
- {
- divElement = pageDocument.getElementById("webdeveloper-element-information");
-
- // Try to remove the event listener
- try
- {
- pageDocument.removeEventListener("click", webdeveloper_displayElementInformationForElement, false);
- }
- catch(exception)
- {
- // Do nothing
- }
-
- // Try to remove the event listener
- try
- {
- pageDocument.removeEventListener("keypress", webdeveloper_displayElementInformationKeyPress, false);
- }
- catch(exception)
- {
- // Do nothing
- }
-
- // Try to remove the event listener
- try
- {
- pageDocument.removeEventListener("mousemove", webdeveloper_displayElementInformationMouseMove, false);
- }
- catch(exception)
- {
- // Do nothing
- }
-
- // Try to remove the event listener
- try
- {
- pageDocument.removeEventListener("mouseover", webdeveloper_displayElementInformationMouseOver, false);
- }
- catch(exception)
- {
- // Do nothing
- }
-
- webdeveloper_removeElement(divElement);
- webdeveloper_removeElementOutline(webdeveloper_informationElement);
- }
- }
-
- // If not displaying element information
- if(!checked)
- {
- webdeveloper_elementInformationBlockSelected = false;
- webdeveloper_informationElement = null;
- }
-
- webdeveloper_toggleStyleSheet(element, "chrome://webdeveloper/content/stylesheets/display_element_information.css", "webdeveloper-display-element-information");
-}
-
-// Displays information about the specific element
-function webdeveloper_displayElementInformationForElement(event)
-{
- var element = event.target;
-
- // If the element is set
- if(element)
- {
- var elementName = element.tagName;
- var ownerDocument = element.ownerDocument;
-
- // If the element has a name and it is not scrollbar and it has an owner document
- if(elementName && elementName != "scrollbar" && ownerDocument)
- {
- var divElement = ownerDocument.getElementById("webdeveloper-element-information");
-
- // If the div element was found
- if(divElement)
- {
- // If the element is not the div element and the div element is not an ancestor of the element
- if(element != divElement && !webdeveloper_isAncestor(element, divElement))
- {
- var definitionElement = ownerDocument.getElementById("webdeveloper-element-information-attributes");
- var headerElements = divElement.getElementsByTagName("h2");
- var outlineElement = null;
- var pElement = null;
- var stringBundle = document.getElementById("webdeveloper-string-bundle");
- var tableElement = null;
- var tableCellElement = null;
- var tableRowElement = null;
-
- webdeveloper_removeElementOutline(element);
-
- // If header elements were found
- if(headerElements.length > 0)
- {
- var headerElement = headerElements[0];
-
- // If the header element is set
- if(headerElement)
- {
- webdeveloper_removeAllChildElements(headerElement);
-
- headerElement.appendChild(ownerDocument.createTextNode(webdeveloper_getElementDescription(element)));
- }
- }
-
- // If the definition element is set
- if(definitionElement)
- {
- var elementAttribute = null;
- var elementAttributes = element.attributes;
- var elementAttributesLength = elementAttributes.length;
-
- webdeveloper_removeAllChildElements(definitionElement);
-
- // If there are no attributes
- if(elementAttributesLength == 0)
- {
- definitionElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_none")));
- }
- else
- {
- // Loop through the attributes
- for(var i = 0; i < elementAttributesLength; i++)
- {
- elementAttribute = elementAttributes[i];
- pElement = ownerDocument.createElement("p");
-
- pElement.appendChild(ownerDocument.createTextNode(elementAttribute.name + " = " + elementAttribute.value));
- definitionElement.appendChild(pElement);
- }
- }
- }
-
- definitionElement = ownerDocument.getElementById("webdeveloper-element-information-position");
-
- // If the definition element is set
- if(definitionElement)
- {
- tableElement = ownerDocument.createElement("table");
- tableCellElement = ownerDocument.createElement("td");
- tableRowElement = ownerDocument.createElement("tr");
-
- webdeveloper_removeAllChildElements(definitionElement);
-
- tableCellElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_left") + ": " + webdeveloper_getElementPositionX(element) + "px"));
- tableRowElement.appendChild(tableCellElement);
-
- tableCellElement = ownerDocument.createElement("td");
- tableCellElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_top") + ": " + webdeveloper_getElementPositionY(element) + "px"));
- tableRowElement.appendChild(tableCellElement);
- tableElement.appendChild(tableRowElement);
-
- tableCellElement = ownerDocument.createElement("td");
- tableRowElement = ownerDocument.createElement("tr");
- tableCellElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_width") + ": " + element.clientWidth + "px"));
- tableRowElement.appendChild(tableCellElement);
-
- tableCellElement = ownerDocument.createElement("td");
- tableCellElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_height") + ": " + element.clientHeight + "px"));
- tableRowElement.appendChild(tableCellElement);
- tableElement.appendChild(tableRowElement);
- definitionElement.appendChild(tableElement);
- }
-
- definitionElement = ownerDocument.getElementById("webdeveloper-element-information-other");
-
- // If the definition element is set
- if(definitionElement)
- {
- var fontFamily = element.ownerDocument.defaultView.getComputedStyle(element, null).getPropertyCSSValue("font-family");
- var fontSize = element.ownerDocument.defaultView.getComputedStyle(element, null).getPropertyCSSValue("font-size");
-
- tableElement = ownerDocument.createElement("table");
-
- webdeveloper_removeAllChildElements(definitionElement);
-
- // If this element has a font family
- if(fontFamily)
- {
- tableCellElement = ownerDocument.createElement("td");
- tableRowElement = ownerDocument.createElement("tr");
- tableCellElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_fontFamily") + ":"));
- tableRowElement.appendChild(tableCellElement);
-
- tableCellElement = ownerDocument.createElement("td");
- tableCellElement.appendChild(ownerDocument.createTextNode(fontFamily.cssText));
- tableRowElement.appendChild(tableCellElement);
- tableElement.appendChild(tableRowElement);
- }
-
- // If this element has a font size
- if(fontSize)
- {
- tableCellElement = ownerDocument.createElement("td");
- tableRowElement = ownerDocument.createElement("tr");
- tableCellElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_fontSize") + ":"));
- tableRowElement.appendChild(tableCellElement);
-
- tableCellElement = ownerDocument.createElement("td");
- tableCellElement.appendChild(ownerDocument.createTextNode(fontSize.cssText));
- tableRowElement.appendChild(tableCellElement);
- tableElement.appendChild(tableRowElement);
- }
-
- // If the table has child nodes
- if(tableElement.hasChildNodes())
- {
- definitionElement.appendChild(tableElement);
- }
- }
-
- definitionElement = ownerDocument.getElementById("webdeveloper-element-information-ancestors");
-
- // If the definition element is set
- if(definitionElement)
- {
- var ancestorList = webdeveloper_getElementAncestors(element);
- var ancestorLength = ancestorList.length;
-
- webdeveloper_removeAllChildElements(definitionElement);
-
- // If there are no ancestors
- if(ancestorLength == 0)
- {
- definitionElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_none")));
- }
- else
- {
- // Loop through the ancestors
- for(i = 0; i < ancestorLength; i++)
- {
- pElement = ownerDocument.createElement("p");
-
- pElement.appendChild(ownerDocument.createTextNode(webdeveloper_getElementDescription(ancestorList[i])));
- definitionElement.appendChild(pElement);
- }
- }
- }
-
- definitionElement = ownerDocument.getElementById("webdeveloper-element-information-children");
-
- // If the definition element is set
- if(definitionElement)
- {
- var children = webdeveloper_getElementChildren(element);
- var childLength = children.length;
-
- webdeveloper_removeAllChildElements(definitionElement);
-
- // If there are no children
- if(childLength == 0)
- {
- definitionElement.appendChild(ownerDocument.createTextNode(stringBundle.getString("webdeveloper_none")));
- }
- else
- {
- // Loop through the children
- for(i = 0; i < childLength; i++)
- {
- pElement = ownerDocument.createElement("p");
-
- pElement.appendChild(ownerDocument.createTextNode(webdeveloper_getElementDescription(children[i])));
- definitionElement.appendChild(pElement);
- }
- }
- }
-
- element.style.MozOutline = "1px solid #ff0000";
-
- // Force the style sheet to refresh
- divElement.setAttribute("class", "force-width");
- divElement.removeAttribute("class");
-
- event.preventDefault();
- }
- }
- }
- }
-}
-
-// Keypress event for display element information
-function webdeveloper_displayElementInformationKeyPress(event)
-{
- webdeveloper_copyElementAncestors(event);
-}
-
-// Move event for display element information
-function webdeveloper_displayElementInformationMouseMove(event)
-{
- // If the element information block is selected
- if(webdeveloper_elementInformationBlockSelected)
- {
- webdeveloper_moveElementInformationBlock(event);
- }
- else
- {
- var element = event.target;
-
- // If the element is set
- if(element)
- {
- var ownerDocument = element.ownerDocument;
-
- // If the owner document is set
- if(ownerDocument)
- {
- var divElement = ownerDocument.getElementById("webdeveloper-element-information");
-
- // If the div element was found
- if(divElement)
- {
- // If the element is not the div element and the div element is not an ancestor of the element
- if(element != divElement && !webdeveloper_isAncestor(element, divElement))
- {
- var outlineElement = webdeveloper_addElementOutline(event, webdeveloper_informationElement);
-
- // If the outline element is set
- if(outlineElement)
- {
- webdeveloper_informationElement = outlineElement;
- }
- }
-
- }
- }
- }
- }
-}
-
-// Mouseover event for display element information
-function webdeveloper_displayElementInformationMouseOver(event)
-{
- var element = event.target;
-
- // If the element is set
- if(element)
- {
- var ownerDocument = element.ownerDocument;
-
- // If the owner document is set
- if(ownerDocument)
- {
- var divElement = ownerDocument.getElementById("webdeveloper-element-information");
-
- // If the div element was found
- if(divElement)
- {
- // If the element is not the div element and the div element is not an ancestor of the element
- if(element != divElement && !webdeveloper_isAncestor(element, divElement))
- {
- webdeveloper_displayElementAncestors(event);
- }
-
- }
- }
- }
-}
-
-// Move the element information block
-function webdeveloper_moveElementInformationBlock(event)
-{
- var element = event.target;
-
- // If the element is set
- if(element)
- {
- var ownerDocument = element.ownerDocument;
-
- // If the target has an owner document
- if(ownerDocument)
- {
- var divElement = ownerDocument.getElementById("webdeveloper-element-information");
-
- // If the div element was found
- if(divElement)
- {
- divElement.style.left = (event.pageX - 5) + "px";
- divElement.style.top = (event.pageY - 5) + "px";
- }
- }
- }
-}
-
-// Called when the element information is selected
-function webdeveloper_selectElementInformation(event)
-{
- // If the click was not a right click
- if(event.button != 2)
- {
- webdeveloper_elementInformationBlockSelected = true;
- }
-}
-
-// Toggles an element information block
-function webdeveloper_toggleElementInformationBlock(event)
-{
- var element = event.target;
-
- // If there is a target element
- if(element)
- {
- // If the element has a class attribute
- if(element.hasAttribute("class"))
- {
- element.removeAttribute("class");
- }
- else
- {
- element.setAttribute("class", "collapsed");
- }
- }
-}