59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
(function() {
|
|
'use strict';
|
|
|
|
window.utils = window.utils || {};
|
|
|
|
var registeredSetupListeners = {};
|
|
|
|
window.utils.setup = function(utilType, scope, options) {
|
|
|
|
if (!utilType || !scope) {
|
|
return;
|
|
}
|
|
|
|
options = options || {};
|
|
|
|
var listener = function(event) {
|
|
|
|
if (event.detail.targetUtil !== utilType) {
|
|
return false;
|
|
}
|
|
|
|
if (options.setupFunction) {
|
|
options.setupFunction(scope, options);
|
|
} else {
|
|
var util = window.utils[utilType];
|
|
if (!util) {
|
|
throw new Error('"' + utilType + '" is not a known js util');
|
|
}
|
|
|
|
util(scope, options);
|
|
}
|
|
};
|
|
|
|
if (registeredSetupListeners[utilType] && !options.singleton) {
|
|
registeredSetupListeners[utilType].push(listener);
|
|
} else {
|
|
window.utils.teardown(utilType);
|
|
registeredSetupListeners[utilType] = [ listener ];
|
|
}
|
|
|
|
document.addEventListener('setup', listener);
|
|
|
|
document.dispatchEvent(new CustomEvent('setup', {
|
|
detail: { targetUtil: utilType, module: 'none' },
|
|
bubbles: true,
|
|
cancelable: true,
|
|
}));
|
|
};
|
|
|
|
window.utils.teardown = function(utilType) {
|
|
if (registeredSetupListeners[utilType]) {
|
|
registeredSetupListeners[utilType].forEach(function(listener) {
|
|
document.removeEventListener('setup', listener);
|
|
});
|
|
delete registeredSetupListeners[utilType];
|
|
}
|
|
}
|
|
})();
|