pseudo-dom 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +774 -0
  2. package/browser/pseudo-dom.js +1266 -260
  3. package/browser/pseudo-dom.min.js +1 -1
  4. package/dist/factories/createEvent.d.ts +28 -0
  5. package/dist/factories/createEvent.js +56 -0
  6. package/dist/factories/createEvent.min.js +1 -0
  7. package/dist/factories/eventDefaults.d.ts +31 -0
  8. package/dist/factories/eventDefaults.js +105 -0
  9. package/dist/factories/eventDefaults.min.js +1 -0
  10. package/dist/factories.d.ts +6 -0
  11. package/dist/factories.js +5 -1
  12. package/dist/factories.min.js +1 -1
  13. package/dist/functions/activeElement.d.ts +14 -0
  14. package/dist/functions/activeElement.js +33 -0
  15. package/dist/functions/activeElement.min.js +1 -0
  16. package/dist/functions/modifierState.d.ts +29 -0
  17. package/dist/functions/modifierState.js +41 -0
  18. package/dist/functions/modifierState.min.js +1 -0
  19. package/dist/main.d.ts +32 -1
  20. package/dist/main.js +66 -1
  21. package/dist/main.min.js +1 -1
  22. package/dist/services/CustomEventService.d.ts +37 -0
  23. package/dist/services/CustomEventService.js +35 -0
  24. package/dist/services/CustomEventService.min.js +1 -0
  25. package/dist/services/ElementService.js +13 -13
  26. package/dist/services/ElementService.min.js +1 -1
  27. package/dist/services/EventService.d.ts +2 -0
  28. package/dist/services/EventService.js +7 -1
  29. package/dist/services/EventService.min.js +1 -1
  30. package/dist/services/FocusEventService.d.ts +32 -0
  31. package/dist/services/FocusEventService.js +35 -0
  32. package/dist/services/FocusEventService.min.js +1 -0
  33. package/dist/services/HTMLElementService.d.ts +20 -0
  34. package/dist/services/HTMLElementService.js +95 -0
  35. package/dist/services/HTMLElementService.min.js +1 -1
  36. package/dist/services/InputEventService.d.ts +41 -0
  37. package/dist/services/InputEventService.js +47 -0
  38. package/dist/services/InputEventService.min.js +1 -0
  39. package/dist/services/KeyboardEventService.d.ts +70 -0
  40. package/dist/services/KeyboardEventService.js +86 -0
  41. package/dist/services/KeyboardEventService.min.js +1 -0
  42. package/dist/services/MouseEventService.d.ts +80 -0
  43. package/dist/services/MouseEventService.js +108 -0
  44. package/dist/services/MouseEventService.min.js +1 -0
  45. package/dist/services/PointerEventService.d.ts +51 -0
  46. package/dist/services/PointerEventService.js +67 -0
  47. package/dist/services/PointerEventService.min.js +1 -0
  48. package/dist/services/UIEventService.d.ts +43 -0
  49. package/dist/services/UIEventService.js +42 -0
  50. package/dist/services/UIEventService.min.js +1 -0
  51. package/dist/simulate.d.ts +32 -0
  52. package/dist/simulate.js +115 -0
  53. package/dist/simulate.min.js +1 -0
  54. package/package.json +1 -1
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @file The standard event types of the browser, and how the browser creates them.
3
+ * @author Joshua Heagle <joshuaheagle@gmail.com>
4
+ * @version 1.0.0
5
+ */
6
+ /**
7
+ * How the browser creates an event of a standard type: whether it bubbles, whether it can be cancelled, whether it
8
+ * crosses the boundary of a shadow tree, and which kind of event object it is.
9
+ * @typedef {Object} EventDefinition
10
+ * @property {boolean} bubbles - After the target, the event goes back up through the ancestors (the capture phase, going down, always happens)
11
+ * @property {boolean} cancelable - preventDefault() can stop the default action
12
+ * @property {boolean} composed - The event crosses the boundary of a shadow tree
13
+ * @property {string} interface - The kind of event object: Event, UIEvent, MouseEvent, PointerEvent, KeyboardEvent, FocusEvent, InputEvent or CustomEvent
14
+ */
15
+ export type EventDefinition = {
16
+ bubbles: boolean;
17
+ cancelable: boolean;
18
+ composed: boolean;
19
+ interface: 'Event' | 'UIEvent' | 'MouseEvent' | 'PointerEvent' | 'KeyboardEvent' | 'FocusEvent' | 'InputEvent' | 'CustomEvent';
20
+ };
21
+ /**
22
+ * The events which the browser itself creates (for a user action, or for something like element.click()) have these
23
+ * options. A script which creates an event with the constructor gets none of them (everything is false) unless it asks
24
+ * for them, which is why createEvent only uses this table when it is told the browser is creating the event.
25
+ * The values follow the UI Events, HTML, Pointer Events, Clipboard, Drag and Drop, Touch and CSS specifications.
26
+ * @type {Object.<string, EventDefinition>}
27
+ */
28
+ export declare const eventDefaults: {
29
+ [type: string]: EventDefinition;
30
+ };
31
+ export default eventDefaults;
@@ -0,0 +1,105 @@
1
+ 'use strict'
2
+
3
+ /**
4
+ * @file The standard event types of the browser, and how the browser creates them.
5
+ * @author Joshua Heagle <joshuaheagle@gmail.com>
6
+ * @version 1.0.0
7
+ */
8
+ Object.defineProperty(exports, '__esModule', {
9
+ value: true
10
+ })
11
+ exports.eventDefaults = void 0
12
+ const define = (bubbles, cancelable, composed, eventInterface = 'Event') => ({
13
+ bubbles,
14
+ cancelable,
15
+ composed,
16
+ interface: eventInterface
17
+ })
18
+ /**
19
+ * The events which the browser itself creates (for a user action, or for something like element.click()) have these
20
+ * options. A script which creates an event with the constructor gets none of them (everything is false) unless it asks
21
+ * for them, which is why createEvent only uses this table when it is told the browser is creating the event.
22
+ * The values follow the UI Events, HTML, Pointer Events, Clipboard, Drag and Drop, Touch and CSS specifications.
23
+ * @type {Object.<string, EventDefinition>}
24
+ */
25
+ exports.eventDefaults = {
26
+ // Mouse (UI Events)
27
+ click: define(true, true, true, 'MouseEvent'),
28
+ auxclick: define(true, true, true, 'MouseEvent'),
29
+ dblclick: define(true, true, true, 'MouseEvent'),
30
+ contextmenu: define(true, true, true, 'MouseEvent'),
31
+ mousedown: define(true, true, true, 'MouseEvent'),
32
+ mouseup: define(true, true, true, 'MouseEvent'),
33
+ mousemove: define(true, true, true, 'MouseEvent'),
34
+ mouseover: define(true, true, true, 'MouseEvent'),
35
+ mouseout: define(true, true, true, 'MouseEvent'),
36
+ mouseenter: define(false, false, true, 'MouseEvent'),
37
+ mouseleave: define(false, false, true, 'MouseEvent'),
38
+ wheel: define(true, true, true, 'MouseEvent'),
39
+ // Pointer (Pointer Events)
40
+ pointerdown: define(true, true, true, 'PointerEvent'),
41
+ pointerup: define(true, true, true, 'PointerEvent'),
42
+ pointermove: define(true, true, true, 'PointerEvent'),
43
+ pointerover: define(true, true, true, 'PointerEvent'),
44
+ pointerout: define(true, true, true, 'PointerEvent'),
45
+ pointerenter: define(false, false, true, 'PointerEvent'),
46
+ pointerleave: define(false, false, true, 'PointerEvent'),
47
+ pointercancel: define(true, false, true, 'PointerEvent'),
48
+ gotpointercapture: define(true, false, true, 'PointerEvent'),
49
+ lostpointercapture: define(true, false, true, 'PointerEvent'),
50
+ // Keyboard (UI Events)
51
+ keydown: define(true, true, true, 'KeyboardEvent'),
52
+ keypress: define(true, true, true, 'KeyboardEvent'),
53
+ keyup: define(true, true, true, 'KeyboardEvent'),
54
+ // Focus (UI Events): focus and blur do not bubble, focusin and focusout do
55
+ focus: define(false, false, true, 'FocusEvent'),
56
+ blur: define(false, false, true, 'FocusEvent'),
57
+ focusin: define(true, false, true, 'FocusEvent'),
58
+ focusout: define(true, false, true, 'FocusEvent'),
59
+ // Forms (HTML, Input Events)
60
+ beforeinput: define(true, true, true, 'InputEvent'),
61
+ input: define(true, false, true, 'InputEvent'),
62
+ change: define(true, false, false),
63
+ select: define(true, false, false),
64
+ submit: define(true, true, false),
65
+ reset: define(true, true, false),
66
+ invalid: define(false, true, false),
67
+ toggle: define(false, false, false),
68
+ // Loading and the page (HTML)
69
+ load: define(false, false, false),
70
+ error: define(false, false, false),
71
+ abort: define(false, false, false),
72
+ scroll: define(false, false, false),
73
+ scrollend: define(false, false, false),
74
+ resize: define(false, false, false),
75
+ DOMContentLoaded: define(true, false, false),
76
+ readystatechange: define(false, false, false),
77
+ visibilitychange: define(true, false, false),
78
+ // Clipboard
79
+ copy: define(true, true, true),
80
+ cut: define(true, true, true),
81
+ paste: define(true, true, true),
82
+ // Drag and drop
83
+ drag: define(true, true, true, 'MouseEvent'),
84
+ dragstart: define(true, true, true, 'MouseEvent'),
85
+ dragend: define(true, false, true, 'MouseEvent'),
86
+ dragenter: define(true, true, true, 'MouseEvent'),
87
+ dragover: define(true, true, true, 'MouseEvent'),
88
+ dragleave: define(true, false, true, 'MouseEvent'),
89
+ drop: define(true, true, true, 'MouseEvent'),
90
+ // Touch
91
+ touchstart: define(true, true, true, 'UIEvent'),
92
+ touchmove: define(true, true, true, 'UIEvent'),
93
+ touchend: define(true, true, true, 'UIEvent'),
94
+ touchcancel: define(true, false, true, 'UIEvent'),
95
+ // Animations and transitions (CSS)
96
+ animationstart: define(true, false, false),
97
+ animationiteration: define(true, false, false),
98
+ animationend: define(true, false, false),
99
+ animationcancel: define(true, false, false),
100
+ transitionrun: define(true, false, false),
101
+ transitionstart: define(true, false, false),
102
+ transitionend: define(true, false, false),
103
+ transitioncancel: define(true, false, false)
104
+ }
105
+ exports.default = exports.eventDefaults
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.eventDefaults=void 0;const define=(e,n,t,i="Event")=>({bubbles:e,cancelable:n,composed:t,interface:i});exports.eventDefaults={click:define(!0,!0,!0,"MouseEvent"),auxclick:define(!0,!0,!0,"MouseEvent"),dblclick:define(!0,!0,!0,"MouseEvent"),contextmenu:define(!0,!0,!0,"MouseEvent"),mousedown:define(!0,!0,!0,"MouseEvent"),mouseup:define(!0,!0,!0,"MouseEvent"),mousemove:define(!0,!0,!0,"MouseEvent"),mouseover:define(!0,!0,!0,"MouseEvent"),mouseout:define(!0,!0,!0,"MouseEvent"),mouseenter:define(!1,!1,!0,"MouseEvent"),mouseleave:define(!1,!1,!0,"MouseEvent"),wheel:define(!0,!0,!0,"MouseEvent"),pointerdown:define(!0,!0,!0,"PointerEvent"),pointerup:define(!0,!0,!0,"PointerEvent"),pointermove:define(!0,!0,!0,"PointerEvent"),pointerover:define(!0,!0,!0,"PointerEvent"),pointerout:define(!0,!0,!0,"PointerEvent"),pointerenter:define(!1,!1,!0,"PointerEvent"),pointerleave:define(!1,!1,!0,"PointerEvent"),pointercancel:define(!0,!1,!0,"PointerEvent"),gotpointercapture:define(!0,!1,!0,"PointerEvent"),lostpointercapture:define(!0,!1,!0,"PointerEvent"),keydown:define(!0,!0,!0,"KeyboardEvent"),keypress:define(!0,!0,!0,"KeyboardEvent"),keyup:define(!0,!0,!0,"KeyboardEvent"),focus:define(!1,!1,!0,"FocusEvent"),blur:define(!1,!1,!0,"FocusEvent"),focusin:define(!0,!1,!0,"FocusEvent"),focusout:define(!0,!1,!0,"FocusEvent"),beforeinput:define(!0,!0,!0,"InputEvent"),input:define(!0,!1,!0,"InputEvent"),change:define(!0,!1,!1),select:define(!0,!1,!1),submit:define(!0,!0,!1),reset:define(!0,!0,!1),invalid:define(!1,!0,!1),toggle:define(!1,!1,!1),load:define(!1,!1,!1),error:define(!1,!1,!1),abort:define(!1,!1,!1),scroll:define(!1,!1,!1),scrollend:define(!1,!1,!1),resize:define(!1,!1,!1),DOMContentLoaded:define(!0,!1,!1),readystatechange:define(!1,!1,!1),visibilitychange:define(!0,!1,!1),copy:define(!0,!0,!0),cut:define(!0,!0,!0),paste:define(!0,!0,!0),drag:define(!0,!0,!0,"MouseEvent"),dragstart:define(!0,!0,!0,"MouseEvent"),dragend:define(!0,!1,!0,"MouseEvent"),dragenter:define(!0,!0,!0,"MouseEvent"),dragover:define(!0,!0,!0,"MouseEvent"),dragleave:define(!0,!1,!0,"MouseEvent"),drop:define(!0,!0,!0,"MouseEvent"),touchstart:define(!0,!0,!0,"UIEvent"),touchmove:define(!0,!0,!0,"UIEvent"),touchend:define(!0,!0,!0,"UIEvent"),touchcancel:define(!0,!1,!0,"UIEvent"),animationstart:define(!0,!1,!1),animationiteration:define(!0,!1,!1),animationend:define(!0,!1,!1),animationcancel:define(!0,!1,!1),transitionrun:define(!0,!1,!1),transitionstart:define(!0,!1,!1),transitionend:define(!0,!1,!1),transitioncancel:define(!0,!1,!1)},exports.default=exports.eventDefaults;
@@ -1,5 +1,11 @@
1
1
  declare const _default: {
2
2
  generateNode: () => typeof import("./factories/generateNode").NodeFactory;
3
3
  nodeListFactory: (innerList?: import("collect-your-stuff/dist/collections/linked-tree-list/TreeLinker").TreeLinker | null) => import("./classes/PseudoNodeList").PseudoNodeList;
4
+ createEvent: (type: string, init?: {
5
+ [option: string]: any;
6
+ }, { browser, trusted }?: import("./factories/createEvent").CreateEventOptions) => import("./main").PseudoEvent;
7
+ eventDefaults: {
8
+ [type: string]: import("./factories/eventDefaults").EventDefinition;
9
+ };
4
10
  };
