feat: #9992, hooks.one

isekai-main
Barış Soner Uşaklı 3 years ago
parent 0428912c6d
commit 96f13e4f5d

@ -4,6 +4,7 @@ define('hooks', [], () => {
const Hooks = {
loaded: {},
temporary: new Set(),
runOnce: new Set(),
deprecated: {
'action:script.load': 'filter:script.load', // 👋 @ 1.18.0
'action:category.loaded': 'action:topics.loaded', // 👋 @ 1.19.0
@ -32,6 +33,10 @@ define('hooks', [], () => {
console.debug(`[hooks] Registered ${hookName}`, method);
};
Hooks.on = Hooks.register;
Hooks.one = (hookName, method) => {
Hooks.register(hookName, method);
Hooks.runOnce.add({ hookName, method });
};
// registerPage/onPage takes care of unregistering the listener on ajaxify
Hooks.registerPage = (hookName, method) => {
@ -110,17 +115,27 @@ define('hooks', [], () => {
Hooks.fire = (hookName, data) => {
const type = hookName.split(':').shift();
let result;
switch (type) {
case 'filter':
return _fireFilterHook(hookName, data);
result = _fireFilterHook(hookName, data);
break;
case 'action':
return _fireActionHook(hookName, data);
result = _fireActionHook(hookName, data);
break;
case 'static':
return _fireStaticHook(hookName, data);
result = _fireStaticHook(hookName, data);
break;
}
Hooks.runOnce.forEach((pair) => {
if (pair.hookName === hookName) {
Hooks.unregister(hookName, pair.method);
Hooks.runOnce.delete(pair);
}
});
return result;
};
return Hooks;

Loading…
Cancel
Save