double_click.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /**
  2. * DevExtreme (events/double_click.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 domUtils = require("../core/utils/dom");
  12. var domAdapter = require("../core/dom_adapter");
  13. var Class = require("../core/class");
  14. var registerEvent = require("./core/event_registrator");
  15. var clickEvent = require("./click");
  16. var eventUtils = require("./utils");
  17. var DBLCLICK_EVENT_NAME = "dxdblclick";
  18. var DBLCLICK_NAMESPACE = "dxDblClick";
  19. var NAMESPACED_CLICK_EVENT = eventUtils.addNamespace(clickEvent.name, DBLCLICK_NAMESPACE);
  20. var DBLCLICK_TIMEOUT = 300;
  21. var DblClick = Class.inherit({
  22. ctor: function() {
  23. this._handlerCount = 0;
  24. this._forgetLastClick()
  25. },
  26. _forgetLastClick: function() {
  27. this._firstClickTarget = null;
  28. this._lastClickTimeStamp = -DBLCLICK_TIMEOUT
  29. },
  30. add: function() {
  31. if (this._handlerCount <= 0) {
  32. eventsEngine.on(domAdapter.getDocument(), NAMESPACED_CLICK_EVENT, this._clickHandler.bind(this))
  33. }
  34. this._handlerCount++
  35. },
  36. _clickHandler: function(e) {
  37. var timeStamp = e.timeStamp || Date.now();
  38. if (timeStamp - this._lastClickTimeStamp < DBLCLICK_TIMEOUT) {
  39. eventUtils.fireEvent({
  40. type: DBLCLICK_EVENT_NAME,
  41. target: domUtils.closestCommonParent(this._firstClickTarget, e.target),
  42. originalEvent: e
  43. });
  44. this._forgetLastClick()
  45. } else {
  46. this._firstClickTarget = e.target;
  47. this._lastClickTimeStamp = timeStamp
  48. }
  49. },
  50. remove: function() {
  51. this._handlerCount--;
  52. if (this._handlerCount <= 0) {
  53. this._forgetLastClick();
  54. eventsEngine.off(domAdapter.getDocument(), NAMESPACED_CLICK_EVENT)
  55. }
  56. }
  57. });
  58. registerEvent(DBLCLICK_EVENT_NAME, new DblClick);
  59. exports.name = DBLCLICK_EVENT_NAME;