feature(events) add ability to remove all added listeners

This commit is contained in:
coderaiser 2018-09-10 14:41:52 +03:00
parent a7ac83cbd3
commit 537c303a18
4 changed files with 76 additions and 4 deletions

View file

@ -48,13 +48,13 @@ function getPrefix(prefix) {
const onUpdateFound = wraptile(async (config) => {
const {prefix} = config;
const js = promisify(window.DOM.load.js);
const css = promisify(window.DOM.load.css);
const {DOM} = window;
const js = promisify(DOM.load.js);
await js(`${prefix}dist/cloudcmd.common.js`);
await js(`${prefix}dist/cloudcmd.js`);
DOM.Events.removeAll();
window.CloudCmd(config);
});

View file

@ -0,0 +1,20 @@
'use strict';
let list = [];
module.exports.add = (el, name, fn) => {
list.push([
el,
name,
fn,
]);
};
module.exports.clear = () => {
list = [];
};
module.exports.get = () => {
return list;
};

View file

@ -0,0 +1,34 @@
'use strict';
const test = require('tape');
const eventStore = require('./event-store');
test('event-store: get', (t) => {
const el = {};
const name = 'click';
const fn = () => {};
eventStore.add(el, name, fn);
const result = eventStore.get();
const expected = [
[el, name, fn],
];
t.deepEqual(expected, result, 'should equal');
t.end();
});
test('event-store: clear', (t) => {
const el = {};
const name = 'click';
const fn = () => {};
eventStore.add(el, name, fn);
eventStore.clear();
const result = eventStore.get();
const expected = [];
t.deepEqual(expected, result, 'should equal');
t.end();
});

View file

@ -1,6 +1,7 @@
'use strict';
const itype = require('itype/legacy');
const EventStore = require('./event-store');
module.exports = new EventsProto();
@ -98,7 +99,10 @@ function EventsProto() {
checkType(type);
parseArgs(type, element, listener, (element, args) => {
element.addEventListener.apply(element, args);
const [name, fn, options] = args;
element.addEventListener(name, fn, options);
EventStore.add(element, name, fn);
});
return Events;
@ -144,6 +148,20 @@ function EventsProto() {
return Events;
};
/**
* remove all added event listeners
*
* @param listener
*/
this.removeAll = () => {
const events = EventStore.get();
for (const [el, name, fn] of events)
el.removeEventListener(name, fn);
EventStore.clear();
};
/**
* safe add event keydown listener
*