mirror of https://github.com/layui/layui
优化 代码排版,统一风格
parent
10f767541f
commit
fb88341aff
199
src/layui.js
199
src/layui.js
|
@ -7,26 +7,27 @@
|
||||||
;!function(win){
|
;!function(win){
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var doc = win.document, config = {
|
var doc = win.document;
|
||||||
modules: {} // 模块物理路径
|
var config = {
|
||||||
,status: {} // 模块加载状态
|
modules: {}, // 模块物理路径
|
||||||
,timeout: 10 // 符合规范的模块请求最长等待秒数
|
status: {}, // 模块加载状态
|
||||||
,event: {} // 模块自定义事件
|
timeout: 10, // 符合规范的模块请求最长等待秒数
|
||||||
}
|
event: {} // 模块自定义事件
|
||||||
|
};
|
||||||
|
|
||||||
,Layui = function(){
|
var Layui = function(){
|
||||||
this.v = '2.8.1'; // Layui 版本号
|
this.v = '2.8.1'; // Layui 版本号
|
||||||
}
|
};
|
||||||
|
|
||||||
// 识别预先可能定义的指定全局对象
|
// 识别预先可能定义的指定全局对象
|
||||||
,GLOBAL = win.LAYUI_GLOBAL || {}
|
var GLOBAL = win.LAYUI_GLOBAL || {};
|
||||||
|
|
||||||
// 获取 layui 所在目录
|
// 获取 layui 所在目录
|
||||||
,getPath = function(){
|
var getPath = function(){
|
||||||
var jsPath = doc.currentScript ? doc.currentScript.src : function(){
|
var jsPath = doc.currentScript ? doc.currentScript.src : function(){
|
||||||
var js = doc.scripts
|
var js = doc.scripts;
|
||||||
,last = js.length - 1
|
var last = js.length - 1;
|
||||||
,src;
|
var src;
|
||||||
for(var i = last; i > 0; i--){
|
for(var i = last; i > 0; i--){
|
||||||
if(js[i].readyState === 'interactive'){
|
if(js[i].readyState === 'interactive'){
|
||||||
src = js[i].src;
|
src = js[i].src;
|
||||||
|
@ -37,42 +38,42 @@
|
||||||
}();
|
}();
|
||||||
|
|
||||||
return config.dir = GLOBAL.dir || jsPath.substring(0, jsPath.lastIndexOf('/') + 1);
|
return config.dir = GLOBAL.dir || jsPath.substring(0, jsPath.lastIndexOf('/') + 1);
|
||||||
}()
|
}();
|
||||||
|
|
||||||
// 异常提示
|
// 异常提示
|
||||||
,error = function(msg, type){
|
var error = function(msg, type){
|
||||||
type = type || 'log';
|
type = type || 'log';
|
||||||
win.console && console[type] && console[type]('layui error hint: ' + msg);
|
win.console && console[type] && console[type]('layui error hint: ' + msg);
|
||||||
}
|
};
|
||||||
|
|
||||||
,isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]'
|
var isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]';
|
||||||
|
|
||||||
// 内置模块
|
// 内置模块
|
||||||
,modules = config.builtin = {
|
var modules = config.builtin = {
|
||||||
lay: 'lay' // 基础 DOM 操作
|
lay: 'lay', // 基础 DOM 操作
|
||||||
,layer: 'layer' // 弹层
|
layer: 'layer', // 弹层
|
||||||
,laydate: 'laydate' // 日期
|
laydate: 'laydate', // 日期
|
||||||
,laypage: 'laypage' // 分页
|
laypage: 'laypage', // 分页
|
||||||
,laytpl: 'laytpl' // 模板引擎
|
laytpl: 'laytpl', // 模板引擎
|
||||||
,form: 'form' // 表单集
|
form: 'form', // 表单集
|
||||||
,upload: 'upload' // 上传
|
upload: 'upload', // 上传
|
||||||
,dropdown: 'dropdown' // 下拉菜单
|
dropdown: 'dropdown', // 下拉菜单
|
||||||
,transfer: 'transfer' // 穿梭框
|
transfer: 'transfer', // 穿梭框
|
||||||
,tree: 'tree' // 树结构
|
tree: 'tree', // 树结构
|
||||||
,table: 'table' // 表格
|
table: 'table', // 表格
|
||||||
,treeTable: 'treeTable' // 树表
|
treeTable: 'treeTable', // 树表
|
||||||
,element: 'element' // 常用元素操作
|
element: 'element', // 常用元素操作
|
||||||
,rate: 'rate' // 评分组件
|
rate: 'rate', // 评分组件
|
||||||
,colorpicker: 'colorpicker' // 颜色选择器
|
colorpicker: 'colorpicker', // 颜色选择器
|
||||||
,slider: 'slider' // 滑块
|
slider: 'slider', // 滑块
|
||||||
,carousel: 'carousel' // 轮播
|
carousel: 'carousel', // 轮播
|
||||||
,flow: 'flow' // 流加载
|
flow: 'flow', // 流加载
|
||||||
,util: 'util' // 工具块
|
util: 'util', // 工具块
|
||||||
,code: 'code' // 代码修饰器
|
code: 'code', // 代码修饰器
|
||||||
,jquery: 'jquery' // DOM 库(第三方)
|
jquery: 'jquery', // DOM 库(第三方)
|
||||||
|
|
||||||
,all: 'all'
|
all: 'all',
|
||||||
,'layui.all': 'layui.all' // 聚合标识(功能性的,非真实模块)
|
'layui.all': 'layui.all' // 聚合标识(功能性的,非真实模块)
|
||||||
};
|
};
|
||||||
|
|
||||||
// 记录基础数据
|
// 记录基础数据
|
||||||
|
@ -80,9 +81,9 @@
|
||||||
|
|
||||||
// 定义模块
|
// 定义模块
|
||||||
Layui.prototype.define = function(deps, factory){
|
Layui.prototype.define = function(deps, factory){
|
||||||
var that = this
|
var that = this;
|
||||||
,type = typeof deps === 'function'
|
var type = typeof deps === 'function';
|
||||||
,callback = function(){
|
var callback = function(){
|
||||||
var setApp = function(app, exports){
|
var setApp = function(app, exports){
|
||||||
layui[app] = exports;
|
layui[app] = exports;
|
||||||
config.status[app] = true;
|
config.status[app] = true;
|
||||||
|
@ -107,9 +108,9 @@
|
||||||
|
|
||||||
// 使用特定模块
|
// 使用特定模块
|
||||||
Layui.prototype.use = function(apps, callback, exports, from){
|
Layui.prototype.use = function(apps, callback, exports, from){
|
||||||
var that = this
|
var that = this;
|
||||||
,dir = config.dir = config.dir ? config.dir : getPath
|
var dir = config.dir = config.dir ? config.dir : getPath;
|
||||||
,head = doc.getElementsByTagName('head')[0];
|
var head = doc.getElementsByTagName('head')[0];
|
||||||
|
|
||||||
apps = function(){
|
apps = function(){
|
||||||
if(typeof apps === 'string'){
|
if(typeof apps === 'string'){
|
||||||
|
@ -133,8 +134,9 @@
|
||||||
layui.jquery = layui.$ = jQuery;
|
layui.jquery = layui.$ = jQuery;
|
||||||
}
|
}
|
||||||
|
|
||||||
var item = apps[0]
|
var item = apps[0];
|
||||||
,timeout = 0;
|
var timeout = 0;
|
||||||
|
|
||||||
exports = exports || [];
|
exports = exports || [];
|
||||||
|
|
||||||
// 静态资源host
|
// 静态资源host
|
||||||
|
@ -259,16 +261,16 @@
|
||||||
|
|
||||||
// css 外部加载器
|
// css 外部加载器
|
||||||
Layui.prototype.link = function(href, fn, cssname){
|
Layui.prototype.link = function(href, fn, cssname){
|
||||||
var that = this
|
var that = this;
|
||||||
,head = doc.getElementsByTagName('head')[0]
|
var head = doc.getElementsByTagName('head')[0];
|
||||||
,link = doc.createElement('link');
|
var link = doc.createElement('link');
|
||||||
|
|
||||||
if(typeof fn === 'string') cssname = fn;
|
if(typeof fn === 'string') cssname = fn;
|
||||||
|
|
||||||
var app = (cssname || href).replace(/\.|\//g, '')
|
var app = (cssname || href).replace(/\.|\//g, '');
|
||||||
,id = link.id = 'layuicss-'+ app
|
var id = link.id = 'layuicss-'+ app;
|
||||||
,STAUTS_NAME = 'creating'
|
var STAUTS_NAME = 'creating';
|
||||||
,timeout = 0;
|
var timeout = 0;
|
||||||
|
|
||||||
link.rel = 'stylesheet';
|
link.rel = 'stylesheet';
|
||||||
link.href = href + (config.debug ? '?v='+new Date().getTime() : '');
|
link.href = href + (config.debug ? '?v='+new Date().getTime() : '');
|
||||||
|
@ -282,8 +284,8 @@
|
||||||
|
|
||||||
// 轮询 css 是否加载完毕
|
// 轮询 css 是否加载完毕
|
||||||
(function poll(status) {
|
(function poll(status) {
|
||||||
var delay = 100
|
var delay = 100;
|
||||||
,getLinkElem = doc.getElementById(id); // 获取动态插入的 link 元素
|
var getLinkElem = doc.getElementById(id); // 获取动态插入的 link 元素
|
||||||
|
|
||||||
// 如果轮询超过指定秒数,则视为请求文件失败或 css 文件不符合规范
|
// 如果轮询超过指定秒数,则视为请求文件失败或 css 文件不符合规范
|
||||||
if(++timeout > config.timeout * 1000 / delay){
|
if(++timeout > config.timeout * 1000 / delay){
|
||||||
|
@ -390,15 +392,16 @@
|
||||||
|
|
||||||
// location.hash 路由解析
|
// location.hash 路由解析
|
||||||
Layui.prototype.router = Layui.prototype.hash = function(hash){
|
Layui.prototype.router = Layui.prototype.hash = function(hash){
|
||||||
var that = this
|
var that = this;
|
||||||
,hash = hash || location.hash
|
var hash = hash || location.hash;
|
||||||
,data = {
|
var data = {
|
||||||
path: []
|
path: [],
|
||||||
,search: {}
|
search: {},
|
||||||
,hash: (hash.match(/[^#](#.*$)/) || [])[1] || ''
|
hash: (hash.match(/[^#](#.*$)/) || [])[1] || ''
|
||||||
};
|
};
|
||||||
|
|
||||||
if(!/^#\//.test(hash)) return data; // 禁止非路由规范
|
if(!/^#\//.test(hash)) return data; // 禁止非路由规范
|
||||||
|
|
||||||
hash = hash.replace(/^#\//, '');
|
hash = hash.replace(/^#\//, '');
|
||||||
data.href = '/' + hash;
|
data.href = '/' + hash;
|
||||||
hash = hash.replace(/([^#])(#.*$)/, '$1').split('/') || [];
|
hash = hash.replace(/([^#])(#.*$)/, '$1').split('/') || [];
|
||||||
|
@ -416,8 +419,8 @@
|
||||||
|
|
||||||
// URL 解析
|
// URL 解析
|
||||||
Layui.prototype.url = function(href){
|
Layui.prototype.url = function(href){
|
||||||
var that = this
|
var that = this;
|
||||||
,data = {
|
var data = {
|
||||||
// 提取 url 路径
|
// 提取 url 路径
|
||||||
pathname: function(){
|
pathname: function(){
|
||||||
var pathname = href
|
var pathname = href
|
||||||
|
@ -427,12 +430,12 @@
|
||||||
}()
|
}()
|
||||||
: location.pathname;
|
: location.pathname;
|
||||||
return pathname.replace(/^\//, '').split('/');
|
return pathname.replace(/^\//, '').split('/');
|
||||||
}()
|
}(),
|
||||||
|
|
||||||
// 提取 url 参数
|
// 提取 url 参数
|
||||||
,search: function(){
|
search: function(){
|
||||||
var obj = {}
|
var obj = {};
|
||||||
,search = (href
|
var search = (href
|
||||||
? function(){
|
? function(){
|
||||||
var str = (href.match(/\?.+/) || [])[0] || '';
|
var str = (href.match(/\?.+/) || [])[0] || '';
|
||||||
return str.replace(/\#.+/, '');
|
return str.replace(/\#.+/, '');
|
||||||
|
@ -459,10 +462,10 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
}()
|
}(),
|
||||||
|
|
||||||
// 提取 Hash
|
// 提取 Hash
|
||||||
,hash: that.router(function(){
|
hash: that.router(function(){
|
||||||
return href
|
return href
|
||||||
? ((href.match(/#.+/) || [])[0] || '/')
|
? ((href.match(/#.+/) || [])[0] || '/')
|
||||||
: location.hash;
|
: location.hash;
|
||||||
|
@ -508,17 +511,17 @@
|
||||||
|
|
||||||
// 设备信息
|
// 设备信息
|
||||||
Layui.prototype.device = function(key){
|
Layui.prototype.device = function(key){
|
||||||
var agent = navigator.userAgent.toLowerCase()
|
var agent = navigator.userAgent.toLowerCase();
|
||||||
|
|
||||||
// 获取版本号
|
// 获取版本号
|
||||||
,getVersion = function(label){
|
var getVersion = function(label){
|
||||||
var exp = new RegExp(label + '/([^\\s\\_\\-]+)');
|
var exp = new RegExp(label + '/([^\\s\\_\\-]+)');
|
||||||
label = (agent.match(exp)||[])[1];
|
label = (agent.match(exp)||[])[1];
|
||||||
return label || false;
|
return label || false;
|
||||||
}
|
};
|
||||||
|
|
||||||
// 返回结果集
|
// 返回结果集
|
||||||
,result = {
|
var result = {
|
||||||
os: function(){ // 底层操作系统
|
os: function(){ // 底层操作系统
|
||||||
if(/windows/.test(agent)){
|
if(/windows/.test(agent)){
|
||||||
return 'windows';
|
return 'windows';
|
||||||
|
@ -529,13 +532,13 @@
|
||||||
} else if(/mac/.test(agent)){
|
} else if(/mac/.test(agent)){
|
||||||
return 'mac';
|
return 'mac';
|
||||||
}
|
}
|
||||||
}()
|
}(),
|
||||||
,ie: function(){ // ie 版本
|
ie: function(){ // ie 版本
|
||||||
return (!!win.ActiveXObject || "ActiveXObject" in win) ? (
|
return (!!win.ActiveXObject || "ActiveXObject" in win) ? (
|
||||||
(agent.match(/msie\s(\d+)/) || [])[1] || '11' // 由于 ie11 并没有 msie 的标识
|
(agent.match(/msie\s(\d+)/) || [])[1] || '11' // 由于 ie11 并没有 msie 的标识
|
||||||
) : false;
|
) : false;
|
||||||
}()
|
}(),
|
||||||
,weixin: getVersion('micromessenger') // 是否微信
|
weixin: getVersion('micromessenger') // 是否微信
|
||||||
};
|
};
|
||||||
|
|
||||||
// 任意的 key
|
// 任意的 key
|
||||||
|
@ -564,8 +567,8 @@
|
||||||
|
|
||||||
// 细分引用类型
|
// 细分引用类型
|
||||||
return (typeof operand === 'object' || typeof operand === 'function') ? function(){
|
return (typeof operand === 'object' || typeof operand === 'function') ? function(){
|
||||||
var type = Object.prototype.toString.call(operand).match(/\s(.+)\]$/) || [] // 匹配类型字符
|
var type = Object.prototype.toString.call(operand).match(/\s(.+)\]$/) || []; // 匹配类型字符
|
||||||
,classType = 'Function|Array|Date|RegExp|Object|Error|Symbol'; // 常见类型字符
|
var classType = 'Function|Array|Date|RegExp|Object|Error|Symbol'; // 常见类型字符
|
||||||
|
|
||||||
type = type[1] || 'Object';
|
type = type[1] || 'Object';
|
||||||
|
|
||||||
|
@ -578,9 +581,9 @@
|
||||||
|
|
||||||
// 对象是否具备数组结构(此处为兼容 jQuery 对象)
|
// 对象是否具备数组结构(此处为兼容 jQuery 对象)
|
||||||
Layui.prototype._isArray = Layui.prototype.isArray = function(obj){
|
Layui.prototype._isArray = Layui.prototype.isArray = function(obj){
|
||||||
var that = this
|
var that = this;
|
||||||
,len
|
var len;
|
||||||
,type = that.type(obj);
|
var type = that.type(obj);
|
||||||
|
|
||||||
if(!obj || (typeof obj !== 'object') || obj === win) return false;
|
if(!obj || (typeof obj !== 'object') || obj === win) return false;
|
||||||
|
|
||||||
|
@ -592,9 +595,9 @@
|
||||||
|
|
||||||
// 遍历
|
// 遍历
|
||||||
Layui.prototype.each = function(obj, fn){
|
Layui.prototype.each = function(obj, fn){
|
||||||
var key
|
var key;
|
||||||
,that = this
|
var that = this;
|
||||||
,callFn = function(key, obj){ // 回调
|
var callFn = function(key, obj){ // 回调
|
||||||
return fn.call(obj[key], key, obj[key])
|
return fn.call(obj[key], key, obj[key])
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -617,8 +620,8 @@
|
||||||
|
|
||||||
// 将数组中的成员对象按照某个 key 的 value 值进行排序
|
// 将数组中的成员对象按照某个 key 的 value 值进行排序
|
||||||
Layui.prototype.sort = function(arr, key, desc, notClone){
|
Layui.prototype.sort = function(arr, key, desc, notClone){
|
||||||
var that = this
|
var that = this;
|
||||||
,clone = notClone ? (arr || []) : JSON.parse(
|
var clone = notClone ? (arr || []) : JSON.parse(
|
||||||
JSON.stringify(arr || [])
|
JSON.stringify(arr || [])
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -631,8 +634,8 @@
|
||||||
|
|
||||||
// 开始排序
|
// 开始排序
|
||||||
clone.sort(function(o1, o2){
|
clone.sort(function(o1, o2){
|
||||||
var v1 = o1[key]
|
var v1 = o1[key];
|
||||||
,v2 = o2[key];
|
var v2 = o2[key];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 特殊数据
|
* 特殊数据
|
||||||
|
@ -726,12 +729,12 @@
|
||||||
|
|
||||||
// 执行自定义模块事件
|
// 执行自定义模块事件
|
||||||
Layui.prototype.event = Layui.event = function(modName, events, params, fn){
|
Layui.prototype.event = Layui.event = function(modName, events, params, fn){
|
||||||
var that = this
|
var that = this;
|
||||||
,result = null
|
var result = null;
|
||||||
,filter = (events || '').match(/\((.*)\)$/)||[] // 提取事件过滤器字符结构,如:select(xxx)
|
var filter = (events || '').match(/\((.*)\)$/)||[]; // 提取事件过滤器字符结构,如:select(xxx)
|
||||||
,eventName = (modName + '.'+ events).replace(filter[0], '') // 获取事件名称,如:form.select
|
var eventName = (modName + '.'+ events).replace(filter[0], ''); // 获取事件名称,如:form.select
|
||||||
,filterName = filter[1] || '' // 获取过滤器名称,,如:xxx
|
var filterName = filter[1] || ''; // 获取过滤器名称,,如:xxx
|
||||||
,callback = function(_, item){
|
var callback = function(_, item){
|
||||||
var res = item && item.call(that, params);
|
var res = item && item.call(that, params);
|
||||||
res === false && result === null && (result = false);
|
res === false && result === null && (result = false);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue