-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathBootstrapDialog.js
More file actions
47 lines (43 loc) · 1.2 KB
/
BootstrapDialog.js
File metadata and controls
47 lines (43 loc) · 1.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import eventManager from 'src/utils/eventManager.js';
import wrap from 'src/utils/2.pokemon.js';
import { window } from 'src/utils/1.variables.js';
function setter(key, args) {
const original = args[`on${key}`];
function wrapper(dialog) {
let ret;
if (typeof original === 'function') {
ret = wrap(() => original(dialog), `BootstrapDialog:on${key}`);
}
eventManager.emit(`BootstrapDialog:${key}`, dialog);
return ret;
}
return wrapper;
}
function construct(Target, [args = {}]) {
const obj = new Target({
...args,
onshow: setter('show', args),
onshown: setter('shown', args),
onhide: setter('hide', args),
onhidden: setter('hidden', args),
});
eventManager.emit('BootstrapDialog:create', obj);
return obj;
}
function get(target, prop, R) {
if (prop === 'show') {
return (o = {}) => {
const ret = new R(o);
if (eventManager.cancelable.emit('BootstrapDialog:preshow', ret).canceled) {
return ret;
}
return ret.open();
};
}
return Reflect.get(target, prop, R);
}
eventManager.on(':preload', () => {
if (window.BootstrapDialog) {
window.BootstrapDialog = new Proxy(window.BootstrapDialog, { construct, get });
}
});