hooks.js 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /**
  2. * DevExtreme (integration/jquery/hooks.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 jQuery = require("jquery");
  11. var useJQuery = require("./use_jquery")();
  12. var compareVersion = require("../../core/utils/version").compare;
  13. var each = require("../../core/utils/iterator").each;
  14. var isNumeric = require("../../core/utils/type").isNumeric;
  15. var setEventFixMethod = require("../../events/utils").setEventFixMethod;
  16. var registerEvent = require("../../events/core/event_registrator");
  17. var hookTouchProps = require("../../events/core/hook_touch_props");
  18. if (useJQuery) {
  19. if (compareVersion(jQuery.fn.jquery, [3]) < 0) {
  20. var POINTER_TYPE_MAP = {
  21. 2: "touch",
  22. 3: "pen",
  23. 4: "mouse"
  24. };
  25. each(["MSPointerDown", "MSPointerMove", "MSPointerUp", "MSPointerCancel", "MSPointerOver", "MSPointerOut", "mouseenter", "mouseleave", "pointerdown", "pointermove", "pointerup", "pointercancel", "pointerover", "pointerout", "pointerenter", "pointerleave"], function() {
  26. jQuery.event.fixHooks[this] = {
  27. filter: function(event, originalEvent) {
  28. var pointerType = originalEvent.pointerType;
  29. if (isNumeric(pointerType)) {
  30. event.pointerType = POINTER_TYPE_MAP[pointerType]
  31. }
  32. return event
  33. },
  34. props: jQuery.event.mouseHooks.props.concat(["pointerId", "pointerType", "originalTarget", "width", "height", "pressure", "result", "tiltX", "charCode", "tiltY", "detail", "isPrimary", "prevValue"])
  35. }
  36. });
  37. each(["touchstart", "touchmove", "touchend", "touchcancel"], function() {
  38. jQuery.event.fixHooks[this] = {
  39. filter: function(event, originalEvent) {
  40. hookTouchProps(function(name, hook) {
  41. event[name] = hook(originalEvent)
  42. });
  43. return event
  44. },
  45. props: jQuery.event.mouseHooks.props.concat(["touches", "changedTouches", "targetTouches", "detail", "result", "originalTarget", "charCode", "prevValue"])
  46. }
  47. });
  48. jQuery.event.fixHooks.wheel = jQuery.event.mouseHooks;
  49. var DX_EVENT_HOOKS = {
  50. props: jQuery.event.mouseHooks.props.concat(["pointerType", "pointerId", "pointers"])
  51. };
  52. registerEvent.callbacks.add(function(name) {
  53. jQuery.event.fixHooks[name] = DX_EVENT_HOOKS
  54. });
  55. var fix = function(event, originalEvent) {
  56. var fixHook = jQuery.event.fixHooks[originalEvent.type] || jQuery.event.mouseHooks;
  57. var props = fixHook.props ? jQuery.event.props.concat(fixHook.props) : jQuery.event.props;
  58. var propIndex = props.length;
  59. while (propIndex--) {
  60. var prop = props[propIndex];
  61. event[prop] = originalEvent[prop]
  62. }
  63. return fixHook.filter ? fixHook.filter(event, originalEvent) : event
  64. };
  65. setEventFixMethod(fix)
  66. } else {
  67. hookTouchProps(function(name, hook) {
  68. jQuery.event.addProp(name, hook)
  69. })
  70. }
  71. }