zjquery: Fix ‘this’ parameter of invoked handlers.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2020-07-20 22:32:54 -07:00
committed by Tim Abbott
parent 366cb30db1
commit af3a79ab31

View File

@@ -15,7 +15,7 @@ exports.make_event_store = (selector) => {
const on_functions = new Map(); const on_functions = new Map();
const child_on_functions = new Map(); const child_on_functions = new Map();
function generic_event(event_name, arg) { function generic_event($element, event_name, arg) {
if (typeof arg === "function") { if (typeof arg === "function") {
on_functions.set(event_name, arg); on_functions.set(event_name, arg);
} else { } else {
@@ -24,7 +24,7 @@ exports.make_event_store = (selector) => {
const error = "Cannot find " + event_name + " handler for " + selector; const error = "Cannot find " + event_name + " handler for " + selector;
throw Error(error); throw Error(error);
} }
handler(arg); handler.call($element, arg);
} }
} }
@@ -104,7 +104,7 @@ exports.make_event_store = (selector) => {
child_on.set(event_name, handler); child_on.set(event_name, handler);
}, },
trigger: function (ev) { trigger: function ($element, ev) {
const ev_name = typeof ev === "string" ? ev : ev.name; const ev_name = typeof ev === "string" ? ev : ev.name;
const func = on_functions.get(ev_name); const func = on_functions.get(ev_name);
@@ -117,7 +117,7 @@ exports.make_event_store = (selector) => {
return; return;
} }
func(ev.data); func.call($element, ev.data);
}, },
}; };
@@ -160,7 +160,7 @@ exports.make_new_elem = function (selector, opts) {
return self; return self;
}, },
click: function (arg) { click: function (arg) {
event_store.generic_event("click", arg); event_store.generic_event(self, "click", arg);
return self; return self;
}, },
data: function (name, val) { data: function (name, val) {
@@ -264,11 +264,11 @@ exports.make_new_elem = function (selector, opts) {
return focused; return focused;
}, },
keydown: function (arg) { keydown: function (arg) {
event_store.generic_event("keydown", arg); event_store.generic_event(self, "keydown", arg);
return self; return self;
}, },
keyup: function (arg) { keyup: function (arg) {
event_store.generic_event("keyup", arg); event_store.generic_event(self, "keyup", arg);
return self; return self;
}, },
off: function (...args) { off: function (...args) {
@@ -323,7 +323,7 @@ exports.make_new_elem = function (selector, opts) {
return self; return self;
}, },
select: function (arg) { select: function (arg) {
event_store.generic_event("select", arg); event_store.generic_event(self, "select", arg);
return self; return self;
}, },
set_find_results: function (find_selector, jquery_object) { set_find_results: function (find_selector, jquery_object) {
@@ -355,7 +355,7 @@ exports.make_new_elem = function (selector, opts) {
return text; return text;
}, },
trigger: function (ev) { trigger: function (ev) {
event_store.trigger(ev); event_store.trigger(self, ev);
return self; return self;
}, },
val: function (...args) { val: function (...args) {