From d17138a98044e9c9fbbaf08085166dd2dbd054ce Mon Sep 17 00:00:00 2001 From: "Namhyeon, Go" Date: Mon, 19 Sep 2022 04:44:58 +0900 Subject: [PATCH] Fix StdEventTarget object --- lib/chrome.js | 2 +- lib/std.js | 38 ++++++++++++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/lib/chrome.js b/lib/chrome.js index 7944e2b..678fac8 100644 --- a/lib/chrome.js +++ b/lib/chrome.js @@ -16,7 +16,7 @@ var Toolkit = require("lib/toolkit"); var pageEventId = 0; var ChromeObject = function(interfaces) { - STD.EventableObject.apply(this, arguments); // set this object to `eventable` + STD.EventTarget.apply(this, arguments); // Set event-attachable object this.interfaces = (typeof interfaces !== "undefined" ? interfaces : []); this.vendor = "Chrome"; diff --git a/lib/std.js b/lib/std.js index 4213d65..294e32d 100644 --- a/lib/std.js +++ b/lib/std.js @@ -346,23 +346,49 @@ StdEvent.CAPTURING_PHASE = 1; // Not used but to be compatible StdEvent.AT_TARGET = 2; StdEvent.BUBBLING_PHASE = 3; // Not used but to be compatible -function StdEventableObject() { +function StdEventTarget() { + this.__events__ = []; + this.dispatchEvent = function(event) { event.target = this; event.isTrusted = false; event.eventPhase = StdEvent.AT_TARGET; event.currentTarget = event.target; - if(('on' + event.type) in this) this['on' + event.type](event); + for (var i = 0; i < this.__events__.length; i++) { + var e = this.__events__[i]; + if (e.type == event.type && typeof(e.listener) === "function") { + e.listener(event); + } + } }; - this.addEventListener = function(type, f) { + this.addEventListener = function(type, listener) { if (typeof f === "function") { - this['on' + type] = f; + this.__events__.push({ + "type": type, + "listener": listener, + "counter": StdEventTarget.__counter__ + }); + StdEventTarget.__counter__++; + } else { + throw new TypeError("EventListener must be a function"); + } + }; + + this.removeEventListener = function(type, listener) { + if (typeof f === "function") { + for (var i = 0; i < this.__events__.length; i++) { + var e = this.__events__[i]; + if (e.type == event.type && typeof(e.listener) === "function" && e.listener.toString() == listener.toString()) { + delete this.__events__[i]; + } + } } else { throw new TypeError("EventListener must be a function"); } }; }; +StdEventTarget.__counter__ = 0; function AsyncFunction(f, _filename) { this.f = f; @@ -424,12 +450,12 @@ global.splitLn = splitLn; global.addslashes = addslashes; global.AsyncFunction = AsyncFunction; -exports.VERSIONINFO = "Standard Library (std.js) version 0.7"; +exports.VERSIONINFO = "Standard Library (std.js) version 0.7.1"; exports.global = global; exports.require = global.require; exports.Event = StdEvent; -exports.EventableObject = StdEventableObject; +exports.EventTarget = StdEventTarget; exports.alert = alert; exports.cartesian = cartesian;