/* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set et sw=2 ts=2: */ function createId(boardid, nodeid) { return "b" + boardid + "_t" + nodeid; } function idFromStr(str) { return str.substring(str.search('t') + 1, str.length); } var nodes = new Array(); function findNode(id, subscribeid) { for(var i = 0; i < nodes.length; i++) { var node = nodes[i]; var child = node.findNode(id, subscribeid); if(child != null) return child; } return null; } function Node(id, subscribeid) { this.id = id; this.subscribeid = subscribeid; this.children = new Array(); this.attributes = {}; this.parent = null; // Elements: this.element = document.createElement("div"); this.div_id = document.createElement("span"); this.div_title = document.createElement("span"); } Node.prototype.dump = function() { alert(this.id); } Node.prototype.findNode = function(id, subscribeid) { if(this.subscribeid != subscribeid) return null; if(this.id == id) return this; for(var i = 0; i < this.children.length; i++) { var node = this.children[i]; var child = node.findNode(id, subscribeid); if(child != null) return child; } return null; } Node.prototype.addChild = function(node) { if(node.parent != null) node.parent.removeChild(node); this.children.push(node); node.parent = this; this.element.appendChild(node.element); } Node.prototype.removeChild = function(node) { this.children = this.children.filter( function(e) { return e.id != node.id; }); node.parent = null; this.element.removeChild(node.element); } Node.prototype.create = function() { var node = this.element; node.name = "node"; node.setAttribute("class", "node"); node.setAttribute("ondblclick", "editTitle(this, event)"); //node.setAttribute("onclick", "showHideChildren(this, event)"); node.setAttribute("ondrop", "drop(this, event)"); node.setAttribute("ondragover", "return false"); node.setAttribute("draggable", true); node.setAttribute("ondragstart", "drag(this, event)"); node.setAttribute("title", this.id); // This is a hack to make it possible to identify the nodeid and // oberveid from the node id alone. node.id = createId(this.subscribeid, this.id); /* var subscribe_button = document.createElement("div"); subscribe_button.name = "subscribe_button"; subscribe_button.setAttribute("onclick", "subscribeMe(this, event)"); subscribe_button.setAttribute("title", this.id); subscribe_button.setAttribute("style", "float: left; display: inline-box; width:14px; height: 14px; border: solid green 2px; cursor: pointer;"); var txt_plus = document.createTextNode("+"); subscribe_button.appendChild(txt_plus); node.appendChild(subscribe_button); var unsubscribe_button = document.createElement("div"); unsubscribe_button.name = "unsubscribe_button"; unsubscribe_button.setAttribute("onclick", "unsubscribeMe(this, event)"); unsubscribe_button.setAttribute("title", this.id); unsubscribe_button.setAttribute("style", "float: left; display: inline-box; width:14px; height: 14px; border: solid red 2px; cursor: pointer;"); var txt_minus = document.createTextNode("-"); unsubscribe_button.appendChild(txt_minus); node.appendChild(unsubscribe_button); */ this.element.appendChild(this.div_id); var id_txt = document.createTextNode(this.id); this.div_id.appendChild(id_txt); this.element.appendChild(this.div_title); this.setAttribute("title", "(missing title)"); } Node.prototype.setAttribute = function(name, value) { this.attributes[name] = value; if(name == "title") { if(this.div_title.firstChild != null) { this.div_title.removeChild(this.div_title.firstChild); } var title_txt = document.createTextNode(value); this.div_title.appendChild(title_txt); } }