mirror of https://github.com/requarks/wiki
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.6 KiB
69 lines
1.6 KiB
export default {
|
|
readyStates: [],
|
|
callbacks: [],
|
|
/**
|
|
* Check if event has been sent
|
|
*
|
|
* @param {String} evt Event name
|
|
* @returns {Boolean} True if fired
|
|
*/
|
|
isReady (evt) {
|
|
return this.readyStates.indexOf(evt) >= 0
|
|
},
|
|
/**
|
|
* Register a callback to be executed when event is sent
|
|
*
|
|
* @param {String} evt Event name to register to
|
|
* @param {Function} clb Callback function
|
|
* @param {Boolean} once If the callback should be called only once
|
|
*/
|
|
register (evt, clb, once) {
|
|
if (this.isReady(evt)) {
|
|
clb()
|
|
} else {
|
|
this.callbacks.push({
|
|
event: evt,
|
|
callback: clb,
|
|
once: false,
|
|
called: false
|
|
})
|
|
}
|
|
},
|
|
/**
|
|
* Register a callback to be executed only once when event is sent
|
|
*
|
|
* @param {String} evt Event name to register to
|
|
* @param {Function} clb Callback function
|
|
*/
|
|
registerOnce (evt, clb) {
|
|
this.register(evt, clb, true)
|
|
},
|
|
/**
|
|
* Set ready state and execute callbacks
|
|
*/
|
|
notify (evt) {
|
|
this.readyStates.push(evt)
|
|
this.callbacks.forEach(clb => {
|
|
if (clb.event === evt) {
|
|
if (clb.once && clb.called) {
|
|
return
|
|
}
|
|
clb.called = true
|
|
clb.callback()
|
|
}
|
|
})
|
|
},
|
|
/**
|
|
* Execute callback on DOM ready
|
|
*
|
|
* @param {Function} clb Callback function
|
|
*/
|
|
onDOMReady (clb) {
|
|
if (document.readyState === 'interactive' || document.readyState === 'complete' || document.readyState === 'loaded') {
|
|
clb()
|
|
} else {
|
|
document.addEventListener('DOMContentLoaded', clb)
|
|
}
|
|
}
|
|
}
|