diff --git a/demos/jeesh-module.js b/demos/jeesh-module.js
new file mode 100644
index 0000000..8e259ed
--- /dev/null
+++ b/demos/jeesh-module.js
@@ -0,0 +1 @@
+ender('li')
\ No newline at end of file
diff --git a/src/script.js b/src/script.js
index 075e4f4..2be5739 100644
--- a/src/script.js
+++ b/src/script.js
@@ -1,97 +1,156 @@
-!function(win, doc, timeout) {
+!function (win, doc) {
var head = doc.getElementsByTagName('head')[0],
- list = {}, ids = {}, delay = {},
- scripts = {}, s = 'string', f = false,
- push = 'push', domContentLoaded = 'DOMContentLoaded', readyState = 'readyState',
+ list = {}, ids = {}, delay = {}, scripts = {},
+ s = 'string', f = false, push = 'push', complete = /^c|loade/,
+ domContentLoaded = 'DOMContentLoaded', readyState = 'readyState',
addEventListener = 'addEventListener', onreadystatechange = 'onreadystatechange',
- every = function(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, function(el) {
- return !fn(el);
- });
- }
+ faux = doc.createElement('script'),
+ preloadExplicit = typeof faux.preload == 'boolean',
+ preloadReal = preloadExplicit || (faux[readyState] && faux[readyState] == 'uninitialized'),
+ async = !preloadReal && faux.async === true
if (!doc[readyState] && doc[addEventListener]) {
doc[addEventListener](domContentLoaded, function fn() {
doc.removeEventListener(domContentLoaded, fn, f);
- doc[readyState] = "complete";
+ doc[readyState] = 'complete';
}, f);
- doc[readyState] = "loading";
+ doc[readyState] = 'loading';
+ }
+
+ function timeout(fn) {
+ setTimeout(fn, 0)
+ }
+
+ function every(ar, fn, i) {
+ for (i = 0, j = ar.length; i < j; ++i) if (!fn(ar[i])) return f
+ return 1;
}
- var $script = function(paths, idOrDone, optDone) {
- paths = paths[push] ? paths : [paths];
+ function each(ar, fn) {
+ every(ar, function (el) { return !fn(el) })
+ }
+
+ function $script(paths, idOrDone, optDone) {
+ paths = paths[push] ? paths : [paths]
var idOrDoneIsDone = idOrDone && idOrDone.call,
+ workingPaths = paths.slice(0), loadedPaths = {},
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 (var dset in delay) {
- every(dset.split('|'), loopFn) && !each(delay[dset], loopFn) && (delay[dset] = []);
- }
- }
+ queue = paths.length
+
+ function loopFn(item) {
+ return item.call ? item() : list[item]
+ }
+
+ function callback() {
+ if (!--queue) {
+ list[id] = 1
+ done && done()
+ for (var dset in delay) {
+ every(dset.split('|'), loopFn) && !each(delay[dset], loopFn) && (delay[dset] = [])
}
- timeout(function() {
- each(paths, function(path) {
+ }
+ }
+
+ timeout(function () {
+ each(paths, function (path, p) {
+ p = $script.path ? $script.path + path + '.js' : path
if (scripts[path]) {
- id && (ids[id] = 1);
- callback();
- return;
+ ids[id] = id || f
+ return callback()
}
- scripts[path] = 1;
- id && (ids[id] = 1);
- create($script.path ?
- $script.path + path + '.js' :
- path, callback);
- });
- }, 0);
- return $script;
- };
+ scripts[path] = 1
+ ids[id] = id || f
+ !$script.order ? create(p, callback) : preload(p, function (el) {
+ if (async) return callback()
+ loadedPaths[p] = el || 1
+ if (el) {
+ if (workingPaths[0] == p) {
+ head.insertBefore(el, head.firstChild)
+ timeout(function () {
+ callback()
+ workingPaths.shift()
+ while (loadedPaths[workingPaths[0]]) {
+ head.insertBefore(loadedPaths[workingPaths[0]], head.firstChild)
+ timeout(callback)
+ workingPaths.shift()
+ }
+ })
+ }
+ return
+ }
+ workingPaths[0] == p && create(p, callback)
+ workingPaths.shift()
+ while (loadedPaths[workingPaths[0]]) {
+ create(workingPaths[0], callback)
+ workingPaths.shift()
+ }
+ })
+ })
+ })
+ return $script
+ }
+
+ function create(path, fn, type) {
+ var el = doc.createElement('script'), loaded = f
+ el.type = type || 'text/javascript'
+ el.async = !$script.order
+ el.onload = el[onreadystatechange] = function () {
+ if ((el[readyState] && !(complete.test(el[readyState]))) || loaded) return
+ el.onload = el[onreadystatechange] = null
+ loaded = 1
+ fn && fn()
+ }
+ el.src = path
+ head.insertBefore(el, head.firstChild)
+ }
+
+ function bind(fn) {
+ var a = Array.prototype.slice.call(arguments, 1)
+ return function () {
+ fn.apply(null, a)
+ }
+ }
- function create(path, fn) {
- var el = doc.createElement("script"),
- loaded = f;
- el.onload = el.onerror = el[onreadystatechange] = function () {
- if ((el[readyState] && !(/^c|loade/.test(el[readyState]))) || loaded) {
- return;
+ function preload(path, fn, el) {
+ if (preloadReal) {
+ el = doc.createElement('script')
+ el.type = 'text/javascript'
+ if (preloadExplicit) {
+ el.preload = true
+ el.onpreload = bind(fn, el)
+ } else {
+ el[onreadystatechange] = function () {
+ if (complete.test(el[readyState])) {
+ fn(el)
+ el[onreadystatechange] = null
+ }
+ }
}
- el.onload = el[onreadystatechange] = null;
- loaded = 1;
- fn();
- };
- el.async = 1;
- el.src = path;
- head.insertBefore(el, head.firstChild);
+ el.src = path // setting .src begins the preload
+ } else if (async) {
+ create(path, fn)
+ } else {
+ create(path, fn, 'text/cache-script')
+ }
}
- $script.get = create;
-
- $script.ready = function(deps, ready, req) {
- deps = deps[push] ? deps : [deps];
- var missing = [];
- !each(deps, function(dep) {
- list[dep] || missing[push](dep);
- }) && every(deps, function(dep) {
- return list[dep];
- }) ? ready() : !function(key) {
- delay[key] = delay[key] || [];
- delay[key][push](ready);
- req && req(missing);
- }(deps.join('|'));
- return $script;
+ $script.get = create
+ $script.order = true
+
+ $script.ready = function (deps, ready, req) {
+ deps = deps[push] ? deps : [deps]
+ var missing = []
+ !each(deps, function (dep) {
+ list[dep] || missing[push](dep)
+ }) && every(deps, function (dep) {
+ return list[dep]
+ }) ? ready() : !function (key) {
+ delay[key] = delay[key] || []
+ delay[key][push](ready)
+ req && req(missing)
+ }(deps.join('|'))
+ return $script
};
var old = win.$script;
@@ -100,8 +159,8 @@
return this;
};
- (typeof module !== 'undefined' && module.exports) ?
- (module.exports = $script) :
- (win['$script'] = $script);
+ typeof module !== 'undefined' && module.exports && (module.exports = $script)
+
+ win['$script'] = $script
-}(this, document, setTimeout);
+}(this, document);
diff --git a/tests/hugelibrary.js b/tests/hugelibrary.js
new file mode 100644
index 0000000..c0dd48d
--- /dev/null
+++ b/tests/hugelibrary.js
@@ -0,0 +1,144 @@
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();!function () {}();
+
+!function (context) {
+ var n = 2, i;
+ for (i = 0; i < 200; i++) {
+ n = n * n
+ }
+
+ context.LIBRARY = function () {
+ console.log('log some shit');
+ }
+
+}(this);
\ No newline at end of file
diff --git a/tests/plugin.js b/tests/plugin.js
new file mode 100644
index 0000000..561a27f
--- /dev/null
+++ b/tests/plugin.js
@@ -0,0 +1 @@
+LIBRARY()
\ No newline at end of file
diff --git a/tests/test.html b/tests/test.html
index 1417dc1..f5973ff 100644
--- a/tests/test.html
+++ b/tests/test.html
@@ -12,6 +12,7 @@