Working joining + events system

This commit is contained in:
Tim Stallard 2017-02-21 16:58:48 +00:00
parent e1951faae8
commit 6bda6d3883
4 changed files with 39 additions and 6 deletions

17
client/src/events.js Normal file
View File

@ -0,0 +1,17 @@
var subscriptions = {};
module.exports = {
subscribe: function(event, callback){
if(!subscriptions[event]){
subscriptions[event] = [];
}
subscriptions[event].push(callback);
},
emit: function(event, data){
if(subscriptions[event]){
for(var callback of subscriptions[event]){
callback(data);
}
}
}
};

View File

@ -1,5 +1,6 @@
var blocks = require("../blocks"); var blocks = require("../blocks");
var diagram = require("../diagram.js"); var diagram = require("../diagram.js");
var events = require("../events.js");
var $ = require("jquery"); var $ = require("jquery");
var uuid = require("node-uuid"); var uuid = require("node-uuid");
@ -13,6 +14,8 @@ function blockPositionChange(event){
left: block.position.x, left: block.position.x,
top: block.position.y, top: block.position.y,
}); });
events.emit("blockMove");
} }
} }
@ -61,15 +64,23 @@ $(document).on("mousemove", function(event){
blockPositionChange(event); blockPositionChange(event);
}); });
$("#workspace").on("mousedown", ".block", function(event){ $("#workspace").on("mousedown", ".block>.main", function(event){
if(event.which == 3){ //right mouse button, delete if(event.which == 3){ //right mouse button, delete
event.preventDefault(); event.preventDefault();
for(var i in diagram.state){ for(var i in diagram.state){
if(diagram.state[i].id == $(this).attr("id")){ if(diagram.state[i].id == $(this).parent().attr("id")){
diagram.state.splice(i, 1); diagram.state.splice(i, 1);
} }
} }
$(this).remove(); for(var block of diagram.state){
for(var input in block.inputs){
if(block.inputs[input] == $(this).parent().attr("id")){
delete block.inputs[input];
}
}
}
$(this).parent().remove();
events.emit("blockDelete");
} }
}); });

View File

@ -1,5 +1,6 @@
var blocks = require("../blocks"); var blocks = require("../blocks");
var diagram = require("../diagram.js"); var diagram = require("../diagram.js");
var events = require("../events.js");
var $ = require("jquery"); var $ = require("jquery");
function moveLine(elem, a, b, c, d){ function moveLine(elem, a, b, c, d){
@ -11,7 +12,7 @@ function moveLine(elem, a, b, c, d){
$(elem).css({ $(elem).css({
left: x, left: x,
top: y, top: y,
width: l - 2, width: l,
transform: "rotate(" + theta + "rad)" transform: "rotate(" + theta + "rad)"
}); });
} }
@ -33,7 +34,7 @@ $("#workspace").on("mousedown", ".block>.output", function(event){
$(document).on("mousemove", function(event){ $(document).on("mousemove", function(event){
if(dragging){ if(dragging){
lineEnd = [event.pageX - $("#workspace").offset().left, event.pageY - $("#workspace").offset().top]; lineEnd = [event.pageX - $("#workspace").offset().left, event.pageY - $("#workspace").offset().top];
moveLine($(".line"), lineStart[0], lineStart[1], lineEnd[0], lineEnd[1]); moveLine($("#joiningLine"), lineStart[0], lineStart[1], lineEnd[0], lineEnd[1]);
} }
}); });
@ -48,14 +49,17 @@ $("#workspace").on("mouseup", ".block>.inputs>div", function(event){
if(dragging){ if(dragging){
endBlock = $(this).parent().parent().attr("id"); endBlock = $(this).parent().parent().attr("id");
endInput = $(this).attr("id"); endInput = $(this).attr("id");
console.log(startBlock, endBlock, endInput);
var endBlockInstance = diagram.state.filter((block)=>(block.id == endBlock))[0]; var endBlockInstance = diagram.state.filter((block)=>(block.id == endBlock))[0];
endBlockInstance.inputs[endInput] = startBlock; endBlockInstance.inputs[endInput] = startBlock;
drawJoiningLines(); drawJoiningLines();
} }
}); });
events.subscribe("blockMove", drawJoiningLines);
events.subscribe("blockDelete", drawJoiningLines);
function drawJoiningLines(){ function drawJoiningLines(){
$(".line").remove();
for(var endBlock of diagram.state){ for(var endBlock of diagram.state){
for(var input in endBlock.inputs){ for(var input in endBlock.inputs){
startBlockId = endBlock.inputs[input]; startBlockId = endBlock.inputs[input];

View File

@ -64,5 +64,6 @@ body{
border-top: 2px solid black; border-top: 2px solid black;
position: absolute; position: absolute;
z-index: 1; z-index: 1;
pointer-events: none;
} }
} }