mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 02:35:49 +00:00
feature(events) add ability to remove all added listeners
This commit is contained in:
parent
a7ac83cbd3
commit
537c303a18
4 changed files with 76 additions and 4 deletions
|
|
@ -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);
|
||||
});
|
||||
|
||||
|
|
|
|||
20
client/dom/events/event-store.js
Normal file
20
client/dom/events/event-store.js
Normal 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;
|
||||
};
|
||||
|
||||
34
client/dom/events/event-store.spec.js
Normal file
34
client/dom/events/event-store.spec.js
Normal 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();
|
||||
});
|
||||
|
|
@ -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
|
||||
*
|
||||
Loading…
Add table
Add a link
Reference in a new issue