You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

153 lines
3.0 KiB

  1. define([
  2. 'js/events',
  3. 'js/generator',
  4. 'js/renderer',
  5. 'js/input',
  6. 'ui/factory',
  7. 'js/client',
  8. 'js/constants'
  9. ], function (
  10. events,
  11. generator,
  12. renderer,
  13. input,
  14. uiFactory,
  15. client,
  16. constants
  17. ) {
  18. return {
  19. init: function () {
  20. if (constants.standAlone)
  21. this.events.onConnected.call(this);
  22. else
  23. client.init(this.events.onConnected.bind(this));
  24. },
  25. render: function () {
  26. if (renderer.dirty)
  27. renderer.render(generator.nodes, generator.links);
  28. window.requestAnimationFrame(this.render.bind(this));
  29. },
  30. events: {
  31. onConnected: function () {
  32. uiFactory.init();
  33. generator.init();
  34. renderer.init();
  35. input.init();
  36. events.on('onMouseDown', this.events.onMouseDown.bind(this, true));
  37. events.on('onMouseUp', this.events.onMouseDown.bind(this, false));
  38. events.on('onMouseMove', this.events.onMouseMove.bind(this));
  39. events.on('onMouseWheel', this.events.onMouseWheel.bind(this));
  40. events.on('onKeyDown', this.events.onKeyDown.bind(this));
  41. $(window).on('focus', this.events.onFocus.bind(this));
  42. uiFactory.build('mode');
  43. uiFactory.build('menu');
  44. uiFactory.build('groups');
  45. uiFactory.build('nodeInfo');
  46. uiFactory.build('tooltip');
  47. renderer.center(generator.nodes[0]);
  48. this.render();
  49. },
  50. onMouseDown: function (isDown, e) {
  51. var success = false;
  52. if ((input.isKeyDown('shift')) && (e.button == 2)) {
  53. success = true;
  54. if (e.down)
  55. events.emit('onStartAreaSelect', e);
  56. else
  57. events.emit('onEndAreaSelect', e);
  58. } else if (isDown) {
  59. if (generator.mode != 'none') {
  60. e.button = ([
  61. 'place',
  62. 'link',
  63. 'select'
  64. ]).indexOf(generator.mode);
  65. }
  66. var action = ([
  67. 'addNode',
  68. 'connectNode',
  69. 'selectNode'
  70. ])[e.button];
  71. success = generator.callAction(action, {
  72. x: e.x,
  73. y: e.y,
  74. shiftDown: input.isKeyDown('shift')
  75. });
  76. } else if ((!isDown) && (e.button != 1) && (generator.getSelected().length <= 1))
  77. generator.callAction('selectNode', {});
  78. if ((!isDown) || (!success))
  79. renderer.pan(e.raw, isDown ? 'down' : 'up');
  80. renderer.makeDirty();
  81. },
  82. onMouseMove: function (e) {
  83. if ((!e.down) || (e.button != 2) || (input.isKeyDown('shift')))
  84. return;
  85. if (generator.callAction('moveNode', {
  86. x: e.x,
  87. y: e.y
  88. }))
  89. return;
  90. renderer.pan(e.raw, 'move');
  91. },
  92. onMouseWheel: function (e) {
  93. var delta = (e.delta > 0) ? 1 : 0;
  94. var action = ([
  95. 'resizeNode',
  96. 'recolorNode'
  97. ])[delta];
  98. if (!action)
  99. return;
  100. if (!generator.callAction(action, {}))
  101. renderer.zoom(delta);
  102. renderer.makeDirty();
  103. },
  104. onKeyDown: function (key) {
  105. if (key == 'z') {
  106. renderer.zoom(0, 1);
  107. renderer.makeDirty();
  108. return;
  109. }
  110. var action = ({
  111. d: 'deleteNode',
  112. c: 'recolorNode',
  113. r: 'resizeNode'
  114. })[key];
  115. if (!action)
  116. return;
  117. generator.callAction(action, {});
  118. renderer.makeDirty();
  119. },
  120. onFocus: function () {
  121. renderer.makeDirty();
  122. }
  123. }
  124. };
  125. });