| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | 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)    }  }}
 |