//@flow /** * Create an Event work-alike object based on the dictionary. * The event should contain all of the same properties from the dict. * @param {string} type - * @param {Object=} opt_dict - * @constructor * @extends {Event} */ export class FakeEvent { /** @const {boolean} */ public bubbles: boolean; /** @const {boolean} */ public cancelable: boolean; /** @const {boolean} */ public defaultPrevented: boolean; /** * According to MDN, Chrome uses high-res timers instead of epoch time. * Follow suit so that timeStamps on FakeEvents use the same base as * on native Events. * @const {number} * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/timeStamp */ public timeStamp: number | Date; /** @const {string} */ public type: string; /** @const {boolean} */ public isTrusted: boolean; /** @type {EventTarget} */ public currentTarget: any; /** @type {EventTarget} */ public target: any; /** * Non-standard property read by FakeEventTarget to stop processing listeners. * @type {boolean} */ public stopped: boolean; public payload: any; constructor(type: string, payload?: any) { // These Properties below cannot be set by dict. They are all provided for // compatibility with native events. /** @const {boolean} */ this.bubbles = false; /** @const {boolean} */ this.cancelable = false; /** @const {boolean} */ this.defaultPrevented = false; /** * According to MDN, Chrome uses high-res timers instead of epoch time. * Follow suit so that timeStamps on FakeEvents use the same base as * on native Events. * @const {number} * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/timeStamp */ this.timeStamp = window.performance ? window.performance.now() : Date.now(); /** @const {string} */ this.type = type; /** @const {boolean} */ this.isTrusted = false; /** @type {EventTarget} */ this.currentTarget = null; /** @type {EventTarget} */ this.target = null; /** * Non-standard property read by FakeEventTarget to stop processing listeners. * @type {boolean} */ this.stopped = false; this.payload = payload; } /** * Does nothing, since FakeEvents have no default. Provided for compatibility * with native Events. * @override */ public preventDefault(): void {} /** * Stops processing event listeners for this event. Provided for compatibility * with native Events. * @override */ public stopImmediatePropagation(): void { this.stopped = true; } /** * Does nothing, since FakeEvents do not bubble. Provided for compatibility * with native Events. * @override */ public stopPropagation(): void {} }