dispatchEvent.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import './behavior/click.js';
  2. import './behavior/cut.js';
  3. import './behavior/keydown.js';
  4. import './behavior/keypress.js';
  5. import './behavior/keyup.js';
  6. import './behavior/paste.js';
  7. import { behavior } from './behavior/registry.js';
  8. import { wrapEvent } from './wrapEvent.js';
  9. import { isMouseEvent, isKeyboardEvent } from './eventMap.js';
  10. import { createEvent } from './createEvent.js';
  11. function dispatchUIEvent(target, type, init, preventDefault = false) {
  12. if (isMouseEvent(type) || isKeyboardEvent(type)) {
  13. init = {
  14. ...init,
  15. ...this.system.getUIEventModifiers()
  16. };
  17. }
  18. const event = createEvent(type, target, init);
  19. return dispatchEvent.call(this, target, event, preventDefault);
  20. }
  21. function dispatchEvent(target, event, preventDefault = false) {
  22. var _behavior_type;
  23. const type = event.type;
  24. const behaviorImplementation = preventDefault ? ()=>{} : (_behavior_type = behavior[type]) === null || _behavior_type === undefined ? undefined : _behavior_type.call(behavior, event, target, this);
  25. if (behaviorImplementation) {
  26. event.preventDefault();
  27. let defaultPrevented = false;
  28. Object.defineProperty(event, 'defaultPrevented', {
  29. get: ()=>defaultPrevented
  30. });
  31. Object.defineProperty(event, 'preventDefault', {
  32. value: ()=>{
  33. defaultPrevented = event.cancelable;
  34. }
  35. });
  36. wrapEvent(()=>target.dispatchEvent(event));
  37. if (!defaultPrevented) {
  38. behaviorImplementation();
  39. }
  40. return !defaultPrevented;
  41. }
  42. return wrapEvent(()=>target.dispatchEvent(event));
  43. }
  44. function dispatchDOMEvent(target, type, init) {
  45. const event = createEvent(type, target, init);
  46. wrapEvent(()=>target.dispatchEvent(event));
  47. }
  48. export { dispatchDOMEvent, dispatchEvent, dispatchUIEvent };