You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.7 KiB
JavaScript
66 lines
1.7 KiB
JavaScript
'use strict';
|
|
// https://dom.spec.whatwg.org/#interface-event
|
|
|
|
/* c8 ignore start */
|
|
|
|
// Node 15 has Event but 14 and 12 don't
|
|
const BUBBLING_PHASE = 3;
|
|
const AT_TARGET = 2;
|
|
const CAPTURING_PHASE = 1;
|
|
const NONE = 0;
|
|
|
|
function getCurrentTarget(ev) {
|
|
return ev.currentTarget;
|
|
}
|
|
|
|
/**
|
|
* @implements globalThis.Event
|
|
*/
|
|
class GlobalEvent {
|
|
static get BUBBLING_PHASE() { return BUBBLING_PHASE; }
|
|
static get AT_TARGET() { return AT_TARGET; }
|
|
static get CAPTURING_PHASE() { return CAPTURING_PHASE; }
|
|
static get NONE() { return NONE; }
|
|
|
|
constructor(type, eventInitDict = {}) {
|
|
this.type = type;
|
|
this.bubbles = !!eventInitDict.bubbles;
|
|
this.cancelBubble = false;
|
|
this._stopImmediatePropagationFlag = false;
|
|
this.cancelable = !!eventInitDict.cancelable;
|
|
this.eventPhase = this.NONE;
|
|
this.timeStamp = Date.now();
|
|
this.defaultPrevented = false;
|
|
this.originalTarget = null;
|
|
this.returnValue = null;
|
|
this.srcElement = null;
|
|
this.target = null;
|
|
this._path = [];
|
|
}
|
|
|
|
get BUBBLING_PHASE() { return BUBBLING_PHASE; }
|
|
get AT_TARGET() { return AT_TARGET; }
|
|
get CAPTURING_PHASE() { return CAPTURING_PHASE; }
|
|
get NONE() { return NONE; }
|
|
|
|
preventDefault() { this.defaultPrevented = true; }
|
|
|
|
// simplified implementation, should be https://dom.spec.whatwg.org/#dom-event-composedpath
|
|
composedPath() {
|
|
return this._path.map(getCurrentTarget);
|
|
}
|
|
|
|
stopPropagation() {
|
|
this.cancelBubble = true;
|
|
}
|
|
|
|
stopImmediatePropagation() {
|
|
this.stopPropagation();
|
|
this._stopImmediatePropagationFlag = true;
|
|
}
|
|
}
|
|
|
|
exports.Event = GlobalEvent;
|
|
|
|
/* c8 ignore stop */
|