Files
webthink/toolbar.js

179 lines
5.5 KiB
JavaScript
Raw Normal View History

2017-02-07 20:13:14 +00:00
function toolbar(nodeClass) {
var m_displayDom=document.createElement("span");
m_displayDom.setAttribute("id","mmToolbar_" + nodeClass.getPKey());
m_displayDom.setAttribute("class","boxToolbar");
var m_addNode=new dataTools.imageDom('pix/icnStar.png',"+","Add node");
m_addNode.onclick=addNodeClick;
m_displayDom.appendChild(m_addNode);
var m_collapseNode=new dataTools.imageDom("pix/icnArrowUp.png","_","Collapse node");
m_collapseNode.onclick=collapseNodeClick;
m_collapseNode.hide=function(){m_collapseNode.style.display="none";}
m_collapseNode.show=function(){m_collapseNode.style.display="inline";}
m_collapseNode.hide();
m_displayDom.appendChild(m_collapseNode);
var m_expandNode=new dataTools.imageDom("pix/icnArrowDown.png","-","Expand node");
m_expandNode.onclick=expandNodeClick;
m_expandNode.hide=function(){m_expandNode.style.display="none";}
m_expandNode.show=function(){m_expandNode.style.display="inline";}
m_expandNode.hide();
m_displayDom.appendChild(m_expandNode);
var m_eraseNode=new dataTools.imageDom("pix/icnWaste.png","E","Erase Node and subnodes");
m_eraseNode.onclick=eraseNodeClick;
m_displayDom.appendChild(m_eraseNode);
var m_addFreeLink=new dataTools.imageDom("pix/icnNewBranch.png","F","Add Free relation");
m_addFreeLink.style.position="absolute";
m_addFreeLink.isDragging=false;
m_displayDom.appendChild(m_addFreeLink);
dragNDrop.activateForObject(m_addFreeLink);
dragNDrop.addSubscriber(freeLinkEventNotify,"endMoving");
var m_changeParentNode=new dataTools.imageDom("pix/icnMoveBranch.png","P","Change Parent relation");
m_changeParentNode.style.position="absolute";
m_changeParentNode.isDragging=false;
m_displayDom.appendChild(m_changeParentNode);
dragNDrop.activateForObject(m_changeParentNode);
dragNDrop.addSubscriber(changeParentNodeEventNotify,"endMoving");
var m_debugNode=document.createElement("span");
if (g_debug) {
m_debugNode.appendChild(document.createTextNode("d"));
m_debugNode.style.position="absolute";
m_debugNode.onclick=debugNodeClick;
m_displayDom.appendChild(m_debugNode);
}
m_displayDom.mmClass=nodeClass;
m_displayDom.hide=hide;
m_displayDom.show=show;
return(m_displayDom);
function freeLinkEventNotify(publisher,eventType,addInfo){
if (("endMoving"==eventType) && (publisher==m_addFreeLink) && (addInfo != null)) {
var parentNode=nodeClass;
var childNode=addInfo;
if ( parentNode!=childNode) {
var newNodeRel=new nodeRel(dataTools.getNewPKey(),parentNode,childNode,"free");
parentNode.addNodeRelation(newNodeRel);
childNode.addNodeRelation(newNodeRel);
childNode.redrawNodeRelations();
}
hide();
}
}
function changeParentNodeEventNotify(publisher,eventType,addInfo){
if (("endMoving"==eventType) && (publisher==m_changeParentNode) && (addInfo!=null)) {
var childNode=nodeClass;
var newParentNode=addInfo;
var mainNodeRel=childNode.getParentNodeRelation();
if ( (newParentNode!=childNode)
&& (!newParentNode.isChildNodeOf(childNode))
&& (newParentNode!=childNode.getParentNode()) ) {
if (mainNodeRel != null) {
var oldParentNode=mainNodeRel.getParentNode();
oldParentNode.deleteNodeRelation(mainNodeRel);
childNode.deleteNodeRelation(mainNodeRel);
mainNodeRel.erase();
}
var newNodeRel=new nodeRel(dataTools.getNewPKey(),newParentNode,childNode);
newParentNode.addNodeRelation(newNodeRel);
childNode.addNodeRelation(newNodeRel);
newNodeRel.redraw();
}
hide();
}
}
function addNodeClick(event){
event.stopPropagation();
nodeClass.expand(true);
var child=new node(dataTools.getNewPKey(),"(enter text)");
var originX=parseInt(nodeClass.style.top.split("px")[0]);
var originY=parseInt(nodeClass.style.left.split("px")[0]);
child.style.top=(originX+50)+"px";
child.style.left=(originY+50)+"px";
var parent=nodeClass;
var newNodeRel=new nodeRel(dataTools.getNewPKey(),parent,child);
parent.addNodeRelation(newNodeRel);
child.addNodeRelation(newNodeRel);
child.redrawNodeRelations();
}
function eraseNodeClick(event){
event.stopPropagation();
nodeClass.erase();
}
function expandNodeClick(event){
event.stopPropagation();
nodeClass.expand();
m_expandNode.hide();
m_collapseNode.show();
}
function collapseNodeClick(event){
event.stopPropagation();
nodeClass.collapse();
m_collapseNode.hide();
m_expandNode.show();
}
function debugNodeClick(event){
event.stopPropagation();
alert( nodeClass.debugOut());
}
function handleCollapseExpand(){
// Collapse
if ((!m_displayDom.parentNode.isLeafNode())
&& (!m_displayDom.parentNode.isCollapsed())) {
m_collapseNode.show();
} else {
m_collapseNode.hide();
}
// Expand
if ((!m_displayDom.parentNode.isLeafNode())
&& (m_displayDom.parentNode.isCollapsed())) {
m_expandNode.show();
} else {
m_expandNode.hide();
}
}
function show(){
handleCollapseExpand();
m_displayDom.style.display="block";
m_displayDom.style.top=-1*(m_displayDom.offsetHeight) + "px";
// -20 is for the round corners (takes 10 px each side)
m_displayDom.style.width=(nodeClass.offsetWidth-20) + "px";
//repaint FreeLink Control
m_addFreeLink.style.left=66;
m_addFreeLink.style.top=0;
//reposition changeParent Control
m_changeParentNode.style.left=88;
m_changeParentNode.style.top=0;
//reposition debug Control
m_debugNode.style.left=0;
m_debugNode.style.top=15;
}
function hide(){
if ((!m_addFreeLink.isDragging) && (!m_changeParentNode.isDragging)) {
m_displayDom.style.display="none";
}
}
}