UNPKG

multimediaobject

Version:
120 lines (108 loc) 3.21 kB
/* eslint-disable */ /*! * $script.js JS loader & dependency manager * https://github.com/ded/script.js * (c) Dustin Diaz 2014 | License MIT */ let doc = document, head = doc.getElementsByTagName('head')[0], s = 'string', f = false, push = 'push', readyState = 'readyState', onreadystatechange = 'onreadystatechange', list = {}, ids = {}, delay = {}, scripts = {}, scriptpath, urlArgs; function every(ar, fn) { for (var i = 0, j = ar.length; i < j; ++i) if (!fn(ar[i])) return f; return 1; } function each(ar, fn) { every(ar, (el) => { fn(el); return 1; }); } const $script = function $script(paths, idOrDone, optDone) { paths = paths[push] ? paths : [paths]; let idOrDoneIsDone = idOrDone && idOrDone.call, done = idOrDoneIsDone ? idOrDone : optDone, id = idOrDoneIsDone ? paths.join('') : idOrDone, queue = paths.length; function loopFn(item) { return item.call ? item() : list[item]; } function callback() { if (!--queue) { list[id] = 1; done && done(); for (const dset in delay) { every(dset.split('|'), loopFn) && !each(delay[dset], loopFn) && (delay[dset] = []); } } } setTimeout(() => { each(paths, function loading(path, force) { if (path === null) return callback(); if (!force && !/^https?:\/\//.test(path) && scriptpath) { path = (path.indexOf('.js') === -1) ? `${scriptpath + path}.js` : scriptpath + path; } if (scripts[path]) { if (id) ids[id] = 1; return (scripts[path] == 2) ? callback() : setTimeout(() => { loading(path, true); }, 0); } scripts[path] = 1; if (id) ids[id] = 1; create(path, callback); }); }, 0); return $script; } function create(path, fn) { let el = doc.createElement('script'), loaded; el.onload = el.onerror = el[onreadystatechange] = function () { if ((el[readyState] && !(/^c|loade/.test(el[readyState]))) || loaded) return; el.onload = el[onreadystatechange] = null; loaded = 1; scripts[path] = 2; fn(); }; el.async = 1; el.src = urlArgs ? path + (path.indexOf('?') === -1 ? '?' : '&') + urlArgs : path; head.insertBefore(el, head.lastChild); } $script.get = create; $script.order = function (scripts, id, done) { (function callback(s) { s = scripts.shift(); !scripts.length ? $script(s, id, done) : $script(s, callback); }()); }; $script.path = function (p) { scriptpath = p; }; $script.urlArgs = function (str) { urlArgs = str; }; $script.ready = function (deps, ready, req) { deps = deps[push] ? deps : [deps]; const missing = []; !each(deps, (dep) => { list[dep] || missing[push](dep); }) && every(deps, dep => list[dep]) ? ready() : !(function (key) { delay[key] = delay[key] || []; delay[key][push](ready); req && req(missing); }(deps.join('|'))); return $script; }; $script.done = function (idOrDone) { $script([null], idOrDone); }; export default $script;