Did stuff
This commit is contained in:
		@@ -32,7 +32,6 @@
 | 
				
			|||||||
    "node-uuid": "^1.4.7",
 | 
					    "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"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,8 +33,8 @@ module.exports =  {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(!require("./util/coPrime.js")(a, 26)){
 | 
					    if(!require("./util/coPrime.js")(a, 26)){
 | 
				
			||||||
 | 
					      throw "a and 26 must be coprime";
 | 
				
			||||||
      return "";
 | 
					      return "";
 | 
				
			||||||
      console.log(a, 26, "not coprime");
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var lookupTable = [];
 | 
					    var lookupTable = [];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,8 @@ module.exports =  {
 | 
				
			|||||||
  name: "Output",
 | 
					  name: "Output",
 | 
				
			||||||
  inputs: {
 | 
					  inputs: {
 | 
				
			||||||
    input: {
 | 
					    input: {
 | 
				
			||||||
      name: "Input"
 | 
					      name: "Input",
 | 
				
			||||||
 | 
					      type: "text"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  output: false,
 | 
					  output: false,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
var diagram = require("./diagram");
 | 
					var diagram = require("./diagram");
 | 
				
			||||||
var events = require("./events.js");
 | 
					var events = require("./events.js");
 | 
				
			||||||
var blocks = require("./blocks");
 | 
					var blockModels = require("./blocks");
 | 
				
			||||||
 | 
					var typeConversion = require("./typeConversion.js");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function resolveOutput(block, cache){
 | 
					function resolveOutput(block, cache){
 | 
				
			||||||
  try{
 | 
					  try{
 | 
				
			||||||
@@ -19,17 +20,21 @@ function resolveOutput(block, cache){
 | 
				
			|||||||
      else if(block.inputs[input].value){ //if value is already set, just save that
 | 
					      else if(block.inputs[input].value){ //if value is already set, just save that
 | 
				
			||||||
        inputValues[input] = block.inputs[input].value;
 | 
					        inputValues[input] = block.inputs[input].value;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if(!inputValues[input]){ //if currently missing/blank
 | 
					
 | 
				
			||||||
        if(blocks[block.type].inputs[input].default){ //if a default is present, use that
 | 
					      if(inputValues[input]){ //if input is present, check and convert into type
 | 
				
			||||||
          inputValues[input] = blocks[block.type].inputs[input].default;
 | 
					        inputValues[input] = typeConversion[blockModels[block.type].inputs[input].type](inputValues[input]);
 | 
				
			||||||
        }
 | 
					      }
 | 
				
			||||||
        else if(blocks[block.type].inputs[input].required){ //otherwise, throw an error
 | 
					      else{ //currently missing/blank
 | 
				
			||||||
 | 
					        if(blockModels[block.type].inputs[input].required){ //if required, throw an error
 | 
				
			||||||
          throw "A required input is missing";
 | 
					          throw "A required input is missing";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        else if(blockModels[block.type].inputs[input].default){ //otherwise, if a default is present, use that
 | 
				
			||||||
 | 
					          inputValues[input] = blockModels[block.type].inputs[input].default;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var output = blocks[block.type].execute(inputValues, block);
 | 
					    var output = blockModels[block.type].execute(inputValues, block);
 | 
				
			||||||
    cache[block.id] = output;
 | 
					    cache[block.id] = output;
 | 
				
			||||||
    return output;
 | 
					    return output;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
var blocks = require("../blocks");
 | 
					var blocks = require("../blocks");
 | 
				
			||||||
var events = require("../events");
 | 
					var events = require("../events");
 | 
				
			||||||
 | 
					var $ = require("jquery");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = function(newBlock){
 | 
					module.exports = function(newBlock){
 | 
				
			||||||
  var newBlockElement = $(
 | 
					  var newBlockElement = $(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,8 +8,18 @@ function blockPositionChange(event){ //fired when a block is moved or added
 | 
				
			|||||||
  var block = diagram.state.filter((block)=>(block.dragging))[0];
 | 
					  var block = diagram.state.filter((block)=>(block.dragging))[0];
 | 
				
			||||||
  if(block){
 | 
					  if(block){
 | 
				
			||||||
    //change position to the event coordinates plus the offset, factoring in the relative positioning of the items on the workspace
 | 
					    //change position to the event coordinates plus the offset, factoring in the relative positioning of the items on the workspace
 | 
				
			||||||
    block.position.x = event.pageX - $("#workspace").position().left - block.offset.x;
 | 
					    block.position.x = window.scrollX + event.clientX - $("#workspace").position().left - block.offset.x;
 | 
				
			||||||
    block.position.y = event.pageY - $("#workspace").position().top - block.offset.y;
 | 
					    block.position.y = window.scrollY + event.clientY - $("#workspace").position().top - block.offset.y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(offY){
 | 
				
			||||||
 | 
					      //when off y-axis, move to sit edge of block on axis
 | 
				
			||||||
 | 
					      block.position.y = window.scrollY + window.innerHeight - $(block.elem).height() - $("#workspace").position().top;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(offX){
 | 
				
			||||||
 | 
					      //when off y-axis, move to sit edge of block on axis
 | 
				
			||||||
 | 
					      block.position.x = window.scrollX + window.innerWidth - $(block.elem).width() - $("#workspace").position().left;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $("#workspace>.block#" + block.id).css({ //apply new position to element
 | 
					    $("#workspace>.block#" + block.id).css({ //apply new position to element
 | 
				
			||||||
      left: block.position.x,
 | 
					      left: block.position.x,
 | 
				
			||||||
@@ -61,9 +71,10 @@ $("#workspace").on("mousedown", ".block>.main,.block>.inputs", function(event){
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
$("#workspace").on("mouseup", ".block>.main,.block>.inputs", function(event){
 | 
					$("#workspace").on("mouseup", ".block>.main,.block>.inputs", function(event){
 | 
				
			||||||
  diagram.state.filter((block)=>(block.id == $(this).parent().attr("id")))[0].dragging = false;
 | 
					  diagram.state.filter((block)=>(block.id == $(this).parent().attr("id")))[0].dragging = false;
 | 
				
			||||||
 | 
					  offX = false;
 | 
				
			||||||
 | 
					  offY = false;
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
$(document).on("mousemove", function(event){
 | 
					$(document).on("mousemove", function(event){
 | 
				
			||||||
  event.preventDefault();
 | 
					  event.preventDefault();
 | 
				
			||||||
  blockPositionChange(event);
 | 
					  blockPositionChange(event);
 | 
				
			||||||
@@ -89,3 +100,56 @@ $(document).on("contextmenu", function(event){
 | 
				
			|||||||
  event.preventDefault();
 | 
					  event.preventDefault();
 | 
				
			||||||
  return false;
 | 
					  return false;
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var timer;
 | 
				
			||||||
 | 
					var lastevent;
 | 
				
			||||||
 | 
					var startevent;
 | 
				
			||||||
 | 
					var offY = false;
 | 
				
			||||||
 | 
					var offX = false;
 | 
				
			||||||
 | 
					$(document).on("mousemove", ".block", function(e){
 | 
				
			||||||
 | 
					  if(diagram.state.filter((block)=>(block.id == $(this).attr("id"))).filter((block)=>(block.dragging)).length){
 | 
				
			||||||
 | 
					    //block is being dragged
 | 
				
			||||||
 | 
					    lastevent = e;
 | 
				
			||||||
 | 
					    if(!offY){
 | 
				
			||||||
 | 
					      if(($(this).offset().top + $(this).height() - window.scrollY) > window.innerHeight){
 | 
				
			||||||
 | 
					        //block has just moved off the page, start scrolling
 | 
				
			||||||
 | 
					        startevent = e;
 | 
				
			||||||
 | 
					        offY = true;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else{
 | 
				
			||||||
 | 
					      if(e.clientY < startevent.clientY){
 | 
				
			||||||
 | 
					        //user has moved the block back from the boundary, stop
 | 
				
			||||||
 | 
					        offY = false;
 | 
				
			||||||
 | 
					        blockPositionChange(lastevent);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(!offX){
 | 
				
			||||||
 | 
					      if(($(this).offset().left + $(this).width() - window.scrollX) > window.innerWidth){
 | 
				
			||||||
 | 
					        //block has just moved off the page, start scrolling
 | 
				
			||||||
 | 
					        startevent = e;
 | 
				
			||||||
 | 
					        offX = true;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else{
 | 
				
			||||||
 | 
					      if(e.clientX < startevent.clientX){
 | 
				
			||||||
 | 
					        //user has moved the block back from the boundary, stop
 | 
				
			||||||
 | 
					        offX = false;
 | 
				
			||||||
 | 
					        blockPositionChange(lastevent);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					timer = setInterval(function(){
 | 
				
			||||||
 | 
					  if(offY){ //scroll in y-direction and update blocks if block is moved off in that direction
 | 
				
			||||||
 | 
					    window.scrollBy(0, 2);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if(offX){ //scroll in x-direction and update blocks if block is moved off in that direction
 | 
				
			||||||
 | 
					    window.scrollBy(2, 0);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if(offX || offY){ //if off in either direction, move the block on the page
 | 
				
			||||||
 | 
					    blockPositionChange(lastevent);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}, 3);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								src/typeConversion.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/typeConversion.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					  text: function(input){
 | 
				
			||||||
 | 
					    if(typeof input != "string"){
 | 
				
			||||||
 | 
					      throw "Invalid input type - should be a string.";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return input;
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  number: function(input){
 | 
				
			||||||
 | 
					    if(isNaN(parseInt(input))){
 | 
				
			||||||
 | 
					      throw "Invalid input type - should be a string.";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return parseInt(input);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user