25ae732838ce8c41fae6704ecfa05bd3ae32821a10ee2b619d44521f2429dab8111dd69a533396591bd647313077c7bb48232106c1ef6b6a9c257eac145e43 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. 'use strict';
  2. exports.__esModule = true;
  3. var _element = require('./../../../helpers/dom/element');
  4. var _function = require('./../../../helpers/function');
  5. var _browser = require('./../../../helpers/browser');
  6. var _eventManager = require('./../../../eventManager');
  7. var _eventManager2 = _interopRequireDefault(_eventManager);
  8. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  9. /**
  10. *
  11. */
  12. function Event(instance) {
  13. var that = this;
  14. var eventManager = new _eventManager2.default(instance);
  15. this.instance = instance;
  16. var dblClickOrigin = [null, null];
  17. this.dblClickTimeout = [null, null];
  18. var onMouseDown = function onMouseDown(event) {
  19. var activeElement = document.activeElement;
  20. var getParentNode = (0, _function.partial)(_element.getParent, event.realTarget);
  21. var realTarget = event.realTarget;
  22. // ignore focusable element from mouse down processing (https://github.com/handsontable/handsontable/issues/3555)
  23. if (realTarget === activeElement || getParentNode(0) === activeElement || getParentNode(1) === activeElement) {
  24. return;
  25. }
  26. var cell = that.parentCell(realTarget);
  27. if ((0, _element.hasClass)(realTarget, 'corner')) {
  28. that.instance.getSetting('onCellCornerMouseDown', event, realTarget);
  29. } else if (cell.TD) {
  30. if (that.instance.hasSetting('onCellMouseDown')) {
  31. that.instance.getSetting('onCellMouseDown', event, cell.coords, cell.TD, that.instance);
  32. }
  33. }
  34. if (event.button !== 2) {
  35. // if not right mouse button
  36. if (cell.TD) {
  37. dblClickOrigin[0] = cell.TD;
  38. clearTimeout(that.dblClickTimeout[0]);
  39. that.dblClickTimeout[0] = setTimeout(function () {
  40. dblClickOrigin[0] = null;
  41. }, 1000);
  42. }
  43. }
  44. };
  45. var onTouchMove = function onTouchMove(event) {
  46. that.instance.touchMoving = true;
  47. };
  48. var longTouchTimeout;
  49. var onTouchStart = function onTouchStart(event) {
  50. var container = this;
  51. eventManager.addEventListener(this, 'touchmove', onTouchMove);
  52. // Prevent cell selection when scrolling with touch event - not the best solution performance-wise
  53. that.checkIfTouchMove = setTimeout(function () {
  54. if (that.instance.touchMoving === true) {
  55. that.instance.touchMoving = void 0;
  56. eventManager.removeEventListener('touchmove', onTouchMove, false);
  57. }
  58. onMouseDown(event);
  59. }, 30);
  60. };
  61. var onMouseOver = function onMouseOver(event) {
  62. var table, td, mainWOT;
  63. if (that.instance.hasSetting('onCellMouseOver')) {
  64. table = that.instance.wtTable.TABLE;
  65. td = (0, _element.closestDown)(event.realTarget, ['TD', 'TH'], table);
  66. mainWOT = that.instance.cloneSource || that.instance;
  67. if (td && td !== mainWOT.lastMouseOver && (0, _element.isChildOf)(td, table)) {
  68. mainWOT.lastMouseOver = td;
  69. that.instance.getSetting('onCellMouseOver', event, that.instance.wtTable.getCoords(td), td, that.instance);
  70. }
  71. }
  72. };
  73. var onMouseOut = function onMouseOut(event) {
  74. var table = void 0;
  75. var lastTD = void 0;
  76. var nextTD = void 0;
  77. if (that.instance.hasSetting('onCellMouseOut')) {
  78. table = that.instance.wtTable.TABLE;
  79. lastTD = (0, _element.closestDown)(event.realTarget, ['TD', 'TH'], table);
  80. nextTD = (0, _element.closestDown)(event.relatedTarget, ['TD', 'TH'], table);
  81. if (lastTD && lastTD !== nextTD && (0, _element.isChildOf)(lastTD, table)) {
  82. that.instance.getSetting('onCellMouseOut', event, that.instance.wtTable.getCoords(lastTD), lastTD, that.instance);
  83. }
  84. }
  85. };
  86. var onMouseUp = function onMouseUp(event) {
  87. if (event.button !== 2) {
  88. // if not right mouse button
  89. var cell = that.parentCell(event.realTarget);
  90. if (cell.TD === dblClickOrigin[0] && cell.TD === dblClickOrigin[1]) {
  91. if ((0, _element.hasClass)(event.realTarget, 'corner')) {
  92. that.instance.getSetting('onCellCornerDblClick', event, cell.coords, cell.TD, that.instance);
  93. } else {
  94. that.instance.getSetting('onCellDblClick', event, cell.coords, cell.TD, that.instance);
  95. }
  96. dblClickOrigin[0] = null;
  97. dblClickOrigin[1] = null;
  98. } else if (cell.TD === dblClickOrigin[0]) {
  99. that.instance.getSetting('onCellMouseUp', event, cell.coords, cell.TD, that.instance);
  100. dblClickOrigin[1] = cell.TD;
  101. clearTimeout(that.dblClickTimeout[1]);
  102. that.dblClickTimeout[1] = setTimeout(function () {
  103. dblClickOrigin[1] = null;
  104. }, 500);
  105. } else if (cell.TD && that.instance.hasSetting('onCellMouseUp')) {
  106. that.instance.getSetting('onCellMouseUp', event, cell.coords, cell.TD, that.instance);
  107. }
  108. }
  109. };
  110. var onTouchEnd = function onTouchEnd(event) {
  111. clearTimeout(longTouchTimeout);
  112. // that.instance.longTouch == void 0;
  113. event.preventDefault();
  114. onMouseUp(event);
  115. // eventManager.removeEventListener(that.instance.wtTable.holder, "mouseup", onMouseUp);
  116. };
  117. eventManager.addEventListener(this.instance.wtTable.holder, 'mousedown', onMouseDown);
  118. eventManager.addEventListener(this.instance.wtTable.TABLE, 'mouseover', onMouseOver);
  119. eventManager.addEventListener(this.instance.wtTable.TABLE, 'mouseout', onMouseOut);
  120. eventManager.addEventListener(this.instance.wtTable.holder, 'mouseup', onMouseUp);
  121. // check if full HOT instance, or detached WOT AND run on mobile device
  122. if (this.instance.wtTable.holder.parentNode.parentNode && (0, _browser.isMobileBrowser)() && !that.instance.wtTable.isWorkingOnClone()) {
  123. var classSelector = '.' + this.instance.wtTable.holder.parentNode.className.split(' ').join('.');
  124. eventManager.addEventListener(this.instance.wtTable.holder, 'touchstart', function (event) {
  125. that.instance.touchApplied = true;
  126. if ((0, _element.isChildOf)(event.target, classSelector)) {
  127. onTouchStart.call(event.target, event);
  128. }
  129. });
  130. eventManager.addEventListener(this.instance.wtTable.holder, 'touchend', function (event) {
  131. that.instance.touchApplied = false;
  132. if ((0, _element.isChildOf)(event.target, classSelector)) {
  133. onTouchEnd.call(event.target, event);
  134. }
  135. });
  136. if (!that.instance.momentumScrolling) {
  137. that.instance.momentumScrolling = {};
  138. }
  139. eventManager.addEventListener(this.instance.wtTable.holder, 'scroll', function (event) {
  140. clearTimeout(that.instance.momentumScrolling._timeout);
  141. if (!that.instance.momentumScrolling.ongoing) {
  142. that.instance.getSetting('onBeforeTouchScroll');
  143. }
  144. that.instance.momentumScrolling.ongoing = true;
  145. that.instance.momentumScrolling._timeout = setTimeout(function () {
  146. if (!that.instance.touchApplied) {
  147. that.instance.momentumScrolling.ongoing = false;
  148. that.instance.getSetting('onAfterMomentumScroll');
  149. }
  150. }, 200);
  151. });
  152. }
  153. eventManager.addEventListener(window, 'resize', function () {
  154. if (that.instance.getSetting('stretchH') !== 'none') {
  155. that.instance.draw();
  156. }
  157. });
  158. this.destroy = function () {
  159. clearTimeout(this.dblClickTimeout[0]);
  160. clearTimeout(this.dblClickTimeout[1]);
  161. eventManager.destroy();
  162. };
  163. }
  164. Event.prototype.parentCell = function (elem) {
  165. var cell = {};
  166. var TABLE = this.instance.wtTable.TABLE;
  167. var TD = (0, _element.closestDown)(elem, ['TD', 'TH'], TABLE);
  168. if (TD) {
  169. cell.coords = this.instance.wtTable.getCoords(TD);
  170. cell.TD = TD;
  171. } else if ((0, _element.hasClass)(elem, 'wtBorder') && (0, _element.hasClass)(elem, 'current')) {
  172. cell.coords = this.instance.selections.current.cellRange.highlight; // selections.current is current selected cell
  173. cell.TD = this.instance.wtTable.getCell(cell.coords);
  174. } else if ((0, _element.hasClass)(elem, 'wtBorder') && (0, _element.hasClass)(elem, 'area')) {
  175. if (this.instance.selections.area.cellRange) {
  176. cell.coords = this.instance.selections.area.cellRange.to; // selections.area is area selected cells
  177. cell.TD = this.instance.wtTable.getCell(cell.coords);
  178. }
  179. }
  180. return cell;
  181. };
  182. exports.default = Event;