layui.define(['element'], function (exports) {
var element = layui.element(),
$ = layui.jquery,
layer = parent.layer === undefined ? layui.layer : parent.layer,
module_name = 'navtab',
globalTabIdIndex = 0,
LarryTab = function () {
this.config = {
elem: undefined,
closed: true
};
};
var ELEM = {};
/**
* [参数设置 options]
*/
LarryTab.prototype.set = function (options) {
var _this = this;
$.extend(true, _this.config, options);
return _this;
};
/**
* [init 对象初始化]
* @return {[type]} [返回对象初始化结果]
*/
LarryTab.prototype.init = function () {
var _this = this;
var _config = _this.config;
if (typeof(_config.elem) !== 'string' && typeof(_config.elem) !== 'object') {
layer.alert('Tab选项卡错误提示: elem参数未定义或设置出错,具体设置格式请参考文档API.');
}
var $container;
if (typeof(_config.elem) === 'string') {
$container = $('' + _config.elem + '');
//console.log($container);
}
if (typeof(_config.elem) === 'object') {
$container = _config.elem;
}
if ($container.length === 0) {
layer.alert('Tab选项卡错误提示:找不到elem参数配置的容器,请检查.');
}
var filter = $container.attr('lay-filter');
if (filter === undefined || filter === '') {
layer.alert('Tab选项卡错误提示:请为elem容器设置一个lay-filter过滤器');
}
_config.elem = $container;
ELEM.titleBox = $container.children('ul.layui-tab-title');
ELEM.contentBox = $container.children('div.layui-tab-content');
ELEM.tabFilter = filter;
return _this;
};
/**
* [exists 在layui-tab中检查对应layui-tab-title是否存在,如果存在则返回索引值,不存在返回-1]
* @param {[type]} title [description]
* @return {[type]} [description]
*/
LarryTab.prototype.exists = function (title) {
var _this = ELEM.titleBox === undefined ? this.init() : this,
tabIndex = -1;
ELEM.titleBox.find('li').each(function (i, e) {
var $em = $(this).children('em');
if ($em.text() === title) {
tabIndex = i;
}
;
});
return tabIndex;
};
/**
* [tabAdd 增加选项卡,如果已存在则增加this样式]
* @param {[type]} data [description]
* @return {[type]} [description]
*/
LarryTab.prototype.tabAdd = function (data) {
var _this = this;
var tabIndex = _this.exists(data.title);
// 若不存在
if (tabIndex === -1) {
globalTabIdIndex++;
var content = '';
var title = '';
// 若icon有定义
if (data.icon !== undefined) {
if (data.icon.indexOf('fa-') !== -1) {
title += '';
} else {
title += '' + data.icon + '';
}
}
title += '' + data.title + '';
if (_this.config.closed) {
title += 'ဆ';
}
//添加tab
element.tabAdd(ELEM.tabFilter, {
title: title,
content: content
});
//iframe 自适应
ELEM.contentBox.find('iframe[data-id=' + globalTabIdIndex + ']').each(function () {
$(this).height(ELEM.contentBox.height());
});
if (_this.config.closed) {
//监听关闭事件
ELEM.titleBox.find('li').children('i.layui-tab-close[data-id=' + globalTabIdIndex + ']').on('click', function () {
element.tabDelete(ELEM.tabFilter, $(this).parent('li').index()).init();
});
}
;
//切换到当前打开的选项卡
element.tabChange(ELEM.tabFilter, ELEM.titleBox.find('li').length - 1);
} else {
element.tabChange(ELEM.tabFilter, tabIndex);
}
};
var navtab = new LarryTab();
exports(module_name, function (options) {
return navtab.set(options);
});
});