Skip to content

Commit

Permalink
refactor: deprecate action:script.load, use filter:script.load instead
Browse files Browse the repository at this point in the history
  • Loading branch information
julianlam committed Mar 15, 2021
1 parent 6a354db commit d168560
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 42 deletions.
87 changes: 45 additions & 42 deletions public/src/ajaxify.js
Original file line number Diff line number Diff line change
Expand Up @@ -320,53 +320,56 @@ ajaxify = window.ajaxify || {};
};

ajaxify.loadScript = function (tpl_url, callback) {
var location = !app.inAdmin ? 'forum/' : '';
require(['hooks'], (hooks) => {
var location = !app.inAdmin ? 'forum/' : '';

if (tpl_url.startsWith('admin')) {
location = '';
}
var data = {
tpl_url: tpl_url,
scripts: [location + tpl_url],
};

// Hint: useful if you want to load a module on a specific page (append module name to `scripts`)
$(window).trigger('action:script.load', data);
if (tpl_url.startsWith('admin')) {
location = '';
}
const data = {
tpl_url: tpl_url,
scripts: [location + tpl_url],
};

// Require and parse modules
var outstanding = data.scripts.length;
// Hint: useful if you want to load a module on a specific page (append module name to `scripts`)
hooks.fire('action:script.load', data);
hooks.fire('filter:script.load', data).then((data) => {
// Require and parse modules
var outstanding = data.scripts.length;

data.scripts.map(function (script) {
if (typeof script === 'function') {
return function (next) {
script();
next();
};
}
if (typeof script === 'string') {
return function (next) {
require(['hooks', script], function (hooks, module) {
// Hint: useful if you want to override a loaded library (e.g. replace core client-side logic),
// or call a method other than .init()
hooks.fire('static:script.init', { tpl_url, name: script, module }).then(() => {
if (module && module.init) {
module.init();
}
data.scripts.map(function (script) {
if (typeof script === 'function') {
return function (next) {
script();
next();
});
}, function () {
// ignore 404 error
next();
};
}
if (typeof script === 'string') {
return function (next) {
require([script], function (module) {
// Hint: useful if you want to override a loaded library (e.g. replace core client-side logic),
// or call a method other than .init()
hooks.fire('static:script.init', { tpl_url, name: script, module }).then(() => {
if (module && module.init) {
module.init();
}
next();
});
}, function () {
// ignore 404 error
next();
});
};
}
return null;
}).filter(Boolean).forEach(function (fn) {
fn(function () {
outstanding -= 1;
if (outstanding === 0) {
callback();
}
});
};
}
return null;
}).filter(Boolean).forEach(function (fn) {
fn(function () {
outstanding -= 1;
if (outstanding === 0) {
callback();
}
});
});
});
};
Expand Down
17 changes: 17 additions & 0 deletions public/src/modules/hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,28 @@ define('hooks', [], () => {
const Hooks = {
loaded: {},
temporary: new Set(),
deprecated: {
'action:script.load': 'filter:script.load', // 👋 @ 1.18.0
},
};

Hooks.register = (hookName, method) => {
Hooks.loaded[hookName] = Hooks.loaded[hookName] || new Set();
Hooks.loaded[hookName].add(method);

if (Hooks.deprecated.hasOwnProperty(hookName)) {
const deprecated = Hooks.deprecated[hookName];

if (deprecated) {
console.groupCollapsed(`[hooks] Hook "${hookName}" is deprecated, please use "${deprecated}" instead.`);
} else {
console.groupCollapsed(`[hooks] Hook "${hookName}" is deprecated, there is no alternative.`);
}

console.info(method);
console.groupEnd();
}

console.debug(`[hooks] Registered ${hookName}`, method);
};
Hooks.on = Hooks.register;
Expand Down

0 comments on commit d168560

Please sign in to comment.