initial checkin from subversion

This commit is contained in:
Tretter
2017-02-07 20:13:14 +00:00
commit e8fa4b7ae6
80 changed files with 3318 additions and 0 deletions

348
node.js Normal file
View File

@@ -0,0 +1,348 @@
function node(PKey,nodeText) {
// private vars
var m_PKey=PKey;
var m_displayDom=document.createElement("span");
var m_nodeRelations=new Array();
var m_toolbar=null;
var m_textControl=null;
var m_iconControl=null;
var m_contextMenu=null;
var m_isCollapsed=false;
if (arguments.length >= 1) {
return(construct());
} else {
this.fromXML=fromXML;
return(this);
}
// properties
function getPKey() { return(m_PKey); }
function getNodeRelations() { return(m_nodeRelations); }
// methods
function construct() {
// the basic node
m_displayDom.setAttribute("id","mmNode_" + m_PKey);
m_displayDom.setAttribute("class","node");
m_displayDom.extends(new Publisher());
dragNDrop.activateForObject(m_displayDom);
m_contextMenu=addContextMenu();
m_displayDom.appendChild(m_contextMenu);
exportFunctions();
// add a toolbar
if (!m_toolbar) {
m_toolbar=new toolbar(m_displayDom);
m_displayDom.appendChild(m_toolbar);
m_toolbar.hide();
}
if (!m_textControl){ m_textControl=new textControl(nodeText); }
m_displayDom.appendChild(m_textControl);
m_textControl.addSubscriber(notifyTextUpdate,"changeMode");
if (!m_iconControl) {
m_iconControl=new iconControl();
}
//m_displayDom.appendChild(document.createElement("br"));
m_displayDom.appendChild(m_iconControl);
if (m_isCollapsed) {collapse();}
m_displayDom.onmouseup=mouseUpHandler;
m_displayDom.onmouseover=mouseOverHandler;
m_displayDom.onmouseout=mouseOutHandler;
document.getElementById('nodes').appendChild(m_displayDom);
m_textControl.focus();
return(m_displayDom);
}
function addContextMenu(){
var contextMenu;
var mi=new Array();
for (var i=0;i<g_iconList.childNodes.length;i++) {
var iconName=g_iconList.childNodes[i].getAttribute("filename");
var iconTitle=g_iconList.childNodes[i].getAttribute("description");
mi[mi.length]=new pictureMenuItem("icons/" + iconName ,iconTitle,onAddIconClick,"nodeIconMenuItem");
}
//mi[mi.length]=new textMenuItem("Close",contextMenu.hide,"nodeContextMenuItem");
contextMenu=new menuControl(mi,5);
contextMenu.setAttribute("class","nodeContextMenu");
contextMenu.hide();
document.addSubscriber(contextMenu.hide,"clicked");
m_displayDom.onmousedown=function(event) {contextMenuOpenAction(event);dragNDrop.onMouseDownHandler(event);}
dragNDrop.addSubscriber(contextMenu.hide,"moving");
function contextMenuOpenAction(event){
if (event.target==m_displayDom) {
contextMenu.toggleVisible();
contextMenu.style.position="absolute";
contextMenu.style.left=(event.clientX+window.scrollX-m_displayDom.style.left.split("px")[0]) + "px";
contextMenu.style.top=(event.clientY+window.scrollY-m_displayDom.style.top.split("px")[0]) + "px";
}
}
function onAddIconClick(event){
m_iconControl.addIcon(event.target.getAttribute("src"));
}
return(contextMenu);
}
function exportFunctions(){
m_displayDom.debugOut=debugOut;
m_displayDom.addNodeRelation=addNodeRelation;
m_displayDom.deleteNodeRelation=deleteNodeRelation;
m_displayDom.getPKey=getPKey;
m_displayDom.getNodeRelations=getNodeRelations;
m_displayDom.redrawNodeRelations=redrawNodeRelations;
m_displayDom.hide=hide;
m_displayDom.show=show;
m_displayDom.collapse=collapse;
m_displayDom.expand=expand;
m_displayDom.erase=erase;
m_displayDom.isCollapsed=isCollapsed;
m_displayDom.isLeafNode=isLeafNode;
m_displayDom.getParentNode=getParentNode;
m_displayDom.getParentNodeRelation=getParentNodeRelation;
m_displayDom.isChildNodeOf=isChildNodeOf;
m_displayDom.isRootNode=isRootNode;
m_displayDom.toXML=toXML;
m_displayDom.fromXML=fromXML;
}
function notifyTextUpdate(publisher,eventType){
redrawNodeRelations();
}
function mouseUpHandler(){
redrawNodeRelations();
}
function mouseOverHandler(){
m_displayDom.notifySubscribers(m_displayDom,"mouseOver");
m_toolbar.show();
}
function mouseOutHandler(){
m_displayDom.notifySubscribers(m_displayDom,"mouseOut");
m_toolbar.hide();
}
function isCollapsed(){
return(m_isCollapsed);
}
function getParentNodeRelation(){
for (var i=0;i < m_nodeRelations.length;i++) {
if ((m_nodeRelations[i].getChildNode()==m_displayDom) && (m_nodeRelations[i].isMain())){
return(m_nodeRelations[i]);
}
}
return(null);
}
function getParentNode(){
var parentNode=getParentNodeRelation();
if (parentNode) {
return(parentNode.getParentNode());
} else {
return(null);
}
}
function isChildNodeOf(testNode){
var parentNode=getParentNode();
if (parentNode){
if (parentNode==testNode) {
return(true);
} else {
return(parentNode.isChildNodeOf(testNode));
}
} else {
// hit rootnode
return(false);
}
}
function isLeafNode(){
for (var i=0;i < m_nodeRelations.length;i++) {
if (m_nodeRelations[i].getParentNode()==m_displayDom){
return(false);
}
}
return(true);
}
function expand(isNonRecursive){
m_isCollapsed=false;
m_displayDom.setAttribute("class","node");
for (var i=0;i < m_nodeRelations.length;i++) {
if ((m_nodeRelations[i].isMain())
&& (m_nodeRelations[i].getParentNode()==m_displayDom)){
if (!isNonRecursive) { m_nodeRelations[i].getChildNode().expand(isNonRecursive); }
m_nodeRelations[i].getChildNode().show();
}
}
}
function erase(){
// first delete all free relations
for (var i=m_nodeRelations.length-1;i>=0;i--) {
if (!m_nodeRelations[i].isMain()) {
var nodeRel=m_nodeRelations[i];
deleteNodeRelation(nodeRel);
nodeRel.erase();
}
}
for (var i=m_nodeRelations.length-1;i>=0;i--) {
// recursively delete childs following the Main-Links
if (m_nodeRelations[i].getParentNode()==m_displayDom) {
m_nodeRelations[i].getChildNode().erase();
}
}
// delete the relation to the parent
for (var i=0;i < m_nodeRelations.length;i++) {
if (m_nodeRelations[i].getChildNode()==m_displayDom){
m_nodeRelations[i].erase();
}
}
removeFromRootNodes();
destroy();
}
function isRootNode(){
for (var i=0;i < rootNode.length;i++) {
if (m_displayDom==rootNode[i]) {
return(true);
}
}
return(false);
}
function removeFromRootNodes(){
// remove current node from the rootnodes
for (var i=0;i < rootNode.length;i++) {
if (m_displayDom==rootNode[i]) {
rootNode.splice(i,1);
}
}
}
function destroy(){
m_displayDom.parentNode.removeChild(m_displayDom);
}
function collapse(){
m_isCollapsed=true;
if (!isLeafNode()) { m_displayDom.setAttribute("class","collapsedNode"); }
for (var i=0;i < m_nodeRelations.length;i++) {
if ((m_nodeRelations[i].isMain())
&& (m_nodeRelations[i].getParentNode()==m_displayDom)){
m_nodeRelations[i].getChildNode().collapse();
m_nodeRelations[i].getChildNode().hide();
}
}
}
function hide(){
m_displayDom.style.display="none";
for (var i=0;i < m_nodeRelations.length;i++) {
m_nodeRelations[i].hide();
}
}
function show(){
m_displayDom.style.display="block";
for (var i=0;i < m_nodeRelations.length;i++) {
m_nodeRelations[i].show();
}
redrawNodeRelations();
}
function addNodeRelation(newNodeRel) {
if (!hasNodeRelation(newNodeRel)) {
m_nodeRelations[m_nodeRelations.length]=newNodeRel;
if ((newNodeRel.getChildNode) && (newNodeRel.getChildNode()==m_displayDom) && (newNodeRel.isMain())) {
removeFromRootNodes();
}
}
}
function deleteNodeRelation(nodeRel) {
for (var i=0;i<m_nodeRelations.length;i++) {
if (m_nodeRelations[i]==nodeRel) {
m_nodeRelations.splice(i,1);
}
}
}
function hasNodeRelation(nodeRel) {
for (var i=0;i<m_nodeRelations.length;i++) {
if (m_nodeRelations[i]==nodeRel) {
return(true);
}
}
}
function debugOut() {
var output=("PKey: _"+ m_PKey + "_");
output=output + "\nRootNode: " + isRootNode();
output=output + "\nLeafNode: " + isLeafNode();
output=output + "\nNodeText: " + m_textControl.getText();
output=output + "\nisCollapsed: " + m_isCollapsed;
output=output + "\nNodeRelations:";
for (i=0;i < m_nodeRelations.length;i++) {
output=output + m_nodeRelations[i].debugOut();
}
return(output);
}
function redrawNodeRelations(){
var rels=getNodeRelations();
var i;
for (i=0;i<rels.length;i++) {
rels[i].redraw();
}
}
function toXML(){
var xmlEle=document.createElement("NODE");
xmlEle.setAttribute("pkey",m_PKey);
xmlEle.setAttribute("offsetleft",m_displayDom.style.left.split("px")[0]);
xmlEle.setAttribute("offsettop",m_displayDom.style.top.split("px")[0]);
xmlEle.setAttribute("iscollapsed",m_displayDom.isCollapsed());
xmlEle.appendChild(m_textControl.toXML());
xmlEle.appendChild(m_iconControl.toXML());
var rels=getNodeRelations();
for (var i=0;i<rels.length;i++){
if (rels[i].getParentNode()==m_displayDom){
xmlEle.appendChild(rels[i].toXML());
}
}
return(xmlEle);
}
function fromXML(inXML){
if (inXML.nodeName=="NODE") {
m_PKey=inXML.getAttribute("pkey");
m_displayDom.style.left=inXML.getAttribute("offsetleft")+"px";
m_displayDom.style.top=inXML.getAttribute("offsettop")+"px";
m_isCollapsed=inXML.getAttribute("iscollapsed")=="true";
var freeRelations = new Array();
for (var i=0;i<inXML.childNodes.length;i++){
var theChildNode=inXML.childNodes[i];
switch(theChildNode.nodeName){
case "ICONS":
m_iconControl=new iconControl().fromXML(theChildNode);
break;
case "TEXTCONTROL":
m_textControl=new textControl().fromXML(theChildNode);
break;
case "NODEREL":
construct();
// only main relations handled here
if (theChildNode.getAttribute("relationtype") == "main") {
var newNodeRel=new nodeRel().fromXML(theChildNode);
addNodeRelation(newNodeRel);
newNodeRel.redraw();
}
break;
}
}
return(construct());
}
}
}