landers.base
Version:
landers.base
153 lines (150 loc) • 6.69 kB
JavaScript
; (function (window, $, Landers) {
Landers = Landers || {};
Landers.loader = {
delay:300, counts:0,
is_ready:function(o){
return !o.readyState ||
o.readyState === 'loaded' ||
o.readyState === 'complete';
},
onload_callback:function(o, callback){
var me = this;
if (navigator.userAgent.toLowerCase().match(/apple/) === null) {
o.onload = o.onreadystatechange = function() {
if (me.is_ready(o)) {
o.onload = o.onreadystatechange = null;
callback && setTimeout(callback , me.delay);
}
};
} else callback && setTimeout(callback , me.delay);
},
js:function(urls, callback, opts){//opts = {is_jq, win}
opts = opts || {};var load;
if (!Landers.utils.is_array(urls)) urls = [urls];
if (opts.is_jq === false || !window.$ || !$.getScript) {
var me = this, owin = opts.win || window, doc = owin.document;
var ohead = doc.getElementsByTagName('head').item(0);
load = function(url, _callback){
var o = doc.createElement('script');
var src = !Landers.env.cache ? Landers.url.qs.set( url, {_:Math.random()} ) : url;
o.setAttribute("src", src);
ohead.appendChild(o);
me.onload_callback(o, _callback);
return o;
};
} else {
$.ajaxSetup({cache:!!Landers.env.cache});
load = function(url, _callback) {
$.getScript(url, _callback);
return $();
};
}
if (urls.length == 1) {
return load(urls[0], callback);
} else {
(function(i){
var self = arguments.callee;
var url = urls[i];
if (url) {
load(url, function(){
self(i+1);
});
} else {
callback && callback();
}
})(0);
}
},
jsm:function(mods, callback, opts){//opts = {is_jq, win}
if (!Landers.dynamicLoad) return callback && callback();
var is_css = opts === true; //兼容老式(第三参数为 has_css)调用
opts = is_css ? {} : (opts || {});
opts.checks = opts.checks || [];
if (!Landers.utils.is_array(opts.checks)) opts.checks = [opts.checks];
var me = this, ret = {modules:[], css:$(), js:$()};
var script = Landers.env.path.script;
var that = this;
var loadmod = function(mod, _callback) {
var a = mod.split(',');
var modname = a[0], css = is_css || a[1], force = a[2];
css = css === '0' || css === 'false' || css ==='' ? false : css;
var path = script + modname + '/';
var jsurl = path + modname + '.js';
var __callback = function(){
setTimeout(function(){
if (_callback) _callback();
}, 200);
};
var onload = function(){
var module = Landers[modname];
if (!module) module = Landers[modname] = {};
ret.modules.push(module);
module.mod_path = path;
if (Landers.utils.is_fun(module.mod_init)) {
module.mod_init(__callback);
} else __callback();
};
if (!Landers[modname] || force) {
//console.log('loading module [' + modname + ']');
if (css) {
var cssurl = path + (Landers.utils.to.bool(css) ? modname + '.css' : (css.lastIndexOf('.css') > -1 ? css : (css + '/' + modname + '.css')));
ret.css = ret.css.add(me.css(cssurl, function(){
ret.js = ret.js.add(me.js(jsurl, onload, opts));
}, opts));
} else {
ret.js.push(me.js(jsurl, onload, opts));
}
} else {
ret.modules.push(Landers[modname]);
__callback();
}
};
if (!Landers.utils.is_array(mods)) mods = [mods];
var is_ispin = (function(){
var bool = false;
for (var i=0; i<mods.length-1; i++) {
var a = mods[i].split(',');
bool = bool || !Landers[a[0]];
}
return bool;
})();
(function(i){
var self = arguments.callee;
if (i < mods.length) {
if (opts.checks[i]) {
self(i+1); that.counts++;
} else {
loadmod(mods[i], function(){
self(i+1); that.counts++;
});
}
} else {
callback && callback.call(mods.length == 1 ? ret.modules[0] : ret, ret);
}
})(0);
},
css:function(url, callback, opts){ //opts: win
opts = opts || {};
var owin = opts.win || window; var doc = owin.document;
var ohead = doc.getElementsByTagName('head').item(0);
var me = this, o = doc.createElement('link');
var href = !Landers.env.cache && Landers.url ? Landers.url.qs.set(url, {_:Math.random()}) : url;
o.setAttribute("href", href);
o.setAttribute("rel", "Stylesheet");
o.setAttribute("type", "text/css");
ohead.appendChild(o);
me.onload_callback(o, callback); return $(o);
},
cssm:function(mods, callback){
if (!Landers.dynamicLoad) return callback();
var me = this;
if (Landers.utils.is_string(mods)) mods = mods.split(',');
(function(i){
var self = arguments.callee;
var _callback = i > mods.length ? function(){self(i+1);} : callback;
var mod = $.trim(mods[i]);
me.css(Landers.env.path.ui.css + mod + '/' + mod + '.css', _callback);
})(0);
}
};
})(this, jQuery, Landers);