f90ac3ff404e43fe0a80cdf529c87ee6f2b5969a2fe90f55784c2c9e8b7d04254b562af9b5f1710589732a347d0f49c88cb7de81b259726350c8977df86e29 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. 'use strict';
  2. exports.__esModule = true;
  3. var _pluginHooks = require('./../../pluginHooks');
  4. var _pluginHooks2 = _interopRequireDefault(_pluginHooks);
  5. var _eventManager = require('./../../eventManager');
  6. var _eventManager2 = _interopRequireDefault(_eventManager);
  7. var _plugins = require('./../../plugins');
  8. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  9. /**
  10. * @description
  11. * Plugin used to scroll Handsontable by selecting a cell and dragging outside of the visible viewport.
  12. *
  13. * @private
  14. * @class DragToScroll
  15. * @plugin DragToScroll
  16. */
  17. function DragToScroll() {
  18. this.boundaries = null;
  19. this.callback = null;
  20. }
  21. /**
  22. * @param boundaries {Object} compatible with getBoundingClientRect
  23. */
  24. DragToScroll.prototype.setBoundaries = function (boundaries) {
  25. this.boundaries = boundaries;
  26. };
  27. /**
  28. * @param callback {Function}
  29. */
  30. DragToScroll.prototype.setCallback = function (callback) {
  31. this.callback = callback;
  32. };
  33. /**
  34. * Check if mouse position (x, y) is outside of the viewport
  35. * @param x
  36. * @param y
  37. */
  38. DragToScroll.prototype.check = function (x, y) {
  39. var diffX = 0;
  40. var diffY = 0;
  41. if (y < this.boundaries.top) {
  42. // y is less than top
  43. diffY = y - this.boundaries.top;
  44. } else if (y > this.boundaries.bottom) {
  45. // y is more than bottom
  46. diffY = y - this.boundaries.bottom;
  47. }
  48. if (x < this.boundaries.left) {
  49. // x is less than left
  50. diffX = x - this.boundaries.left;
  51. } else if (x > this.boundaries.right) {
  52. // x is more than right
  53. diffX = x - this.boundaries.right;
  54. }
  55. this.callback(diffX, diffY);
  56. };
  57. var dragToScroll;
  58. var instance;
  59. var setupListening = function setupListening(instance) {
  60. instance.dragToScrollListening = false;
  61. var scrollHandler = instance.view.wt.wtTable.holder; // native scroll
  62. dragToScroll = new DragToScroll();
  63. if (scrollHandler === window) {
  64. // not much we can do currently
  65. return;
  66. }
  67. dragToScroll.setBoundaries(scrollHandler.getBoundingClientRect());
  68. dragToScroll.setCallback(function (scrollX, scrollY) {
  69. if (scrollX < 0) {
  70. scrollHandler.scrollLeft -= 50;
  71. } else if (scrollX > 0) {
  72. scrollHandler.scrollLeft += 50;
  73. }
  74. if (scrollY < 0) {
  75. scrollHandler.scrollTop -= 20;
  76. } else if (scrollY > 0) {
  77. scrollHandler.scrollTop += 20;
  78. }
  79. });
  80. instance.dragToScrollListening = true;
  81. };
  82. _pluginHooks2.default.getSingleton().add('afterInit', function () {
  83. var instance = this;
  84. var eventManager = new _eventManager2.default(this);
  85. eventManager.addEventListener(document, 'mouseup', function () {
  86. instance.dragToScrollListening = false;
  87. });
  88. eventManager.addEventListener(document, 'mousemove', function (event) {
  89. if (instance.dragToScrollListening) {
  90. dragToScroll.check(event.clientX, event.clientY);
  91. }
  92. });
  93. });
  94. _pluginHooks2.default.getSingleton().add('afterDestroy', function () {
  95. new _eventManager2.default(this).clear();
  96. });
  97. _pluginHooks2.default.getSingleton().add('afterOnCellMouseDown', function () {
  98. setupListening(this);
  99. });
  100. _pluginHooks2.default.getSingleton().add('afterOnCellCornerMouseDown', function () {
  101. setupListening(this);
  102. });
  103. exports.default = DragToScroll;