This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/lib/app-events.js.es6
2019-03-20 14:43:25 +01:00

49 lines
1.3 KiB
JavaScript

import deprecated from "discourse-common/lib/deprecated";
export default Ember.Object.extend(Ember.Evented, {
_events: {},
on() {
if (arguments.length === 2) {
let [name, fn] = arguments;
let target = {};
this._events[name] = this._events[name] || [];
this._events[name].push({ target, fn });
this._super(name, target, fn);
} else if (arguments.length === 3) {
let [name, target, fn] = arguments;
this._events[name] = this._events[name] || [];
this._events[name].push({ target, fn });
this._super(...arguments);
}
return this;
},
off() {
let name = arguments[0];
let fn = arguments[2];
if (this._events[name]) {
if (arguments.length === 1) {
deprecated(
"Removing all event listeners at once is deprecated, please remove each listener individually."
);
this._events[name].forEach(ref => {
this._super(name, ref.target, ref.fn);
});
delete this._events[name];
} else if (arguments.length === 3) {
this._super(...arguments);
this._events[name] = this._events[name].filter(e => e.fn !== fn);
if (this._events[name].length === 0) delete this._events[name];
}
}
return this;
}
});