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