Published
Edited
Mar 27, 2020
Importers
Insert cell
md`# hooks`
Insert cell
hookMap = new Map()
Insert cell
function addHook(name, func, context) {
const hooks = hookMap.get(name) || [];

const alreadyRegistered = hooks.some(hook => hook.func === func);

if (alreadyRegistered)
throw new Error('That function is already registered.');

hooks.push({
func: func,
context: context
});
hookMap.set(name, hooks);
}
Insert cell
function callHook(name) {
const hooks = hookMap.get(name) || [];
const result = [].slice.apply(arguments, [1]);
let processed;

if (hooks) {
hooks.forEach(function(hook) {
if (hook.func) {
let params = processed || result;

if (params && params.constructor !== Array) {
params = [params];
}

params = [].concat.apply([], params);
processed = hook.func.apply(hook.context, params);
}
});
}

return processed || result;
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more