--- /dev/null
+// Returns the current content document
+function webdeveloper_getContentDocument()
+{
+ return webdeveloper_getSelectedBrowser().contentDocument;
+}
+
+// Returns the current content window
+function webdeveloper_getContentWindow()
+{
+ return webdeveloper_getSelectedBrowser().contentWindow;
+}
+
+// Returns the document body element
+function webdeveloper_getDocumentBodyElement(contentDocument)
+{
+ // If there is a body element
+ if(contentDocument.body)
+ {
+ return contentDocument.body;
+ }
+ else
+ {
+ var bodyElementList = contentDocument.getElementsByTagName("body");
+
+ // If there is a body element
+ if(bodyElementList.length > 0)
+ {
+ return bodyElementList[0];
+ }
+ }
+
+ return contentDocument.documentElement;
+}
+
+// Returns the document head element
+function webdeveloper_getDocumentHeadElement(contentDocument)
+{
+ var headElementList = contentDocument.getElementsByTagName("head");
+
+ // If there is a head element
+ if(headElementList.length > 0)
+ {
+ return headElementList[0];
+ }
+
+ return contentDocument.documentElement;
+}
+
+// Gets all the documents from the current page
+function webdeveloper_getDocuments(frame)
+{
+ var documents = new Array();
+
+ // If the frame is set
+ if(frame)
+ {
+ var frames = frame.frames;
+ var framesLength = frames.length;
+
+ // If the frame document exists
+ if(frame.document)
+ {
+ documents.push(frame.document);
+ }
+
+ // Loop through the frames
+ for(var i = 0; i < framesLength; i++)
+ {
+ documents = documents.concat(webdeveloper_getDocuments(frames[i]));
+ }
+ }
+
+ return documents;
+}
+
+// Get the ancestors of the element
+function webdeveloper_getElementAncestors(element)
+{
+ var ancestors = webdeveloper_getElementAncestorsInternal(element);
+
+ // Reverse the list and remove the last element which is the original element
+ ancestors.reverse();
+ ancestors.pop();
+
+ return ancestors;
+}
+
+// Recursively gets the ancestors of an element
+function webdeveloper_getElementAncestorsInternal(element)
+{
+ var ancestors = new Array();
+
+ // If the element is set
+ if(element)
+ {
+ var parentElement = element.parentNode;
+
+ // If the element has a tag name
+ if(element.tagName)
+ {
+ ancestors.push(element);
+ }
+
+ // If there is a parent element
+ if(parentElement)
+ {
+ ancestors = ancestors.concat(webdeveloper_getElementAncestorsInternal(parentElement));
+ }
+ }
+
+ return ancestors;
+}
+
+// Get the children of the element
+function webdeveloper_getElementChildren(element)
+{
+ var children = new Array();
+
+ // If the element is set
+ if(element)
+ {
+ var child = null;
+ var childNodes = element.childNodes;
+ var childLength = childNodes.length;
+
+ // Loop through the children
+ for(var i = 0; i < childLength; i++)
+ {
+ child = childNodes[i];
+
+ // If the child and tag name are set
+ if(child && child.tagName)
+ {
+ children.push(child);
+ }
+ }
+ }
+
+ return children;
+}
+
+// Get the position of the element
+function webdeveloper_getElementPosition(element, xPosition)
+{
+ var position = 0;
+
+ // If the element is set
+ if(element)
+ {
+ var elementOffsetParent = element.offsetParent;
+
+ // If the element has an offset parent
+ if(elementOffsetParent)
+ {
+ // While there is an offset parent
+ while((elementOffsetParent = element.offsetParent) != null)
+ {
+ // If getting the x position
+ if(xPosition)
+ {
+ position += element.offsetLeft;
+ }
+ else
+ {
+ position += element.offsetTop;
+ }
+
+ element = elementOffsetParent;
+ }
+ }
+ else
+ {
+ // If getting the x position
+ if(xPosition)
+ {
+ position = element.offsetLeft;
+ }
+ else
+ {
+ position = element.offsetTop;
+ }
+ }
+ }
+
+ return position;
+}
+
+// Get the x position of the element
+function webdeveloper_getElementPositionX(element)
+{
+ return webdeveloper_getElementPosition(element, true);
+}
+
+// Get the y position of the element
+function webdeveloper_getElementPositionY(element)
+{
+ return webdeveloper_getElementPosition(element, false);
+}
+
+// Returns the text from an element
+function webdeveloper_getElementText(element)
+{
+ var elementText = "";
+
+ // If the element is set
+ if(element)
+ {
+ var childNode = null;
+ var childNodeList = element.childNodes;
+ var childNodeLength = childNodeList.length;
+ var childNodeType = null;
+
+ // Loop through the child nodes
+ for(var i = 0; i < childNodeLength; i++)
+ {
+ childNode = childNodeList[i];
+ childNodeType = childNode.nodeType;
+
+ // If the child node type is an element
+ if(childNodeType == Node.ELEMENT_NODE)
+ {
+ elementText += webdeveloper_getElementText(childNode);
+ }
+ else if(childNodeType == Node.TEXT_NODE)
+ {
+ elementText += childNode.nodeValue + " ";
+ }
+ }
+ }
+
+ return elementText;
+}
+
+// Returns the list of the images for the specified document
+function webdeveloper_getImagesForDocument(contentDocument, includeBackgroundImages, includeIcons)
+{
+ var images = new Array();
+
+ // If the content document is set
+ if(contentDocument)
+ {
+ var backgroundImage = null;
+ var computedStyle = null;
+ var cssURI = CSSPrimitiveValue.CSS_URI;
+ var documentURL = contentDocument.documentURI;
+ var element = null;
+ var image = null;
+ var imageInterface = Components.interfaces.nsIDOMHTMLImageElement;
+ var inputInterface = Components.interfaces.nsIDOMHTMLInputElement;
+ var linkInterface = Components.interfaces.nsIDOMHTMLLinkElement;
+ var treeWalker = contentDocument.createTreeWalker(contentDocument, NodeFilter.SHOW_ELEMENT, null, false);
+ var url = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(Components.interfaces.nsIURL);
+
+ // While the tree walker has more nodes
+ while((element = treeWalker.nextNode()) != null)
+ {
+ // If this is an image element
+ if(element instanceof imageInterface)
+ {
+ images.push(element);
+ }
+ else if(element instanceof inputInterface && element.src && element.type && element.type.toLowerCase() == "image")
+ {
+ image = new Image();
+ url.spec = documentURL;
+ image.src = url.resolve(element.src);
+
+ // If this is not a chrome image
+ if(image.src.indexOf("chrome://") != 0)
+ {
+ images.push(image);
+ }
+ }
+ else if(includeIcons && element instanceof linkInterface && element.href && element.href.indexOf("chrome://") != 0 && element.rel && element.rel.indexOf("icon") != -1)
+ {
+ image = new Image();
+ url.spec = documentURL;
+ image.src = url.resolve(element.href);
+
+ images.push(image);
+ }
+ else if(includeBackgroundImages)
+ {
+ computedStyle = element.ownerDocument.defaultView.getComputedStyle(element, null);
+
+ // If the computed style is set
+ if(computedStyle)
+ {
+ backgroundImage = computedStyle.getPropertyCSSValue("background-image");
+
+ // If this element has a background image and it is a URI
+ if(backgroundImage && backgroundImage.primitiveType == cssURI)
+ {
+ image = new Image();
+ image.src = backgroundImage.getStringValue();
+
+ // If this is not a chrome image
+ if(image.src.indexOf("chrome://") != 0)
+ {
+ images.push(image);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return images;
+}
+
+// Returns the list of the objects for the specified document
+function webdeveloper_getObjectsForDocument(contentDocument)
+{
+ var objects = new Array();
+
+ // If the content document is set
+ if(contentDocument)
+ {
+ var documentObjects = contentDocument.embeds;
+ var documentObjectsLength = documentObjects.length;
+
+ // Loop through the document objects
+ for(var i = 0; i < documentObjectsLength; i++)
+ {
+ objects.push(documentObjects[i]);
+ }
+ }
+
+ return objects;
+}
+
+// Returns the selected browser
+function webdeveloper_getSelectedBrowser()
+{
+ return window.top.getBrowser().selectedBrowser;
+}
+
+// Returns the list of the scripts for the specified document
+function webdeveloper_getScriptsForDocument(contentDocument, includeInline)
+{
+ var scripts = new Array();
+
+ // If the content document is set
+ if(contentDocument)
+ {
+ var documentScript = null;
+ var documentScripts = contentDocument.getElementsByTagName("script");
+ var documentScriptsLength = documentScripts.length;
+ var documentURL = contentDocument.documentURI;
+
+ // Loop through the document scripts
+ for(var i = 0; i < documentScriptsLength; i++)
+ {
+ documentScript = documentScripts[i];
+
+ // If including inline scripts or this is not inline
+ if(includeInline || documentScript.src != documentURL)
+ {
+ scripts.push(documentScript);
+ }
+ }
+ }
+
+ return scripts;
+}
+
+// Inserts the given child after the element
+function webdeveloper_insertAfter(child, after)
+{
+ // If the child and after are set
+ if(child && after)
+ {
+ var nextSibling = after.nextSibling;
+ var parent = after.parentNode;
+
+ // If the element has a next sibling
+ if(nextSibling)
+ {
+ parent.insertBefore(child, nextSibling);
+ }
+ else
+ {
+ parent.appendChild(child);
+ }
+ }
+}
+
+// Inserts the given child as the first child of the element
+function webdeveloper_insertAsFirstChild(element, child)
+{
+ // If the element and child are set
+ if(element && child)
+ {
+ // If the element has child nodes
+ if(element.hasChildNodes())
+ {
+ element.insertBefore(child, element.firstChild);
+ }
+ else
+ {
+ element.appendChild(child);
+ }
+ }
+}
+
+// Returns true if the ancestor element is an ancestor of the element
+function webdeveloper_isAncestor(element, ancestorElement)
+{
+ // If the element and ancestor element are set
+ if(element && ancestorElement)
+ {
+ var parentElement = null;
+
+ // Loop through the parent elements
+ while((parentElement = element.parentNode) != null)
+ {
+ // If the parent element is the ancestor element
+ if(parentElement == ancestorElement)
+ {
+ return true;
+ }
+ else
+ {
+ element = parentElement;
+ }
+ }
+ }
+
+ return false;
+}
+
+// Returns true if the page has frames
+function webdeveloper_pageHasFrames()
+{
+ // If the content document has a frame element
+ if(webdeveloper_getContentDocument().getElementsByTagName("frame").length > 0)
+ {
+ return true;
+ }
+
+ return false;
+}
+
+// Removes all child elements from an element
+function webdeveloper_removeAllChildElements(element)
+{
+ // If the element is set
+ if(element)
+ {
+ var childElements = element.childNodes;
+
+ // Loop through the child elements
+ for(var i = 0; i < childElements.length; i++)
+ {
+ element.removeChild(childElements[i]);
+ }
+
+ childElements = element.childNodes;
+
+ // Loop through the child elements
+ while(childElements.length > 0)
+ {
+ element.removeChild(childElements[0]);
+ }
+ }
+}
+
+// Removes all elements matching the XPath
+function webdeveloper_removeAllElementsByXPath(contentDocument, xPath)
+{
+ var elementList = webdeveloper_evaluateXPath(contentDocument, xPath);
+ var elementsLength = elementList.length;
+
+ // Loop through all the elements
+ for(var i = 0; i < elementsLength; i++)
+ {
+ webdeveloper_removeElement(elementList[i]);
+ }
+
+}
+
+// Removes an element
+function webdeveloper_removeElement(element)
+{
+ // If the element and it's parent node are set
+ if(element && element.parentNode)
+ {
+ element.parentNode.removeChild(element);
+ }
+}
\ No newline at end of file