UNPKG

landers.base

Version:

landers.base

153 lines (150 loc) 6.69 kB
; (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);