//javascript: var expSyntaxArray = []; Element.prototype.getElementWidth = function() { if (typeof this.clip !== "undefined") { return this.clip.width; } else { if (this.style.pixelWidth) { return this.style.pixelWidth; } else { return this.offsetWidth; } } }; Element.prototype.getElementHeight = function() { if (typeof this.clip !== "undefined") { return this.clip.height; } else { if (this.style.pixelHeight) { return this.style.pixelHeight; } else { return this.offsetHeight; } } }; function getElementWidth(elem) { if (typeof elem.clip !== "undefined") { return elem.clip.width; } else { if (elem.style && elem.style.pixelWidth) { return elem.style.pixelWidth; } else { return elem.offsetWidth; } } } function getElementHeight(elem) { if (typeof elem.clip !== "undefined") { return elem.clip.height; } else { if (elem.style && elem.style.pixelHeight) { return elem.style.pixelHeight; } else { return elem.offsetHeight; } } } function getStyle(el,styleProp) { var x = document.getElementById(el); if (x.currentStyle) { var y = x.currentStyle[styleProp]; } else if (window.getComputedStyle) { var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp); } return y; } function getElementPosition(elem) { var origElem = elem; var xl_ = 0; var yt_ = 0; while(elem && !isNaN(elem.offsetLeft) && !isNaN(elem.offsetTop)) { xl_ += elem.offsetLeft - elem.scrollLeft; yt_ += elem.offsetTop - elem.scrollTop; elem = elem.offsetParent; } var xr_ = xl_ + getElementWidth(origElem); var yb_ = yt_ + getElementHeight(origElem); return { xl: xl_, yt: yt_, xr: xr_, yb: yb_ }; } function htmlToExpeditee(node) { var nodePos = getElementPosition(node); var pxl = nodePos.xl; var pyt = nodePos.yt; var pxr = nodePos.xr; var pyb = nodePos.yb; return htmlToExpediteeRec(node, pxl,pyt, pxl,pyt,pxr,pyb, 0); } function htmlToExpediteeRec(node,baseX,baseY, pxl,pyt,pxr,pyb, depth) { depth = (depth) ? depth : 0; var jsonNode = null; if (node.nodeType == 3) { /* text node */ var text = node.nodeValue; if (text.match(/\S/)) { jsonNode = {}; jsonNode.type = "text"; jsonNode.text = node.nodeValue; jsonNode.x = pxl; jsonNode.y = pyt; } } else if (node.nodeType == 1) { /* element */ /* need to handle: img, a, li */ /* need to dig out: text size, l/r/justified, font-face, type, colour */ var elemName = node.nodeName.toLowerCase(); if (!elemName.match(/script/)) { var nodePos = getElementPosition(node); var xl = nodePos.xl; var xr = nodePos.xr; var yt = nodePos.yt; var yb = nodePos.yb; jsonNode = {}; jsonNode.type = "rect"; jsonNode.elem = node.nodeName; var rect = { "xl":xl, "yt":yt, "xr":xr, "yb":yb }; jsonNode.rect = rect; var jsonChildNodes = []; var cnode = node.firstChild; while (cnode != null) { var jsonChildNode = htmlToExpediteeRec(cnode,baseX,baseY,xl,yt,xr,yb,depth+1); if (jsonChildNode != null) { jsonChildNodes.push(jsonChildNode); } cnode = cnode.nextSibling; } jsonNode.childNodes = jsonChildNodes; } } /* currently do nothing for the other node types */ return jsonNode; } //var body = document.body; //alert(traverseDOM(body));