event.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /* eslint-disable no-empty */
  2. /* eslint-disable getter-return */
  3. /* eslint-disable import/no-mutable-exports */
  4. import { isServer } from '.';
  5. type EventHanlder = (event?: Event) => void;
  6. export let supportsPassive = false;
  7. if (!isServer) {
  8. try {
  9. const opts = {};
  10. Object.defineProperty(opts, 'passive', {
  11. get() {
  12. /* istanbul ignore next */
  13. supportsPassive = true;
  14. }
  15. });
  16. window.addEventListener('test-passive', null as any, opts);
  17. } catch (e) {}
  18. }
  19. export function on(
  20. target: HTMLElement,
  21. event: string,
  22. handler: EventHanlder,
  23. passive = false
  24. ) {
  25. if (!isServer) {
  26. target.addEventListener(
  27. event,
  28. handler,
  29. supportsPassive ? { capture: false, passive } : false
  30. );
  31. }
  32. }
  33. export function off(target: HTMLElement, event: string, handler: EventHanlder) {
  34. if (!isServer) {
  35. target.removeEventListener(event, handler);
  36. }
  37. }
  38. export function stopPropagation(event: Event) {
  39. event.stopPropagation();
  40. }
  41. export function preventDefault(event: Event, isStopPropagation?: boolean) {
  42. /* istanbul ignore else */
  43. if (typeof event.cancelable !== 'boolean' || event.cancelable) {
  44. event.preventDefault();
  45. }
  46. if (isStopPropagation) {
  47. stopPropagation(event);
  48. }
  49. }