Got dragging working

This commit is contained in:
Tim Stallard 2017-02-21 10:16:51 +00:00
parent af9a0f4bfa
commit e0e7568667
10 changed files with 100 additions and 8 deletions

View File

@ -4,7 +4,7 @@ module.exports = {
}, },
output: true, output: true,
execute: function({}, block){ execute: function({}, block){
block.find("input[name='input']").val(); return block.find("input[name='input']").val();
}, },
pageBlock: { pageBlock: {
html: "<input type='text' name='input'></input>", html: "<input type='text' name='input'></input>",

5
client/src/diagram.js Normal file
View File

@ -0,0 +1,5 @@
module.exports = {
name: "",
state: [],
snapshots: []
};

View File

@ -1 +0,0 @@
module.exports = {};

View File

@ -1,2 +1,6 @@
require("./styles.scss"); require("./styles.scss");
require("./pageInteraction"); require("./pageInteraction");
//for lazy debugging, remove when done
window.diagram = require("./diagram.js");
window.$ = require("jquery");

View File

@ -1,16 +1,16 @@
<div class="block"> <div class="block" data-type="{{block.type}}" id="{{instance.id}}">
<div class="inputs"> <div class="inputs">
{{#each inputs as |desc name|}} {{#each block.inputs as |desc name|}}
<div id="{{name}}">{{desc}}</div> <div id="{{name}}">{{desc}}</div>
{{/each}} {{/each}}
</div> </div>
<div class="main"> <div class="main">
<div> <div>
<div class="title">{{name}}</div> <div class="title">{{block.name}}</div>
{{{pageBlock.html}}} {{{block.pageBlock.html}}}
</div> </div>
</div> </div>
{{#if output}} {{#if block.output}}
<div class="output"> <div class="output">
Output Output
</div> </div>

View File

@ -0,0 +1,77 @@
var blocks = require("../blocks");
var diagram = require("../diagram.js");
var $ = require("jquery");
var uuid = require("node-uuid");
function blockPositionChange(event){
for(var block of diagram.state.filter((block)=>(block.dragging))){
block.position.x = event.pageX - $("#workspace").position().left - block.offset.x;
block.position.y = event.pageY - $("#workspace").position().top - block.offset.y;
$("#workspace>.block#" + block.id).css({
left: block.position.x,
top: block.position.y,
});
}
}
$("#blocks").on("mousedown", ".block>.main,.block>.inputs", function(event){
var newBlock = {
id: uuid.v4(),
position: {
x: 0,
y: 0
},
dragging: true,
offset: {
x: event.pageX - $(this).parent().offset().left,
y: event.pageY - $(this).parent().offset().top
},
type: $(this).parent().data("type")
}
diagram.state.push(newBlock);
var newBlockElement = $(
require("./block.hbs")({
block: blocks[newBlock.type],
instance: newBlock
})
).appendTo("#workspace");
blockPositionChange(event);
});
$("#workspace").on("mousedown", ".block>.main,.block>.inputs", function(event){
if(event.which == 1){ //check left mouse button
var block = diagram.state.filter((block)=>(block.id == $(this).parent().attr("id")))[0];
block.dragging = true;
block.offset.x = event.pageX - $(this).parent().offset().left;
block.offset.y = event.pageY - $(this).parent().offset().top;
blockPositionChange(event);
}
});
$("#workspace").on("mouseup", ".block>.main,.block>.inputs", function(event){
diagram.state.filter((block)=>(block.id == $(this).parent().attr("id")))[0].dragging = false;
});
$(document).on("mousemove", function(event){
event.preventDefault();
blockPositionChange(event);
});
$("#workspace").on("mousedown", ".block", function(event){
if(event.which == 3){ //right mouse button, delete
event.preventDefault();
for(var i in diagram.state){
if(diagram.state[i].id == $(this).attr("id")){
diagram.state.splice(i, 1);
}
}
$(this).remove();
}
});
$(document).on("contextmenu", function(event){
event.preventDefault();
return false;
});

View File

@ -1 +1,2 @@
require("./setupBlocks.js"); require("./setupBlocks.js");
require("./dragDrop.js");

View File

@ -1,5 +1,8 @@
var $ = require("jquery"); var $ = require("jquery");
var blocks = require("../blocks"); var blocks = require("../blocks");
for(var block of Object.keys(blocks)){ for(var block of Object.keys(blocks)){
$("#blocks").append(require("./block.hbs")(blocks[block])); blocks[block].type = block;
$("#blocks").append(require("./block.hbs")({
block: blocks[block]
}));
} }

View File

@ -23,6 +23,7 @@ body{
border: 1px solid black; border: 1px solid black;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
background-color: white;
.inputs{ .inputs{
display: flex; display: flex;
flex-direction: row; flex-direction: row;

View File

@ -24,8 +24,10 @@
"html-webpack-plugin": "^2.28.0", "html-webpack-plugin": "^2.28.0",
"jquery": "^3.1.1", "jquery": "^3.1.1",
"node-sass": "^4.5.0", "node-sass": "^4.5.0",
"node-uuid": "^1.4.7",
"sass-loader": "^6.0.1", "sass-loader": "^6.0.1",
"style-loader": "^0.13.1", "style-loader": "^0.13.1",
"uuid": "^3.0.1",
"webpack": "^2.2.1", "webpack": "^2.2.1",
"webpack-dev-server": "^2.3.0" "webpack-dev-server": "^2.3.0"
} }