add documentation to js util »setup«

This commit is contained in:
Felix Hamann 2019-02-19 23:26:24 +01:00
parent b65b44bf8a
commit 99394bf166

View File

@ -5,9 +5,16 @@
var registeredSetupListeners = {}; var registeredSetupListeners = {};
window.utils.setup = function(utilType, scope, options) { /**
* setup function to initiate a util (utilName) on a scope (sope) with options (options).
*
* A util has to define an itself at `window.utils` as shown for the `autoSubmit` util:
* `window.utils.autoSubmit = function(wrapper, options) { ... };`
*/
if (!utilType || !scope) { window.utils.setup = function(utilName, scope, options) {
if (!utilName || !scope) {
return; return;
} }
@ -15,44 +22,44 @@
var listener = function(event) { var listener = function(event) {
if (event.detail.targetUtil !== utilType) { if (event.detail.targetUtil !== utilName) {
return false; return false;
} }
if (options.setupFunction) { if (options.setupFunction) {
options.setupFunction(scope, options); options.setupFunction(scope, options);
} else { } else {
var util = window.utils[utilType]; var util = window.utils[utilName];
if (!util) { if (!util) {
throw new Error('"' + utilType + '" is not a known js util'); throw new Error('"' + utilName + '" is not a known js util');
} }
util(scope, options); util(scope, options);
} }
}; };
if (registeredSetupListeners[utilType] && !options.singleton) { if (registeredSetupListeners[utilName] && !options.singleton) {
registeredSetupListeners[utilType].push(listener); registeredSetupListeners[utilName].push(listener);
} else { } else {
window.utils.teardown(utilType); window.utils.teardown(utilName);
registeredSetupListeners[utilType] = [ listener ]; registeredSetupListeners[utilName] = [ listener ];
} }
document.addEventListener('setup', listener); document.addEventListener('setup', listener);
document.dispatchEvent(new CustomEvent('setup', { document.dispatchEvent(new CustomEvent('setup', {
detail: { targetUtil: utilType, module: 'none' }, detail: { targetUtil: utilName, module: 'none' },
bubbles: true, bubbles: true,
cancelable: true, cancelable: true,
})); }));
}; };
window.utils.teardown = function(utilType) { window.utils.teardown = function(utilName) {
if (registeredSetupListeners[utilType]) { if (registeredSetupListeners[utilName]) {
registeredSetupListeners[utilType].forEach(function(listener) { registeredSetupListeners[utilName].forEach(function(listener) {
document.removeEventListener('setup', listener); document.removeEventListener('setup', listener);
}); });
delete registeredSetupListeners[utilType]; delete registeredSetupListeners[utilName];
} }
} }
})(); })();