pseudo-dom 0.2.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.
- package/README.md +903 -43
- package/browser/pseudo-dom.js +1489 -376
- package/browser/pseudo-dom.min.js +1 -1
- package/dist/classes/PseudoEventListener.d.ts +25 -25
- package/dist/classes/PseudoEventListener.js +37 -34
- package/dist/classes/PseudoEventListener.min.js +1 -1
- package/dist/factories/createEvent.d.ts +28 -0
- package/dist/factories/createEvent.js +56 -0
- package/dist/factories/createEvent.min.js +1 -0
- package/dist/factories/eventDefaults.d.ts +31 -0
- package/dist/factories/eventDefaults.js +105 -0
- package/dist/factories/eventDefaults.min.js +1 -0
- package/dist/factories.d.ts +6 -0
- package/dist/factories.js +5 -1
- package/dist/factories.min.js +1 -1
- package/dist/functions/activeElement.d.ts +14 -0
- package/dist/functions/activeElement.js +33 -0
- package/dist/functions/activeElement.min.js +1 -0
- package/dist/functions/modifierState.d.ts +29 -0
- package/dist/functions/modifierState.js +41 -0
- package/dist/functions/modifierState.min.js +1 -0
- package/dist/interfaces/PseudoEventTarget.d.ts +2 -2
- package/dist/main.d.ts +32 -1
- package/dist/main.js +66 -1
- package/dist/main.min.js +1 -1
- package/dist/services/CustomEventService.d.ts +37 -0
- package/dist/services/CustomEventService.js +35 -0
- package/dist/services/CustomEventService.min.js +1 -0
- package/dist/services/ElementService.d.ts +1 -0
- package/dist/services/ElementService.js +17 -10
- package/dist/services/ElementService.min.js +1 -1
- package/dist/services/EventService.d.ts +18 -4
- package/dist/services/EventService.js +65 -31
- package/dist/services/EventService.min.js +1 -1
- package/dist/services/EventTargetService.d.ts +41 -9
- package/dist/services/EventTargetService.js +121 -52
- package/dist/services/EventTargetService.min.js +1 -1
- package/dist/services/FocusEventService.d.ts +32 -0
- package/dist/services/FocusEventService.js +35 -0
- package/dist/services/FocusEventService.min.js +1 -0
- package/dist/services/HTMLElementService.d.ts +20 -0
- package/dist/services/HTMLElementService.js +95 -0
- package/dist/services/HTMLElementService.min.js +1 -1
- package/dist/services/InputEventService.d.ts +41 -0
- package/dist/services/InputEventService.js +47 -0
- package/dist/services/InputEventService.min.js +1 -0
- package/dist/services/KeyboardEventService.d.ts +70 -0
- package/dist/services/KeyboardEventService.js +86 -0
- package/dist/services/KeyboardEventService.min.js +1 -0
- package/dist/services/MouseEventService.d.ts +80 -0
- package/dist/services/MouseEventService.js +108 -0
- package/dist/services/MouseEventService.min.js +1 -0
- package/dist/services/PointerEventService.d.ts +51 -0
- package/dist/services/PointerEventService.js +67 -0
- package/dist/services/PointerEventService.min.js +1 -0
- package/dist/services/UIEventService.d.ts +43 -0
- package/dist/services/UIEventService.js +42 -0
- package/dist/services/UIEventService.min.js +1 -0
- package/dist/simulate.d.ts +32 -0
- package/dist/simulate.js +115 -0
- package/dist/simulate.min.js +1 -0
- package/package.json +1 -1
|
@@ -18,6 +18,13 @@ const EventService_1 = require('../services/EventService')
|
|
|
18
18
|
* @property {boolean} isDefault
|
|
19
19
|
*/
|
|
20
20
|
class PseudoEventListener {
|
|
21
|
+
/**
|
|
22
|
+
* @param {string} eventType The type of event this listens for
|
|
23
|
+
* @param {Object} [options] The capture, once and passive options
|
|
24
|
+
* @param {Function} handleEvent The function which is called with the event, already bound to what it should run as
|
|
25
|
+
* @param {Function} [originalCallback=handleEvent] The function (or object) which was given when registering, used to find this listener again
|
|
26
|
+
* @constructor
|
|
27
|
+
*/
|
|
21
28
|
constructor (eventType, {
|
|
22
29
|
capture = false,
|
|
23
30
|
once = false,
|
|
@@ -30,6 +37,7 @@ class PseudoEventListener {
|
|
|
30
37
|
}
|
|
31
38
|
this.eventType = ''
|
|
32
39
|
this.defaultListener = false
|
|
40
|
+
this.isRemoved = false
|
|
33
41
|
this.eventOptions = {
|
|
34
42
|
capture,
|
|
35
43
|
once,
|
|
@@ -47,6 +55,11 @@ class PseudoEventListener {
|
|
|
47
55
|
return this.originalCallback
|
|
48
56
|
}
|
|
49
57
|
|
|
58
|
+
/** Whether this listener listens in the capture phase (and at the target) rather than in the bubble phase. */
|
|
59
|
+
get capture () {
|
|
60
|
+
return this.eventOptions.capture
|
|
61
|
+
}
|
|
62
|
+
|
|
50
63
|
get isDefault () {
|
|
51
64
|
return this.defaultListener
|
|
52
65
|
}
|
|
@@ -55,6 +68,20 @@ class PseudoEventListener {
|
|
|
55
68
|
return this.eventOptions.once
|
|
56
69
|
}
|
|
57
70
|
|
|
71
|
+
/** Whether the listener promises not to prevent the default (preventDefault does nothing while it runs). */
|
|
72
|
+
get passive () {
|
|
73
|
+
return this.eventOptions.passive
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Whether this listener has been removed, a removed listener does not run even if the event already started. */
|
|
77
|
+
get removed () {
|
|
78
|
+
return this.isRemoved
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
set removed (removed) {
|
|
82
|
+
this.isRemoved = removed
|
|
83
|
+
}
|
|
84
|
+
|
|
58
85
|
/**
|
|
59
86
|
* @method
|
|
60
87
|
* @name PseudoEventListener#handleEvent
|
|
@@ -66,6 +93,7 @@ class PseudoEventListener {
|
|
|
66
93
|
}
|
|
67
94
|
|
|
68
95
|
/**
|
|
96
|
+
* A capture listener runs while the event travels down to the target.
|
|
69
97
|
* @method
|
|
70
98
|
* @name PseudoEventListener#doCapturePhase
|
|
71
99
|
* @param {PseudoEvent} event
|
|
@@ -76,6 +104,7 @@ class PseudoEventListener {
|
|
|
76
104
|
}
|
|
77
105
|
|
|
78
106
|
/**
|
|
107
|
+
* Every listener of the target itself runs, capture listeners first.
|
|
79
108
|
* @method
|
|
80
109
|
* @name PseudoEventListener#doTargetPhase
|
|
81
110
|
* @param {PseudoEvent} event
|
|
@@ -86,13 +115,14 @@ class PseudoEventListener {
|
|
|
86
115
|
}
|
|
87
116
|
|
|
88
117
|
/**
|
|
118
|
+
* A listener which is not a capture listener runs while the event travels back up (when it bubbles).
|
|
89
119
|
* @method
|
|
90
120
|
* @name PseudoEventListener#doBubblePhase
|
|
91
121
|
* @param {PseudoEvent} event
|
|
92
|
-
* @returns {boolean
|
|
122
|
+
* @returns {boolean}
|
|
93
123
|
*/
|
|
94
124
|
doBubblePhase (event) {
|
|
95
|
-
return event.eventPhase === EventService_1.EventService.BUBBLING_PHASE &&
|
|
125
|
+
return event.eventPhase === EventService_1.EventService.BUBBLING_PHASE && !this.eventOptions.capture
|
|
96
126
|
}
|
|
97
127
|
|
|
98
128
|
/**
|
|
@@ -106,43 +136,16 @@ class PseudoEventListener {
|
|
|
106
136
|
}
|
|
107
137
|
|
|
108
138
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
* @returns {boolean|*}
|
|
113
|
-
*/
|
|
114
|
-
skipDefault (event) {
|
|
115
|
-
return this.isDefault && event.defaultPrevented
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* @method
|
|
120
|
-
* @name PseudoEventListener#stopPropagation
|
|
121
|
-
* @param {PseudoEvent} event
|
|
122
|
-
* @returns {boolean}
|
|
123
|
-
*/
|
|
124
|
-
stopPropagation (event) {
|
|
125
|
-
return !this.doTargetPhase(event) && event.inner.propagationStopped
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* @method
|
|
130
|
-
* @name PseudoEventListener#nonPassiveHalt
|
|
131
|
-
* @param {PseudoEvent} event
|
|
132
|
-
* @returns {boolean|*}
|
|
133
|
-
*/
|
|
134
|
-
nonPassiveHalt (event) {
|
|
135
|
-
return !this.eventOptions.passive && (this.skipDefault(event) || event.inner.immediatePropagationStopped || this.stopPropagation(event))
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
+
* Whether this listener should not run for the event as it is now (it was removed, or it is for another phase).
|
|
140
|
+
* Stopping propagation is handled by the dispatching, since it stops other targets and not the listeners of the
|
|
141
|
+
* current one.
|
|
139
142
|
* @method
|
|
140
143
|
* @name PseudoEventListener#rejectEvent
|
|
141
144
|
* @param {PseudoEvent} event
|
|
142
|
-
* @returns {
|
|
145
|
+
* @returns {boolean}
|
|
143
146
|
*/
|
|
144
147
|
rejectEvent (event) {
|
|
145
|
-
return this.
|
|
148
|
+
return this.isRemoved || this.skipPhase(event)
|
|
146
149
|
}
|
|
147
150
|
}
|
|
148
151
|
exports.default = PseudoEventListener
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const EventService_1=require("../services/EventService");class PseudoEventListener{constructor(e,{capture:t=!1,once:s=!1,passive:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const EventService_1=require("../services/EventService");class PseudoEventListener{constructor(e,{capture:t=!1,once:s=!1,passive:r=!1}={},i,n=i){this.eventOptions={capture:!1,once:!1,passive:!1},this.eventType="",this.defaultListener=!1,this.isRemoved=!1,this.eventOptions={capture:t,once:s,passive:r},this.eventType=e,this.handler=i,this.originalCallback=n}get callback(){return this.originalCallback}get capture(){return this.eventOptions.capture}get isDefault(){return this.defaultListener}get once(){return this.eventOptions.once}get passive(){return this.eventOptions.passive}get removed(){return this.isRemoved}set removed(e){this.isRemoved=e}handleEvent(e){return this.handler(e)}doCapturePhase(e){return e.eventPhase===EventService_1.EventService.CAPTURING_PHASE&&this.eventOptions.capture}doTargetPhase(e){return e.eventPhase===EventService_1.EventService.AT_TARGET}doBubblePhase(e){return e.eventPhase===EventService_1.EventService.BUBBLING_PHASE&&!this.eventOptions.capture}skipPhase(e){return!this.doCapturePhase(e)&&!this.doTargetPhase(e)&&!this.doBubblePhase(e)}rejectEvent(e){return this.isRemoved||this.skipPhase(e)}}exports.default=PseudoEventListener;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { EventService } from '../services/EventService';
|
|
2
|
+
/**
|
|
3
|
+
* How the event is being created.
|
|
4
|
+
* @typedef {Object} CreateEventOptions
|
|
5
|
+
* @property {boolean} [browser=false] The browser is creating the event (for a user action, or for something like
|
|
6
|
+
* element.click()), so the standard options for the type of event apply where the init does not give its own
|
|
7
|
+
* @property {boolean} [trusted=false] The event comes from a real user action rather than from a script (isTrusted)
|
|
8
|
+
*/
|
|
9
|
+
export type CreateEventOptions = {
|
|
10
|
+
browser?: boolean;
|
|
11
|
+
trusted?: boolean;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Create an event of the kind which suits its type (a click is a MouseEvent, a keydown a KeyboardEvent, ...).
|
|
15
|
+
* By default this is like using the constructor of the event in a script: nothing bubbles or can be cancelled unless
|
|
16
|
+
* the init says so, and the event is not trusted. With browser: true the event is created the way the browser creates
|
|
17
|
+
* it, using the standard options for its type (see eventDefaults), and trusted: true makes it look like it came from a
|
|
18
|
+
* real user action (isTrusted).
|
|
19
|
+
* @function createEvent
|
|
20
|
+
* @param {string} type The type of the event, such as click
|
|
21
|
+
* @param {Object} [init={}] The options for the event (bubbles, cancelable, composed and those of its kind of event)
|
|
22
|
+
* @param {CreateEventOptions} [options={}] Whether the browser is creating the event, and whether it is trusted
|
|
23
|
+
* @returns {EventService}
|
|
24
|
+
*/
|
|
25
|
+
export declare const createEvent: (type: string, init?: {
|
|
26
|
+
[option: string]: any;
|
|
27
|
+
}, { browser, trusted }?: CreateEventOptions) => EventService;
|
|
28
|
+
export default createEvent;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.createEvent = void 0
|
|
7
|
+
const EventService_1 = require('../services/EventService')
|
|
8
|
+
const UIEventService_1 = require('../services/UIEventService')
|
|
9
|
+
const MouseEventService_1 = require('../services/MouseEventService')
|
|
10
|
+
const PointerEventService_1 = require('../services/PointerEventService')
|
|
11
|
+
const KeyboardEventService_1 = require('../services/KeyboardEventService')
|
|
12
|
+
const FocusEventService_1 = require('../services/FocusEventService')
|
|
13
|
+
const InputEventService_1 = require('../services/InputEventService')
|
|
14
|
+
const CustomEventService_1 = require('../services/CustomEventService')
|
|
15
|
+
const eventDefaults_1 = require('./eventDefaults')
|
|
16
|
+
const eventClasses = {
|
|
17
|
+
Event: EventService_1.EventService,
|
|
18
|
+
UIEvent: UIEventService_1.UIEventService,
|
|
19
|
+
MouseEvent: MouseEventService_1.MouseEventService,
|
|
20
|
+
PointerEvent: PointerEventService_1.PointerEventService,
|
|
21
|
+
KeyboardEvent: KeyboardEventService_1.KeyboardEventService,
|
|
22
|
+
FocusEvent: FocusEventService_1.FocusEventService,
|
|
23
|
+
InputEvent: InputEventService_1.InputEventService,
|
|
24
|
+
CustomEvent: CustomEventService_1.CustomEventService
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create an event of the kind which suits its type (a click is a MouseEvent, a keydown a KeyboardEvent, ...).
|
|
28
|
+
* By default this is like using the constructor of the event in a script: nothing bubbles or can be cancelled unless
|
|
29
|
+
* the init says so, and the event is not trusted. With browser: true the event is created the way the browser creates
|
|
30
|
+
* it, using the standard options for its type (see eventDefaults), and trusted: true makes it look like it came from a
|
|
31
|
+
* real user action (isTrusted).
|
|
32
|
+
* @function createEvent
|
|
33
|
+
* @param {string} type The type of the event, such as click
|
|
34
|
+
* @param {Object} [init={}] The options for the event (bubbles, cancelable, composed and those of its kind of event)
|
|
35
|
+
* @param {CreateEventOptions} [options={}] Whether the browser is creating the event, and whether it is trusted
|
|
36
|
+
* @returns {EventService}
|
|
37
|
+
*/
|
|
38
|
+
const createEvent = (type, init = {}, {
|
|
39
|
+
browser = false,
|
|
40
|
+
trusted = false
|
|
41
|
+
} = {}) => {
|
|
42
|
+
const definition = eventDefaults_1.eventDefaults[type]
|
|
43
|
+
const options = browser && definition
|
|
44
|
+
? Object.assign({
|
|
45
|
+
bubbles: definition.bubbles,
|
|
46
|
+
cancelable: definition.cancelable,
|
|
47
|
+
composed: definition.composed
|
|
48
|
+
}, init)
|
|
49
|
+
: init
|
|
50
|
+
const EventClass = eventClasses[definition ? definition.interface : 'Event']
|
|
51
|
+
const event = new EventClass(type, options)
|
|
52
|
+
event.inner.trusted = trusted
|
|
53
|
+
return event
|
|
54
|
+
}
|
|
55
|
+
exports.createEvent = createEvent
|
|
56
|
+
exports.default = exports.createEvent
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createEvent=void 0;const EventService_1=require("../services/EventService"),UIEventService_1=require("../services/UIEventService"),MouseEventService_1=require("../services/MouseEventService"),PointerEventService_1=require("../services/PointerEventService"),KeyboardEventService_1=require("../services/KeyboardEventService"),FocusEventService_1=require("../services/FocusEventService"),InputEventService_1=require("../services/InputEventService"),CustomEventService_1=require("../services/CustomEventService"),eventDefaults_1=require("./eventDefaults"),eventClasses={Event:EventService_1.EventService,UIEvent:UIEventService_1.UIEventService,MouseEvent:MouseEventService_1.MouseEventService,PointerEvent:PointerEventService_1.PointerEventService,KeyboardEvent:KeyboardEventService_1.KeyboardEventService,FocusEvent:FocusEventService_1.FocusEventService,InputEvent:InputEventService_1.InputEventService,CustomEvent:CustomEventService_1.CustomEventService},createEvent=(e,t={},{browser:v=!1,trusted:r=!1}={})=>{const n=eventDefaults_1.eventDefaults[e],c=v&&n?Object.assign({bubbles:n.bubbles,cancelable:n.cancelable,composed:n.composed},t):t,i=new(0,eventClasses[n?n.interface:"Event"])(e,c);return i.inner.trusted=r,i};exports.createEvent=createEvent,exports.default=exports.createEvent;
|
|
@@ -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;
|
package/dist/factories.d.ts
CHANGED
|
@@ -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
|
}
|
package/dist/factories.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});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;
|
|
@@ -35,12 +35,12 @@ export interface PseudoEventTarget {
|
|
|
35
35
|
* @param {string} type
|
|
36
36
|
* @param {function} callback
|
|
37
37
|
*/
|
|
38
|
-
removeEventListener(type: string, callback: Function): void;
|
|
38
|
+
removeEventListener(type: string, callback: Function, options?: listenerOptions | boolean): void;
|
|
39
39
|
/**
|
|
40
40
|
* Dispatches an event to this EventTarget.
|
|
41
41
|
* @param {Event|PseudoEvent} event
|
|
42
42
|
* @param {EventTarget|PseudoEventTarget} target
|
|
43
43
|
* @returns {boolean}
|
|
44
44
|
*/
|
|
45
|
-
dispatchEvent(event: PseudoEvent
|
|
45
|
+
dispatchEvent(event: PseudoEvent): boolean;
|
|
46
46
|
}
|
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;
|