node.html 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Equation Editor</title>
  6. </head>
  7. <body style="font-size:30px; font-family: Arial;">
  8. <!-- Page -->
  9. <div style="position:absolute; width:100%; height:100%; top:0px; left:0px; overflow: hidden;">
  10. <!-- Canvas -->
  11. <canvas id="canvas" style="position:absolute; width:100%; height:100%; top:0px; left:0px;"></canvas>
  12. <!-- Buttons -->
  13. <div style="position:absolute; width:60px; height:50px; top:0px; left:10px; text-align:center; z-index:10; cursor: pointer;" onclick="window.addOperatorBlock('+');">+</div>
  14. <div style="position:absolute; width:60px; height:50px; top:50px; left:10px; text-align:center; z-index:10; cursor: pointer;" onclick="window.addOperatorBlock('-');">-</div>
  15. <div style="position:absolute; width:60px; height:50px; top:100px; left:10px; text-align:center; z-index:10; cursor: pointer;" onclick="window.addOperatorBlock('*');">x</div>
  16. <div style="position:absolute; width:60px; height:50px; top:150px; left:10px; text-align:center; z-index:10; cursor: pointer;" onclick="window.addOperatorBlock('/');">/</div>
  17. <div style="position:absolute; width:60px; height:50px; top:200px; left:10px; text-align:center; z-index:10; cursor: pointer;" onclick="window.addInputBlock();">Num</div>
  18. </div>
  19. <!-- Code -->
  20. <script type="text/javascript" src="../build/escher.js"></script>
  21. <script type="text/javascript">
  22. // Canvas
  23. var canvas = document.getElementById("canvas");
  24. canvas.width = window.innerWidth;
  25. canvas.height = window.innerHeight;
  26. // Prevent context menu events
  27. document.body.oncontextmenu = function(event)
  28. {
  29. event.preventDefault();
  30. return false;
  31. };
  32. // Resize canvas on window resize
  33. window.onresize = function()
  34. {
  35. canvas.width = window.innerWidth;
  36. canvas.height = window.innerHeight;
  37. };
  38. window.addOperatorBlock = function(symbol)
  39. {
  40. graph.addNode(new OperationNode(symbol));
  41. };
  42. window.addInputBlock = function(symbol)
  43. {
  44. graph.addNode(new NumberInputNode());
  45. };
  46. class OperationNode extends Escher.Node
  47. {
  48. constructor(operation)
  49. {
  50. super();
  51. this.operation = operation;
  52. this.text = new Escher.Text();
  53. this.text.text = operation;
  54. this.text.font = "35px Arial";
  55. this.text.layer = 2;
  56. this.add(this.text);
  57. }
  58. registerSockets()
  59. {
  60. this.addInput("number", "a");
  61. this.addInput("number", "b");
  62. this.addOutput("number", "r");
  63. }
  64. }
  65. class NumberInputNode extends Escher.Node
  66. {
  67. constructor()
  68. {
  69. super();
  70. this.div = new Escher.DOM(canvas.parentElement, "input");
  71. this.div.size.set(70, 20);
  72. this.div.origin.set(35, 10);
  73. this.div.element.style.pointerEvents = "auto";
  74. this.div.element.type = "number";
  75. this.div.element.style.fontFamily = "Arial";
  76. this.div.element.style.textAlign = "center";
  77. this.add(this.div);
  78. }
  79. registerSockets()
  80. {
  81. this.addOutput("number", "v");
  82. }
  83. }
  84. // Group to store other objects
  85. var graph = new Escher.NodeGraph();
  86. var a = graph.addNode(new Escher.Node());
  87. a.addInput("test", "a");
  88. var aa = a.addOutput("test", "a");
  89. var b = graph.addNode(new Escher.Node());
  90. var bb = b.addInput("test", "a");
  91. b.addInput("test", "b");
  92. b.addInput("test", "c");
  93. b.addOutput("test", "a");
  94. bb.connectTo(aa);
  95. // Viewport
  96. var viewport = new Escher.Viewport(canvas);
  97. // Renderer
  98. var renderer = new Escher.Renderer(canvas);
  99. renderer.createRenderLoop(graph, viewport);
  100. </script>
  101. </body>
  102. </html>