/*!
@Name:layer mobile v2.0 弹层组件移动版
@Author:贤心
@Site:http://layer.layui.com/mobie/
@License:LGPL
*/
;!function (win) {
"use strict";
var doc = document, query = 'querySelectorAll', claname = 'getElementsByClassName', S = function (s) {
return doc[query](s);
};
//默认配置
var config = {
type: 0
, shade: true
, shadeClose: true
, fixed: true
, anim: 'scale' //默认动画类型
};
var ready = {
extend: function (obj) {
var newobj = JSON.parse(JSON.stringify(config));
for (var i in obj) {
newobj[i] = obj[i];
}
return newobj;
},
timer: {}, end: {}
};
//点触事件
ready.touch = function (elem, fn) {
elem.addEventListener('click', function (e) {
fn.call(this, e);
}, false);
};
var index = 0, classs = ['layui-m-layer'], Layer = function (options) {
var that = this;
that.config = ready.extend(options);
that.view();
};
Layer.prototype.view = function () {
var that = this, config = that.config, layerbox = doc.createElement('div');
that.id = layerbox.id = classs[0] + index;
layerbox.setAttribute('class', classs[0] + ' ' + classs[0] + (config.type || 0));
layerbox.setAttribute('index', index);
//标题区域
var title = (function () {
var titype = typeof config.title === 'object';
return config.title
? '
' + (titype ? config.title[0] : config.title) + '
'
: '';
}());
//按钮区域
var button = (function () {
typeof config.btn === 'string' && (config.btn = [config.btn]);
var btns = (config.btn || []).length, btndom;
if (btns === 0 || !config.btn) {
return '';
}
btndom = '' + config.btn[0] + ''
if (btns === 2) {
btndom = '' + config.btn[1] + '' + btndom;
}
return '' + btndom + '
';
}());
if (!config.fixed) {
config.top = config.hasOwnProperty('top') ? config.top : 100;
config.style = config.style || '';
config.style += ' top:' + ( doc.body.scrollTop + config.top) + 'px';
}
if (config.type === 2) {
config.content = '' + (config.content || '') + '
';
}
if (config.skin) config.anim = 'up';
if (config.skin === 'msg') config.shade = false;
layerbox.innerHTML = (config.shade ? '' : '')
+ ''
+ '
'
+ '
'
+ title
+ '
' + config.content + '
'
+ button
+ '
'
+ '
'
+ '
';
if (!config.type || config.type === 2) {
var dialogs = doc[claname](classs[0] + config.type), dialen = dialogs.length;
if (dialen >= 1) {
layer.close(dialogs[0].getAttribute('index'))
}
}
document.body.appendChild(layerbox);
var elem = that.elem = S('#' + that.id)[0];
config.success && config.success(elem);
that.index = index++;
that.action(config, elem);
};
Layer.prototype.action = function (config, elem) {
var that = this;
//自动关闭
if (config.time) {
ready.timer[that.index] = setTimeout(function () {
layer.close(that.index);
}, config.time * 1000);
}
//确认取消
var btn = function () {
var type = this.getAttribute('type');
if (type == 0) {
config.no && config.no();
layer.close(that.index);
} else {
config.yes ? config.yes(that.index) : layer.close(that.index);
}
};
if (config.btn) {
var btns = elem[claname]('layui-m-layerbtn')[0].children, btnlen = btns.length;
for (var ii = 0; ii < btnlen; ii++) {
ready.touch(btns[ii], btn);
}
}
//点遮罩关闭
if (config.shade && config.shadeClose) {
var shade = elem[claname]('layui-m-layershade')[0];
ready.touch(shade, function () {
layer.close(that.index, config.end);
});
}
config.end && (ready.end[that.index] = config.end);
};
win.layer = {
v: '2.0',
index: index,
//核心方法
open: function (options) {
var o = new Layer(options || {});
return o.index;
},
close: function (index) {
var ibox = S('#' + classs[0] + index)[0];
if (!ibox) return;
ibox.innerHTML = '';
doc.body.removeChild(ibox);
clearTimeout(ready.timer[index]);
delete ready.timer[index];
typeof ready.end[index] === 'function' && ready.end[index]();
delete ready.end[index];
},
//关闭所有layer层
closeAll: function () {
var boxs = doc[claname](classs[0]);
for (var i = 0, len = boxs.length; i < len; i++) {
layer.close((boxs[0].getAttribute('index') | 0));
}
}
};
'function' == typeof define ? define(function () {
return layer;
}) : function () {
var js = document.scripts, script = js[js.length - 1], jsPath = script.src;
var path = jsPath.substring(0, jsPath.lastIndexOf("/") + 1);
//如果合并方式,则需要单独引入layer.css
if (script.getAttribute('merge')) return;
document.head.appendChild(function () {
var link = doc.createElement('link');
link.href = path + 'need/layer.css?2.0';
link.type = 'text/css';
link.rel = 'styleSheet'
link.id = 'layermcss';
return link;
}());
}();
}(window);