/* OnBlur Manager Class */ export class OnBlurManager{ /* (1) Initialize an OnBlurManager * * @root The root element to work in * ---------------------------------------------------------*/ constructor(root){ /* (1) Error: invalid @root argument */ if( !(root instanceof Element) ) throw new Error(`[OnBlurManager::new] expected argument to be of type (Element), received (${typeof root})`); /* (2) Store as attribute */ this.root = root; /* (3) Initialize @callback list */ this.callback = {}; /* (4) Bind to event */ this.root.addEventListener('click', function(e){ // launch each callback for( var c of Object.keys(this.callback) ) this.callback[c](e); }.bind(this) ); } /* (2) Add a @callback * * @index String to name the callback for removing * @callback Function to link to callback * * @return linked Whether the callback has been linked * ---------------------------------------------------------*/ link(index, callback){ /* (1) Fail: invalid @index or @callback arguments */ if( typeof index !== 'string' || !(callback instanceof Function) ){ console.error(`[OnBlurManager::link] expected (String, Function), received (${typeof index}, ${typeof callback})`); return false; } /* (2) Add to list of callbacks */ return ( this.callback[index] = callback ) instanceof Function; } /* (3) Unlink a @callback * * @index Name of the callback to remove * * @return unlinked Whether the callback has been unlinked * ---------------------------------------------------------*/ unlink(index, callback){ /* (1) Fail: invalid @index argument */ if( typeof index !== 'string' ){ console.error(`[OnBlurManager::unlink] expected (String), received (${typeof index})`); return false; } /* (2) Remove from list of callbacks */ return ( delete this.callback[index] ); } }