5
11
  export default _default;
package/dist/factories.js CHANGED
@@ -17,7 +17,11 @@ Object.defineProperty(exports, '__esModule', {
17
17
  */
18
18
  const generateNode_1 = __importDefault(require('./factories/generateNode'))
19
19
  const generateNodeList_1 = __importDefault(require('./factories/generateNodeList'))
20
+ const createEvent_1 = __importDefault(require('./factories/createEvent'))
21
+ const eventDefaults_1 = __importDefault(require('./factories/eventDefaults'))
20
22
  exports.default = {
21
23
  generateNode: generateNode_1.default,
22
- nodeListFactory: generateNodeList_1.default
24
+ nodeListFactory: generateNodeList_1.default,
25
+ createEvent: createEvent_1.default,
26
+ eventDefaults: eventDefaults_1.default
23
27
  }
@@ -1 +1 @@
1
- "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const generateNode_1=__importDefault(require("./factories/generateNode")),generateNodeList_1=__importDefault(require("./factories/generateNodeList"));exports.default={generateNode:generateNode_1.default,nodeListFactory:generateNodeList_1.default};
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const generateNode_1=__importDefault(require("./factories/generateNode")),generateNodeList_1=__importDefault(require("./factories/generateNodeList")),createEvent_1=__importDefault(require("./factories/createEvent")),eventDefaults_1=__importDefault(require("./factories/eventDefaults"));exports.default={generateNode:generateNode_1.default,nodeListFactory:generateNodeList_1.default,createEvent:createEvent_1.default,eventDefaults:eventDefaults_1.default};
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Find the element which has the focus in a tree.
3
+ * @function getActiveElement
4
+ * @param {Object} root The root node of the tree
5
+ * @returns {Object|null}
6
+ */
7
+ export declare const getActiveElement: (root: object) => any | null;
8
+ /**
9
+ * Remember the element which has the focus in a tree.
10
+ * @function setActiveElement
11
+ * @param {Object} root The root node of the tree
12
+ * @param {Object|null} element The element which now has the focus, or null when nothing has it
13
+ */
14
+ export declare const setActiveElement: (root: object, element: any | null) => void;
@@ -0,0 +1,33 @@
1
+ 'use strict'
2
+
3
+ require('core-js/modules/esnext.weak-map.delete-all.js')
4
+ Object.defineProperty(exports, '__esModule', {
5
+ value: true
6
+ })
7
+ exports.setActiveElement = exports.getActiveElement = void 0
8
+ /**
9
+ * The element which has the focus, kept for each tree (the root node of the tree it is in), like document.activeElement.
10
+ */
11
+ const focused = new WeakMap()
12
+ /**
13
+ * Find the element which has the focus in a tree.
14
+ * @function getActiveElement
15
+ * @param {Object} root The root node of the tree
16
+ * @returns {Object|null}
17
+ */
18
+ const getActiveElement = root => focused.get(root) || null
19
+ exports.getActiveElement = getActiveElement
20
+ /**
21
+ * Remember the element which has the focus in a tree.
22
+ * @function setActiveElement
23
+ * @param {Object} root The root node of the tree
24
+ * @param {Object|null} element The element which now has the focus, or null when nothing has it
25
+ */
26
+ const setActiveElement = (root, element) => {
27
+ if (element === null) {
28
+ focused.delete(root)
29
+ } else {
30
+ focused.set(root, element)
31
+ }
32
+ }
33
+ exports.setActiveElement = setActiveElement
@@ -0,0 +1 @@
1
+ "use strict";require("core-js/modules/esnext.weak-map.delete-all.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.setActiveElement=exports.getActiveElement=void 0;const focused=new WeakMap,getActiveElement=e=>focused.get(e)||null;exports.getActiveElement=getActiveElement;const setActiveElement=(e,t)=>{null===t?focused.delete(e):focused.set(e,t)};exports.setActiveElement=setActiveElement;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The modifier keys which were held down when a mouse or keyboard event happened.
3
+ * @typedef {Object} ModifierKeys
4
+ * @property {boolean} ctrlKey
5
+ * @property {boolean} shiftKey
6
+ * @property {boolean} altKey
7
+ * @property {boolean} metaKey
8
+ */
9
+ export type ModifierKeys = {
10
+ ctrlKey: boolean;
11
+ shiftKey: boolean;
12
+ altKey: boolean;
13
+ metaKey: boolean;
14
+ };
15
+ /**
16
+ * Pick the modifier keys out of the init object of an event.
17
+ * @function modifierKeys
18
+ * @param {Object} [init={}] The init of an event
19
+ * @returns {ModifierKeys}
20
+ */
21
+ export declare const modifierKeys: (init?: any) => ModifierKeys;
22
+ /**
23
+ * Answer getModifierState for a set of held modifier keys.
24
+ * @function modifierState
25
+ * @param {ModifierKeys} keys The modifier keys which were held down
26
+ * @param {string} key The name of the modifier (Control, Shift, Alt or Meta)
27
+ * @returns {boolean}
28
+ */
29
+ export declare const modifierState: (keys: ModifierKeys, key: string) => boolean;
@@ -0,0 +1,41 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.modifierState = exports.modifierKeys = void 0
7
+ /**
8
+ * Pick the modifier keys out of the init object of an event.
9
+ * @function modifierKeys
10
+ * @param {Object} [init={}] The init of an event
11
+ * @returns {ModifierKeys}
12
+ */
13
+ const modifierKeys = (init = {}) => ({
14
+ ctrlKey: !!init.ctrlKey,
15
+ shiftKey: !!init.shiftKey,
16
+ altKey: !!init.altKey,
17
+ metaKey: !!init.metaKey
18
+ })
19
+ exports.modifierKeys = modifierKeys
20
+ /**
21
+ * Answer getModifierState for a set of held modifier keys.
22
+ * @function modifierState
23
+ * @param {ModifierKeys} keys The modifier keys which were held down
24
+ * @param {string} key The name of the modifier (Control, Shift, Alt or Meta)
25
+ * @returns {boolean}
26
+ */
27
+ const modifierState = (keys, key) => {
28
+ switch (key) {
29
+ case 'Control':
30
+ return keys.ctrlKey
31
+ case 'Shift':
32
+ return keys.shiftKey
33
+ case 'Alt':
34
+ return keys.altKey
35
+ case 'Meta':
36
+ return keys.metaKey
37
+ default:
38
+ return false
39
+ }
40
+ }
41
+ exports.modifierState = modifierState
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.modifierState=exports.modifierKeys=void 0;const modifierKeys=(e={})=>({ctrlKey:!!e.ctrlKey,shiftKey:!!e.shiftKey,altKey:!!e.altKey,metaKey:!!e.metaKey});exports.modifierKeys=modifierKeys;const modifierState=(e,t)=>{switch(t){case"Control":return e.ctrlKey;case"Shift":return e.shiftKey;case"Alt":return e.altKey;case"Meta":return e.metaKey;default:return!1}};exports.modifierState=modifierState;
package/dist/main.d.ts CHANGED
@@ -10,6 +10,16 @@ import { ElementService as PseudoElement } from './services/ElementService';
10
10
  import { HTMLElementService as PseudoHTMLElement } from './services/HTMLElementService';
11
11
  import PseudoHTMLDocument from './classes/PseudoHTMLDocument';
12
12
  import generateDocument from './factories/generateDocument';
13
+ import createEvent from './factories/createEvent';
14
+ import eventDefaults from './factories/eventDefaults';
15
+ import { UIEventService as PseudoUIEvent } from './services/UIEventService';
16
+ import { MouseEventService as PseudoMouseEvent } from './services/MouseEventService';
17
+ import { PointerEventService as PseudoPointerEvent } from './services/PointerEventService';
18
+ import { KeyboardEventService as PseudoKeyboardEvent } from './services/KeyboardEventService';
19
+ import { FocusEventService as PseudoFocusEvent } from './services/FocusEventService';
20
+ import { InputEventService as PseudoInputEvent } from './services/InputEventService';
21
+ import { CustomEventService as PseudoCustomEvent } from './services/CustomEventService';
22
+ import simulate from './simulate';
13
23
  /**
14
24
  * All methods exported from this module are encapsulated within pseudoDom.
15
25
  * @author Joshua Heagle <joshuaheagle@gmail.com>
@@ -18,12 +28,33 @@ import generateDocument from './factories/generateDocument';
18
28
  */
19
29
  declare const pseudoDom: {
20
30
  generateDocument: (root: Window | any, context?: object) => Window | PseudoEventTarget;
31
+ createEvent: (type: string, init?: {
32
+ [option: string]: any;
33
+ }, { browser, trusted }?: import("./factories/createEvent").CreateEventOptions) => PseudoEvent;
34
+ eventDefaults: {
35
+ [type: string]: import("./factories/eventDefaults").EventDefinition;
36
+ };
37
+ simulate: {
38
+ click: (element: any, init?: {
39
+ [option: string]: any;
40
+ }) => boolean;
41
+ keyPress: (element: any, key: string, init?: {
42
+ [option: string]: any;
43
+ }) => boolean;
44
+ };
21
45
  PseudoEvent: typeof PseudoEvent;
46
+ PseudoUIEvent: typeof PseudoUIEvent;
47
+ PseudoMouseEvent: typeof PseudoMouseEvent;
48
+ PseudoPointerEvent: typeof PseudoPointerEvent;
49
+ PseudoKeyboardEvent: typeof PseudoKeyboardEvent;
50
+ PseudoFocusEvent: typeof PseudoFocusEvent;
51
+ PseudoInputEvent: typeof PseudoInputEvent;
52
+ PseudoCustomEvent: typeof PseudoCustomEvent;
22
53
  PseudoEventTarget: typeof PseudoEventTarget;
23
54
  PseudoNode: typeof PseudoNode;
24
55
  PseudoElement: typeof PseudoElement;
25
56
  PseudoHTMLElement: typeof PseudoHTMLElement;
26
57
  PseudoHTMLDocument: typeof PseudoHTMLDocument;
27
58
  };
28
- export { generateDocument, PseudoEvent, PseudoEventTarget, PseudoNode, PseudoElement, PseudoHTMLElement, PseudoHTMLDocument };
59
+ export { generateDocument, createEvent, eventDefaults, simulate, PseudoEvent, PseudoUIEvent, PseudoMouseEvent, PseudoPointerEvent, PseudoKeyboardEvent, PseudoFocusEvent, PseudoInputEvent, PseudoCustomEvent, PseudoEventTarget, PseudoNode, PseudoElement, PseudoHTMLElement, PseudoHTMLDocument };
29
60
  export default pseudoDom;
package/dist/main.js CHANGED
@@ -15,7 +15,7 @@ const __importDefault = void 0 && (void 0).__importDefault || function (mod) {
15
15
  Object.defineProperty(exports, '__esModule', {
16
16
  value: true
17
17
  })
18
- exports.PseudoHTMLDocument = exports.PseudoHTMLElement = exports.PseudoElement = exports.PseudoNode = exports.PseudoEventTarget = exports.PseudoEvent = exports.generateDocument = void 0
18
+ exports.PseudoHTMLDocument = exports.PseudoHTMLElement = exports.PseudoElement = exports.PseudoNode = exports.PseudoEventTarget = exports.PseudoCustomEvent = exports.PseudoInputEvent = exports.PseudoFocusEvent = exports.PseudoKeyboardEvent = exports.PseudoPointerEvent = exports.PseudoMouseEvent = exports.PseudoUIEvent = exports.PseudoEvent = exports.simulate = exports.eventDefaults = exports.createEvent = exports.generateDocument = void 0
19
19
  const EventService_1 = require('./services/EventService')
20
20
  Object.defineProperty(exports, 'PseudoEvent', {
21
21
  enumerable: true,
@@ -50,6 +50,61 @@ const PseudoHTMLDocument_1 = __importDefault(require('./classes/PseudoHTMLDocume
50
50
  exports.PseudoHTMLDocument = PseudoHTMLDocument_1.default
51
51
  const generateDocument_1 = __importDefault(require('./factories/generateDocument'))
52
52
  exports.generateDocument = generateDocument_1.default
53
+ const createEvent_1 = __importDefault(require('./factories/createEvent'))
54
+ exports.createEvent = createEvent_1.default
55
+ const eventDefaults_1 = __importDefault(require('./factories/eventDefaults'))
56
+ exports.eventDefaults = eventDefaults_1.default
57
+ const UIEventService_1 = require('./services/UIEventService')
58
+ Object.defineProperty(exports, 'PseudoUIEvent', {
59
+ enumerable: true,
60
+ get: function () {
61
+ return UIEventService_1.UIEventService
62
+ }
63
+ })
64
+ const MouseEventService_1 = require('./services/MouseEventService')
65
+ Object.defineProperty(exports, 'PseudoMouseEvent', {
66
+ enumerable: true,
67
+ get: function () {
68
+ return MouseEventService_1.MouseEventService
69
+ }
70
+ })
71
+ const PointerEventService_1 = require('./services/PointerEventService')
72
+ Object.defineProperty(exports, 'PseudoPointerEvent', {
73
+ enumerable: true,
74
+ get: function () {
75
+ return PointerEventService_1.PointerEventService
76
+ }
77
+ })
78
+ const KeyboardEventService_1 = require('./services/KeyboardEventService')
79
+ Object.defineProperty(exports, 'PseudoKeyboardEvent', {
80
+ enumerable: true,
81
+ get: function () {
82
+ return KeyboardEventService_1.KeyboardEventService
83
+ }
84
+ })
85
+ const FocusEventService_1 = require('./services/FocusEventService')
86
+ Object.defineProperty(exports, 'PseudoFocusEvent', {
87
+ enumerable: true,
88
+ get: function () {
89
+ return FocusEventService_1.FocusEventService
90
+ }
91
+ })
92
+ const InputEventService_1 = require('./services/InputEventService')
93
+ Object.defineProperty(exports, 'PseudoInputEvent', {
94
+ enumerable: true,
95
+ get: function () {
96
+ return InputEventService_1.InputEventService
97
+ }
98
+ })
99
+ const CustomEventService_1 = require('./services/CustomEventService')
100
+ Object.defineProperty(exports, 'PseudoCustomEvent', {
101
+ enumerable: true,
102
+ get: function () {
103
+ return CustomEventService_1.CustomEventService
104
+ }
105
+ })
106
+ const simulate_1 = __importDefault(require('./simulate'))
107
+ exports.simulate = simulate_1.default
53
108
  /**
54
109
  * All methods exported from this module are encapsulated within pseudoDom.
55
110
  * @author Joshua Heagle <joshuaheagle@gmail.com>
@@ -58,7 +113,17 @@ exports.generateDocument = generateDocument_1.default
58
113
  */
59
114
  const pseudoDom = {
60
115
  generateDocument: generateDocument_1.default,
116
+ createEvent: createEvent_1.default,
117
+ eventDefaults: eventDefaults_1.default,
118
+ simulate: simulate_1.default,
61
119
  PseudoEvent: EventService_1.EventService,
120
+ PseudoUIEvent: UIEventService_1.UIEventService,
121
+ PseudoMouseEvent: MouseEventService_1.MouseEventService,
122
+ PseudoPointerEvent: PointerEventService_1.PointerEventService,
123
+ PseudoKeyboardEvent: KeyboardEventService_1.KeyboardEventService,
124
+ PseudoFocusEvent: FocusEventService_1.FocusEventService,
125
+ PseudoInputEvent: InputEventService_1.InputEventService,
126
+ PseudoCustomEvent: CustomEventService_1.CustomEventService,
62
127
  PseudoEventTarget: EventTargetService_1.default,
63
128
  PseudoNode: NodeService_1.NodeService,
64
129
  PseudoElement: ElementService_1.ElementService,
package/dist/main.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.PseudoHTMLDocument=exports.PseudoHTMLElement=exports.PseudoElement=exports.PseudoNode=exports.PseudoEventTarget=exports.PseudoEvent=exports.generateDocument=void 0;const EventService_1=require("./services/EventService");Object.defineProperty(exports,"PseudoEvent",{enumerable:!0,get:function(){return EventService_1.EventService}});const EventTargetService_1=__importDefault(require("./services/EventTargetService"));exports.PseudoEventTarget=EventTargetService_1.default;const NodeService_1=require("./services/NodeService");Object.defineProperty(exports,"PseudoNode",{enumerable:!0,get:function(){return NodeService_1.NodeService}});const ElementService_1=require("./services/ElementService");Object.defineProperty(exports,"PseudoElement",{enumerable:!0,get:function(){return ElementService_1.ElementService}});const HTMLElementService_1=require("./services/HTMLElementService");Object.defineProperty(exports,"PseudoHTMLElement",{enumerable:!0,get:function(){return HTMLElementService_1.HTMLElementService}});const PseudoHTMLDocument_1=__importDefault(require("./classes/PseudoHTMLDocument"));exports.PseudoHTMLDocument=PseudoHTMLDocument_1.default;const generateDocument_1=__importDefault(require("./factories/generateDocument"));exports.generateDocument=generateDocument_1.default;const pseudoDom={generateDocument:generateDocument_1.default,PseudoEvent:EventService_1.EventService,PseudoEventTarget:EventTargetService_1.default,PseudoNode:NodeService_1.NodeService,PseudoElement:ElementService_1.ElementService,PseudoHTMLElement:HTMLElementService_1.HTMLElementService,PseudoHTMLDocument:PseudoHTMLDocument_1.default};exports.default=pseudoDom,"undefined"!=typeof window&&(window.pseudoDom=pseudoDom);
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.PseudoHTMLDocument=exports.PseudoHTMLElement=exports.PseudoElement=exports.PseudoNode=exports.PseudoEventTarget=exports.PseudoCustomEvent=exports.PseudoInputEvent=exports.PseudoFocusEvent=exports.PseudoKeyboardEvent=exports.PseudoPointerEvent=exports.PseudoMouseEvent=exports.PseudoUIEvent=exports.PseudoEvent=exports.simulate=exports.eventDefaults=exports.createEvent=exports.generateDocument=void 0;const EventService_1=require("./services/EventService");Object.defineProperty(exports,"PseudoEvent",{enumerable:!0,get:function(){return EventService_1.EventService}});const EventTargetService_1=__importDefault(require("./services/EventTargetService"));exports.PseudoEventTarget=EventTargetService_1.default;const NodeService_1=require("./services/NodeService");Object.defineProperty(exports,"PseudoNode",{enumerable:!0,get:function(){return NodeService_1.NodeService}});const ElementService_1=require("./services/ElementService");Object.defineProperty(exports,"PseudoElement",{enumerable:!0,get:function(){return ElementService_1.ElementService}});const HTMLElementService_1=require("./services/HTMLElementService");Object.defineProperty(exports,"PseudoHTMLElement",{enumerable:!0,get:function(){return HTMLElementService_1.HTMLElementService}});const PseudoHTMLDocument_1=__importDefault(require("./classes/PseudoHTMLDocument"));exports.PseudoHTMLDocument=PseudoHTMLDocument_1.default;const generateDocument_1=__importDefault(require("./factories/generateDocument"));exports.generateDocument=generateDocument_1.default;const createEvent_1=__importDefault(require("./factories/createEvent"));exports.createEvent=createEvent_1.default;const eventDefaults_1=__importDefault(require("./factories/eventDefaults"));exports.eventDefaults=eventDefaults_1.default;const UIEventService_1=require("./services/UIEventService");Object.defineProperty(exports,"PseudoUIEvent",{enumerable:!0,get:function(){return UIEventService_1.UIEventService}});const MouseEventService_1=require("./services/MouseEventService");Object.defineProperty(exports,"PseudoMouseEvent",{enumerable:!0,get:function(){return MouseEventService_1.MouseEventService}});const PointerEventService_1=require("./services/PointerEventService");Object.defineProperty(exports,"PseudoPointerEvent",{enumerable:!0,get:function(){return PointerEventService_1.PointerEventService}});const KeyboardEventService_1=require("./services/KeyboardEventService");Object.defineProperty(exports,"PseudoKeyboardEvent",{enumerable:!0,get:function(){return KeyboardEventService_1.KeyboardEventService}});const FocusEventService_1=require("./services/FocusEventService");Object.defineProperty(exports,"PseudoFocusEvent",{enumerable:!0,get:function(){return FocusEventService_1.FocusEventService}});const InputEventService_1=require("./services/InputEventService");Object.defineProperty(exports,"PseudoInputEvent",{enumerable:!0,get:function(){return InputEventService_1.InputEventService}});const CustomEventService_1=require("./services/CustomEventService");Object.defineProperty(exports,"PseudoCustomEvent",{enumerable:!0,get:function(){return CustomEventService_1.CustomEventService}});const simulate_1=__importDefault(require("./simulate"));exports.simulate=simulate_1.default;const pseudoDom={generateDocument:generateDocument_1.default,createEvent:createEvent_1.default,eventDefaults:eventDefaults_1.default,simulate:simulate_1.default,PseudoEvent:EventService_1.EventService,PseudoUIEvent:UIEventService_1.UIEventService,PseudoMouseEvent:MouseEventService_1.MouseEventService,PseudoPointerEvent:PointerEventService_1.PointerEventService,PseudoKeyboardEvent:KeyboardEventService_1.KeyboardEventService,PseudoFocusEvent:FocusEventService_1.FocusEventService,PseudoInputEvent:InputEventService_1.InputEventService,PseudoCustomEvent:CustomEventService_1.CustomEventService,PseudoEventTarget:EventTargetService_1.default,PseudoNode:NodeService_1.NodeService,PseudoElement:ElementService_1.ElementService,PseudoHTMLElement:HTMLElementService_1.HTMLElementService,PseudoHTMLDocument:PseudoHTMLDocument_1.default};exports.default=pseudoDom,"undefined"!=typeof window&&(window.pseudoDom=pseudoDom);
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @file Substitute for the DOM CustomEvent Class.
3
+ * @author Joshua Heagle <joshuaheagle@gmail.com>
4
+ * @version 1.0.0
5
+ */
6
+ import { EventService } from './EventService';
7
+ /**
8
+ * The options for creating a custom event.
9
+ * @typedef {Object} CustomEventInit
10
+ * @property {boolean} [bubbles=false]
11
+ * @property {boolean} [cancelable=false]
12
+ * @property {boolean} [composed=false]
13
+ * @property {*} [detail=null] Whatever data the event should carry
14
+ */
15
+ export type CustomEventInit = {
16
+ bubbles?: boolean;
17
+ cancelable?: boolean;
18
+ composed?: boolean;
19
+ detail?: any;
20
+ };
21
+ /**
22
+ * Simulate the behaviour of the CustomEvent Class when there is no DOM available: an event which carries data.
23
+ * @author Joshua Heagle <joshuaheagle@gmail.com>
24
+ * @class
25
+ * @augments EventService
26
+ * @property {*} detail
27
+ */
28
+ export declare class CustomEventService extends EventService {
29
+ private readonly eventDetail;
30
+ /**
31
+ * @param {string} [typeArg=''] The type of the event
32
+ * @param {CustomEventInit} [init={}] The options for the event
33
+ * @constructor
34
+ */
35
+ constructor(typeArg?: string, init?: CustomEventInit);
36
+ get detail(): any;
37
+ }
@@ -0,0 +1,35 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.CustomEventService = void 0
7
+ /**
8
+ * @file Substitute for the DOM CustomEvent Class.
9
+ * @author Joshua Heagle <joshuaheagle@gmail.com>
10
+ * @version 1.0.0
11
+ */
12
+ const EventService_1 = require('./EventService')
13
+ /**
14
+ * Simulate the behaviour of the CustomEvent Class when there is no DOM available: an event which carries data.
15
+ * @author Joshua Heagle <joshuaheagle@gmail.com>
16
+ * @class
17
+ * @augments EventService
18
+ * @property {*} detail
19
+ */
20
+ class CustomEventService extends EventService_1.EventService {
21
+ /**
22
+ * @param {string} [typeArg=''] The type of the event
23
+ * @param {CustomEventInit} [init={}] The options for the event
24
+ * @constructor
25
+ */
26
+ constructor (typeArg = '', init = {}) {
27
+ super(typeArg, init)
28
+ this.eventDetail = typeof init.detail === 'undefined' ? null : init.detail
29
+ }
30
+
31
+ get detail () {
32
+ return this.eventDetail
33
+ }
34
+ }
35
+ exports.CustomEventService = CustomEventService
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CustomEventService=void 0;const EventService_1=require("./EventService");class CustomEventService extends EventService_1.EventService{constructor(e="",t={}){super(e,t),this.eventDetail=void 0===t.detail?null:t.detail}get detail(){return this.eventDetail}}exports.CustomEventService=CustomEventService;
@@ -16,7 +16,7 @@ Object.defineProperty(exports, '__esModule', {
16
16
  value: true
17
17
  })
18
18
  exports.ElementService = void 0
19
- const EventService_1 = require('./EventService')
19
+ const createEvent_1 = __importDefault(require('../factories/createEvent'))
20
20
  const NodeService_1 = require('./NodeService')
21
21
  const AttrService_1 = require('./AttrService')
22
22
  const DOMTokenListService_1 = require('./DOMTokenListService')
@@ -125,20 +125,20 @@ class ElementService extends NodeService_1.NodeService {
125
125
  switch (this.tagName) {
126
126
  case 'button':
127
127
  case 'input':
128
- if (/^(submit|image)$/i.test(this.type || '')) {
129
- // Clicking a submit button submits the form it is in: the form gets a submit event, which can be cancelled
130
- callback = event => {
131
- const forms = (0, getParentNodesFromAttribute_1.default)('tagName', 'form', this)
132
- if (forms.length) {
133
- forms[forms.length - 1].dispatchEvent(new EventService_1.EventService('submit', {
134
- bubbles: true,
135
- cancelable: true
136
- }))
137
- }
128
+ // Clicking a submit button submits the form it is in: the form gets a submit event, which can be cancelled
129
+ callback = event => {
130
+ const type = String(this.getAttribute('type') || this.type || '').toLowerCase()
131
+ const submits = this.tagName === 'button' ? type !== 'button' && type !== 'reset' : /^(submit|image)$/.test(type)
132
+ const forms = (0, getParentNodesFromAttribute_1.default)('tagName', 'form', this)
133
+ if (submits && forms.length && !this.hasAttribute('disabled')) {
134
+ forms[forms.length - 1].dispatchEvent((0, createEvent_1.default)('submit', {}, {
135
+ browser: true,
136
+ trusted: event.isTrusted
137
+ }))
138
138
  }
139
- super.setDefaultEvent('click', callback)
140
- this.defaultEventApplied = true
141
139
  }
140
+ super.setDefaultEvent('click', callback)
141
+ this.defaultEventApplied = true
142
142
  }
143
143
  return callback
144
144
  }
@@ -1 +1 @@
1
- "use strict";require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.find.js"),require("core-js/modules/esnext.iterator.for-each.js"),require("core-js/modules/esnext.iterator.map.js"),require("core-js/modules/esnext.iterator.some.js");var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ElementService=void 0;const EventService_1=require("./EventService"),NodeService_1=require("./NodeService"),AttrService_1=require("./AttrService"),DOMTokenListService_1=require("./DOMTokenListService"),NamedNodeMapService_1=require("./NamedNodeMapService"),getParentNodesFromAttribute_1=__importDefault(require("../functions/getParentNodesFromAttribute"));class ElementService extends NodeService_1.NodeService{constructor({tagName:e="",attributes:t=[],parent:r=null,children:i=[]}={}){super(),this.defaultEventApplied=!1,this.tokenList=new DOMTokenListService_1.DOMTokenListService,this.tag=e,this.attributeList=t.concat([{name:"className",value:""},{name:"id",value:""},{name:"innerHTML",value:""}]),this.propertyAttributes=this.attributeList.map(({name:e})=>e),this.attributeList.forEach(({name:e,value:t})=>{this[e]=t}),i.forEach(e=>{if(!e||"number"!=typeof e.nodeType)throw new TypeError("The children of an element must be nodes.");this.appendChild(e)}),r&&r.appendChild(this)}get tagName(){return this.tag}get nodeType(){return NodeService_1.NodeService.ELEMENT_NODE}get attributes(){return new NamedNodeMapService_1.NamedNodeMapService(this.attributeList.map(({name:e,value:t})=>new AttrService_1.AttrService(e,String(t),this)))}get classList(){return this.tokenList}get className(){return this.tokenList.value}set className(e){this.tokenList.value=e}applyDefaultEvent(){let e=e=>{};if(this.defaultEventApplied)return e;switch(this.tagName){case"button":case"input":/^(submit|image)$/i.test(this.type||"")&&(e=e=>{const t=(0,getParentNodesFromAttribute_1.default)("tagName","form",this);t.length&&t[t.length-1].dispatchEvent(new EventService_1.EventService("submit",{bubbles:!0,cancelable:!0}))},super.setDefaultEvent("click",e),this.defaultEventApplied=!0)}return e}childInserted(e){"function"==typeof e.applyDefaultEvent&&e.applyDefaultEvent()}hasAttribute(e){return this.attributeList.some(({name:t})=>t===e)}setAttribute(e,t){const r=this.attributeList.find(({name:t})=>t===e);r?r.value=t:this.attributeList.push({name:e,value:t}),this.propertyAttributes.indexOf(e)>=0&&(this[e]=t)}getAttribute(e){const t=this.attributeList.find(({name:t})=>t===e);return t?t.value:null}removeAttribute(e){const t=this.attributeList.findIndex(({name:t})=>t===e);t>=0&&this.attributeList.splice(t,1)}}exports.ElementService=ElementService;
1
+ "use strict";require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.find.js"),require("core-js/modules/esnext.iterator.for-each.js"),require("core-js/modules/esnext.iterator.map.js"),require("core-js/modules/esnext.iterator.some.js");var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ElementService=void 0;const createEvent_1=__importDefault(require("../factories/createEvent")),NodeService_1=require("./NodeService"),AttrService_1=require("./AttrService"),DOMTokenListService_1=require("./DOMTokenListService"),NamedNodeMapService_1=require("./NamedNodeMapService"),getParentNodesFromAttribute_1=__importDefault(require("../functions/getParentNodesFromAttribute"));class ElementService extends NodeService_1.NodeService{constructor({tagName:e="",attributes:t=[],parent:r=null,children:i=[]}={}){super(),this.defaultEventApplied=!1,this.tokenList=new DOMTokenListService_1.DOMTokenListService,this.tag=e,this.attributeList=t.concat([{name:"className",value:""},{name:"id",value:""},{name:"innerHTML",value:""}]),this.propertyAttributes=this.attributeList.map(({name:e})=>e),this.attributeList.forEach(({name:e,value:t})=>{this[e]=t}),i.forEach(e=>{if(!e||"number"!=typeof e.nodeType)throw new TypeError("The children of an element must be nodes.");this.appendChild(e)}),r&&r.appendChild(this)}get tagName(){return this.tag}get nodeType(){return NodeService_1.NodeService.ELEMENT_NODE}get attributes(){return new NamedNodeMapService_1.NamedNodeMapService(this.attributeList.map(({name:e,value:t})=>new AttrService_1.AttrService(e,String(t),this)))}get classList(){return this.tokenList}get className(){return this.tokenList.value}set className(e){this.tokenList.value=e}applyDefaultEvent(){let e=e=>{};if(this.defaultEventApplied)return e;switch(this.tagName){case"button":case"input":e=e=>{const t=String(this.getAttribute("type")||this.type||"").toLowerCase(),r="button"===this.tagName?"button"!==t&&"reset"!==t:/^(submit|image)$/.test(t),i=(0,getParentNodesFromAttribute_1.default)("tagName","form",this);r&&i.length&&!this.hasAttribute("disabled")&&i[i.length-1].dispatchEvent((0,createEvent_1.default)("submit",{},{browser:!0,trusted:e.isTrusted}))},super.setDefaultEvent("click",e),this.defaultEventApplied=!0}return e}childInserted(e){"function"==typeof e.applyDefaultEvent&&e.applyDefaultEvent()}hasAttribute(e){return this.attributeList.some(({name:t})=>t===e)}setAttribute(e,t){const r=this.attributeList.find(({name:t})=>t===e);r?r.value=t:this.attributeList.push({name:e,value:t}),this.propertyAttributes.indexOf(e)>=0&&(this[e]=t)}getAttribute(e){const t=this.attributeList.find(({name:t})=>t===e);return t?t.value:null}removeAttribute(e){const t=this.attributeList.findIndex(({name:t})=>t===e);t>=0&&this.attributeList.splice(t,1)}}exports.ElementService=ElementService;
@@ -15,6 +15,8 @@ export type EventInner = {
15
15
  target: PseudoEventTarget;
16
16
  immediatePropagationStopped: boolean;
17
17
  propagationStopped: boolean;
18
+ /** True for an event which the browser created for a user action, an event which a script created is not trusted. */
19
+ trusted: boolean;
18
20
  /** True while the event is being dispatched. */
19
21
  dispatching: boolean;
20
22
  /** True while a passive listener is running, in which preventDefault does nothing. */
@@ -65,7 +65,7 @@ class EventService {
65
65
  target: null,
66
66
  timeStamp: Math.floor(Date.now() / 1000),
67
67
  type: '',
68
- isTrusted: true,
68
+ isTrusted: false,
69
69
  dispatching: false,
70
70
  inPassiveListener: false,
71
71
  path: []
@@ -149,6 +149,12 @@ class EventService {
149
149
  get propagationStopped () {
150
150
  return self.properties.propagationStopped
151
151
  },
152
+ get trusted () {
153
+ return self.properties.isTrusted
154
+ },
155
+ set trusted (trusted) {
156
+ self.properties.isTrusted = trusted
157
+ },
152
158
  get dispatching () {
153
159
  return self.properties.dispatching
154
160
  },