1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-22 15:24:46 -05:00

event isTrusted is enumerable (#2543)

This commit is contained in:
迷渡 2019-06-20 20:21:43 +08:00 committed by Ryan Dahl
parent 425df50484
commit 6a5177dc11
3 changed files with 25 additions and 23 deletions

View file

@ -6,6 +6,10 @@ import { getPrivateValue, requiredArguments } from "./util";
// https://developer.mozilla.org/en-US/docs/Archive/Add-ons/Add-on_SDK/Guides/Contributor_s_Guide/Private_Properties#Using_WeakMaps
export const eventAttributes = new WeakMap();
function isTrusted(this: Event): boolean {
return getPrivateValue(this, eventAttributes, "isTrusted");
}
export class EventInit implements domTypes.EventInit {
bubbles = false;
cancelable = false;
@ -19,6 +23,9 @@ export class EventInit implements domTypes.EventInit {
}
export class Event implements domTypes.Event {
// The default value is `false`.
// Use `defineProperty` to define on each instance, NOT on the prototype.
isTrusted!: boolean;
// Each event has the following associated flags
private _canceledFlag = false;
private _dispatchedFlag = false;
@ -46,6 +53,10 @@ export class Event implements domTypes.Event {
target: null,
timeStamp: Date.now()
});
Reflect.defineProperty(this, "isTrusted", {
enumerable: true,
get: isTrusted
});
}
get bubbles(): boolean {
@ -134,25 +145,6 @@ export class Event implements domTypes.Event {
this._inPassiveListenerFlag = value;
}
get isTrusted(): boolean {
return getPrivateValue(this, eventAttributes, "isTrusted");
}
set isTrusted(value: boolean) {
eventAttributes.set(this, {
type: this.type,
bubbles: this.bubbles,
cancelable: this.cancelable,
composed: this.composed,
currentTarget: this.currentTarget,
eventPhase: this.eventPhase,
isTrusted: value,
relatedTarget: this.relatedTarget,
target: this.target,
timeStamp: this.timeStamp
});
}
get path(): domTypes.EventPath[] {
return this._path;
}
@ -363,7 +355,6 @@ Reflect.defineProperty(Event.prototype, "defaultPrevented", {
});
Reflect.defineProperty(Event.prototype, "dispatched", { enumerable: true });
Reflect.defineProperty(Event.prototype, "eventPhase", { enumerable: true });
Reflect.defineProperty(Event.prototype, "isTrusted", { enumerable: true });
Reflect.defineProperty(Event.prototype, "target", { enumerable: true });
Reflect.defineProperty(Event.prototype, "timeStamp", { enumerable: true });
Reflect.defineProperty(Event.prototype, "type", { enumerable: true });

View file

@ -201,8 +201,6 @@ export class EventTarget implements domTypes.EventTarget {
);
}
event.isTrusted = false;
return this._dispatch(event);
}

View file

@ -1,5 +1,5 @@
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
import { test, assertEquals } from "./test_util.ts";
import { test, assertEquals, assertNotEquals } from "./test_util.ts";
test(function eventInitializedWithType(): void {
const type = "click";
@ -80,3 +80,16 @@ test(function eventInitializedWithNonStringType(): void {
assertEquals(event.bubbles, false);
assertEquals(event.cancelable, false);
});
// ref https://github.com/web-platform-tests/wpt/blob/master/dom/events/Event-isTrusted.any.js
test(function eventIsTrusted(): void {
const desc1 = Object.getOwnPropertyDescriptor(new Event("x"), "isTrusted");
assertNotEquals(desc1, undefined);
assertEquals(typeof desc1.get, "function");
const desc2 = Object.getOwnPropertyDescriptor(new Event("x"), "isTrusted");
assertNotEquals(desc2, undefined);
assertEquals(typeof desc2.get, "function");
assertEquals(desc1.get, desc2.get);
});