EventDispatcher.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { IE11OrLess, Edge } from './BrowserInfo.js';
  2. import { expando } from './utils.js';
  3. import PluginManager from './PluginManager.js';
  4. export default function dispatchEvent(
  5. {
  6. sortable, rootEl, name,
  7. targetEl, cloneEl, toEl, fromEl,
  8. oldIndex, newIndex,
  9. oldDraggableIndex, newDraggableIndex,
  10. originalEvent, putSortable, extraEventProperties
  11. }
  12. ) {
  13. sortable = (sortable || (rootEl && rootEl[expando]));
  14. if (!sortable) return;
  15. let evt,
  16. options = sortable.options,
  17. onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);
  18. // Support for new CustomEvent feature
  19. if (window.CustomEvent && !IE11OrLess && !Edge) {
  20. evt = new CustomEvent(name, {
  21. bubbles: true,
  22. cancelable: true
  23. });
  24. } else {
  25. evt = document.createEvent('Event');
  26. evt.initEvent(name, true, true);
  27. }
  28. evt.to = toEl || rootEl;
  29. evt.from = fromEl || rootEl;
  30. evt.item = targetEl || rootEl;
  31. evt.clone = cloneEl;
  32. evt.oldIndex = oldIndex;
  33. evt.newIndex = newIndex;
  34. evt.oldDraggableIndex = oldDraggableIndex;
  35. evt.newDraggableIndex = newDraggableIndex;
  36. evt.originalEvent = originalEvent;
  37. evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;
  38. let allEventProperties = { ...extraEventProperties, ...PluginManager.getEventProperties(name, sortable) };
  39. for (let option in allEventProperties) {
  40. evt[option] = allEventProperties[option];
  41. }
  42. if (rootEl) {
  43. rootEl.dispatchEvent(evt);
  44. }
  45. if (options[onName]) {
  46. options[onName].call(sortable, evt);
  47. }
  48. }