|
Packit |
022b05 |
//The scripts for the tooltip and moveobj are based on work from
|
|
Packit |
022b05 |
//SVG - Learning By Coding - http://www.datenverdrahten.de/svglbc/
|
|
Packit |
022b05 |
//Author: Dr. Thomas Meinike 11/03 - thomas@handmadecode.de
|
|
Packit |
022b05 |
var svgdoc,svgroot,paths,revert;
|
|
Packit |
022b05 |
var collapsed = new Array(2);
|
|
Packit |
022b05 |
var name = new Array(%i);
|
|
Packit |
022b05 |
var clickStatus = new Array(%i);
|
|
Packit |
022b05 |
var redCount = new Array(%i);
|
|
Packit |
022b05 |
var salmonCount = new Array(%i);
|
|
Packit |
022b05 |
var moveObj,rect,x,y,attr1,attr2,wert1,wert2,zoom=1,active=false;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function MoveObj(evt)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
if (active) {
|
|
Packit |
022b05 |
var roundx, roundy;
|
|
Packit |
022b05 |
var curtrans=svgroot.currentTranslate;
|
|
Packit |
022b05 |
var ctx=curtrans.x;
|
|
Packit |
022b05 |
var cty=curtrans.y;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
x=evt.clientX()
|
|
Packit |
022b05 |
y=evt.clientY()
|
|
Packit |
022b05 |
wert1=(x-ctx)*zoom*%.2f+%.2f+attr1-5;
|
|
Packit |
022b05 |
wert2=(y-cty)*zoom*%.2f+%.2f+attr2-5;
|
|
Packit |
022b05 |
roundx=Math.round(wert1*100)/100;
|
|
Packit |
022b05 |
roundy=Math.round(wert2*100)/100;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
moveObj.setAttribute("transform","translate("+roundx+","+roundy+")");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function ClickObj(evt)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
rect=evt.target.parentNode.getElementsByTagName("rect").item(0);
|
|
Packit |
022b05 |
moveObj=evt.target.parentNode;
|
|
Packit |
022b05 |
attr1=rect.getAttribute("width")/2;
|
|
Packit |
022b05 |
attr2=rect.getAttribute("height")/2;
|
|
Packit |
022b05 |
active=true;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function OutOfObj(evt)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
if (active) {
|
|
Packit |
022b05 |
active=false;
|
|
Packit |
022b05 |
findAdjacentEdges();
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function findAdjacentEdges()
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
var rectl, rectlid, i, nodenames;
|
|
Packit |
022b05 |
rectl = rect;
|
|
Packit |
022b05 |
rectlid = rectl.getAttribute("id");
|
|
Packit |
022b05 |
for (i=0; i
|
|
Packit |
022b05 |
nodenames = paths.item(i).getAttribute("id").split("-");
|
|
Packit |
022b05 |
if (nodenames[0] == rectlid || nodenames[1] == rectlid) {
|
|
Packit |
022b05 |
repaintEdge(paths.item(i), nodenames, i);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function repaintEdge(edge, nodenames, j)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
var startnode, endnode, attr, i, k, l, m, alpha, beta;
|
|
Packit |
022b05 |
var nodesx, nodesy, nodeex, nodeey, nodesw, nodesh, nodeew, nodeeh;
|
|
Packit |
022b05 |
var edgesx, edgesy, edgeex, edgeey, sx, sy, ex, ey;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//extract node coordinates and dimensions
|
|
Packit |
022b05 |
startnode = svgdoc.getElementById(nodenames[0]);
|
|
Packit |
022b05 |
nodesw=startnode.getAttribute("width");
|
|
Packit |
022b05 |
nodesh=startnode.getAttribute("height");
|
|
Packit |
022b05 |
attr = startnode.parentNode.attributes;
|
|
Packit |
022b05 |
for (i=0;i
|
|
Packit |
022b05 |
if (attr.item(i).nodeName == "transform") {
|
|
Packit |
022b05 |
k = attr.item(i).nodeValue.indexOf("(");
|
|
Packit |
022b05 |
l = attr.item(i).nodeValue.indexOf(",");
|
|
Packit |
022b05 |
m = attr.item(i).nodeValue.indexOf(")");
|
|
Packit |
022b05 |
nodesx = parseFloat(attr.item(i).nodeValue.substring(k+1,l));
|
|
Packit |
022b05 |
nodesy = parseFloat(attr.item(i).nodeValue.substring(l+1,m));
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
endnode = svgdoc.getElementById(nodenames[1]);
|
|
Packit |
022b05 |
nodeew=endnode.getAttribute("width");
|
|
Packit |
022b05 |
nodeeh=endnode.getAttribute("height");
|
|
Packit |
022b05 |
attr = endnode.parentNode.attributes;
|
|
Packit |
022b05 |
for (i=0;i
|
|
Packit |
022b05 |
if (attr.item(i).nodeName == "transform") {
|
|
Packit |
022b05 |
k = attr.item(i).nodeValue.indexOf("(");
|
|
Packit |
022b05 |
l = attr.item(i).nodeValue.indexOf(",");
|
|
Packit |
022b05 |
m = attr.item(i).nodeValue.indexOf(")");
|
|
Packit |
022b05 |
nodeex = parseFloat(attr.item(i).nodeValue.substring(k+1,l));
|
|
Packit |
022b05 |
nodeey = parseFloat(attr.item(i).nodeValue.substring(l+1,m));
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
alpha = Math.atan((nodesy-nodeey)/(nodesx-nodeex));
|
|
Packit |
022b05 |
if (alpha < 0)
|
|
Packit |
022b05 |
alpha += Math.PI;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//calculate intersection of edge and startNode
|
|
Packit |
022b05 |
beta = Math.atan(nodesh/nodesw);
|
|
Packit |
022b05 |
if (alpha < beta
|
|
Packit |
022b05 |
|| (alpha > Math.PI-beta && alpha < Math.PI+beta)
|
|
Packit |
022b05 |
|| alpha > 2*Math.PI-beta) {
|
|
Packit |
022b05 |
//intersection at left or right border
|
|
Packit |
022b05 |
if (nodesx < nodeex) {
|
|
Packit |
022b05 |
edgesx = nodesx - 0 + nodesw/2;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
edgesx = nodesx - nodesw/2;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (nodesy < nodeey) {
|
|
Packit |
022b05 |
edgesy = nodesy - 0 + Math.abs(nodesw*Math.tan(alpha)/2);
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
edgesy = nodesy - Math.abs(nodesw*Math.tan(alpha)/2);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
//intersection at top or bottom border
|
|
Packit |
022b05 |
if (nodesy < nodeey) {
|
|
Packit |
022b05 |
edgesy = nodesy - 0 + nodesh/2;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
edgesy = nodesy - nodesh/2;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (nodesx < nodeex) {
|
|
Packit |
022b05 |
edgesx = nodesx - 0 + Math.abs(nodesh/(2*Math.tan(alpha)));
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
edgesx = nodesx - Math.abs(nodesh/(2*Math.tan(alpha)));
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//calculate intersection of edge and endNode
|
|
Packit |
022b05 |
beta = Math.atan(nodeeh/nodeew);
|
|
Packit |
022b05 |
if (alpha < beta
|
|
Packit |
022b05 |
|| (alpha > Math.PI-beta && alpha < Math.PI+beta)
|
|
Packit |
022b05 |
|| alpha > 2*Math.PI-beta) {
|
|
Packit |
022b05 |
//intersection at left or right border
|
|
Packit |
022b05 |
if (nodesx > nodeex) {
|
|
Packit |
022b05 |
edgeex = nodeex - 0 + nodeew/2;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
edgeex = nodeex - nodeew/2;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (nodesy > nodeey) {
|
|
Packit |
022b05 |
edgeey = nodeey - 0 + Math.abs(nodeew*Math.tan(alpha)/2);
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
edgeey = nodeey - Math.abs(nodeew*Math.tan(alpha)/2);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
//intersection at top or bottom border
|
|
Packit |
022b05 |
if (nodesy > nodeey) {
|
|
Packit |
022b05 |
edgeey = nodeey - 0 + nodeeh/2;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
edgeey = nodeey - nodeeh/2;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (nodesx > nodeex) {
|
|
Packit |
022b05 |
edgeex = nodeex - 0 + Math.abs(nodeeh/(2*Math.tan(alpha)));
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
edgeex = nodeex - Math.abs(nodeeh/(2*Math.tan(alpha)));
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//set new edge coordinates
|
|
Packit |
022b05 |
sx=Math.round(edgesx*100)/100;
|
|
Packit |
022b05 |
ex=Math.round(edgeex*100)/100;
|
|
Packit |
022b05 |
sy=Math.round(edgesy*100)/100;
|
|
Packit |
022b05 |
ey=Math.round(edgeey*100)/100;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (sx < ex) {
|
|
Packit |
022b05 |
if (revert[j] == 1) {
|
|
Packit |
022b05 |
revert[j] = 0;
|
|
Packit |
022b05 |
flipEdgeMarks(edge);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
edge.setAttribute("d","M "+sx+" "+sy+" "+ex+" "+ey);
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
if (revert[j] == 0) {
|
|
Packit |
022b05 |
revert[j] = 1;
|
|
Packit |
022b05 |
flipEdgeMarks(edge);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
edge.setAttribute("d","M "+ex+" "+ey+" "+sx+" "+sy);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function flipEdgeMarks(edge)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
var attr, i, j, done, textpaths, pathnamei, offset;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//revert start- and end-markers
|
|
Packit |
022b05 |
attr = edge.attributes;
|
|
Packit |
022b05 |
done = 0;
|
|
Packit |
022b05 |
for (i=0;i
|
|
Packit |
022b05 |
if (attr.item(i).nodeName == "marker-start") {
|
|
Packit |
022b05 |
for (j=i;j
|
|
Packit |
022b05 |
if (attr.item(j).nodeName == "marker-end") {
|
|
Packit |
022b05 |
done = 1;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (done == 0) {
|
|
Packit |
022b05 |
//start->end
|
|
Packit |
022b05 |
edge.removeAttribute("marker-start");
|
|
Packit |
022b05 |
edge.setAttribute("marker-end","url(#arrowend)");
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (attr.item(i).nodeName == "marker-end") {
|
|
Packit |
022b05 |
for (j=i;j
|
|
Packit |
022b05 |
if (attr.item(j).nodeName == "marker-start") {
|
|
Packit |
022b05 |
done = 1;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (done == 0) {
|
|
Packit |
022b05 |
//end->start
|
|
Packit |
022b05 |
edge.removeAttribute("marker-end");
|
|
Packit |
022b05 |
edge.setAttribute("marker-start","url(#arrowstart)");
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//revert cardinalities
|
|
Packit |
022b05 |
textpaths = svgdoc.getElementsByTagName("textPath");
|
|
Packit |
022b05 |
for (i=0;i
|
|
Packit |
022b05 |
pathname = textpaths.item(i).getAttribute("xlink:href").replace(/#/,"");
|
|
Packit |
022b05 |
if (pathname == edge.getAttribute("id")) {
|
|
Packit |
022b05 |
offset = textpaths.item(i).getAttribute("startOffset").substr(0,2);
|
|
Packit |
022b05 |
textpaths.item(i).setAttribute("startOffset",100 - offset + "%")
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function getSVGDoc(load_evt)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
svgdoc=load_evt.target.ownerDocument;
|
|
Packit |
022b05 |
svgroot=svgdoc.documentElement;
|
|
Packit |
022b05 |
texte=svgdoc.getElementById("tooltip").getElementsByTagName("text");
|
|
Packit |
022b05 |
for (i=1; i<%i; i++) {
|
|
Packit |
022b05 |
textNode=texte.item(1).cloneNode("true");
|
|
Packit |
022b05 |
svgdoc.getElementById("tooltip").appendChild(textNode);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
texte=svgdoc.getElementById("tooltip").getElementsByTagName("text");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function ShowTooltipMZ(mousemove_event,txt)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
var ttrelem,tttelem,ttline,posx,posy,curtrans,ctx,cty,txt;
|
|
Packit |
022b05 |
var maxbreite,tmp,i;
|
|
Packit |
022b05 |
ttrelem=svgdoc.getElementById("ttr");
|
|
Packit |
022b05 |
tttelem=svgdoc.getElementById("ttt");
|
|
Packit |
022b05 |
ttline=svgdoc.getElementById("ttl");
|
|
Packit |
022b05 |
posx=mousemove_event.clientX;
|
|
Packit |
022b05 |
posy=mousemove_event.clientY;
|
|
Packit |
022b05 |
for (i=1;i<=%i;i++)
|
|
Packit |
022b05 |
texte.item(i).firstChild.data="";
|
|
Packit |
022b05 |
tttelem.childNodes.item(0).data="";
|
|
Packit |
022b05 |
tmp=txt.split("\n");
|
|
Packit |
022b05 |
maxbreite=0;
|
|
Packit |
022b05 |
for (i=0;i
|
|
Packit |
022b05 |
if (tmp[i]=="")
|
|
Packit |
022b05 |
continue;
|
|
Packit |
022b05 |
tttelem.childNodes.item(0).data=tmp[i];
|
|
Packit |
022b05 |
if (maxbreite
|
|
Packit |
022b05 |
maxbreite=tttelem.getComputedTextLength();
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
curtrans=svgroot.currentTranslate;
|
|
Packit |
022b05 |
ctx=curtrans.x;
|
|
Packit |
022b05 |
cty=curtrans.y;
|
|
Packit |
022b05 |
ttrelem.setAttribute("x",posx-ctx+10);
|
|
Packit |
022b05 |
ttrelem.setAttribute("y",posy-cty-20+10);
|
|
Packit |
022b05 |
ttrelem.setAttribute("width",maxbreite*0.92+10);
|
|
Packit |
022b05 |
ttrelem.setAttribute("height",tmp.length*15+3);
|
|
Packit |
022b05 |
ttrelem.setAttribute("style",
|
|
Packit |
022b05 |
"fill: #FFC; stroke: #000; stroke-width: 0.5px");
|
|
Packit |
022b05 |
for (i=1; i<=tmp.length; i++) {
|
|
Packit |
022b05 |
if (tmp[i-1]=="-- -- --") {
|
|
Packit |
022b05 |
ttline.setAttribute("x1", posx-ctx+10);
|
|
Packit |
022b05 |
ttline.setAttribute("y1", parseInt(i-1)*15+posy-cty);
|
|
Packit |
022b05 |
ttline.setAttribute("x2", posx-ctx+10+maxbreite*0.92+10);
|
|
Packit |
022b05 |
ttline.setAttribute("y2", parseInt(i-1)*15+posy-cty);
|
|
Packit |
022b05 |
ttline.setAttribute("style", "stroke: #000; stroke-width: 0.5px");
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
texte.item(i).firstChild.data=tmp[i-1];
|
|
Packit |
022b05 |
texte.item(i).setAttribute("x",posx-ctx+15);
|
|
Packit |
022b05 |
texte.item(i).setAttribute("y",parseInt(i-1)*15+posy-cty+3);
|
|
Packit |
022b05 |
texte.item(i).setAttribute("style","fill: #00E; font-size: 11px");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
svgdoc.getElementById("tooltip").style.setProperty("visibility","visible");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function HideTooltip()
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
svgdoc.getElementById("ttl").style.setProperty("visibility","hidden");
|
|
Packit |
022b05 |
svgdoc.getElementById("tooltip").style.setProperty("visibility","hidden");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function ZoomControl()
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
var curzoom;
|
|
Packit |
022b05 |
curzoom=svgroot.currentScale;
|
|
Packit |
022b05 |
svgdoc.getElementById("tooltip").setAttribute("transform",
|
|
Packit |
022b05 |
"scale("+1/curzoom+")");
|
|
Packit |
022b05 |
zoom=1/curzoom;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function collapse(evt)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
var i, k, l, m, svgdoc, obj, targetID, targetX, targetY, attr;
|
|
Packit |
022b05 |
obj = evt.getTarget();
|
|
Packit |
022b05 |
svgdoc = obj.ownerDocument;
|
|
Packit |
022b05 |
//extract coordinates and id of the clicked text
|
|
Packit |
022b05 |
attr = obj.parentNode.parentNode.attributes;
|
|
Packit |
022b05 |
for (i=0;i
|
|
Packit |
022b05 |
if (attr.item(i).nodeName == "transform") {
|
|
Packit |
022b05 |
k = attr.item(i).nodeValue.indexOf("(");
|
|
Packit |
022b05 |
l = attr.item(i).nodeValue.indexOf(",");
|
|
Packit |
022b05 |
m = attr.item(i).nodeValue.indexOf(")");
|
|
Packit |
022b05 |
targetX = attr.item(i).nodeValue.substring(k+1,l);
|
|
Packit |
022b05 |
targetY = attr.item(i).nodeValue.substring(l+1,m);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (attr.item(i).nodeName == "id") {
|
|
Packit |
022b05 |
targetID = attr.item(i).nodeValue.substr(2);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
//decide if we are collapsing or uncollapsing
|
|
Packit |
022b05 |
if (collapsed[0][targetID] == 0) {
|
|
Packit |
022b05 |
hideInfos(evt, obj, svgdoc, targetX, targetY, targetID, attr);
|
|
Packit |
022b05 |
collapsed[0][targetID] = 1;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
showHiddenInfos(evt, obj, svgdoc, targetX, targetY, targetID, attr);
|
|
Packit |
022b05 |
collapsed[0][targetID] = 0;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function showHiddenInfos(evt, obj, svgdoc, targetX, targetY, targetID, attr)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
var i, k, l, m, nextObj, nextX, nextY, gapY=0, clickedID;
|
|
Packit |
022b05 |
//change clicked text
|
|
Packit |
022b05 |
obj.firstChild.data="--";
|
|
Packit |
022b05 |
targetID++;
|
|
Packit |
022b05 |
nextObj = svgdoc.getElementById("MI"+targetID);
|
|
Packit |
022b05 |
if (nextObj == null)
|
|
Packit |
022b05 |
return;
|
|
Packit |
022b05 |
//show child texts again
|
|
Packit |
022b05 |
for (;;) {
|
|
Packit |
022b05 |
attr = nextObj.attributes;
|
|
Packit |
022b05 |
for (i=0;i
|
|
Packit |
022b05 |
if (attr.item(i).nodeName == "transform") {
|
|
Packit |
022b05 |
k = attr.item(i).nodeValue.indexOf("(");
|
|
Packit |
022b05 |
l = attr.item(i).nodeValue.indexOf(",");
|
|
Packit |
022b05 |
m = attr.item(i).nodeValue.indexOf(")");
|
|
Packit |
022b05 |
nextX = attr.item(i).nodeValue.substring(k+1,l);
|
|
Packit |
022b05 |
nextY = attr.item(i).nodeValue.substring(l+1,m);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (nextX > targetX) {
|
|
Packit |
022b05 |
nextObj.style.setProperty("visibility","visible");
|
|
Packit |
022b05 |
gapY += 15;
|
|
Packit |
022b05 |
if (collapsed[0][targetID] == 1) {
|
|
Packit |
022b05 |
targetID = collapsed[1][targetID];
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
targetID++;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
nextObj = svgdoc.getElementById("MI"+targetID);
|
|
Packit |
022b05 |
if (nextObj == null)
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (nextObj == null)
|
|
Packit |
022b05 |
return;
|
|
Packit |
022b05 |
//move following texts downwards
|
|
Packit |
022b05 |
while (nextObj != null) {
|
|
Packit |
022b05 |
attr = nextObj.attributes;
|
|
Packit |
022b05 |
for (i=0;i
|
|
Packit |
022b05 |
if (attr.item(i).nodeName == "transform") {
|
|
Packit |
022b05 |
k = attr.item(i).nodeValue.indexOf("(");
|
|
Packit |
022b05 |
l = attr.item(i).nodeValue.indexOf(",");
|
|
Packit |
022b05 |
m = attr.item(i).nodeValue.indexOf(")");
|
|
Packit |
022b05 |
nextX = attr.item(i).nodeValue.substring(k+1,l);
|
|
Packit |
022b05 |
nextY = attr.item(i).nodeValue.substring(l+1,m);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
nextY = nextY - 1 + gapY + 1;
|
|
Packit |
022b05 |
nextObj.setAttribute("transform","translate("+nextX+","+nextY+")");
|
|
Packit |
022b05 |
targetID++;
|
|
Packit |
022b05 |
nextObj = svgdoc.getElementById("MI"+targetID);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function hideInfos(evt, obj, svgdoc, targetX, targetY, targetID, attr)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
var i, k, l, m, nextObj, nextX, nextY, gapY=0;
|
|
Packit |
022b05 |
clickedID = targetID;
|
|
Packit |
022b05 |
//change clicked text
|
|
Packit |
022b05 |
obj.firstChild.data="+";
|
|
Packit |
022b05 |
targetID++;
|
|
Packit |
022b05 |
nextObj = svgdoc.getElementById("MI"+targetID);
|
|
Packit |
022b05 |
if (nextObj == null)
|
|
Packit |
022b05 |
return;
|
|
Packit |
022b05 |
//wipe out child texts
|
|
Packit |
022b05 |
for (;;) {
|
|
Packit |
022b05 |
attr = nextObj.attributes;
|
|
Packit |
022b05 |
for (i=0;i
|
|
Packit |
022b05 |
if (attr.item(i).nodeName == "transform") {
|
|
Packit |
022b05 |
k = attr.item(i).nodeValue.indexOf("(");
|
|
Packit |
022b05 |
l = attr.item(i).nodeValue.indexOf(",");
|
|
Packit |
022b05 |
m = attr.item(i).nodeValue.indexOf(")");
|
|
Packit |
022b05 |
nextX = attr.item(i).nodeValue.substring(k+1,l);
|
|
Packit |
022b05 |
nextY = attr.item(i).nodeValue.substring(l+1,m);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (nextX > targetX) {
|
|
Packit |
022b05 |
nextObj.style.setProperty("visibility","hidden");
|
|
Packit |
022b05 |
gapY += 15;
|
|
Packit |
022b05 |
if (collapsed[0][targetID] == 1) {
|
|
Packit |
022b05 |
targetID = collapsed[1][targetID];
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
targetID++;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
nextObj = svgdoc.getElementById("MI"+targetID);
|
|
Packit |
022b05 |
if (nextObj == null)
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
//save next uncollapsed element in array
|
|
Packit |
022b05 |
collapsed[1][clickedID] = targetID;
|
|
Packit |
022b05 |
if (nextObj == null)
|
|
Packit |
022b05 |
return;
|
|
Packit |
022b05 |
//move following texts upwards
|
|
Packit |
022b05 |
while (nextObj != null) {
|
|
Packit |
022b05 |
attr = nextObj.attributes;
|
|
Packit |
022b05 |
for (i=0;i
|
|
Packit |
022b05 |
if (attr.item(i).nodeName == "transform") {
|
|
Packit |
022b05 |
k = attr.item(i).nodeValue.indexOf("(");
|
|
Packit |
022b05 |
l = attr.item(i).nodeValue.indexOf(",");
|
|
Packit |
022b05 |
m = attr.item(i).nodeValue.indexOf(")");
|
|
Packit |
022b05 |
nextX = attr.item(i).nodeValue.substring(k+1,l);
|
|
Packit |
022b05 |
nextY = attr.item(i).nodeValue.substring(l+1,m);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
nextY -= gapY;
|
|
Packit |
022b05 |
nextObj.setAttribute("transform","translate("+nextX+","+nextY+")");
|
|
Packit |
022b05 |
targetID++;
|
|
Packit |
022b05 |
nextObj = svgdoc.getElementById("MI"+targetID);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function init(evt)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
var nodenames, startnode, endnode, attr, i, j, k, l, m, nodesx, nodeex;
|
|
Packit |
022b05 |
collapsed[0] = new Array(%i);
|
|
Packit |
022b05 |
collapsed[1] = new Array(%i);
|
|
Packit |
022b05 |
for (i=0; i<%i; i++) {
|
|
Packit |
022b05 |
collapsed[0][i] = 0;
|
|
Packit |
022b05 |
collapsed[1][i] = 0;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
for (i=0; i<%i; i++) {
|
|
Packit |
022b05 |
name[i] = "";
|
|
Packit |
022b05 |
clickStatus[i] = 0;
|
|
Packit |
022b05 |
redCount[i] = 0;
|
|
Packit |
022b05 |
salmonCount[i] = 0;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
getSVGDoc(evt);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//check which edges are printed from right to left
|
|
Packit |
022b05 |
paths = svgdoc.getElementsByTagName("path");
|
|
Packit |
022b05 |
revert = new Array(paths.length);
|
|
Packit |
022b05 |
for (j=0; j
|
|
Packit |
022b05 |
nodenames = paths.item(j).getAttribute("id").split("-");
|
|
Packit |
022b05 |
startnode = svgdoc.getElementById(nodenames[0]);
|
|
Packit |
022b05 |
attr = startnode.parentNode.attributes;
|
|
Packit |
022b05 |
for (i=0;i
|
|
Packit |
022b05 |
if (attr.item(i).nodeName == "transform") {
|
|
Packit |
022b05 |
k = attr.item(i).nodeValue.indexOf("(");
|
|
Packit |
022b05 |
l = attr.item(i).nodeValue.indexOf(",");
|
|
Packit |
022b05 |
m = attr.item(i).nodeValue.indexOf(")");
|
|
Packit |
022b05 |
nodesx = parseFloat(attr.item(i).nodeValue.substring(k+1,l));
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
endnode = svgdoc.getElementById(nodenames[1]);
|
|
Packit |
022b05 |
attr = endnode.parentNode.attributes;
|
|
Packit |
022b05 |
for (i=0;i
|
|
Packit |
022b05 |
if (attr.item(i).nodeName == "transform") {
|
|
Packit |
022b05 |
k = attr.item(i).nodeValue.indexOf("(");
|
|
Packit |
022b05 |
l = attr.item(i).nodeValue.indexOf(",");
|
|
Packit |
022b05 |
m = attr.item(i).nodeValue.indexOf(")");
|
|
Packit |
022b05 |
nodeex = parseFloat(attr.item(i).nodeValue.substring(k+1,l));
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (nodesx > nodeex) {
|
|
Packit |
022b05 |
revert[j] = 1;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
revert[j] = 0;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function setStatus(evt, color1, color2)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
var clickObj = evt.getTarget();
|
|
Packit |
022b05 |
var clickObjName = clickObj.getAttribute('id');
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//find i corresponding to the clicked object
|
|
Packit |
022b05 |
for (i=0; i<%i; i++) {
|
|
Packit |
022b05 |
if (name[i] == "") {
|
|
Packit |
022b05 |
name[i] = clickObjName;
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (name[i] != clickObjName)
|
|
Packit |
022b05 |
continue;
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//toggle click status, color clicked object
|
|
Packit |
022b05 |
if (clickStatus[i] == 0) {
|
|
Packit |
022b05 |
clickStatus[i] = 1;
|
|
Packit |
022b05 |
clickObj.setAttribute("style","fill: "+color1);
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
clickStatus[i] = 0;
|
|
Packit |
022b05 |
clickObj.setAttribute("style","fill: "+color2);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//adjust color-counter
|
|
Packit |
022b05 |
if (color1 == 'red') {
|
|
Packit |
022b05 |
if (clickStatus[i] == 1) {
|
|
Packit |
022b05 |
redCount[i]++;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
redCount[i]--;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (color1 == 'salmon') {
|
|
Packit |
022b05 |
if (clickStatus[i] == 1) {
|
|
Packit |
022b05 |
salmonCount[i]++;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
salmonCount[i]--;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (clickStatus[i] == 0 && salmonCount[i] > 0) {
|
|
Packit |
022b05 |
clickObj.setAttribute("style","fill: salmon");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function changeColor(evt, targetObjName, color1, color2)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
var clickObj = evt.getTarget();
|
|
Packit |
022b05 |
var clickObjName = clickObj.getAttribute('id');
|
|
Packit |
022b05 |
var targetObj = svgDocument.getElementById(targetObjName);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//find i corresponding to the clicked object
|
|
Packit |
022b05 |
for (i=0; i<%i; i++) {
|
|
Packit |
022b05 |
if (name[i] != clickObjName)
|
|
Packit |
022b05 |
continue;
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//find j corresponding to the target object
|
|
Packit |
022b05 |
for (j=0; j<%i; j++) {
|
|
Packit |
022b05 |
if (name[j] == "") {
|
|
Packit |
022b05 |
name[j] = targetObjName;
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (name[j] != targetObjName)
|
|
Packit |
022b05 |
continue;
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//adjust color-counter
|
|
Packit |
022b05 |
if (color1 == 'red') {
|
|
Packit |
022b05 |
if (clickStatus[i] == 1) {
|
|
Packit |
022b05 |
redCount[j]++;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
redCount[j]--;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (color1 == 'salmon') {
|
|
Packit |
022b05 |
if (clickStatus[i] == 1) {
|
|
Packit |
022b05 |
salmonCount[j]++;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
salmonCount[j]--;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
function colorText(targetObjName, color)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
var targetObj = svgDocument.getElementById(targetObjName);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//find i corresponding to the target object
|
|
Packit |
022b05 |
for (i=0; i<%i; i++) {
|
|
Packit |
022b05 |
if (name[i] != targetObjName)
|
|
Packit |
022b05 |
continue;
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
//color text
|
|
Packit |
022b05 |
if (i == %i) {
|
|
Packit |
022b05 |
targetObj.setAttribute("style","fill: "+color);
|
|
Packit |
022b05 |
return;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (redCount[i] == 0 && salmonCount[i] == 0) {
|
|
Packit |
022b05 |
targetObj.setAttribute("style","fill: "+color);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (salmonCount[i] > 0) {
|
|
Packit |
022b05 |
if (color == 'red') {
|
|
Packit |
022b05 |
targetObj.setAttribute("style","fill: red");
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
if (redCount[i] > 0) {
|
|
Packit |
022b05 |
targetObj.setAttribute("style","fill: red");
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
targetObj.setAttribute("style","fill: salmon");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|