Sha256: b381780a7054e761acbcecf89cd43c498f370f92914f73aafe8dbdd139448daa

Contents?: true

Size: 1.66 KB

Versions: 7

Compression:

Stored size: 1.66 KB

Contents

((window, document) -> (
  window.__required ||= {}

  _onload = (id) ->
    return if typeof(__required[id]) is 'undefined' || __required[id].loaded

    __required[id].loaded = true
    callbacks = __required[id].callbacks
    return unless Array.isArray(callbacks)

    while callbacks.length > 0
      callback = callbacks.shift()
      callback.call(window) if typeof(callback) is 'function'

  _buildSubscriptions = (id, node) ->
    data = __required[id]
    return if data.loaded
    data.callbacks ||= []

    callback = node.onload
    node.onload = -> _onload(id)
    node.addEventListener('load', -> _onload(id)) if typeof(node.addEventListener) is 'function'
    node.attachEvent('load', -> _onload(id)) if typeof(node.attachEvent) is 'function'

    data.callbacks.push(callback) if typeof(callback) is 'function'

  _subscribe = (id, callback) ->
    return if typeof(__required[id]) is 'undefined'

    data = __required[id]
    return setTimeout(callback, 0) if data.loaded

    data.callbacks.push(callback) if typeof(callback) is 'function'

  window.miniRequire ||= (key, source_url, callback = undefined) ->
    id = "source_#{key.replace(/[^a-z0-9_\-]+/ig, '_')}"

    # subscribe only if already attached
    return _subscribe(id, callback) if __required[id]?

    __required[id] = {loaded: false, callbacks: []}
    # subscribe only if no source
    return _subscribe(id, callback) unless source_url?

    # attach script
    src = document.createElement('script')
    src.id = id
    src.async = true
    src.defer = true
    src.src = source_url
    _buildSubscriptions(id, src)
    _subscribe(id, callback)

    document.body.appendChild(src)
    true
))(window, document)

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
izi_lightup-1.0.5 app/assets/javascripts/crit-utils/mini_require.js.coffee
izi_lightup-1.0.4 app/assets/javascripts/crit-utils/mini_require.js.coffee
izi_lightup-1.0.3 app/assets/javascripts/crit-utils/mini_require.js.coffee
izi_lightup-1.0.2 app/assets/javascripts/crit-utils/mini_require.js.coffee
izi_lightup-1.0.1 app/assets/javascripts/crit-utils/mini_require.js.coffee
izi_lightup-1.0.0 app/assets/javascripts/crit-utils/mini_require.js.coffee
izi_lightup-0.0.0.1 app/assets/javascripts/crit-utils/mini_require.js.coffee