layui.define(['element', 'common'], function (exports) {
var mod_name = 'tab',
$ = layui.jquery,
element = layui.element(),
commom = layui.common,
globalTabIdIndex = 0,
Tab = function () {
this.config = {
elem: undefined,
closed: true //是否包含删除按钮
};
};
var ELEM = {};
/**
* 参数设置
* @param {Object} options
*/
Tab.prototype.set = function (options) {
var that = this;
$.extend(true, that.config, options);
return that;
};
/**
* 初始化
*/
Tab.prototype.init = function () {
var that = this;
var _config = that.config;
if (typeof (_config.elem) !== 'string' && typeof (_config.elem) !== 'object') {
common.throwError('Tab error: elem参数未定义或设置出错,具体设置格式请参考文档API.');
}
var $container;
if (typeof (_config.elem) === 'string') {
$container = $('' + _config.elem + '');
}
if (typeof (_config.elem) === 'object') {
$container = _config.elem;
}
if ($container.length === 0) {
common.throwError('Tab error:找不到elem参数配置的容器,请检查.');
}
var filter = $container.attr('lay-filter');
if (filter === undefined || filter === '') {
common.throwError('Tab error:请为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 that;
};
/**
* 查询tab是否存在,如果存在则返回索引值,不存在返回-1
* @param {String} 标题
*/
Tab.prototype.exists = function (title) {
var that = ELEM.titleBox === undefined ? this.init() : this,
tabIndex = -1;
ELEM.titleBox.find('li').each(function (i, e) {
var $cite = $(this).children('cite');
if ($cite.text() === title) {
tabIndex = i;
};
});
return tabIndex;
};
/**
* 添加选择卡,如果选择卡存在则获取焦点
* @param {Object} data
*/
Tab.prototype.tabAdd = function (data) {
var that = this;
var tabIndex = that.exists(data.title);
if (tabIndex === -1) {
globalTabIdIndex++;
var content = '';
var title = '';
if (data.icon !== undefined) {
if (data.icon.indexOf('fa-') !== -1) {
title += '';
} else {
title += '' + data.icon + '';
}
}
title += '' + data.title + '';
if (that.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 (that.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);
}
};
Tab.prototype.on = function (events, callback) {
}
var tab = new Tab();
exports(mod_name, function (options) {
return tab.set(options);
});
});