summaryrefslogtreecommitdiff
path: root/scripts/rhizicore.js
diff options
context:
space:
mode:
authorOwen <despito@MacBook-Pro-de-Despito.local>2014-07-14 19:06:42 +0300
committerOwen <despito@MacBook-Pro-de-Despito.local>2014-07-14 19:06:42 +0300
commit335af0bbf19ef4e6454233c9b4d212ee5aaa9d0d (patch)
tree7433f0c265acf863db5a6615eab6f601c94e0dad /scripts/rhizicore.js
parent2d98eaaf727834c128fdd2513d43d677d97fe8d7 (diff)
Target and adjacent nodes are highlighted when clicked
Background click remove editing boxes and highlights Deliverables test button adds 140 random tasks and dates Links between nodes have two colors: blue and green for dependencies
Diffstat (limited to 'scripts/rhizicore.js')
-rw-r--r--scripts/rhizicore.js895
1 files changed, 601 insertions, 294 deletions
diff --git a/scripts/rhizicore.js b/scripts/rhizicore.js
index 8ccb5718..b8c4efe5 100644
--- a/scripts/rhizicore.js
+++ b/scripts/rhizicore.js
@@ -1,415 +1,722 @@
+//CORE VARIABLES
+var addednodes = [];
+
+var graphstate = "GRAPH";
+var graphinterval = 0;
+
+var boxedin = false;
+
+var deliverables = [];
+
+var boxedin, nodetext, linktext, link, links, node, nodes, circle;
+
+var scrollValue = 0;
+
function myGraph(el) {
///FUNCTIONS
- this.addNode = function (id,type,state) {
- var node=findNode(id,null);
- if(node !== undefined) {
+ this.addNode = function (id, type, state) {
+ var start = 0,
+ end = 0;
+ var node = findNode(id, null);
+ if (node !== undefined) {
+ graph.editState(id, null, "temp");
+ } else {
+ nodes.push({
+ "id": id,
+ "type": type,
+ "state": state,
+ "start": start,
+ "end": end
+ });
- }else{
- nodes.push({"id":id,"type":type,"state":state});
+ }
update();
- }
}
- this.removeNode = function (id,state) {
- var i = 0;
- var n = findNode(id,state);
- while (i < links.length) {
- if ((links[i]['source'] === n)||(links[i]['target'] == n)) links.splice(i,1);
- else i++;
- }
- var index = findNodeIndex(id,state);
- if(index !== undefined) {
- nodes.splice(index, 1);
+ this.addNodeComplete = function (id, type, state, start, end) {
+ var node = findNode(id, null);
+ if (node !== undefined) {
+ graph.editState(id, null, "temp");
+ } else {
+ nodes.push({
+ "id": id,
+ "type": type,
+ "state": state,
+ "start": start,
+ "end": end
+ });
+
+ }
update();
- }
}
- this.addLink = function (sourceId, targetId, name) {
- var sourceNode = findNode(sourceId,null);
- var targetNode = findNode(targetId,null);
+ this.removeNode = function (id, state) {
+ var i = 0;
+ var n = findNode(id, state);
+ while (i < links.length) {
+ if ((links[i]['source'] === n) || (links[i]['target'] == n)) links.splice(i, 1);
+ else i++;
+ }
+ var index = findNodeIndex(id, state);
+ if (index !== undefined) {
+ nodes.splice(index, 1);
+ update();
+ }
+ }
+
+ this.highlightNode = function (id, state) {
+ var i = 0,
+ j = 0;
+ var n = findNode(id, state);
+ var adjacentnode;
+
+ this.removeHighlight();
+ //highlight node
+ if (n !== undefined && n.state!=="chosen" && n.state!=="temp") {
+ n.state = "chosen";
+
+ while (i < links.length) {
+ if (links[i]['source'] === n){
+ adjacentnode=findNode(links[i]['target'].id,null);
+ if(adjacentnode.state!=="temp")adjacentnode.state = "exit";
+ links[i]['state'] = "exit";
+ }
+ if(links[i]['target'] === n) {
+ adjacentnode=findNode(links[i]['source'].id,null);
+ if(adjacentnode.state!=="temp")adjacentnode.state = "enter";
+ links[i]['state'] = "enter";
+ }
+ i++;
+ }
+ update();
+
+ }
- if((sourceNode !== undefined) && (targetNode !== undefined)) {
- links.push({"source": sourceNode, "target": targetNode, "name": name});
- update();
- }else{
- }
}
- this.editLink = function (sourceId, targetId,newname) {
- var link= findLink(sourceId, targetId, newname);
- if(link !== undefined) {
- link.name=newname;
+ this.removeHighlight = function(){
+ var k=0;
+ while (k < nodes.length) {
+ if(nodes[k]['state'] === "enter" || nodes[k]['state'] === "exit" || nodes[k]['state'] === "chosen"){
+ nodes[k]['state'] = "perm";
+ }
+ k++;
+ }
+ var j=0;
+ //highlight all connections
+ while (j < links.length) {
+ links[j]['state'] = "perm";
+ j++;
+ }
update();
- }else{
- }
}
- this.editLinkTarget = function (sourceId, targetId,newTarget) {
- var link= findLink(sourceId, targetId, null);
- if(link !== undefined ) {
- link.target=findNode(newTarget,null);
- update();
- }else{
+ this.addLink = function (sourceId, targetId, name, state) {
+ var sourceNode = findNode(sourceId, null);
+ var targetNode = findNode(targetId, null);
- }
+ if ((sourceNode !== undefined) && (targetNode !== undefined)) {
+ links.push({
+ "source": sourceNode,
+ "target": targetNode,
+ "name": name,
+ "state": state
+ });
+ update();
+ } else {
+
+ }
}
- this.editName = function (id,type,newname) {
- var index = findNode(id,type);
- if((index !== undefined)){
- index.id=newname;
- update();
- }
- }
+ this.editLink = function (sourceId, targetId, newname) {
+ var link = findLink(sourceId, targetId, newname);
+ if (link !== undefined) {
+ link.name = newname;
+ update();
+ } else {}
+ }
+ this.editLinkTarget = function (sourceId, targetId, newTarget) {
+ var link = findLink(sourceId, targetId, null);
+ if (link !== undefined) {
+ link.target = findNode(newTarget, null);
+ update();
+ } else {
+ }
+ }
- this.editType = function (id,state,newtype) {
- var index = findNode(id,state);
- if((index !== undefined)){
- index.type=newtype;
- update();
- }
- }
+ this.editName = function (id, type, newname) {
+ var index = findNode(id, type);
+ if ((index !== undefined)) {
+ index.id = newname;
+ update();
+ }
+ }
- this.editState = function (id,state,newstate) {
- var index = findNode(id,state);
- if((index !== undefined)){
- index.state=newstate;
- update();
- }
-}
+ this.editDates = function (id, type, start, end) {
+ var index = findNode(id, type);
+ if ((index !== undefined)) {
+ index.start = start;
+ index.end = end;
+ update();
+ }
+ }
-this.findCoordinates = function(id, type){
- var index = findNode(id,type);
- if((index !== undefined)){
- $('.typeselection').css('top',index.y-90);
- $('.typeselection').css('left',index.x-230);
- }
-}
+ this.editType = function (id, state, newtype) {
+ var index = findNode(id, state);
+ if ((index !== undefined)) {
+ index.type = newtype;
+ update();
+ }
+ }
-var findLink = function (sourceId, targetId, name) {
- for (var i=0; i < links.length; i++) {
- if (links[i].source.id === sourceId && links[i].target.id === targetId){
- return links[i];
+ this.editState = function (id, state, newstate) {
+ var index = findNode(id, state);
+ if ((index !== undefined)) {
+ index.state = newstate;
+ update();
+ }
}
- }
-}
+ this.findCoordinates = function (id, type) {
+ var index = findNode(id, type);
+ if ((index !== undefined)) {
+ $('.typeselection').css('top', index.y - 90);
+ $('.typeselection').css('left', index.x - 230);
+ }
+ }
-var findNode = function (id,state) {
- //id=id.toLowerCase();
- for (var i=0; i < nodes.length; i++) {
- if (nodes[i].id === id || nodes[i].state === state)
- return nodes[i]
- };
+
+
+ var findLink = function (sourceId, targetId, name) {
+ for (var i = 0; i < links.length; i++) {
+ if (links[i].source.id === sourceId && links[i].target.id === targetId) {
+ return links[i];
+ }
+ }
}
- var findNodeIndex = function (id,state) {
- for (var i=0; i < nodes.length; i++) {
- if (nodes[i].id === id || nodes[i].state === state)
- return i
- };
+
+ var findNode = function (id, state) {
+ //id=id.toLowerCase();
+ for (var i = 0; i < nodes.length; i++) {
+ if (nodes[i].id === id || nodes[i].state === state)
+ return nodes[i]
+ };
+ }
+
+ var findNodeIndex = function (id, state) {
+ for (var i = 0; i < nodes.length; i++) {
+ if (nodes[i].id === id || nodes[i].state === state)
+ return i
+ };
}
///GRAPH BUILDER
var w = $(el).innerWidth(),
- h = $(el).innerHeight();
+ h = $(el).innerHeight();
var color = d3.scale.category20();
var vis = this.vis = d3.select(el).append("svg:svg")
- .attr("width", w)
- .attr("height", h)
- .append("g")
- .call(d3.behavior.zoom().center([w/2,h/2]).on("zoom", zoom))
- .append("g");
+ .attr("width", w)
+ .attr("height", h)
+ .append("g")
+ .call(d3.behavior.zoom().center([w / 2, h / 2]).on("zoom", zoom))
+ .append("g");
- vis.append("rect")
- .attr("class", "overlay")
- .attr("width", w)
- .attr("height", h);
+
var force = d3.layout.force()
- .gravity(.08)
- .distance(120)
- .charge(-600)
- .size([w, h]);
+ .distance(120)
+ .charge(-600)
+ .size([w, h]);
- var nodes = force.nodes(),
+ nodes = force.nodes();
links = force.links();
-
+
var update = function () {
- vis.selectAll("*").remove();
- var link = vis.selectAll(".link")
- .data(links);
+ vis.selectAll("*").remove();
+ link = vis.selectAll(".link")
+ .data(links);
- vis.append("svg:defs").selectAll("marker")
- .data(["end"]) // Different link/path types can be defined here
- .enter().append("svg:marker") // This section adds in the arrows
- .attr("id", String)
- .attr("viewBox", "0 -5 10 10")
- .attr("refX", 23)
- .attr("refY", -1.8)
- .attr("markerWidth", 5)
- .attr("markerHeight", 5)
- .attr("orient", "auto")
- .style("fill", "#aaa")
- .append("svg:path")
- .attr("d", "M0,-5L10,0L0,5");
+ vis.append("rect")
+ .attr("class", "overlay")
+ .attr("width", w)
+ .attr("height", h)
+ .on("click", function() {
+ mousedown();
+ });
- link.enter().append("path")
- .attr("d", "M0,-5L10,0L0,5")
- .attr("class", "link")
- .attr("marker-end", "url(#end)");
+ vis.append("svg:defs").selectAll("marker")
+ .data(["end"]) // Different link/path types can be defined here
+ .enter().append("svg:marker") // This section adds in the arrows
+ .attr("id", String)
+ .attr("viewBox", "0 -5 10 10")
+ .attr("refX", 23)
+ .attr("refY", -1.8)
+ .attr("markerWidth", 5)
+ .attr("markerHeight", 5)
+ .attr("orient", "auto")
+ .style("fill", "#aaa")
+ .append("svg:path")
+ .attr("d", "M0,-5L10,0L0,5");
+ link.enter().append("path")
+ .attr("d", "M0,-5L10,0L0,5")
+ .attr("class", function(d){
+
+ if(d.state === "enter"){return "enterlink";}
+ else if(d.state === "exit"){return "exitlink";}
+ else return "link";
+
+ })
+ .attr("marker-end", "url(#end)");
- var linktext = vis.selectAll(".linklabel").data(links);
- linktext.enter()
- .append("text")
- .attr("class", "linklabel")
- .attr("text-anchor", "middle")
- .text(function(d) { if(d.name.length<14)return d.name; else return d.name.substring(0,11)+"..."; })
- .on("click",function(d,i) {editLink(d,i);});
- link.exit().remove();
+ linktext = vis.selectAll(".linklabel").data(links);
+ linktext.enter()
+ .append("text")
+ .attr("class", "linklabel")
+ .attr("text-anchor", "middle")
+ .text(function (d) {
+ if (d.name.length < 25) return d.name;
+ else return d.name.substring(0, 14) + "...";
+ })
+ .on("click", function (d, i) {
+ editLink(d, i);
+ });
+ link.exit().remove();
- var node = vis.selectAll(".node")
- .data(nodes, function(d) { return d.id;});
- var nodeEnter = node.enter()
- .append("g").call(force.drag);
+ node = vis.selectAll(".node")
+ .data(nodes, function (d) {
+ return d.id;
+ });
- var nodetext=nodeEnter.insert("text")
- .attr("class", "nodetext")
- .attr("dx", 20)
- .attr("dy", ".35em")
- .text(function(d) {if(d.state==="temp")return d.id+"|"; else{if(d.id.length<14)return d.id; else return d.id.substring(0,11)+"...";}})
- .on("click",function(d,i) {editNode(d,i);showInfo(d,i);});
+ var nodeEnter = node.enter()
+ .append("g").call(force.drag);
- var circle= nodeEnter.insert("circle")
- .attr("class", "circle")
- .attr("r", function(d) { if(d.state==="temp" && d.type!=="empty") return '16px'; else return customSize(d.type); })
- .style("fill", function(d) { return customColor(d.type); })
- .style("stroke-width", function(d){if(d.state==="temp" && d.type!=="empty") return "3px"; else return "1.5px";})
- .style("box-shadow", function(d){ if(d.state==="temp")return "0 0 40px #FFFF8F"; else return "0 0 0px #FFFF8F";})
- .on("click",function(d,i) {showInfo(d,i);});
+ nodetext = nodeEnter.insert("text")
+ .attr("class", "nodetext")
+ .attr("dx", 20)
+ .attr("dy", ".35em")
+ .text(function (d) {
+ if (d.state === "temp") return d.id + "|";
+ else {
+ if (d.id.length < 14) return d.id;
+ else return d.id.substring(0, 11) + "...";
+ }
+ })
+ .on("click", function (d, i) {
+ editNode(d, i);
+ showInfo(d, i);
+ });
- node.exit().remove();
+ circle = nodeEnter.insert("circle")
+ .attr("class", "circle")
+ .attr("r", function (d) {
+ if (d.state === "temp" && d.type !== "empty") return '16px';
+ else return customSize(d.type);
+ })
+ .style("fill", function (d) {
+ return customColor(d.type);
+ })
+ .style("stroke", function (d) {
+ if(d.state === "chosen"){
+ return "#EDE275";
+ }
+ if(d.state === "enter"){
+ return "#EDE275";
+ }if(d.state === "exit"){
+ return "#EDE275";
+ }else{ return "#fff";}
+ })
+ .style("stroke-width", function (d) {
+ if (d.state === "temp" && d.type !== "empty" || d.state==="chosen") return "3px";
+ else return "1.5px";
+ })
+ .style("box-shadow", function (d) {
+ if (d.state === "temp") return "0 0 40px #FFFF8F";
+ else return "0 0 0px #FFFF8F";
+ })
+ .on("click", function (d, i) {
+ showInfo(d, i);
+ });
- //d3.select("body").on("mousedown", mousedown);
+ node.exit().remove();
- function transform(d) {
- return "translate(" + d.x + "," + d.y + ")";
- }
+ //d3.select("body").on("mousedown", mousedown);
- function getCentroid(selection) {
- var element = selection.node(),
- bbox = element.getBBox();
- return [bbox.x + bbox.width/2, bbox.y + bbox.height/2];
- }
- var boxedin=false;
- force.on("tick", function() {
-
- if(boxedin){
- circle.attr("cx", function(d) { return d.x = Math.max(14, Math.min(w - 14, d.x)); })
- .attr("cy", function(d) { return d.y = Math.max(114, Math.min(h - 14, d.y)); });
+ force.on("tick", tick);
- nodetext.attr("transform",transform);
- }else{
- node.attr("transform",transform);
- }
-
- link.attr("d", function(d) {
- var dx = d.target.x - d.source.x,
- dy = d.target.y - d.source.y,
- dr = Math.sqrt(dx * dx + dy * dy);
- return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,1 " + d.target.x + "," + d.target.y;
- });
+ //update deliverables
+ deliverables = [];
+ for (var i = 0; i < nodes.length; i++) {
+ var current = nodes[i];
+ if (current.type === "deliverable") {
+ deliverables.push({
+ "id": nodes[i].id,
+ "startdate": nodes[i].start,
+ "enddate": nodes[i].end
+ });
+ }
+ //Do something
+ }
- linktext.attr("transform", function(d) {
- return "translate(" + (d.source.x + d.target.x) / 2 + ","
- + (d.source.y + d.target.y) / 2 + ")"; });
- });
-
- force.nodes(nodes)
- .links(links)
- .start();
+ force.nodes(nodes)
+ .links(links)
+ .start();
}
update();
- }
+}
- graph = new myGraph(document.body);
+graph = new myGraph(document.body);
-var addednodes=[];
+function tick(e) {
+ //console.log(e);
- function zoom() {
- //vis.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
- }
+ function transform(d) {
+ if (graphstate === "GRAPH" || d.type === "deliverable") {
+ if (d.state === "temp") {
+ if (d.type === "empty") {
+ d.x = 180;
+ d.y = 150;
- function showInfo(d,i){
- if(d.type==="deliverable"){
- $('.info').html('<form id="editbox"><label>name:</label><input id="editboxname"/><label>description:</label><input id="editdescription"/><label>URL:</label><input id="editurl"/><label>Start date:</label><input id="editstartdate"/><label>End date:</label><input id="editenddate"/><button>edit</button></form>');
- }else{
- $('.info').html('<form id="editbox"><label>name:</label><input id="editboxname"/><label>description:</label><input id="editdescription"/><label>URL:</label><input id="editurl"/><button>edit</button></form>');
-
+ } else {
+ if (addednodes.length % 2 === 0) {
+ d.x = 180;
+ d.y = 150;
+ } else {
+ d.x = 300;
+ d.y = 150;
+
+ }
+ }
+ return "translate(" + d.x + "," + d.y + ")";
+ } else {
+ return "translate(" + d.x + "," + d.y + ")";
+ }
+ } else {
+ return "translate(0,0)";
+ }
+ return "translate(" + d.x + "," + d.y + ")";
}
- $('#editboxname').val(d.id);
- $('#editdescription').val(d.type);
- $('#editurl').val('www.'+d.id+'.com');
- //switchtype start date end date
- }
+
+
+ function getCentroid(selection) {
+ var element = selection.node(),
+ bbox = element.getBBox();
+ return [bbox.x + bbox.width / 2, bbox.y + bbox.height / 2];
+ }
+
+
+ if (graphstate === "GANTT") {
+ var k = 20 * e.alpha;
+ var today = new Date();
+ var missingcounter = 0;
+ nodes.forEach(function (d, i) {
- function mousedown(){
- $('.editinfo').css('top',-100);
- $('.editinfo').css('left',0);
- d3.event.stopPropagation();
- }
+ if ((d.start === 0 || d.end === 0) ){
+ d.x = 450 + missingcounter * 100;
+ d.y = window.innerWidth / 2;
+ if (missingcounter >= 6) {
+ d.x = 450 + (missingcounter - 6) * 100;
+ d.y = window.innerWidth / 2 + 50;
+ }
+ missingcounter++;
+ } else {
+ //var min= 150+graphinterval*Math.ceil(Math.abs(d.start.getTime() - today.getTime()) / (1000 * 3600 * 24)) - $('.gantbox').scrollLeft();
+ //var max= 150+graphinterval*Math.ceil(Math.abs(d.end.getTime() - d.start.getTime()) / (1000 * 3600 * 24)) - $('.gantbox').scrollLeft();
+ //d.x = min+Math.sin(today.getTime()/1000*Math.PI*2/10)*max;
+ d.x = 150 + graphinterval * Math.ceil(Math.abs(d.start.getTime() - today.getTime()) / (1000 * 3600 * 24)) - $('#gantbox').scrollLeft();
+ d.y = 150 + d.start.getHours() * 17;
+ }
+ if(d.state==="chosen"){
+ scrollValue=d.x;
+ }
- function AddedUnique(newnode){
- truth=true;
- for(var p=0;p<addednodes.length;p++){
- if(addednodes[p]===newnode){
- truth=false;
- }
+ });
+ } else {
+ /*nodes.forEach(function (d, i) {
+ if(d.state==="chosen"){
+ d.x=window.innerWidth/2;
+ d.y=window.innerHeight/2;
+ }
+ });*/
+
+
+
+ var k = 15 * e.alpha;
+ links.forEach(function (d, i) {
+ d.source.x -= k;
+ d.target.x += k;
+ d.source.y -= k / 3;
+ d.target.y += k / 3;
+ });
}
- return truth;
- }
-
- function editNode(d,i){
- var oldname=d.id;
- $('.editinfo').css('top',d.y-12);
- $('.editinfo').css('left',d.x+18);
- $('#editname').val(oldname);
+ if (boxedin) {
+ circle.attr("cx", function (d) {
+ return d.x = Math.max(14, Math.min(w - 14, d.x));
+ })
+ .attr("cy", function (d) {
+ return d.y = Math.max(114, Math.min(h - 14, d.y));
+ });
- $('#editform').submit(function () {
- if(AddedUnique($('#editname').val())){
- $('.editinfo').css('top',-100);
- $('.editinfo').css('left',0);
- graph.editName(oldname,"whatever",$('#editname').val());
- var index=addednodes.indexOf(oldname);
- addednodes[index]=$('#editname').val();
- console.log(addednodes[index]);
- }else{
- var choice=$('#editname').val();
- $('#editname').val(choice+"(2)");
+ nodetext.attr("transform", transform);
+ } else {
+ node.attr("transform", transform);
}
- return false;
- });
- }
- function editLink(d,i){
- var dx=(d.source.x + d.target.x) / 2;
- var dy=(d.source.y + d.target.y) / 2;
- var oldname=d.name;
- $('.editlinkinfo').css('top',dy-17);
- $('.editlinkinfo').css('left',dx-18);
- $('#editlinkname').val(oldname);
+ link.attr("d", function (d) {
+
+ if (graphstate === "GRAPH") {
+ var dx = d.target.x - d.source.x,
+ dy = d.target.y - d.source.y,
+ dr = Math.sqrt(dx * dx + dy * dy);
+ return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,1 " + d.target.x + "," + d.target.y;
+ } else if (graphstate === "GANTT") {
+ if(d.state=== "enter" || d.state=== "exit"){
+ var dx = d.target.x - d.source.x,
+ dy = d.target.y - d.source.y,
+ dr = Math.sqrt(dx * dx + dy * dy)*5;
+ return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,1 " + d.target.x + "," + d.target.y;
+ }else{
+
+ return "M" + 0 + "," + 0 + "A" + dr + "," + dr + " 0 0,1 " + 0 + "," + 0;
+ }
+ }
- $('#editlinkform').submit(function () {
- graph.editLink(d.source.id,d.target.id,$('#editlinkname').val());
- $('.editlinkinfo').css('top',-100);
- $('.editlinkinfo').css('left',0);
- return false;
});
- }
+ linktext.attr("transform", function (d) {
+ if (graphstate === "GRAPH") {
+ return "translate(" + (d.source.x + d.target.x) / 2 + "," + (d.source.y + d.target.y) / 2 + ")";
+ } else {
+ return "translate(0,0)";
+ }
+ });
- function customColor(type){
- var color;
- switch(type){
- case "person":
- color='#FCB924';
- break;
- case "project":
- color='#009DDC';
- break;
- case "skill":
- color='#62BB47';
- break;
- case "deliverable":
- color='#E03A3E';
- break;
- case "objective":
- color='#933E99';
- break;
- case "empty":
- color="#080808";
- break;
- case 6:
- color="#fff";
- break;
- }
- return color;
}
-function customSize(type){
- var size;
- switch(type){
- case "person":
- size=12;
- break;
- case "project":
- size=12;
- break;
- case "skill":
- size=12;
- break;
- case "deliverable":
- size=12;
- break;
- case "objective":
- size=12;
- break;
- case "empty":
- size=9;
- break;
- case 6:
- size=0x30334C;
- break;
- }
- return size;
+
+function deliverableTest() {
+ for (var i = 0; i < 140; i++) {
+ var end = randomDate(new Date(), new Date("01-01-2018"));
+ var start = randomDate(new Date(), end);
+ graph.addNodeComplete("Task " + i, "deliverable", "perm", start, end);
+ }
+
+ for (var i = 0; i < 140; i++) {
+ var endindex = Math.floor(Math.random() * i);
+ var startindex = Math.floor(Math.random() * i);
+ if(nodes[endindex].start>nodes[startindex].start){
+ graph.addLink("Task " + startindex, "Task " + endindex, " ", "perm");
+ }else{
+ graph.addLink("Task " + endindex, "Task " + startindex, " ", "perm");
+ }
+ }
+
+ function randomDate(start, end) {
+ return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
+ }
+}
+
+
+
+
+function zoom() {
+ //vis.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
}
+function showInfo(d, i) {
+
+ graph.highlightNode(d.id,null);
+
+ if (d.type === "deliverable") {
+ $('.info').html('<form id="editbox"><label>description:</label><input id="editdescription"/><label>URL:</label><input id="editurl"/><label>Start date:</label><input id="editstartdate"/><label>End date:</label><input id="editenddate"/><button>Save</button></form><div id="deletenode"><button>Delete</button></div>');
+ } else {
+ $('.info').html('<form id="editbox"><label>description:</label><input id="editdescription"/><label>URL:</label><input id="editurl"/><button>Save</button></form><div id="deletenode"><button>Delete</button></div>');
+
+
+ }
+ $("#editenddate").datepicker({
+ inline: true,
+ showOtherMonths: true,
+ dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ });
+
+ $("#editstartdate").datepicker({
+ inline: true,
+ showOtherMonths: true,
+ dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ });
+
+ $('#editdescription').val(d.type);
+
+ $('#editurl').val('www.' + d.id + '.com');
+
+ if (d.type === "deliverable") {
+ $('#editstartdate').val(d.start);
+ $('#editenddate').val(d.end);
+ }
+
+ $("#editbox").submit(function () {
+ if (d.type === "deliverable") graph.editDates(d.id, null, new Date($("#editstartdate").val()), new Date($("#editenddate").val()));
+ return false;
+ });
+
+ $("#deletenode").click(function () {
+ if (confirm('This node and all its connections will be deleted, are you sure?')) {
+ graph.removeNode(d.id, null);
+ }
+ });
+}
+function mousedown() {
+ $('.editinfo').css('top', -100);
+ $('.editinfo').css('left', 0);
+ $('.editlinkinfo').css('top', -100);
+ $('.editlinkinfo').css('left', 0);
+ d3.event.stopPropagation();
+ graph.removeHighlight();
+}
+function AddedUnique(newnode) {
+ truth = true;
+ for (var p = 0; p < addednodes.length; p++) {
+ if (addednodes[p] === newnode) {
+ truth = false;
+ }
+ }
+ return truth;
+}
+function editNode(d, i) {
+ var oldname = d.id;
+ $('.editinfo').css('top', d.y - 12);
+ $('.editinfo').css('left', d.x + 18);
+ $('#editname').val(oldname);
+ $('#editform').submit(function () {
+ if (AddedUnique($('#editname').val())) {
+ $('.editinfo').css('top', -100);
+ $('.editinfo').css('left', 0);
+ graph.editName(oldname, "whatever", $('#editname').val());
+ var index = addednodes.indexOf(oldname);
+ addednodes[index] = $('#editname').val();
+ console.log(addednodes[index]);
+ } else {
+ var choice = $('#editname').val();
+ $('#editname').val(choice + "(2)");
+ }
+ return false;
+ });
+}
+function editLink(d, i) {
+ var dx = (d.source.x + d.target.x) / 2;
+ var dy = (d.source.y + d.target.y) / 2;
+ var oldname = d.name;
+ $('.editlinkinfo').css('top', dy - 17);
+ $('.editlinkinfo').css('left', dx - 18);
+ $('#editlinkname').val(oldname);
+ $('#editlinkform').submit(function () {
+ graph.editLink(d.source.id, d.target.id, $('#editlinkname').val());
+ $('.editlinkinfo').css('top', -100);
+ $('.editlinkinfo').css('left', 0);
+ return false;
+ });
+}
+function customColor(type) {
+ var color;
+ switch (type) {
+ case "person":
+ color = '#FCB924';
+ break;
+ case "project":
+ color = '#009DDC';
+ break;
+ case "skill":
+ color = '#62BB47';
+ break;
+ case "deliverable":
+ color = '#E03A3E';
+ break;
+ case "objective":
+ color = '#933E99';
+ break;
+ case "empty":
+ color = "#080808";
+ break;
+ case 6:
+ color = "#fff";
+ break;
+ }
+ return color;
+}
+function customSize(type) {
+ var size;
+ switch (type) {
+ case "person":
+ size = 12;
+ break;
+ case "project":
+ size = 12;
+ break;
+ case "skill":
+ size = 12;
+ break;
+ case "deliverable":
+ size = 12;
+ break;
+ case "objective":
+ size = 12;
+ break;
+ case "empty":
+ size = 9;
+ break;
+ case 6:
+ size = 0x30334C;
+ break;
+ }
+ return size;
+} \ No newline at end of file