base.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /**
  2. * DevExtreme (events/pointer/base.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var eventsEngine = require("../../events/core/events_engine");
  11. var browser = require("../../core/utils/browser");
  12. var domAdapter = require("../../core/dom_adapter");
  13. var Class = require("../../core/class");
  14. var eventUtils = require("../utils");
  15. var POINTER_EVENTS_NAMESPACE = "dxPointerEvents";
  16. var BaseStrategy = Class.inherit({
  17. ctor: function(eventName, originalEvents) {
  18. this._eventName = eventName;
  19. this._originalEvents = eventUtils.addNamespace(originalEvents, POINTER_EVENTS_NAMESPACE);
  20. this._handlerCount = 0;
  21. this.noBubble = this._isNoBubble()
  22. },
  23. _isNoBubble: function() {
  24. var eventName = this._eventName;
  25. return "dxpointerenter" === eventName || "dxpointerleave" === eventName
  26. },
  27. _handler: function(e) {
  28. var delegateTarget = this._getDelegateTarget(e);
  29. return this._fireEvent({
  30. type: this._eventName,
  31. pointerType: e.pointerType || eventUtils.eventSource(e),
  32. originalEvent: e,
  33. delegateTarget: delegateTarget,
  34. timeStamp: browser.mozilla ? (new Date).getTime() : e.timeStamp
  35. })
  36. },
  37. _getDelegateTarget: function(e) {
  38. var delegateTarget;
  39. if (this.noBubble) {
  40. delegateTarget = e.delegateTarget
  41. }
  42. return delegateTarget
  43. },
  44. _fireEvent: function(args) {
  45. return eventUtils.fireEvent(args)
  46. },
  47. _setSelector: function(handleObj) {
  48. this._selector = this.noBubble && handleObj ? handleObj.selector : null
  49. },
  50. _getSelector: function() {
  51. return this._selector
  52. },
  53. setup: function() {
  54. return true
  55. },
  56. add: function(element, handleObj) {
  57. if (this._handlerCount <= 0 || this.noBubble) {
  58. element = this.noBubble ? element : domAdapter.getDocument();
  59. this._setSelector(handleObj);
  60. var that = this;
  61. eventsEngine.on(element, this._originalEvents, this._getSelector(), function(e) {
  62. that._handler(e)
  63. })
  64. }
  65. if (!this.noBubble) {
  66. this._handlerCount++
  67. }
  68. },
  69. remove: function(handleObj) {
  70. this._setSelector(handleObj);
  71. if (!this.noBubble) {
  72. this._handlerCount--
  73. }
  74. },
  75. teardown: function(element) {
  76. if (this._handlerCount && !this.noBubble) {
  77. return
  78. }
  79. element = this.noBubble ? element : domAdapter.getDocument();
  80. if (this._originalEvents !== "." + POINTER_EVENTS_NAMESPACE) {
  81. eventsEngine.off(element, this._originalEvents, this._getSelector())
  82. }
  83. },
  84. dispose: function(element) {
  85. element = this.noBubble ? element : domAdapter.getDocument();
  86. eventsEngine.off(element, this._originalEvents)
  87. }
  88. });
  89. module.exports = BaseStrategy;