/* MiniXML/TreeCanvas.js * by M. Hiyama (2005) */ try { JSAN.use('DOM.Utils', '$'); } catch(e) { throw new Error("MiniXML.TreeCanvas requires JSAN to be loaded."); } /* MiniXML */ if (!MiniXML) { var MiniXML = {}; } /* TreeCanvas */ MiniXML.TreeCanvas = function (elm) { // elm:string | Element elm = $(elm); if (!elm) { throw new Error("MiniXML.TreeCanvas:" + " cannot create new instance." + " invalid arguments"); } this._canvas = elm; }; MiniXML.TreeCanvas.VERSION = "0.01"; MiniXML.TreeCanvas.EXPORT_OK = [ 'createBox', 'createTextBox', 'createElementBox', 'drawText', 'drawElement' ]; MiniXML.TreeCanvas.EXPORT_TAGS = { ':all': MiniXML.TreeCanvas.EXPORT_OK }; /* createBox */ MiniXML.TreeCanvas.createBox = function (className) { // className:string // return:Element var box = document.createElement('div'); box.setAttribute('class', className); box.className = className; return box; }; /* createTextBox */ MiniXML.TreeCanvas.createTextBox = function (data) { // data:string // return:Element var textBox = MiniXML.TreeCanvas.createBox('textBox'); var text = document.createTextNode(data); textBox.appendChild(text); return textBox; }; /* createElementBox */ MiniXML.TreeCanvas.createElementBox = function (name, isRoot_) { // name:string // isRoot_:any as boolean // return:Element var elementBox; if (isRoot_) { elementBox = MiniXML.TreeCanvas.createBox('rootBox'); } else { elementBox = MiniXML.TreeCanvas.createBox('elementBox'); } var tagNameBox = MiniXML.TreeCanvas.createBox('tagNameBox'); var tagNameText = document.createTextNode("<" + name + ">"); tagNameBox.appendChild(tagNameText); elementBox.appendChild(tagNameBox); return elementBox; }; /* drawText */ MiniXML.TreeCanvas.drawText = function (canvas, textNode) { // canvas:Element // textNode:Text // return:void var box = MiniXML.TreeCanvas.createTextBox(textNode.data); canvas.appendChild(box); }; /* drawElement */ MiniXML.TreeCanvas.drawElement = function (canvas, elmNode, isRoot_) { // canvas:Element // elmNode:Element // isRoot_:any as boolean // return:void // element node itself var box = MiniXML.TreeCanvas.createElementBox(elmNode.tagName, isRoot_); canvas.appendChild(box); // child nodes var children = elmNode.childNodes; for (var i = 0; i < children.length; i++) { switch(children[i].nodeType) { case 1: // ELEMENT_NODE MiniXML.TreeCanvas.drawElement(box, children[i]); break; case 3: // TEXT_NODE MiniXML.TreeCanvas.drawText(box, children[i]); break; default: // do nothing break; } } }; /* clear */ MiniXML.TreeCanvas.prototype.clear = function () { var parent = this._canvas; var children = parent.childNodes; for (var i = 0; i < children.length; i++) { parent.removeChild(children[i]); } }; /* draw */ MiniXML.TreeCanvas.prototype.draw = function (elm) { this.clear(); elm = $(elm); if (!elm) return; MiniXML.TreeCanvas.drawElement(this._canvas, elm, true); }; /* the end */