bkdotcom/PHPDebugConsole

View on GitHub
src/Debug/js_src/loadDeps.js

Summary

Maintainability
A
0 mins
Test Coverage
export default function loadDeps (deps) {
  var checkInterval
  var intervalCounter = 1
  deps.reverse()
  if (document.getElementsByTagName('body')[0].childElementCount === 1) {
    // output only contains debug
    // don't wait for interval to begin
    loadDepsDoer(deps)
  } else {
    loadDepsDoer(deps, true)
  }
  checkInterval = setInterval(function () {
    loadDepsDoer(deps, intervalCounter === 10)
    if (deps.length === 0) {
      clearInterval(checkInterval)
    } else if (intervalCounter === 20) {
      clearInterval(checkInterval)
    }
    intervalCounter++
  }, 500)
}

function addScript (src) {
  var firstScript = document.getElementsByTagName('script')[0]
  var jsNode = document.createElement('script')
  jsNode.src = src
  firstScript.parentNode.insertBefore(jsNode, firstScript)
}

function addStylesheet (src) {
  var link = document.createElement('link')
  link.type = 'text/css'
  link.rel = 'stylesheet'
  link.href = src
  document.head.appendChild(link)
}

function loadDepsDoer (deps, checkOnly) {
  var dep
  var i
  for (i = deps.length - 1; i >= 0; i--) {
    dep = deps[i]
    if (dep.check()) {
      // dependency exists
      onDepLoaded(dep)
      deps.splice(i, 1) // remove it
      continue
    } else if (dep.status !== 'loading' && !checkOnly) {
      dep.status = 'loading'
      addDep(dep)
    }
  }
}

function addDep (dep) {
  var type = dep.type || 'script'
  if (type === 'script') {
    addScript(dep.src)
  } else if (type === 'stylesheet') {
    addStylesheet(dep.src)
  }
}

function onDepLoaded (dep) {
  if (dep.onLoaded) {
    dep.onLoaded()
  }
}