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 onUpdateFound = wraptile(async (config) => {
|
||||||
const {prefix} = config;
|
const {prefix} = config;
|
||||||
|
const {DOM} = window;
|
||||||
const js = promisify(window.DOM.load.js);
|
const js = promisify(DOM.load.js);
|
||||||
const css = promisify(window.DOM.load.css);
|
|
||||||
|
|
||||||
await js(`${prefix}dist/cloudcmd.common.js`);
|
await js(`${prefix}dist/cloudcmd.common.js`);
|
||||||
await js(`${prefix}dist/cloudcmd.js`);
|
await js(`${prefix}dist/cloudcmd.js`);
|
||||||
|
|
||||||
|
DOM.Events.removeAll();
|
||||||
window.CloudCmd(config);
|
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';
|
'use strict';
|
||||||
|
|
||||||
const itype = require('itype/legacy');
|
const itype = require('itype/legacy');
|
||||||
|
const EventStore = require('./event-store');
|
||||||
|
|
||||||
module.exports = new EventsProto();
|
module.exports = new EventsProto();
|
||||||
|
|
||||||
|
|
@ -98,7 +99,10 @@ function EventsProto() {
|
||||||
checkType(type);
|
checkType(type);
|
||||||
|
|
||||||
parseArgs(type, element, listener, (element, args) => {
|
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;
|
return Events;
|
||||||
|
|
@ -144,6 +148,20 @@ function EventsProto() {
|
||||||
return Events;
|
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
|
* safe add event keydown listener
|
||||||
*
|
*
|
||||||
Loading…
Add table
Add a link
Reference in a new issue