mirror of
https://github.com/wahyd4/cdnjs.git
synced 2026-08-15 07:46:06 +10:00
added non minified debug versions & source maps for minified versions
This commit is contained in:
@@ -0,0 +1,301 @@
|
||||
///#source 1 1 ../src/core.js
|
||||
/*!
|
||||
* HeadJS The only script in your <HEAD>
|
||||
* Author Tero Piirainen (tipiirai)
|
||||
* Maintainer Robert Hoffmann (itechnology)
|
||||
* License MIT / http://bit.ly/mit-license
|
||||
*
|
||||
* Version 0.99
|
||||
* http://headjs.com
|
||||
*/
|
||||
; (function (win, undefined) {
|
||||
"use strict";
|
||||
|
||||
// gt, gte, lt, lte, eq breakpoints would have been more simple to write as ['gt','gte','lt','lte','eq']
|
||||
// but then we would have had to loop over the collection on each resize() event,
|
||||
// a simple object with a direct access to true/false is therefore much more efficient
|
||||
var doc = win.document,
|
||||
nav = win.navigator,
|
||||
loc = win.location,
|
||||
html = doc.documentElement,
|
||||
klass = [],
|
||||
conf = {
|
||||
screens : [240, 320, 480, 640, 768, 800, 1024, 1280, 1440, 1680, 1920],
|
||||
screensCss: { "gt": true, "gte": false, "lt": true, "lte": false, "eq": false },
|
||||
browsers : [
|
||||
{ ie : { min: 6, max: 11 } }
|
||||
//,{ chrome : { min: 8, max: 29 } }
|
||||
//,{ ff : { min: 3, max: 24 } }
|
||||
//,{ ios : { min: 3, max: 6 } }
|
||||
//,{ android: { min: 2, max: 4 } }
|
||||
//,{ webkit : { min: 9, max: 12 } }
|
||||
//,{ opera : { min: 9, max: 12 } }
|
||||
],
|
||||
browserCss: { "gt": true, "gte": false, "lt": true, "lte": false, "eq": true },
|
||||
section : "-section",
|
||||
page : "-page",
|
||||
head : "head"
|
||||
};
|
||||
|
||||
if (win.head_conf) {
|
||||
for (var item in win.head_conf) {
|
||||
if (win.head_conf[item] !== undefined) {
|
||||
conf[item] = win.head_conf[item];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function pushClass(name) {
|
||||
klass[klass.length] = name;
|
||||
}
|
||||
|
||||
function removeClass(name) {
|
||||
var re = new RegExp(" \\b" + name + "\\b");
|
||||
html.className = html.className.replace(re, '');
|
||||
}
|
||||
|
||||
function each(arr, fn) {
|
||||
for (var i = 0, l = arr.length; i < l; i++) {
|
||||
fn.call(arr, arr[i], i);
|
||||
}
|
||||
}
|
||||
|
||||
// API
|
||||
var api = win[conf.head] = function () {
|
||||
api.ready.apply(null, arguments);
|
||||
};
|
||||
|
||||
api.feature = function (key, enabled, queue) {
|
||||
|
||||
// internal: apply all classes
|
||||
if (!key) {
|
||||
html.className += ' ' + klass.join(' ');
|
||||
klass = [];
|
||||
return api;
|
||||
}
|
||||
|
||||
if (Object.prototype.toString.call(enabled) === '[object Function]') {
|
||||
enabled = enabled.call();
|
||||
}
|
||||
|
||||
pushClass((enabled ? '' : 'no-') + key);
|
||||
api[key] = !!enabled;
|
||||
|
||||
// apply class to HTML element
|
||||
if (!queue) {
|
||||
removeClass('no-' + key);
|
||||
removeClass(key);
|
||||
api.feature();
|
||||
}
|
||||
|
||||
return api;
|
||||
};
|
||||
|
||||
// no queue here, so we can remove any eventual pre-existing no-js class
|
||||
api.feature("js", true);
|
||||
|
||||
// browser type & version
|
||||
var ua = nav.userAgent.toLowerCase(),
|
||||
mobile = /mobile|android|kindle|silk|midp|(windows nt 6\.2.+arm|touch)/.test(ua);
|
||||
|
||||
// useful for enabling/disabling feature (we can consider a desktop navigator to have more cpu/gpu power)
|
||||
api.feature("mobile" , mobile , true);
|
||||
api.feature("desktop", !mobile, true);
|
||||
|
||||
// http://www.zytrax.com/tech/web/browser_ids.htm
|
||||
// http://www.zytrax.com/tech/web/mobile_ids.html
|
||||
ua = /(chrome|firefox)[ \/]([\w.]+)/.exec(ua) || // Chrome & Firefox
|
||||
/(iphone|ipad|ipod)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || // Mobile IOS
|
||||
/(android)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || // Mobile Webkit
|
||||
/(webkit|opera)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || // Safari & Opera
|
||||
/(msie) ([\w.]+)/.exec(ua) || [];
|
||||
|
||||
|
||||
var browser = ua[1],
|
||||
version = parseFloat(ua[2]);
|
||||
|
||||
switch (browser) {
|
||||
case 'msie':
|
||||
browser = 'ie';
|
||||
version = doc.documentMode || version;
|
||||
break;
|
||||
|
||||
case 'firefox':
|
||||
browser = 'ff';
|
||||
break;
|
||||
|
||||
case 'ipod':
|
||||
case 'ipad':
|
||||
case 'iphone':
|
||||
browser = 'ios';
|
||||
break;
|
||||
|
||||
case 'webkit':
|
||||
browser = 'safari';
|
||||
break;
|
||||
}
|
||||
|
||||
// Browser vendor and version
|
||||
api.browser = {
|
||||
name : browser,
|
||||
version: version
|
||||
};
|
||||
api.browser[browser] = true;
|
||||
|
||||
for (var i = 0, l = conf.browsers.length; i < l; i++) {
|
||||
for (var key in conf.browsers[i]) {
|
||||
if (browser === key) {
|
||||
pushClass(key);
|
||||
|
||||
var min = conf.browsers[i][key].min;
|
||||
var max = conf.browsers[i][key].max;
|
||||
|
||||
for (var v = min; v <= max; v++) {
|
||||
if (version > v) {
|
||||
if (conf.browserCss.gt)
|
||||
pushClass("gt-" + key + v);
|
||||
|
||||
if (conf.browserCss.gte)
|
||||
pushClass("gte-" + key + v);
|
||||
}
|
||||
|
||||
else if (version < v) {
|
||||
if (conf.browserCss.lt)
|
||||
pushClass("lt-" + key + v);
|
||||
|
||||
if (conf.browserCss.lte)
|
||||
pushClass("lte-" + key + v);
|
||||
}
|
||||
|
||||
else if (version === v) {
|
||||
if (conf.browserCss.lte)
|
||||
pushClass("lte-" + key + v);
|
||||
|
||||
if (conf.browserCss.eq)
|
||||
pushClass("eq-" + key + v);
|
||||
|
||||
if (conf.browserCss.gte)
|
||||
pushClass("gte-" + key + v);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
pushClass('no-' + key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pushClass(browser);
|
||||
pushClass(browser + parseInt(version, 10));
|
||||
|
||||
// IE lt9 specific
|
||||
if (browser === "ie" && version < 9) {
|
||||
// HTML5 support : you still need to add html5 css initialization styles to your site
|
||||
// See: assets/html5.css
|
||||
each("abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|progress|section|summary|time|video".split("|"), function (el) {
|
||||
doc.createElement(el);
|
||||
});
|
||||
}
|
||||
|
||||
// CSS "router"
|
||||
each(loc.pathname.split("/"), function (el, i) {
|
||||
if (this.length > 2 && this[i + 1] !== undefined) {
|
||||
if (i) {
|
||||
pushClass(this.slice(i, i + 1).join("-").toLowerCase() + conf.section);
|
||||
}
|
||||
} else {
|
||||
// pageId
|
||||
var id = el || "index", index = id.indexOf(".");
|
||||
if (index > 0) {
|
||||
id = id.substring(0, index);
|
||||
}
|
||||
|
||||
html.id = id.toLowerCase() + conf.page;
|
||||
|
||||
// on root?
|
||||
if (!i) {
|
||||
pushClass("root" + conf.section);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// basic screen info
|
||||
api.screen = {
|
||||
height: win.screen.height,
|
||||
width : win.screen.width
|
||||
};
|
||||
|
||||
// viewport resolutions: w-100, lt-480, lt-1024 ...
|
||||
function screenSize() {
|
||||
// remove earlier sizes
|
||||
html.className = html.className.replace(/ (w-|eq-|gt-|gte-|lt-|lte-|portrait|no-portrait|landscape|no-landscape)\d+/g, "");
|
||||
|
||||
// Viewport width
|
||||
var iw = win.innerWidth || html.clientWidth,
|
||||
ow = win.outerWidth || win.screen.width;
|
||||
|
||||
api.screen.innerWidth = iw;
|
||||
api.screen.outerWidth = ow;
|
||||
|
||||
// for debugging purposes, not really useful for anything else
|
||||
pushClass("w-" + iw);
|
||||
|
||||
each(conf.screens, function (width) {
|
||||
if (iw > width) {
|
||||
if (conf.screensCss.gt)
|
||||
pushClass("gt-" + width);
|
||||
|
||||
if (conf.screensCss.gte)
|
||||
pushClass("gte-" + width);
|
||||
}
|
||||
|
||||
else if (iw < width) {
|
||||
if (conf.screensCss.lt)
|
||||
pushClass("lt-" + width);
|
||||
|
||||
if (conf.screensCss.lte)
|
||||
pushClass("lte-" + width);
|
||||
}
|
||||
|
||||
else if (iw === width) {
|
||||
if (conf.screensCss.lte)
|
||||
pushClass("lte-" + width);
|
||||
|
||||
if (conf.screensCss.eq)
|
||||
pushClass("e-q" + width);
|
||||
|
||||
if (conf.screensCss.gte)
|
||||
pushClass("gte-" + width);
|
||||
}
|
||||
});
|
||||
|
||||
// Viewport height
|
||||
var ih = win.innerHeight || html.clientHeight,
|
||||
oh = win.outerHeight || win.screen.height;
|
||||
|
||||
api.screen.innerHeight = ih;
|
||||
api.screen.outerHeight = oh;
|
||||
|
||||
// no need for onChange event to detect this
|
||||
api.feature("portrait" , (ih > iw));
|
||||
api.feature("landscape", (ih < iw));
|
||||
}
|
||||
|
||||
screenSize();
|
||||
|
||||
// Throttle navigators from triggering too many resize events
|
||||
var resizeId = 0;
|
||||
function onResize() {
|
||||
win.clearTimeout(resizeId);
|
||||
resizeId = win.setTimeout(screenSize, 50);
|
||||
}
|
||||
|
||||
// Manually attach, as to not overwrite existing handler
|
||||
if (win.addEventListener) {
|
||||
win.addEventListener("resize", onResize, false);
|
||||
|
||||
} else {
|
||||
win.attachEvent("onresize", onResize);
|
||||
}
|
||||
})(window);
|
||||
|
||||
+2
-6
@@ -1,6 +1,2 @@
|
||||
(function(b,p){function e(g){l[l.length]=g}function q(g){j.className=j.className.replace(RegExp("\\b"+g+"\\b"),"")}function m(g,c){for(var b=0,a=g.length;b<a;b++)c.call(g,g[b],b)}function r(){j.className=j.className.replace(/ (w-|eq-|gt-|gte-|lt-|lte-|portrait|no-portrait|landscape|no-landscape)\d+/g,"");var g=b.innerWidth||j.clientWidth,a=b.outerWidth||b.screen.width;d.screen.innerWidth=g;d.screen.outerWidth=a;e("w-"+g);m(c.screens,function(a){g>a?(c.screensCss.gt&&e("gt-"+a),c.screensCss.gte&&e("gte-"+
|
||||
a)):g<a?(c.screensCss.lt&&e("lt-"+a),c.screensCss.lte&&e("lte-"+a)):g===a&&(c.screensCss.lte&&e("lte-"+a),c.screensCss.eq&&e("e-q"+a),c.screensCss.gte&&e("gte-"+a))});var a=b.innerHeight||j.clientHeight,f=b.outerHeight||b.screen.height;d.screen.innerHeight=a;d.screen.outerHeight=f;d.feature("portrait",a>g);d.feature("landscape",a<g)}function s(){b.clearTimeout(t);t=b.setTimeout(r,100)}var n=b.document,f=b.navigator,u=b.location,j=n.documentElement,l=[],c={screens:[240,320,480,640,768,800,1024,1280,
|
||||
1440,1680,1920],screensCss:{gt:!0,gte:!1,lt:!0,lte:!1,eq:!1},browsers:[{ie:{min:6,max:10}}],browserCss:{gt:!0,gte:!1,lt:!0,lte:!1,eq:!0},section:"-section",page:"-page",head:"head"};if(b.head_conf)for(var a in b.head_conf)b.head_conf[a]!==p&&(c[a]=b.head_conf[a]);var d=b[c.head]=function(){d.ready.apply(null,arguments)};d.feature=function(a,b,c){if(!a)return j.className+=" "+l.join(" "),l=[],d;"[object Function]"===Object.prototype.toString.call(b)&&(b=b.call());e((b?"":"no-")+a);d[a]=!!b;c||(q("no-"+
|
||||
a),q(a),d.feature());return d};d.feature("js",!0);a=f.userAgent.toLowerCase();f=/mobile|midp/.test(a);d.feature("mobile",f,!0);d.feature("desktop",!f,!0);a=/(chrome|firefox)[ \/]([\w.]+)/.exec(a)||/(iphone|ipad|ipod)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(android)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(webkit|opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||[];f=a[1];a=parseFloat(a[2]);switch(f){case "msie":f="ie";a=n.documentMode||a;break;case "firefox":f="ff";break;case "ipod":case "ipad":case "iphone":f=
|
||||
"ios";break;case "webkit":f="safari"}d.browser={name:f,version:a};d.browser[f]=!0;for(var k=0,v=c.browsers.length;k<v;k++)for(var h in c.browsers[k])if(f===h){e(h);for(var w=c.browsers[k][h].max,i=c.browsers[k][h].min;i<=w;i++)a>i?(c.browserCss.gt&&e("gt-"+h+i),c.browserCss.gte&&e("gte-"+h+i)):a<i?(c.browserCss.lt&&e("lt-"+h+i),c.browserCss.lte&&e("lte-"+h+i)):a===i&&(c.browserCss.lte&&e("lte-"+h+i),c.browserCss.eq&&e("eq-"+h+i),c.browserCss.gte&&e("gte-"+h+i))}else e("no-"+h);"ie"===f&&9>a&&m("abbr article aside audio canvas details figcaption figure footer header hgroup mark meter nav output progress section summary time video".split(" "),
|
||||
function(a){n.createElement(a)});m(u.pathname.split("/"),function(a,b){if(2<this.length&&this[b+1]!==p)b&&e(this.slice(1,b+1).join("-").toLowerCase()+c.section);else{var d=a||"index",f=d.indexOf(".");0<f&&(d=d.substring(0,f));j.id=d.toLowerCase()+c.page;b||e("root"+c.section)}});d.screen={height:b.screen.height,width:b.screen.width};r();var t=0;b.addEventListener?b.addEventListener("resize",s,!1):b.attachEvent("onresize",s)})(window);
|
||||
(function(n,t){"use strict";function r(n){a[a.length]=n}function k(n){var t=new RegExp(" \\b"+n+"\\b");c.className=c.className.replace(t,"")}function p(n,t){for(var i=0,r=n.length;i<r;i++)t.call(n,n[i],i)}function tt(){var t,e,f,o;c.className=c.className.replace(/ (w-|eq-|gt-|gte-|lt-|lte-|portrait|no-portrait|landscape|no-landscape)\d+/g,""),t=n.innerWidth||c.clientWidth,e=n.outerWidth||n.screen.width,u.screen.innerWidth=t,u.screen.outerWidth=e,r("w-"+t),p(i.screens,function(n){t>n?(i.screensCss.gt&&r("gt-"+n),i.screensCss.gte&&r("gte-"+n)):t<n?(i.screensCss.lt&&r("lt-"+n),i.screensCss.lte&&r("lte-"+n)):t===n&&(i.screensCss.lte&&r("lte-"+n),i.screensCss.eq&&r("e-q"+n),i.screensCss.gte&&r("gte-"+n))}),f=n.innerHeight||c.clientHeight,o=n.outerHeight||n.screen.height,u.screen.innerHeight=f,u.screen.outerHeight=o,u.feature("portrait",f>t),u.feature("landscape",f<t)}function it(){n.clearTimeout(b),b=n.setTimeout(tt,50)}var y=n.document,rt=n.navigator,ut=n.location,c=y.documentElement,a=[],i={screens:[240,320,480,640,768,800,1024,1280,1440,1680,1920],screensCss:{gt:!0,gte:!1,lt:!0,lte:!1,eq:!1},browsers:[{ie:{min:6,max:11}}],browserCss:{gt:!0,gte:!1,lt:!0,lte:!1,eq:!0},section:"-section",page:"-page",head:"head"},v,u,s,w,o,h,l,d,f,g,nt,e,b;if(n.head_conf)for(v in n.head_conf)n.head_conf[v]!==t&&(i[v]=n.head_conf[v]);u=n[i.head]=function(){u.ready.apply(null,arguments)},u.feature=function(n,t,i){return n?(Object.prototype.toString.call(t)==="[object Function]"&&(t=t.call()),r((t?"":"no-")+n),u[n]=!!t,i||(k("no-"+n),k(n),u.feature()),u):(c.className+=" "+a.join(" "),a=[],u)},u.feature("js",!0),s=rt.userAgent.toLowerCase(),w=/mobile|android|kindle|silk|midp|(windows nt 6\.2.+arm|touch)/.test(s),u.feature("mobile",w,!0),u.feature("desktop",!w,!0),s=/(chrome|firefox)[ \/]([\w.]+)/.exec(s)||/(iphone|ipad|ipod)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(android)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(webkit|opera)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(msie) ([\w.]+)/.exec(s)||[],o=s[1],h=parseFloat(s[2]);switch(o){case"msie":o="ie",h=y.documentMode||h;break;case"firefox":o="ff";break;case"ipod":case"ipad":case"iphone":o="ios";break;case"webkit":o="safari"}for(u.browser={name:o,version:h},u.browser[o]=!0,l=0,d=i.browsers.length;l<d;l++)for(f in i.browsers[l])if(o===f)for(r(f),g=i.browsers[l][f].min,nt=i.browsers[l][f].max,e=g;e<=nt;e++)h>e?(i.browserCss.gt&&r("gt-"+f+e),i.browserCss.gte&&r("gte-"+f+e)):h<e?(i.browserCss.lt&&r("lt-"+f+e),i.browserCss.lte&&r("lte-"+f+e)):h===e&&(i.browserCss.lte&&r("lte-"+f+e),i.browserCss.eq&&r("eq-"+f+e),i.browserCss.gte&&r("gte-"+f+e));else r("no-"+f);r(o),r(o+parseInt(h,10)),o==="ie"&&h<9&&p("abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|progress|section|summary|time|video".split("|"),function(n){y.createElement(n)}),p(ut.pathname.split("/"),function(n,u){if(this.length>2&&this[u+1]!==t)u&&r(this.slice(u,u+1).join("-").toLowerCase()+i.section);else{var f=n||"index",e=f.indexOf(".");e>0&&(f=f.substring(0,e)),c.id=f.toLowerCase()+i.page,u||r("root"+i.section)}}),u.screen={height:n.screen.height,width:n.screen.width},tt(),b=0,n.addEventListener?n.addEventListener("resize",it,!1):n.attachEvent("onresize",it)})(window);
|
||||
//# sourceMappingURL=head.core.min.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,465 @@
|
||||
///#source 1 1 ../src/core.js
|
||||
/*!
|
||||
* HeadJS The only script in your <HEAD>
|
||||
* Author Tero Piirainen (tipiirai)
|
||||
* Maintainer Robert Hoffmann (itechnology)
|
||||
* License MIT / http://bit.ly/mit-license
|
||||
*
|
||||
* Version 0.99
|
||||
* http://headjs.com
|
||||
*/
|
||||
; (function (win, undefined) {
|
||||
"use strict";
|
||||
|
||||
// gt, gte, lt, lte, eq breakpoints would have been more simple to write as ['gt','gte','lt','lte','eq']
|
||||
// but then we would have had to loop over the collection on each resize() event,
|
||||
// a simple object with a direct access to true/false is therefore much more efficient
|
||||
var doc = win.document,
|
||||
nav = win.navigator,
|
||||
loc = win.location,
|
||||
html = doc.documentElement,
|
||||
klass = [],
|
||||
conf = {
|
||||
screens : [240, 320, 480, 640, 768, 800, 1024, 1280, 1440, 1680, 1920],
|
||||
screensCss: { "gt": true, "gte": false, "lt": true, "lte": false, "eq": false },
|
||||
browsers : [
|
||||
{ ie : { min: 6, max: 11 } }
|
||||
//,{ chrome : { min: 8, max: 29 } }
|
||||
//,{ ff : { min: 3, max: 24 } }
|
||||
//,{ ios : { min: 3, max: 6 } }
|
||||
//,{ android: { min: 2, max: 4 } }
|
||||
//,{ webkit : { min: 9, max: 12 } }
|
||||
//,{ opera : { min: 9, max: 12 } }
|
||||
],
|
||||
browserCss: { "gt": true, "gte": false, "lt": true, "lte": false, "eq": true },
|
||||
section : "-section",
|
||||
page : "-page",
|
||||
head : "head"
|
||||
};
|
||||
|
||||
if (win.head_conf) {
|
||||
for (var item in win.head_conf) {
|
||||
if (win.head_conf[item] !== undefined) {
|
||||
conf[item] = win.head_conf[item];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function pushClass(name) {
|
||||
klass[klass.length] = name;
|
||||
}
|
||||
|
||||
function removeClass(name) {
|
||||
var re = new RegExp(" \\b" + name + "\\b");
|
||||
html.className = html.className.replace(re, '');
|
||||
}
|
||||
|
||||
function each(arr, fn) {
|
||||
for (var i = 0, l = arr.length; i < l; i++) {
|
||||
fn.call(arr, arr[i], i);
|
||||
}
|
||||
}
|
||||
|
||||
// API
|
||||
var api = win[conf.head] = function () {
|
||||
api.ready.apply(null, arguments);
|
||||
};
|
||||
|
||||
api.feature = function (key, enabled, queue) {
|
||||
|
||||
// internal: apply all classes
|
||||
if (!key) {
|
||||
html.className += ' ' + klass.join(' ');
|
||||
klass = [];
|
||||
return api;
|
||||
}
|
||||
|
||||
if (Object.prototype.toString.call(enabled) === '[object Function]') {
|
||||
enabled = enabled.call();
|
||||
}
|
||||
|
||||
pushClass((enabled ? '' : 'no-') + key);
|
||||
api[key] = !!enabled;
|
||||
|
||||
// apply class to HTML element
|
||||
if (!queue) {
|
||||
removeClass('no-' + key);
|
||||
removeClass(key);
|
||||
api.feature();
|
||||
}
|
||||
|
||||
return api;
|
||||
};
|
||||
|
||||
// no queue here, so we can remove any eventual pre-existing no-js class
|
||||
api.feature("js", true);
|
||||
|
||||
// browser type & version
|
||||
var ua = nav.userAgent.toLowerCase(),
|
||||
mobile = /mobile|android|kindle|silk|midp|(windows nt 6\.2.+arm|touch)/.test(ua);
|
||||
|
||||
// useful for enabling/disabling feature (we can consider a desktop navigator to have more cpu/gpu power)
|
||||
api.feature("mobile" , mobile , true);
|
||||
api.feature("desktop", !mobile, true);
|
||||
|
||||
// http://www.zytrax.com/tech/web/browser_ids.htm
|
||||
// http://www.zytrax.com/tech/web/mobile_ids.html
|
||||
ua = /(chrome|firefox)[ \/]([\w.]+)/.exec(ua) || // Chrome & Firefox
|
||||
/(iphone|ipad|ipod)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || // Mobile IOS
|
||||
/(android)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || // Mobile Webkit
|
||||
/(webkit|opera)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || // Safari & Opera
|
||||
/(msie) ([\w.]+)/.exec(ua) || [];
|
||||
|
||||
|
||||
var browser = ua[1],
|
||||
version = parseFloat(ua[2]);
|
||||
|
||||
switch (browser) {
|
||||
case 'msie':
|
||||
browser = 'ie';
|
||||
version = doc.documentMode || version;
|
||||
break;
|
||||
|
||||
case 'firefox':
|
||||
browser = 'ff';
|
||||
break;
|
||||
|
||||
case 'ipod':
|
||||
case 'ipad':
|
||||
case 'iphone':
|
||||
browser = 'ios';
|
||||
break;
|
||||
|
||||
case 'webkit':
|
||||
browser = 'safari';
|
||||
break;
|
||||
}
|
||||
|
||||
// Browser vendor and version
|
||||
api.browser = {
|
||||
name : browser,
|
||||
version: version
|
||||
};
|
||||
api.browser[browser] = true;
|
||||
|
||||
for (var i = 0, l = conf.browsers.length; i < l; i++) {
|
||||
for (var key in conf.browsers[i]) {
|
||||
if (browser === key) {
|
||||
pushClass(key);
|
||||
|
||||
var min = conf.browsers[i][key].min;
|
||||
var max = conf.browsers[i][key].max;
|
||||
|
||||
for (var v = min; v <= max; v++) {
|
||||
if (version > v) {
|
||||
if (conf.browserCss.gt)
|
||||
pushClass("gt-" + key + v);
|
||||
|
||||
if (conf.browserCss.gte)
|
||||
pushClass("gte-" + key + v);
|
||||
}
|
||||
|
||||
else if (version < v) {
|
||||
if (conf.browserCss.lt)
|
||||
pushClass("lt-" + key + v);
|
||||
|
||||
if (conf.browserCss.lte)
|
||||
pushClass("lte-" + key + v);
|
||||
}
|
||||
|
||||
else if (version === v) {
|
||||
if (conf.browserCss.lte)
|
||||
pushClass("lte-" + key + v);
|
||||
|
||||
if (conf.browserCss.eq)
|
||||
pushClass("eq-" + key + v);
|
||||
|
||||
if (conf.browserCss.gte)
|
||||
pushClass("gte-" + key + v);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
pushClass('no-' + key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pushClass(browser);
|
||||
pushClass(browser + parseInt(version, 10));
|
||||
|
||||
// IE lt9 specific
|
||||
if (browser === "ie" && version < 9) {
|
||||
// HTML5 support : you still need to add html5 css initialization styles to your site
|
||||
// See: assets/html5.css
|
||||
each("abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|progress|section|summary|time|video".split("|"), function (el) {
|
||||
doc.createElement(el);
|
||||
});
|
||||
}
|
||||
|
||||
// CSS "router"
|
||||
each(loc.pathname.split("/"), function (el, i) {
|
||||
if (this.length > 2 && this[i + 1] !== undefined) {
|
||||
if (i) {
|
||||
pushClass(this.slice(i, i + 1).join("-").toLowerCase() + conf.section);
|
||||
}
|
||||
} else {
|
||||
// pageId
|
||||
var id = el || "index", index = id.indexOf(".");
|
||||
if (index > 0) {
|
||||
id = id.substring(0, index);
|
||||
}
|
||||
|
||||
html.id = id.toLowerCase() + conf.page;
|
||||
|
||||
// on root?
|
||||
if (!i) {
|
||||
pushClass("root" + conf.section);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// basic screen info
|
||||
api.screen = {
|
||||
height: win.screen.height,
|
||||
width : win.screen.width
|
||||
};
|
||||
|
||||
// viewport resolutions: w-100, lt-480, lt-1024 ...
|
||||
function screenSize() {
|
||||
// remove earlier sizes
|
||||
html.className = html.className.replace(/ (w-|eq-|gt-|gte-|lt-|lte-|portrait|no-portrait|landscape|no-landscape)\d+/g, "");
|
||||
|
||||
// Viewport width
|
||||
var iw = win.innerWidth || html.clientWidth,
|
||||
ow = win.outerWidth || win.screen.width;
|
||||
|
||||
api.screen.innerWidth = iw;
|
||||
api.screen.outerWidth = ow;
|
||||
|
||||
// for debugging purposes, not really useful for anything else
|
||||
pushClass("w-" + iw);
|
||||
|
||||
each(conf.screens, function (width) {
|
||||
if (iw > width) {
|
||||
if (conf.screensCss.gt)
|
||||
pushClass("gt-" + width);
|
||||
|
||||
if (conf.screensCss.gte)
|
||||
pushClass("gte-" + width);
|
||||
}
|
||||
|
||||
else if (iw < width) {
|
||||
if (conf.screensCss.lt)
|
||||
pushClass("lt-" + width);
|
||||
|
||||
if (conf.screensCss.lte)
|
||||
pushClass("lte-" + width);
|
||||
}
|
||||
|
||||
else if (iw === width) {
|
||||
if (conf.screensCss.lte)
|
||||
pushClass("lte-" + width);
|
||||
|
||||
if (conf.screensCss.eq)
|
||||
pushClass("e-q" + width);
|
||||
|
||||
if (conf.screensCss.gte)
|
||||
pushClass("gte-" + width);
|
||||
}
|
||||
});
|
||||
|
||||
// Viewport height
|
||||
var ih = win.innerHeight || html.clientHeight,
|
||||
oh = win.outerHeight || win.screen.height;
|
||||
|
||||
api.screen.innerHeight = ih;
|
||||
api.screen.outerHeight = oh;
|
||||
|
||||
// no need for onChange event to detect this
|
||||
api.feature("portrait" , (ih > iw));
|
||||
api.feature("landscape", (ih < iw));
|
||||
}
|
||||
|
||||
screenSize();
|
||||
|
||||
// Throttle navigators from triggering too many resize events
|
||||
var resizeId = 0;
|
||||
function onResize() {
|
||||
win.clearTimeout(resizeId);
|
||||
resizeId = win.setTimeout(screenSize, 50);
|
||||
}
|
||||
|
||||
// Manually attach, as to not overwrite existing handler
|
||||
if (win.addEventListener) {
|
||||
win.addEventListener("resize", onResize, false);
|
||||
|
||||
} else {
|
||||
win.attachEvent("onresize", onResize);
|
||||
}
|
||||
})(window);
|
||||
|
||||
///#source 1 1 ../src/css3.js
|
||||
/*!
|
||||
* HeadJS The only script in your <HEAD>
|
||||
* Author Tero Piirainen (tipiirai)
|
||||
* Maintainer Robert Hoffmann (itechnology)
|
||||
* License MIT / http://bit.ly/mit-license
|
||||
*
|
||||
* Version 0.99
|
||||
* http://headjs.com
|
||||
*/
|
||||
;(function(win, undefined) {
|
||||
"use strict";
|
||||
|
||||
var doc = win.document,
|
||||
/*
|
||||
To add a new test:
|
||||
|
||||
head.feature("video", function() {
|
||||
var tag = document.createElement('video');
|
||||
return !!tag.canPlayType;
|
||||
});
|
||||
|
||||
Good place to grab more tests
|
||||
|
||||
https://github.com/Modernizr/Modernizr/blob/master/modernizr.js
|
||||
*/
|
||||
|
||||
/* CSS modernizer */
|
||||
el = doc.createElement("i"),
|
||||
style = el.style,
|
||||
prefs = ' -o- -moz- -ms- -webkit- -khtml- '.split(' '),
|
||||
domPrefs = 'Webkit Moz O ms Khtml'.split(' '),
|
||||
|
||||
headVar = win.head_conf && win.head_conf.head || "head",
|
||||
api = win[headVar];
|
||||
|
||||
// Thanks Paul Irish!
|
||||
function testProps(props) {
|
||||
for (var i in props) {
|
||||
if (style[props[i]] !== undefined) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function testAll(prop) {
|
||||
var camel = prop.charAt(0).toUpperCase() + prop.substr(1),
|
||||
props = (prop + ' ' + domPrefs.join(camel + ' ') + camel).split(' ');
|
||||
|
||||
return !!testProps(props);
|
||||
}
|
||||
|
||||
var tests = {
|
||||
gradient: function() {
|
||||
var s1 = 'background-image:',
|
||||
s2 = 'gradient(linear,left top,right bottom,from(#9f9),to(#fff));',
|
||||
s3 = 'linear-gradient(left top,#eee,#fff);';
|
||||
|
||||
style.cssText = (s1 + prefs.join(s2 + s1) + prefs.join(s3 + s1)).slice(0,-s1.length);
|
||||
return !!style.backgroundImage;
|
||||
},
|
||||
|
||||
rgba: function() {
|
||||
style.cssText = "background-color:rgba(0,0,0,0.5)";
|
||||
return !!style.backgroundColor;
|
||||
},
|
||||
|
||||
opacity: function() {
|
||||
return el.style.opacity === "";
|
||||
},
|
||||
|
||||
textshadow: function() {
|
||||
return style.textShadow === '';
|
||||
},
|
||||
|
||||
multiplebgs: function() {
|
||||
style.cssText = 'background:url(https://),url(https://),red url(https://)';
|
||||
|
||||
// If the UA supports multiple backgrounds, there should be three occurrences
|
||||
// of the string "url(" in the return value for elemStyle.background
|
||||
var result = (style.background || "").match(/url/g);
|
||||
|
||||
return Object.prototype.toString.call(result) === '[object Array]' && result.length === 3;
|
||||
},
|
||||
|
||||
boxshadow: function() {
|
||||
return testAll("boxShadow");
|
||||
},
|
||||
|
||||
borderimage: function() {
|
||||
return testAll("borderImage");
|
||||
},
|
||||
|
||||
borderradius: function() {
|
||||
return testAll("borderRadius");
|
||||
},
|
||||
|
||||
cssreflections: function() {
|
||||
return testAll("boxReflect");
|
||||
},
|
||||
|
||||
csstransforms: function() {
|
||||
return testAll("transform");
|
||||
},
|
||||
|
||||
csstransitions: function() {
|
||||
return testAll("transition");
|
||||
},
|
||||
touch: function () {
|
||||
return 'ontouchstart' in win;
|
||||
},
|
||||
retina: function () {
|
||||
return (win.devicePixelRatio > 1);
|
||||
},
|
||||
|
||||
/*
|
||||
font-face support. Uses browser sniffing but is synchronous.
|
||||
http://paulirish.com/2009/font-face-feature-detection/
|
||||
*/
|
||||
fontface: function() {
|
||||
var browser = api.browser.name, version = api.browser.version;
|
||||
|
||||
switch (browser) {
|
||||
case "ie":
|
||||
return version >= 9;
|
||||
|
||||
case "chrome":
|
||||
return version >= 13;
|
||||
|
||||
case "ff":
|
||||
return version >= 6;
|
||||
|
||||
case "ios":
|
||||
return version >= 5;
|
||||
|
||||
case "android":
|
||||
return false;
|
||||
|
||||
case "webkit":
|
||||
return version >= 5.1;
|
||||
|
||||
case "opera":
|
||||
return version >= 10;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// queue features
|
||||
for (var key in tests) {
|
||||
if (tests[key]) {
|
||||
api.feature(key, tests[key].call(), true);
|
||||
}
|
||||
}
|
||||
|
||||
// enable features at once
|
||||
api.feature();
|
||||
|
||||
})(window);
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
(function(n,t){"use strict";function r(n){a[a.length]=n}function k(n){var t=new RegExp(" \\b"+n+"\\b");c.className=c.className.replace(t,"")}function p(n,t){for(var i=0,r=n.length;i<r;i++)t.call(n,n[i],i)}function tt(){var t,e,f,o;c.className=c.className.replace(/ (w-|eq-|gt-|gte-|lt-|lte-|portrait|no-portrait|landscape|no-landscape)\d+/g,""),t=n.innerWidth||c.clientWidth,e=n.outerWidth||n.screen.width,u.screen.innerWidth=t,u.screen.outerWidth=e,r("w-"+t),p(i.screens,function(n){t>n?(i.screensCss.gt&&r("gt-"+n),i.screensCss.gte&&r("gte-"+n)):t<n?(i.screensCss.lt&&r("lt-"+n),i.screensCss.lte&&r("lte-"+n)):t===n&&(i.screensCss.lte&&r("lte-"+n),i.screensCss.eq&&r("e-q"+n),i.screensCss.gte&&r("gte-"+n))}),f=n.innerHeight||c.clientHeight,o=n.outerHeight||n.screen.height,u.screen.innerHeight=f,u.screen.outerHeight=o,u.feature("portrait",f>t),u.feature("landscape",f<t)}function it(){n.clearTimeout(b),b=n.setTimeout(tt,50)}var y=n.document,rt=n.navigator,ut=n.location,c=y.documentElement,a=[],i={screens:[240,320,480,640,768,800,1024,1280,1440,1680,1920],screensCss:{gt:!0,gte:!1,lt:!0,lte:!1,eq:!1},browsers:[{ie:{min:6,max:11}}],browserCss:{gt:!0,gte:!1,lt:!0,lte:!1,eq:!0},section:"-section",page:"-page",head:"head"},v,u,s,w,o,h,l,d,f,g,nt,e,b;if(n.head_conf)for(v in n.head_conf)n.head_conf[v]!==t&&(i[v]=n.head_conf[v]);u=n[i.head]=function(){u.ready.apply(null,arguments)},u.feature=function(n,t,i){return n?(Object.prototype.toString.call(t)==="[object Function]"&&(t=t.call()),r((t?"":"no-")+n),u[n]=!!t,i||(k("no-"+n),k(n),u.feature()),u):(c.className+=" "+a.join(" "),a=[],u)},u.feature("js",!0),s=rt.userAgent.toLowerCase(),w=/mobile|android|kindle|silk|midp|(windows nt 6\.2.+arm|touch)/.test(s),u.feature("mobile",w,!0),u.feature("desktop",!w,!0),s=/(chrome|firefox)[ \/]([\w.]+)/.exec(s)||/(iphone|ipad|ipod)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(android)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(webkit|opera)(?:.*version)?[ \/]([\w.]+)/.exec(s)||/(msie) ([\w.]+)/.exec(s)||[],o=s[1],h=parseFloat(s[2]);switch(o){case"msie":o="ie",h=y.documentMode||h;break;case"firefox":o="ff";break;case"ipod":case"ipad":case"iphone":o="ios";break;case"webkit":o="safari"}for(u.browser={name:o,version:h},u.browser[o]=!0,l=0,d=i.browsers.length;l<d;l++)for(f in i.browsers[l])if(o===f)for(r(f),g=i.browsers[l][f].min,nt=i.browsers[l][f].max,e=g;e<=nt;e++)h>e?(i.browserCss.gt&&r("gt-"+f+e),i.browserCss.gte&&r("gte-"+f+e)):h<e?(i.browserCss.lt&&r("lt-"+f+e),i.browserCss.lte&&r("lte-"+f+e)):h===e&&(i.browserCss.lte&&r("lte-"+f+e),i.browserCss.eq&&r("eq-"+f+e),i.browserCss.gte&&r("gte-"+f+e));else r("no-"+f);r(o),r(o+parseInt(h,10)),o==="ie"&&h<9&&p("abbr|article|aside|audio|canvas|details|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|progress|section|summary|time|video".split("|"),function(n){y.createElement(n)}),p(ut.pathname.split("/"),function(n,u){if(this.length>2&&this[u+1]!==t)u&&r(this.slice(u,u+1).join("-").toLowerCase()+i.section);else{var f=n||"index",e=f.indexOf(".");e>0&&(f=f.substring(0,e)),c.id=f.toLowerCase()+i.page,u||r("root"+i.section)}}),u.screen={height:n.screen.height,width:n.screen.width},tt(),b=0,n.addEventListener?n.addEventListener("resize",it,!1):n.attachEvent("onresize",it)})(window),function(n,t){"use strict";function a(n){for(var r in n)if(i[n[r]]!==t)return!0;return!1}function r(n){var t=n.charAt(0).toUpperCase()+n.substr(1),i=(n+" "+c.join(t+" ")+t).split(" ");return!!a(i)}var h=n.document,o=h.createElement("i"),i=o.style,s=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),c="Webkit Moz O ms Khtml".split(" "),l=n.head_conf&&n.head_conf.head||"head",u=n[l],e={gradient:function(){var n="background-image:";return i.cssText=(n+s.join("gradient(linear,left top,right bottom,from(#9f9),to(#fff));"+n)+s.join("linear-gradient(left top,#eee,#fff);"+n)).slice(0,-n.length),!!i.backgroundImage},rgba:function(){return i.cssText="background-color:rgba(0,0,0,0.5)",!!i.backgroundColor},opacity:function(){return o.style.opacity===""},textshadow:function(){return i.textShadow===""},multiplebgs:function(){i.cssText="background:url(https://),url(https://),red url(https://)";var n=(i.background||"").match(/url/g);return Object.prototype.toString.call(n)==="[object Array]"&&n.length===3},boxshadow:function(){return r("boxShadow")},borderimage:function(){return r("borderImage")},borderradius:function(){return r("borderRadius")},cssreflections:function(){return r("boxReflect")},csstransforms:function(){return r("transform")},csstransitions:function(){return r("transition")},touch:function(){return"ontouchstart"in n},retina:function(){return n.devicePixelRatio>1},fontface:function(){var t=u.browser.name,n=u.browser.version;switch(t){case"ie":return n>=9;case"chrome":return n>=13;case"ff":return n>=6;case"ios":return n>=5;case"android":return!1;case"webkit":return n>=5.1;case"opera":return n>=10;default:return!1}}},f;for(f in e)e[f]&&u.feature(f,e[f].call(),!0);u.feature()}(window);
|
||||
//# sourceMappingURL=head.css3.min.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,615 @@
|
||||
///#source 1 1 ../src/load.js
|
||||
/*!
|
||||
* HeadJS The only script in your <HEAD>
|
||||
* Author Tero Piirainen (tipiirai)
|
||||
* Maintainer Robert Hoffmann (itechnology)
|
||||
* License MIT / http://bit.ly/mit-license
|
||||
*
|
||||
* Version 0.99
|
||||
* http://headjs.com
|
||||
*/
|
||||
; (function (win, undefined) {
|
||||
"use strict";
|
||||
|
||||
var doc = win.document,
|
||||
domWaiters = [],
|
||||
queue = [], // waiters for the "head ready" event
|
||||
handlers = {}, // user functions waiting for events
|
||||
assets = {}, // loadable items in various states
|
||||
isAsync = "async" in doc.createElement("script") || "MozAppearance" in doc.documentElement.style || win.opera,
|
||||
isHeadReady,
|
||||
isDomReady,
|
||||
|
||||
/*** public API ***/
|
||||
headVar = win.head_conf && win.head_conf.head || "head",
|
||||
api = win[headVar] = (win[headVar] || function () { api.ready.apply(null, arguments); }),
|
||||
|
||||
// states
|
||||
PRELOADING = 1,
|
||||
PRELOADED = 2,
|
||||
LOADING = 3,
|
||||
LOADED = 4;
|
||||
|
||||
// Method 1: simply load and let browser take care of ordering
|
||||
if (isAsync) {
|
||||
api.load = function () {
|
||||
///<summary>
|
||||
/// INFO: use cases
|
||||
/// head.load("http://domain.com/file.js","http://domain.com/file.js", callBack)
|
||||
/// head.load({ label1: "http://domain.com/file.js" }, { label2: "http://domain.com/file.js" }, callBack)
|
||||
///</summary>
|
||||
var args = arguments,
|
||||
callback = args[args.length - 1],
|
||||
items = {};
|
||||
|
||||
if (!isFunction(callback)) {
|
||||
callback = null;
|
||||
}
|
||||
|
||||
each(args, function (item, i) {
|
||||
if (item !== callback) {
|
||||
item = getAsset(item);
|
||||
items[item.name] = item;
|
||||
|
||||
load(item, callback && i === args.length - 2 ? function () {
|
||||
if (allLoaded(items)) {
|
||||
one(callback);
|
||||
}
|
||||
|
||||
} : null);
|
||||
}
|
||||
});
|
||||
|
||||
return api;
|
||||
};
|
||||
|
||||
|
||||
// Method 2: preload with text/cache hack
|
||||
} else {
|
||||
api.load = function () {
|
||||
var args = arguments,
|
||||
rest = [].slice.call(args, 1),
|
||||
next = rest[0];
|
||||
|
||||
// wait for a while. immediate execution causes some browsers to ignore caching
|
||||
if (!isHeadReady) {
|
||||
queue.push(function () {
|
||||
api.load.apply(null, args);
|
||||
});
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
// multiple arguments
|
||||
if (!!next) {
|
||||
/* Preload with text/cache hack (not good!)
|
||||
* http://blog.getify.com/on-script-loaders/
|
||||
* http://www.nczonline.net/blog/2010/12/21/thoughts-on-script-loaders/
|
||||
* If caching is not configured correctly on the server, then items could load twice !
|
||||
*************************************************************************************/
|
||||
each(rest, function (item) {
|
||||
if (!isFunction(item)) {
|
||||
preLoad(getAsset(item));
|
||||
}
|
||||
});
|
||||
|
||||
// execute
|
||||
load(getAsset(args[0]), isFunction(next) ? next : function () {
|
||||
api.load.apply(null, rest);
|
||||
});
|
||||
}
|
||||
else {
|
||||
// single item
|
||||
load(getAsset(args[0]));
|
||||
}
|
||||
|
||||
return api;
|
||||
};
|
||||
}
|
||||
|
||||
// INFO: for retro compatibility
|
||||
api.js = api.load;
|
||||
|
||||
api.test = function (test, success, failure, callback) {
|
||||
///<summary>
|
||||
/// INFO: use cases:
|
||||
/// head.test(condition, null , "file.NOk" , callback);
|
||||
/// head.test(condition, "fileOk.js", null , callback);
|
||||
/// head.test(condition, "fileOk.js", "file.NOk" , callback);
|
||||
/// head.test(condition, "fileOk.js", ["file.NOk", "file.NOk"], callback);
|
||||
/// head.test({
|
||||
/// test : condition,
|
||||
/// success : [{ label1: "file1Ok.js" }, { label2: "file2Ok.js" }],
|
||||
/// failure : [{ label1: "file1NOk.js" }, { label2: "file2NOk.js" }],
|
||||
/// callback: callback
|
||||
/// );
|
||||
/// head.test({
|
||||
/// test : condition,
|
||||
/// success : ["file1Ok.js" , "file2Ok.js"],
|
||||
/// failure : ["file1NOk.js", "file2NOk.js"],
|
||||
/// callback: callback
|
||||
/// );
|
||||
///</summary>
|
||||
var obj = (typeof test === 'object') ? test : {
|
||||
test: test,
|
||||
success: !!success ? isArray(success) ? success : [success] : false,
|
||||
failure: !!failure ? isArray(failure) ? failure : [failure] : false,
|
||||
callback: callback || noop
|
||||
};
|
||||
|
||||
// Test Passed ?
|
||||
var passed = !!obj.test;
|
||||
|
||||
// Do we have a success case
|
||||
if (passed && !!obj.success) {
|
||||
obj.success.push(obj.callback);
|
||||
api.load.apply(null, obj.success);
|
||||
}
|
||||
// Do we have a fail case
|
||||
else if (!passed && !!obj.failure) {
|
||||
obj.failure.push(obj.callback);
|
||||
api.load.apply(null, obj.failure);
|
||||
}
|
||||
else {
|
||||
callback();
|
||||
}
|
||||
|
||||
return api;
|
||||
};
|
||||
|
||||
api.ready = function (key, callback) {
|
||||
///<summary>
|
||||
/// INFO: use cases:
|
||||
/// head.ready(callBack)
|
||||
/// head.ready(document , callBack)
|
||||
/// head.ready("file.js", callBack);
|
||||
/// head.ready("label" , callBack);
|
||||
///</summary>
|
||||
|
||||
// DOM ready check: head.ready(document, function() { });
|
||||
if (key === doc) {
|
||||
if (isDomReady) {
|
||||
one(callback);
|
||||
}
|
||||
else {
|
||||
domWaiters.push(callback);
|
||||
}
|
||||
|
||||
return api;
|
||||
}
|
||||
|
||||
// shift arguments
|
||||
if (isFunction(key)) {
|
||||
callback = key;
|
||||
key = "ALL";
|
||||
}
|
||||
|
||||
// make sure arguments are sane
|
||||
if (typeof key !== 'string' || !isFunction(callback)) {
|
||||
return api;
|
||||
}
|
||||
|
||||
// This can also be called when we trigger events based on filenames & labels
|
||||
var asset = assets[key];
|
||||
|
||||
// item already loaded --> execute and return
|
||||
if (asset && asset.state === LOADED || key === 'ALL' && allLoaded() && isDomReady) {
|
||||
one(callback);
|
||||
return api;
|
||||
}
|
||||
|
||||
var arr = handlers[key];
|
||||
if (!arr) {
|
||||
arr = handlers[key] = [callback];
|
||||
}
|
||||
else {
|
||||
arr.push(callback);
|
||||
}
|
||||
|
||||
return api;
|
||||
};
|
||||
|
||||
|
||||
// perform this when DOM is ready
|
||||
api.ready(doc, function () {
|
||||
|
||||
if (allLoaded()) {
|
||||
each(handlers.ALL, function (callback) {
|
||||
one(callback);
|
||||
});
|
||||
}
|
||||
|
||||
if (api.feature) {
|
||||
api.feature("domloaded", true);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/* private functions
|
||||
*********************/
|
||||
function noop() {
|
||||
// does nothing
|
||||
}
|
||||
|
||||
function each(arr, callback) {
|
||||
if (!arr) {
|
||||
return;
|
||||
}
|
||||
|
||||
// arguments special type
|
||||
if (typeof arr === 'object') {
|
||||
arr = [].slice.call(arr);
|
||||
}
|
||||
|
||||
// do the job
|
||||
for (var i = 0, l = arr.length; i < l; i++) {
|
||||
callback.call(arr, arr[i], i);
|
||||
}
|
||||
}
|
||||
|
||||
/* A must read: http://bonsaiden.github.com/JavaScript-Garden
|
||||
************************************************************/
|
||||
function is(type, obj) {
|
||||
var clas = Object.prototype.toString.call(obj).slice(8, -1);
|
||||
return obj !== undefined && obj !== null && clas === type;
|
||||
}
|
||||
|
||||
function isFunction(item) {
|
||||
return is("Function", item);
|
||||
}
|
||||
|
||||
function isArray(item) {
|
||||
return is("Array", item);
|
||||
}
|
||||
|
||||
function toLabel(url) {
|
||||
///<summary>Converts a url to a file label</summary>
|
||||
var items = url.split("/"),
|
||||
name = items[items.length - 1],
|
||||
i = name.indexOf("?");
|
||||
|
||||
return i !== -1 ? name.substring(0, i) : name;
|
||||
}
|
||||
|
||||
// INFO: this look like a "im triggering callbacks all over the place, but only wanna run it one time function" ..should try to make everything work without it if possible
|
||||
// INFO: Even better. Look into promises/defered's like jQuery is doing
|
||||
function one(callback) {
|
||||
///<summary>Execute a callback only once</summary>
|
||||
callback = callback || noop;
|
||||
|
||||
if (callback._done) {
|
||||
return;
|
||||
}
|
||||
|
||||
callback();
|
||||
callback._done = 1;
|
||||
}
|
||||
|
||||
function getAsset(item) {
|
||||
///<summary>
|
||||
/// Assets are in the form of
|
||||
/// {
|
||||
/// name : label,
|
||||
/// url : url,
|
||||
/// state: state
|
||||
/// }
|
||||
///</summary>
|
||||
var asset = {};
|
||||
|
||||
if (typeof item === 'object') {
|
||||
for (var label in item) {
|
||||
if (!!item[label]) {
|
||||
asset = {
|
||||
name: label,
|
||||
url : item[label]
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
asset = {
|
||||
name: toLabel(item),
|
||||
url : item
|
||||
};
|
||||
}
|
||||
|
||||
// is the item already existant
|
||||
var existing = assets[asset.name];
|
||||
if (existing && existing.url === asset.url) {
|
||||
return existing;
|
||||
}
|
||||
|
||||
assets[asset.name] = asset;
|
||||
return asset;
|
||||
}
|
||||
|
||||
function allLoaded(items) {
|
||||
items = items || assets;
|
||||
|
||||
for (var name in items) {
|
||||
if (items.hasOwnProperty(name) && items[name].state !== LOADED) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function onPreload(asset) {
|
||||
asset.state = PRELOADED;
|
||||
|
||||
each(asset.onpreload, function (afterPreload) {
|
||||
afterPreload.call();
|
||||
});
|
||||
}
|
||||
|
||||
function preLoad(asset, callback) {
|
||||
if (asset.state === undefined) {
|
||||
|
||||
asset.state = PRELOADING;
|
||||
asset.onpreload = [];
|
||||
|
||||
loadAsset({ url: asset.url, type: 'cache' }, function () {
|
||||
onPreload(asset);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function load(asset, callback) {
|
||||
///<summary>Used with normal loading logic</summary>
|
||||
callback = callback || noop;
|
||||
|
||||
if (asset.state === LOADED) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
|
||||
// INFO: why would we trigger a ready event when its not really loaded yet ?
|
||||
if (asset.state === LOADING) {
|
||||
api.ready(asset.name, callback);
|
||||
return;
|
||||
}
|
||||
|
||||
if (asset.state === PRELOADING) {
|
||||
asset.onpreload.push(function () {
|
||||
load(asset, callback);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
asset.state = LOADING;
|
||||
|
||||
loadAsset(asset, function () {
|
||||
asset.state = LOADED;
|
||||
callback();
|
||||
|
||||
// handlers for this asset
|
||||
each(handlers[asset.name], function (fn) {
|
||||
one(fn);
|
||||
});
|
||||
|
||||
// dom is ready & no assets are queued for loading
|
||||
// INFO: shouldn't we be doing the same test above ?
|
||||
if (isDomReady && allLoaded()) {
|
||||
each(handlers.ALL, function (fn) {
|
||||
one(fn);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* Parts inspired from: https://github.com/cujojs/curl
|
||||
******************************************************/
|
||||
function loadAsset(asset, callback) {
|
||||
callback = callback || noop;
|
||||
|
||||
var ele;
|
||||
if (/\.css[^\.]*$/.test(asset.url)) {
|
||||
ele = doc.createElement('link');
|
||||
ele.type = 'text/' + (asset.type || 'css');
|
||||
ele.rel = 'stylesheet';
|
||||
ele.href = asset.url;
|
||||
}
|
||||
else {
|
||||
ele = doc.createElement('script');
|
||||
ele.type = 'text/' + (asset.type || 'javascript');
|
||||
ele.src = asset.url;
|
||||
}
|
||||
|
||||
ele.onload = ele.onreadystatechange = process;
|
||||
ele.onerror = error;
|
||||
|
||||
/* Good read, but doesn't give much hope !
|
||||
* http://blog.getify.com/on-script-loaders/
|
||||
* http://www.nczonline.net/blog/2010/12/21/thoughts-on-script-loaders/
|
||||
* https://hacks.mozilla.org/2009/06/defer/
|
||||
*/
|
||||
|
||||
// ASYNC: load in parellel and execute as soon as possible
|
||||
ele.async = false;
|
||||
// DEFER: load in parallel but maintain execution order
|
||||
ele.defer = false;
|
||||
|
||||
function error(event) {
|
||||
event = event || win.event;
|
||||
|
||||
// need some more detailed error handling here
|
||||
|
||||
// release event listeners
|
||||
ele.onload = ele.onreadystatechange = ele.onerror = null;
|
||||
|
||||
// do callback
|
||||
callback();
|
||||
}
|
||||
|
||||
function process(event) {
|
||||
event = event || win.event;
|
||||
|
||||
// IE 7/8 (2 events on 1st load)
|
||||
// 1) event.type = readystatechange, s.readyState = loading
|
||||
// 2) event.type = readystatechange, s.readyState = loaded
|
||||
|
||||
// IE 7/8 (1 event on reload)
|
||||
// 1) event.type = readystatechange, s.readyState = complete
|
||||
|
||||
// event.type === 'readystatechange' && /loaded|complete/.test(s.readyState)
|
||||
|
||||
// IE 9 (3 events on 1st load)
|
||||
// 1) event.type = readystatechange, s.readyState = loading
|
||||
// 2) event.type = readystatechange, s.readyState = loaded
|
||||
// 3) event.type = load , s.readyState = loaded
|
||||
|
||||
// IE 9 (2 events on reload)
|
||||
// 1) event.type = readystatechange, s.readyState = complete
|
||||
// 2) event.type = load , s.readyState = complete
|
||||
|
||||
// event.type === 'load' && /loaded|complete/.test(s.readyState)
|
||||
// event.type === 'readystatechange' && /loaded|complete/.test(s.readyState)
|
||||
|
||||
// IE 10 (3 events on 1st load)
|
||||
// 1) event.type = readystatechange, s.readyState = loading
|
||||
// 2) event.type = load , s.readyState = complete
|
||||
// 3) event.type = readystatechange, s.readyState = loaded
|
||||
|
||||
// IE 10 (3 events on reload)
|
||||
// 1) event.type = readystatechange, s.readyState = loaded
|
||||
// 2) event.type = load , s.readyState = complete
|
||||
// 3) event.type = readystatechange, s.readyState = complete
|
||||
|
||||
// event.type === 'load' && /loaded|complete/.test(s.readyState)
|
||||
// event.type === 'readystatechange' && /complete/.test(s.readyState)
|
||||
|
||||
// Other Browsers (1 event on 1st load)
|
||||
// 1) event.type = load, s.readyState = undefined
|
||||
|
||||
// Other Browsers (1 event on reload)
|
||||
// 1) event.type = load, s.readyState = undefined
|
||||
|
||||
// event.type == 'load' && s.readyState = undefined
|
||||
|
||||
|
||||
// !doc.documentMode is for IE6/7, IE8+ have documentMode
|
||||
if (event.type === 'load' || (/loaded|complete/.test(ele.readyState) && (!doc.documentMode || doc.documentMode < 9))) {
|
||||
// release event listeners
|
||||
ele.onload = ele.onreadystatechange = ele.onerror = null;
|
||||
|
||||
// do callback
|
||||
callback();
|
||||
}
|
||||
|
||||
// emulates error on browsers that don't create an exception
|
||||
// INFO: timeout not clearing ..why ?
|
||||
//asset.timeout = win.setTimeout(function () {
|
||||
// error({ type: "timeout" });
|
||||
//}, 3000);
|
||||
}
|
||||
|
||||
// use insertBefore to keep IE from throwing Operation Aborted (thx Bryan Forbes!)
|
||||
var head = doc.head || doc.getElementsByTagName('head')[0];
|
||||
// but insert at end of head, because otherwise if it is a stylesheet, it will not ovverride values
|
||||
head.insertBefore(ele, head.lastChild);
|
||||
}
|
||||
|
||||
/* Mix of stuff from jQuery & IEContentLoaded
|
||||
* http://dev.w3.org/html5/spec/the-end.html#the-end
|
||||
***************************************************/
|
||||
function domReady() {
|
||||
// Make sure body exists, at least, in case IE gets a little overzealous (jQuery ticket #5443).
|
||||
if (!doc.body) {
|
||||
// let's not get nasty by setting a timeout too small.. (loop mania guaranteed if assets are queued)
|
||||
win.clearTimeout(api.readyTimeout);
|
||||
api.readyTimeout = win.setTimeout(domReady, 50);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isDomReady) {
|
||||
isDomReady = true;
|
||||
each(domWaiters, function (fn) {
|
||||
one(fn);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function domContentLoaded() {
|
||||
// W3C
|
||||
if (doc.addEventListener) {
|
||||
doc.removeEventListener("DOMContentLoaded", domContentLoaded, false);
|
||||
domReady();
|
||||
}
|
||||
|
||||
// IE
|
||||
else if (doc.readyState === "complete") {
|
||||
// we're here because readyState === "complete" in oldIE
|
||||
// which is good enough for us to call the dom ready!
|
||||
doc.detachEvent("onreadystatechange", domContentLoaded);
|
||||
domReady();
|
||||
}
|
||||
}
|
||||
|
||||
// Catch cases where ready() is called after the browser event has already occurred.
|
||||
// we once tried to use readyState "interactive" here, but it caused issues like the one
|
||||
// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
|
||||
if (doc.readyState === "complete") {
|
||||
domReady();
|
||||
}
|
||||
|
||||
// W3C
|
||||
else if (doc.addEventListener) {
|
||||
doc.addEventListener("DOMContentLoaded", domContentLoaded, false);
|
||||
|
||||
// A fallback to window.onload, that will always work
|
||||
win.addEventListener("load", domReady, false);
|
||||
}
|
||||
|
||||
// IE
|
||||
else {
|
||||
// Ensure firing before onload, maybe late but safe also for iframes
|
||||
doc.attachEvent("onreadystatechange", domContentLoaded);
|
||||
|
||||
// A fallback to window.onload, that will always work
|
||||
win.attachEvent("onload", domReady);
|
||||
|
||||
// If IE and not a frame
|
||||
// continually check to see if the document is ready
|
||||
var top = false;
|
||||
|
||||
try {
|
||||
top = !win.frameElement && doc.documentElement;
|
||||
} catch (e) { }
|
||||
|
||||
if (top && top.doScroll) {
|
||||
(function doScrollCheck() {
|
||||
if (!isDomReady) {
|
||||
try {
|
||||
// Use the trick by Diego Perini
|
||||
// http://javascript.nwbox.com/IEContentLoaded/
|
||||
top.doScroll("left");
|
||||
} catch (error) {
|
||||
// let's not get nasty by setting a timeout too small.. (loop mania guaranteed if assets are queued)
|
||||
win.clearTimeout(api.readyTimeout);
|
||||
api.readyTimeout = win.setTimeout(doScrollCheck, 50);
|
||||
return;
|
||||
}
|
||||
|
||||
// and execute any waiting functions
|
||||
domReady();
|
||||
}
|
||||
})();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
We wait for 300 ms before asset loading starts. for some reason this is needed
|
||||
to make sure assets are cached. Not sure why this happens yet. A case study:
|
||||
|
||||
https://github.com/headjs/headjs/issues/closed#issue/83
|
||||
*/
|
||||
setTimeout(function () {
|
||||
isHeadReady = true;
|
||||
each(queue, function (fn) {
|
||||
fn();
|
||||
});
|
||||
|
||||
}, 300);
|
||||
|
||||
})(window);
|
||||
+2
-8
@@ -1,8 +1,2 @@
|
||||
(function(f,w){function m(){}function g(a,b){if(a){"object"===typeof a&&(a=[].slice.call(a));for(var c=0,d=a.length;c<d;c++)b.call(a,a[c],c)}}function v(a,b){var c=Object.prototype.toString.call(b).slice(8,-1);return b!==w&&null!==b&&c===a}function k(a){return v("Function",a)}function h(a){a=a||m;a._done||(a(),a._done=1)}function n(a){var b={};if("object"===typeof a)for(var c in a)a[c]&&(b={name:c,url:a[c]});else b=a.split("/"),b=b[b.length-1],c=b.indexOf("?"),b={name:-1!==c?b.substring(0,c):b,url:a};
|
||||
return(a=p[b.name])&&a.url===b.url?a:p[b.name]=b}function q(a){var a=a||p,b;for(b in a)if(a.hasOwnProperty(b)&&a[b].state!==r)return!1;return!0}function s(a,b){b=b||m;a.state===r?b():a.state===x?d.ready(a.name,b):a.state===y?a.onpreload.push(function(){s(a,b)}):(a.state=x,z(a,function(){a.state=r;b();g(l[a.name],function(a){h(a)});j&&q()&&g(l.ALL,function(a){h(a)})}))}function z(a,b){var b=b||m,c;/\.css[^\.]*$/.test(a.url)?(c=e.createElement("link"),c.type="text/"+(a.type||"css"),c.rel="stylesheet",
|
||||
c.href=a.url):(c=e.createElement("script"),c.type="text/"+(a.type||"javascript"),c.src=a.url);c.onload=c.onreadystatechange=function(a){a=a||f.event;if("load"===a.type||/loaded|complete/.test(c.readyState)&&(!e.documentMode||9>e.documentMode))c.onload=c.onreadystatechange=c.onerror=null,b()};c.onerror=function(){c.onload=c.onreadystatechange=c.onerror=null;b()};c.async=!1;c.defer=!1;var d=e.head||e.getElementsByTagName("head")[0];d.insertBefore(c,d.lastChild)}function i(){e.body?j||(j=!0,g(A,function(a){h(a)})):
|
||||
(f.clearTimeout(d.readyTimeout),d.readyTimeout=f.setTimeout(i,50))}function t(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",t,!1),i()):"complete"===e.readyState&&(e.detachEvent("onreadystatechange",t),i())}var e=f.document,A=[],B=[],l={},p={},E="async"in e.createElement("script")||"MozAppearance"in e.documentElement.style||f.opera,C,j,D=f.head_conf&&f.head_conf.head||"head",d=f[D]=f[D]||function(){d.ready.apply(null,arguments)},y=1,x=3,r=4;d.load=E?function(){var a=arguments,b=a[a.length-
|
||||
1],c={};k(b)||(b=null);g(a,function(d,e){d!==b&&(d=n(d),c[d.name]=d,s(d,b&&e===a.length-2?function(){q(c)&&h(b)}:null))});return d}:function(){var a=arguments,b=[].slice.call(a,1),c=b[0];if(!C)return B.push(function(){d.load.apply(null,a)}),d;c?(g(b,function(a){if(!k(a)){var b=n(a);b.state===w&&(b.state=y,b.onpreload=[],z({url:b.url,type:"cache"},function(){b.state=2;g(b.onpreload,function(a){a.call()})}))}}),s(n(a[0]),k(c)?c:function(){d.load.apply(null,b)})):s(n(a[0]));return d};d.js=d.load;d.test=
|
||||
function(a,b,c,e){a="object"===typeof a?a:{test:a,success:b?v("Array",b)?b:[b]:!1,failure:c?v("Array",c)?c:[c]:!1,callback:e||m};(b=!!a.test)&&a.success?(a.success.push(a.callback),d.load.apply(null,a.success)):!b&&a.failure?(a.failure.push(a.callback),d.load.apply(null,a.failure)):e();return d};d.ready=function(a,b){if(a===e)return j?h(b):A.push(b),d;k(a)&&(b=a,a="ALL");if("string"!==typeof a||!k(b))return d;var c=p[a];if(c&&c.state===r||"ALL"===a&&q()&&j)return h(b),d;(c=l[a])?c.push(b):l[a]=[b];
|
||||
return d};d.ready(e,function(){q()&&g(l.ALL,function(a){h(a)});d.feature&&d.feature("domloaded",!0)});if("complete"===e.readyState)i();else if(e.addEventListener)e.addEventListener("DOMContentLoaded",t,!1),f.addEventListener("load",i,!1);else{e.attachEvent("onreadystatechange",t);f.attachEvent("onload",i);var u=!1;try{u=null==f.frameElement&&e.documentElement}catch(F){}u&&u.doScroll&&function b(){if(!j){try{u.doScroll("left")}catch(c){f.clearTimeout(d.readyTimeout);d.readyTimeout=f.setTimeout(b,50);
|
||||
return}i()}}()}setTimeout(function(){C=!0;g(B,function(b){b()})},300)})(window);
|
||||
(function(n,t){"use strict";function v(){}function u(n,t){if(n){typeof n=="object"&&(n=[].slice.call(n));for(var i=0,r=n.length;i<r;i++)t.call(n,n[i],i)}}function rt(n,i){var r=Object.prototype.toString.call(i).slice(8,-1);return i!==t&&i!==null&&r===n}function h(n){return rt("Function",n)}function ut(n){return rt("Array",n)}function st(n){var i=n.split("/"),t=i[i.length-1],r=t.indexOf("?");return r!==-1?t.substring(0,r):t}function f(n){(n=n||v,n._done)||(n(),n._done=1)}function y(n){var t={},i,r;if(typeof n=="object")for(i in n)!n[i]||(t={name:i,url:n[i]});else t={name:st(n),url:n};return(r=l[t.name],r&&r.url===t.url)?r:(l[t.name]=t,t)}function p(n){n=n||l;for(var t in n)if(n.hasOwnProperty(t)&&n[t].state!==a)return!1;return!0}function ht(n){n.state=ot,u(n.onpreload,function(n){n.call()})}function ct(n){n.state===t&&(n.state=tt,n.onpreload=[],ft({url:n.url,type:"cache"},function(){ht(n)}))}function w(n,t){if(t=t||v,n.state===a){t();return}if(n.state===it){i.ready(n.name,t);return}if(n.state===tt){n.onpreload.push(function(){w(n,t)});return}n.state=it,ft(n,function(){n.state=a,t(),u(s[n.name],function(n){f(n)}),o&&p()&&u(s.ALL,function(n){f(n)})})}function ft(t,i){function e(t){t=t||n.event,u.onload=u.onreadystatechange=u.onerror=null,i()}function o(t){t=t||n.event,(t.type==="load"||/loaded|complete/.test(u.readyState)&&(!r.documentMode||r.documentMode<9))&&(u.onload=u.onreadystatechange=u.onerror=null,i())}var u,f;i=i||v,/\.css[^\.]*$/.test(t.url)?(u=r.createElement("link"),u.type="text/"+(t.type||"css"),u.rel="stylesheet",u.href=t.url):(u=r.createElement("script"),u.type="text/"+(t.type||"javascript"),u.src=t.url),u.onload=u.onreadystatechange=o,u.onerror=e,u.async=!1,u.defer=!1,f=r.head||r.getElementsByTagName("head")[0],f.insertBefore(u,f.lastChild)}function e(){if(!r.body){n.clearTimeout(i.readyTimeout),i.readyTimeout=n.setTimeout(e,50);return}o||(o=!0,u(k,function(n){f(n)}))}function b(){r.addEventListener?(r.removeEventListener("DOMContentLoaded",b,!1),e()):r.readyState==="complete"&&(r.detachEvent("onreadystatechange",b),e())}var r=n.document,k=[],d=[],s={},l={},et="async"in r.createElement("script")||"MozAppearance"in r.documentElement.style||n.opera,g,o,nt=n.head_conf&&n.head_conf.head||"head",i=n[nt]=n[nt]||function(){i.ready.apply(null,arguments)},tt=1,ot=2,it=3,a=4,c;if(i.load=et?function(){var t=arguments,n=t[t.length-1],r={};return h(n)||(n=null),u(t,function(i,u){i!==n&&(i=y(i),r[i.name]=i,w(i,n&&u===t.length-2?function(){p(r)&&f(n)}:null))}),i}:function(){var n=arguments,t=[].slice.call(n,1),r=t[0];return g?(r?(u(t,function(n){h(n)||ct(y(n))}),w(y(n[0]),h(r)?r:function(){i.load.apply(null,t)})):w(y(n[0])),i):(d.push(function(){i.load.apply(null,n)}),i)},i.js=i.load,i.test=function(n,t,r,u){var f=typeof n=="object"?n:{test:n,success:!t?!1:ut(t)?t:[t],failure:!r?!1:ut(r)?r:[r],callback:u||v},e=!!f.test;return e&&!!f.success?(f.success.push(f.callback),i.load.apply(null,f.success)):e||!f.failure?u():(f.failure.push(f.callback),i.load.apply(null,f.failure)),i},i.ready=function(n,t){var e,u;return n===r?(o?f(t):k.push(t),i):(h(n)&&(t=n,n="ALL"),typeof n!="string"||!h(t))?i:(e=l[n],e&&e.state===a||n==="ALL"&&p()&&o)?(f(t),i):(u=s[n],u?u.push(t):u=s[n]=[t],i)},i.ready(r,function(){p()&&u(s.ALL,function(n){f(n)}),i.feature&&i.feature("domloaded",!0)}),r.readyState==="complete")e();else if(r.addEventListener)r.addEventListener("DOMContentLoaded",b,!1),n.addEventListener("load",e,!1);else{r.attachEvent("onreadystatechange",b),n.attachEvent("onload",e),c=!1;try{c=!n.frameElement&&r.documentElement}catch(at){}c&&c.doScroll&&function lt(){if(!o){try{c.doScroll("left")}catch(t){n.clearTimeout(i.readyTimeout),i.readyTimeout=n.setTimeout(lt,50);return}e()}}()}setTimeout(function(){g=!0,u(d,function(n){n()})},300)})(window);
|
||||
//# sourceMappingURL=head.load.min.js.map
|
||||
File diff suppressed because one or more lines are too long
Vendored
+2
-17
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user