layui.define(['jquery', 'element'], function(exports) {
"use strict";
var MOD_NAME = 'tab',
$ = layui.jquery,
element = layui.element;
var pearTab = function(opt) {
this.option = opt;
};
pearTab.prototype.render = function(opt) {
//默认配置值
var option = {
elem: opt.elem,
data: opt.data,
tool: opt.tool,
roll: opt.roll,
index: opt.index,
width: opt.width,
height: opt.height,
tabMax: opt.tabMax,
closeEvent: opt.closeEvent
}
var tab = createTab(option);
$("#" + option.elem).html(tab);
$(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-prev").click(function() {
rollPage("left", option);
})
$(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-next").click(function() {
rollPage("right", option);
})
element.init();
toolEvent(option);
$("#" + option.elem).width(opt.width);
$("#" + option.elem).height(opt.height);
$("#" + option.elem).css({
position: "relative"
});
closeEvent(option);
return new pearTab(option);
}
pearTab.prototype.click = function(callback) {
var elem = this.option.elem;
element.on('tab(' + this.option.elem + ')', function(data) {
var id = $("#" + elem + " .layui-tab-title .layui-this").attr("lay-id");
callback(id);
});
}
pearTab.prototype.positionTab = function() {
var $tabTitle = $('.layui-tab[lay-filter=' + this.option.elem + '] .layui-tab-title');
var autoLeft = 0;
$tabTitle.children("li").each(function() {
if ($(this).hasClass('layui-this')) {
return false;
} else {
autoLeft += $(this).outerWidth();
}
});
$tabTitle.animate({
scrollLeft: autoLeft - $tabTitle.width() / 3
}, 200);
}
pearTab.prototype.addTab = function(opt) {
var title = '';
if (opt.close) {
title += '' + opt.title +
'ဆ';
} else {
title += '' + opt.title +
'ဆ';
}
element.tabAdd(this.option.elem, {
title: title,
content: '',
id: opt.id
});
element.tabChange(this.option.elem, opt.id);
}
var index = 0;
// 根据过滤 filter 标识, 删除执行选项卡
pearTab.prototype.delTabByElem = function(elem, id, callback){
var currentTab = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title [lay-id='"+id+"']");
if (currentTab.find("span").is(".able-close")) {
tabDelete(elem, id, callback);
}
}
// 根据过滤 filter 标识, 删除当前选项卡
pearTab.prototype.delCurrentTabByElem = function(elem,callback){
var currentTab = $(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title .layui-this");
if (currentTab.find("span").is(".able-close")) {
var currentId = currentTab.attr("lay-id");
tabDelete(elem, currentId, callback);
}
}
// 通过过滤 filter 标识, 新增标签页
pearTab.prototype.addTabOnlyByElem = function(elem, opt, time) {
var title = '';
if (opt.close) {
title += '' + opt.title +
'ဆ'
} else {
title += '' + opt.title +
'ဆ'
}
if ($(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title li[lay-id]").length <= 0) {
if (time != false && time != 0) {
var load = '
'
$("#" + elem).find(".pear-tab").append(load);
var pearLoad = $("#" + elem).find("#pear-tab-loading" + index);
pearLoad.css({
display: "block"
});
setTimeout(function() {
pearLoad.fadeOut(500);
}, time);
index++;
}
element.tabAdd(elem, {
title: title,
content: '',
id: opt.id
});
} else {
var isData = false;
$.each($(".layui-tab[lay-filter='" + elem + "'] .layui-tab-title li[lay-id]"), function() {
if ($(this).attr("lay-id") == opt.id) {
isData = true;
}
})
if (isData == false) {
if (time != false && time != 0) {
var load = ''
$("#" + elem).find(".pear-tab").append(load);
var pearLoad = $("#" + elem).find("#pear-tab-loading" + index);
pearLoad.css({
display: "block"
});
setTimeout(function() {
pearLoad.fadeOut(500);
}, time);
index++;
}
element.tabAdd(elem, {
title: title,
content: '',
id: opt.id
});
}
}
element.tabChange(elem, opt.id);
}
/** 添 加 唯 一 选 项 卡 */
pearTab.prototype.addTabOnly = function(opt, time) {
var title = '';
if (opt.close) {
title += '' + opt.title +
'ဆ'
} else {
title += '' + opt.title +
'ဆ'
}
if ($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]").length <= 0) {
if (time != false && time != 0) {
var load = ''
$("#" + this.option.elem).find(".pear-tab").append(load);
var pearLoad = $("#" + this.option.elem).find("#pear-tab-loading" + index);
pearLoad.css({
display: "block"
});
setTimeout(function() {
pearLoad.fadeOut(500);
}, time);
index++;
}
element.tabAdd(this.option.elem, {
title: title,
content: '',
id: opt.id
});
} else {
var isData = false;
//查询当前选项卡数量
if ($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]").length >= this.option.tabMax) {
layer.msg("最多打开" + this.option.tabMax + "个标签页", {
icon: 2,
time: 1000,
shift : 6 //抖动效果
});
return false;
}
$.each($(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-title li[lay-id]"), function() {
if ($(this).attr("lay-id") == opt.id) {
isData = true;
}
})
if (isData == false) {
if (time != false && time != 0) {
var load = ''
$("#" + this.option.elem).find(".pear-tab").append(load);
var pearLoad = $("#" + this.option.elem).find("#pear-tab-loading" + index);
pearLoad.css({
display: "block"
});
setTimeout(function() {
pearLoad.fadeOut(500);
}, time);
index++;
}
element.tabAdd(this.option.elem, {
title: title,
content: '',
id: opt.id
});
}
}
element.tabChange(this.option.elem, opt.id);
}
// 刷 新 指 定 的 选 项 卡
pearTab.prototype.refresh = function(time) {
// 刷 新 指 定 的 选 项 卡
if (time != false && time != 0) {
var load = ''
var elem = this.option.elem;
$("#" + this.option.elem).find(".pear-tab").append(load);
var pearLoad = $("#" + this.option.elem).find("#pear-tab-loading" + index);
pearLoad.css({
display: "block"
});
index++;
setTimeout(function() {
pearLoad.fadeOut(500,function(){
pearLoad.remove();
});
}, time);
$(".layui-tab[lay-filter='" + elem + "'] .layui-tab-content .layui-show").find("iframe")[0].contentWindow
.location.reload(true);
} else {
$(".layui-tab[lay-filter='" + this.option.elem + "'] .layui-tab-content .layui-show").find("iframe")[0].contentWindow
.location.reload(true);
}
}
function tabDelete(elem, id, callback) {
//根据 elem id 来删除指定的 layui title li
var tabTitle = $(".layui-tab[lay-filter='" + elem + "']").find(".layui-tab-title");
// 删除指定 id 的 title
var removeTab = tabTitle.find("li[lay-id='" + id + "']");
var nextNode = removeTab.next("li");
if(!removeTab.hasClass("layui-this")){
removeTab.remove();
var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("iframe[id='" + id + "']").parent();
tabContent.remove();
return false;
}
var currId;
if (nextNode.length) {
nextNode.addClass("layui-this");
currId = nextNode.attr("lay-id");
$("#" + elem + " [id='" + currId + "']").parent().addClass("layui-show");
} else {
var prevNode = removeTab.prev("li");
prevNode.addClass("layui-this");
currId = prevNode.attr("lay-id");
$("#" + elem + " [id='" + currId + "']").parent().addClass("layui-show");
}
callback(currId);
removeTab.remove();
// 删除 content
var tabContent = $(".layui-tab[lay-filter='" + elem + "']").find("iframe[id='" + id + "']").parent();
tabContent.remove();
}
function createTab(option) {
var type = "";
var types = option.type+" ";
if (option.roll == true) {
type = "layui-tab-roll";
}
if (option.tool != false) {
type = "layui-tab-tool";
}
if (option.roll == true && option.tool != false) {
type = "layui-tab-rollTool";
}
var tab = '';
var title = '
';
var content = '';
var control =
'
';
// 处 理 选 项 卡 头 部
var index = 0;
$.each(option.data, function(i, item) {
var TitleItem = '';
if (option.index == index) {
TitleItem += '
- ';
} else {
TitleItem += '
- ';
}
if (item.close) {
// 当 前 选 项 卡 可 以 关 闭
TitleItem += '' + item.title + '';
} else {
// 当 前 选 项 卡 不 允 许 关 闭
TitleItem += '' + item.title + '';
}
TitleItem += 'ဆ
';
title += TitleItem;
if (option.index == index) {
// 处 理 显 示 内 容
content += ''
} else {
// 处 理 显 示 内 容
content += ''
}
index++;
});
title += '
';
content += '';
control += '
- 关 闭 当 前
'
control += '
- 关 闭 其 他
'
control += '
- 关 闭 全 部
'
control += '
';
tab += title;
tab += control;
tab += content;
tab += '
';
tab += ''
return tab;
}
function rollPage(d, option) {
var $tabTitle = $('#' + option.elem + ' .layui-tab-title');
var left = $tabTitle.scrollLeft();
if ('left' === d) {
$tabTitle.animate({
scrollLeft: left - 450
}, 200);
} else {
$tabTitle.animate({
scrollLeft: left + 450
}, 200);
}
}
function closeEvent(option) {
$(".layui-tab[lay-filter='" + option.elem + "']").on("click", ".layui-tab-close", function() {
var layid = $(this).parent().attr("lay-id");
tabDelete(option.elem, layid, option.closeEvent);
})
}
function toolEvent(option) {
$("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeThis", function() {
var currentTab = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title .layui-this");
if (currentTab.find("span").is(".able-close")) {
var currentId = currentTab.attr("lay-id");
tabDelete(option.elem, currentId, option.closeEvent);
}
})
$("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeOther", function() {
var currentId = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title .layui-this").attr("lay-id");
var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li");
$.each(tabtitle, function(i) {
if ($(this).attr("lay-id") != currentId) {
if ($(this).find("span").is(".able-close")) {
tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent);
}
}
})
})
$("body .layui-tab[lay-filter='" + option.elem + "']").on("click", "#closeAll", function() {
var currentId = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title .layui-this").attr("lay-id");
var tabtitle = $(".layui-tab[lay-filter='" + option.elem + "'] .layui-tab-title li");
$.each(tabtitle, function(i) {
if ($(this).find("span").is(".able-close")) {
tabDelete(option.elem, $(this).attr("lay-id"), option.closeEvent);
}
})
})
}
exports(MOD_NAME, new pearTab());
})