123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889 |
- /**
- * jQuery EasyUI 1.5.2
- *
- * Copyright (c) 2009-2017 www.jeasyui.com. All rights reserved.
- *
- * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
- * To use it on other terms please contact us: info@jeasyui.com
- *
- */
- /**
- * tabs - jQuery EasyUI
- *
- * Dependencies:
- * panel
- * linkbutton
- *
- */
- (function($){
- function getContentWidth(c){
- var w = 0;
- $(c).children().each(function(){
- w += $(this).outerWidth(true);
- });
- return w;
- }
- /**
- * set the tabs scrollers to show or not,
- * dependent on the tabs count and width
- */
- function setScrollers(container) {
- var opts = $.data(container, 'tabs').options;
- if (opts.tabPosition == 'left' || opts.tabPosition == 'right' || !opts.showHeader){return}
-
- var header = $(container).children('div.tabs-header');
- var tool = header.children('div.tabs-tool:not(.tabs-tool-hidden)');
- var sLeft = header.children('div.tabs-scroller-left');
- var sRight = header.children('div.tabs-scroller-right');
- var wrap = header.children('div.tabs-wrap');
-
- // set the tool height
- var tHeight = header.outerHeight();
- if (opts.plain){
- tHeight -= tHeight - header.height();
- }
- tool._outerHeight(tHeight);
-
- var tabsWidth = getContentWidth(header.find('ul.tabs'));
- var cWidth = header.width() - tool._outerWidth();
-
- if (tabsWidth > cWidth) {
- sLeft.add(sRight).show()._outerHeight(tHeight);
- if (opts.toolPosition == 'left'){
- tool.css({
- left: sLeft.outerWidth(),
- right: ''
- });
- wrap.css({
- marginLeft: sLeft.outerWidth() + tool._outerWidth(),
- marginRight: sRight._outerWidth(),
- width: cWidth - sLeft.outerWidth() - sRight.outerWidth()
- });
- } else {
- tool.css({
- left: '',
- right: sRight.outerWidth()
- });
- wrap.css({
- marginLeft: sLeft.outerWidth(),
- marginRight: sRight.outerWidth() + tool._outerWidth(),
- width: cWidth - sLeft.outerWidth() - sRight.outerWidth()
- });
- }
- } else {
- sLeft.add(sRight).hide();
- if (opts.toolPosition == 'left'){
- tool.css({
- left: 0,
- right: ''
- });
- wrap.css({
- marginLeft: tool._outerWidth(),
- marginRight: 0,
- width: cWidth
- });
- } else {
- tool.css({
- left: '',
- right: 0
- });
- wrap.css({
- marginLeft: 0,
- marginRight: tool._outerWidth(),
- width: cWidth
- });
- }
- }
- }
-
- function addTools(container){
- var opts = $.data(container, 'tabs').options;
- var header = $(container).children('div.tabs-header');
- if (opts.tools) {
- if (typeof opts.tools == 'string'){
- $(opts.tools).addClass('tabs-tool').appendTo(header);
- $(opts.tools).show();
- } else {
- header.children('div.tabs-tool').remove();
- var tools = $('<div class="tabs-tool"><table cellspacing="0" cellpadding="0" style="height:100%"><tr></tr></table></div>').appendTo(header);
- var tr = tools.find('tr');
- for(var i=0; i<opts.tools.length; i++){
- var td = $('<td></td>').appendTo(tr);
- var tool = $('<a href="javascript:;"></a>').appendTo(td);
- tool[0].onclick = eval(opts.tools[i].handler || function(){});
- tool.linkbutton($.extend({}, opts.tools[i], {
- plain: true
- }));
- }
- }
- } else {
- header.children('div.tabs-tool').remove();
- }
- }
-
- function setSize(container, param) {
- var state = $.data(container, 'tabs');
- var opts = state.options;
- var cc = $(container);
-
- if (!opts.doSize){return}
- if (param){
- $.extend(opts, {
- width: param.width,
- height: param.height
- });
- }
- cc._size(opts);
- var header = cc.children('div.tabs-header');
- var panels = cc.children('div.tabs-panels');
- var wrap = header.find('div.tabs-wrap');
- var ul = wrap.find('.tabs');
- ul.children('li').removeClass('tabs-first tabs-last');
- ul.children('li:first').addClass('tabs-first');
- ul.children('li:last').addClass('tabs-last');
-
- if (opts.tabPosition == 'left' || opts.tabPosition == 'right'){
- header._outerWidth(opts.showHeader ? opts.headerWidth : 0);
- panels._outerWidth(cc.width() - header.outerWidth());
- header.add(panels)._size('height', isNaN(parseInt(opts.height)) ? '' : cc.height());
- wrap._outerWidth(header.width());
- ul._outerWidth(wrap.width()).css('height','');
- } else {
- header.children('div.tabs-scroller-left,div.tabs-scroller-right,div.tabs-tool:not(.tabs-tool-hidden)').css('display', opts.showHeader?'block':'none');
- header._outerWidth(cc.width()).css('height','');
- if (opts.showHeader){
- header.css('background-color','');
- wrap.css('height','');
- } else {
- header.css('background-color','transparent');
- header._outerHeight(0);
- wrap._outerHeight(0);
- }
- ul._outerHeight(opts.tabHeight).css('width','');
- ul._outerHeight(ul.outerHeight()-ul.height()-1+opts.tabHeight).css('width','');
-
- panels._size('height', isNaN(parseInt(opts.height)) ? '' : (cc.height()-header.outerHeight()));
- panels._size('width', cc.width());
- }
- if (state.tabs.length){
- var d1 = ul.outerWidth(true) - ul.width();
- var li = ul.children('li:first');
- var d2 = li.outerWidth(true) - li.width();
- var hwidth = header.width() - header.children('.tabs-tool:not(.tabs-tool-hidden)')._outerWidth();
- var justifiedWidth = Math.floor((hwidth-d1-d2*state.tabs.length)/state.tabs.length);
-
- $.map(state.tabs, function(p){
- setTabSize(p, (opts.justified && $.inArray(opts.tabPosition,['top','bottom'])>=0) ? justifiedWidth : undefined);
- });
- if (opts.justified && $.inArray(opts.tabPosition,['top','bottom'])>=0){
- var deltaWidth = hwidth - d1 - getContentWidth(ul);
- setTabSize(state.tabs[state.tabs.length-1], justifiedWidth+deltaWidth);
- }
- }
- setScrollers(container);
- function setTabSize(p, width){
- var p_opts = p.panel('options');
- var p_t = p_opts.tab.find('a.tabs-inner');
- var width = width ? width : (parseInt(p_opts.tabWidth||opts.tabWidth||undefined));
- if (width){
- p_t._outerWidth(width);
- } else {
- p_t.css('width', '');
- }
- p_t._outerHeight(opts.tabHeight);
- p_t.css('lineHeight', p_t.height()+'px');
- p_t.find('.easyui-fluid:visible').triggerHandler('_resize');
- }
- }
-
- /**
- * set selected tab panel size
- */
- function setSelectedSize(container){
- var opts = $.data(container, 'tabs').options;
- var tab = getSelectedTab(container);
- if (tab){
- var panels = $(container).children('div.tabs-panels');
- var width = opts.width=='auto' ? 'auto' : panels.width();
- var height = opts.height=='auto' ? 'auto' : panels.height();
- tab.panel('resize', {
- width: width,
- height: height
- });
- }
- }
-
- /**
- * wrap the tabs header and body
- */
- function wrapTabs(container) {
- var tabs = $.data(container, 'tabs').tabs;
- var cc = $(container).addClass('tabs-container');
- var panels = $('<div class="tabs-panels"></div>').insertBefore(cc);
- cc.children('div').each(function(){
- panels[0].appendChild(this);
- });
- cc[0].appendChild(panels[0]);
- $('<div class="tabs-header">'
- + '<div class="tabs-scroller-left"></div>'
- + '<div class="tabs-scroller-right"></div>'
- + '<div class="tabs-wrap">'
- + '<ul class="tabs"></ul>'
- + '</div>'
- + '</div>').prependTo(container);
-
- cc.children('div.tabs-panels').children('div').each(function(i){
- var opts = $.extend({}, $.parser.parseOptions(this), {
- disabled: ($(this).attr('disabled') ? true : undefined),
- selected: ($(this).attr('selected') ? true : undefined)
- });
- createTab(container, opts, $(this));
- });
-
- cc.children('div.tabs-header').find('.tabs-scroller-left, .tabs-scroller-right').hover(
- function(){$(this).addClass('tabs-scroller-over');},
- function(){$(this).removeClass('tabs-scroller-over');}
- );
- cc.bind('_resize', function(e,force){
- if ($(this).hasClass('easyui-fluid') || force){
- setSize(container);
- setSelectedSize(container);
- }
- return false;
- });
- }
-
- function bindEvents(container){
- var state = $.data(container, 'tabs')
- var opts = state.options;
- $(container).children('div.tabs-header').unbind().bind('click', function(e){
- if ($(e.target).hasClass('tabs-scroller-left')){
- $(container).tabs('scrollBy', -opts.scrollIncrement);
- } else if ($(e.target).hasClass('tabs-scroller-right')){
- $(container).tabs('scrollBy', opts.scrollIncrement);
- } else {
- var li = $(e.target).closest('li');
- if (li.hasClass('tabs-disabled')){return false;}
- var a = $(e.target).closest('a.tabs-close');
- if (a.length){
- closeTab(container, getLiIndex(li));
- } else if (li.length){
- // selectTab(container, getLiIndex(li));
- var index = getLiIndex(li);
- var popts = state.tabs[index].panel('options');
- if (popts.collapsible){
- popts.closed ? selectTab(container, index) : unselectTab(container, index);
- } else {
- selectTab(container, index);
- }
- }
- return false;
- }
- }).bind('contextmenu', function(e){
- var li = $(e.target).closest('li');
- if (li.hasClass('tabs-disabled')){return;}
- if (li.length){
- opts.onContextMenu.call(container, e, li.find('span.tabs-title').html(), getLiIndex(li));
- }
- });
-
- function getLiIndex(li){
- var index = 0;
- li.parent().children('li').each(function(i){
- if (li[0] == this){
- index = i;
- return false;
- }
- });
- return index;
- }
- }
-
- function setProperties(container){
- var opts = $.data(container, 'tabs').options;
- var header = $(container).children('div.tabs-header');
- var panels = $(container).children('div.tabs-panels');
-
- header.removeClass('tabs-header-top tabs-header-bottom tabs-header-left tabs-header-right');
- panels.removeClass('tabs-panels-top tabs-panels-bottom tabs-panels-left tabs-panels-right');
- if (opts.tabPosition == 'top'){
- header.insertBefore(panels);
- } else if (opts.tabPosition == 'bottom'){
- header.insertAfter(panels);
- header.addClass('tabs-header-bottom');
- panels.addClass('tabs-panels-top');
- } else if (opts.tabPosition == 'left'){
- header.addClass('tabs-header-left');
- panels.addClass('tabs-panels-right');
- } else if (opts.tabPosition == 'right'){
- header.addClass('tabs-header-right');
- panels.addClass('tabs-panels-left');
- }
-
- if (opts.plain == true) {
- header.addClass('tabs-header-plain');
- } else {
- header.removeClass('tabs-header-plain');
- }
- header.removeClass('tabs-header-narrow').addClass(opts.narrow?'tabs-header-narrow':'');
- var tabs = header.find('.tabs');
- tabs.removeClass('tabs-pill').addClass(opts.pill?'tabs-pill':'');
- tabs.removeClass('tabs-narrow').addClass(opts.narrow?'tabs-narrow':'');
- tabs.removeClass('tabs-justified').addClass(opts.justified?'tabs-justified':'');
- if (opts.border == true){
- header.removeClass('tabs-header-noborder');
- panels.removeClass('tabs-panels-noborder');
- } else {
- header.addClass('tabs-header-noborder');
- panels.addClass('tabs-panels-noborder');
- }
- opts.doSize = true;
- }
-
- function createTab(container, options, pp) {
- options = options || {};
- var state = $.data(container, 'tabs');
- var tabs = state.tabs;
- if (options.index == undefined || options.index > tabs.length){options.index = tabs.length}
- if (options.index < 0){options.index = 0}
-
- var ul = $(container).children('div.tabs-header').find('ul.tabs');
- var panels = $(container).children('div.tabs-panels');
- var tab = $(
- '<li>' +
- '<a href="javascript:;" class="tabs-inner">' +
- '<span class="tabs-title"></span>' +
- '<span class="tabs-icon"></span>' +
- '</a>' +
- '</li>');
- if (!pp){pp = $('<div></div>');}
- if (options.index >= tabs.length){
- tab.appendTo(ul);
- pp.appendTo(panels);
- tabs.push(pp);
- } else {
- tab.insertBefore(ul.children('li:eq('+options.index+')'));
- pp.insertBefore(panels.children('div.panel:eq('+options.index+')'));
- tabs.splice(options.index, 0, pp);
- }
- // create panel
- pp.panel($.extend({}, options, {
- tab: tab,
- border: false,
- noheader: true,
- closed: true,
- doSize: false,
- iconCls: (options.icon ? options.icon : undefined),
- onLoad: function(){
- if (options.onLoad){
- options.onLoad.call(this, arguments);
- }
- state.options.onLoad.call(container, $(this));
- },
- onBeforeOpen: function(){
- if (options.onBeforeOpen){
- if (options.onBeforeOpen.call(this) == false){return false;}
- }
- var p = $(container).tabs('getSelected');
- if (p){
- if (p[0] != this){
- $(container).tabs('unselect', getTabIndex(container, p));
- p = $(container).tabs('getSelected');
- if (p){
- return false;
- }
- } else {
- setSelectedSize(container);
- return false;
- }
- }
-
- var popts = $(this).panel('options');
- popts.tab.addClass('tabs-selected');
- // scroll the tab to center position if required.
- var wrap = $(container).find('>div.tabs-header>div.tabs-wrap');
- var left = popts.tab.position().left;
- var right = left + popts.tab.outerWidth();
- if (left < 0 || right > wrap.width()){
- var deltaX = left - (wrap.width()-popts.tab.width()) / 2;
- $(container).tabs('scrollBy', deltaX);
- } else {
- $(container).tabs('scrollBy', 0);
- }
-
- var panel = $(this).panel('panel');
- panel.css('display','block');
- setSelectedSize(container);
- panel.css('display','none');
- },
- onOpen: function(){
- if (options.onOpen){
- options.onOpen.call(this);
- }
- var popts = $(this).panel('options');
- state.selectHis.push(popts.title);
- state.options.onSelect.call(container, popts.title, getTabIndex(container, this));
- },
- onBeforeClose: function(){
- if (options.onBeforeClose){
- if (options.onBeforeClose.call(this) == false){return false;}
- }
- $(this).panel('options').tab.removeClass('tabs-selected');
- },
- onClose: function(){
- if (options.onClose){
- options.onClose.call(this);
- }
- var popts = $(this).panel('options');
- state.options.onUnselect.call(container, popts.title, getTabIndex(container, this));
- }
- }));
-
- // only update the tab header
- $(container).tabs('update', {
- tab: pp,
- options: pp.panel('options'),
- type: 'header'
- });
- }
-
- function addTab(container, options) {
- var state = $.data(container, 'tabs');
- var opts = state.options;
- if (options.selected == undefined) options.selected = true;
-
- createTab(container, options);
- opts.onAdd.call(container, options.title, options.index);
- if (options.selected){
- selectTab(container, options.index); // select the added tab panel
- }
- }
-
- /**
- * update tab panel, param has following properties:
- * tab: the tab panel to be updated
- * options: the tab panel options
- * type: the update type, possible values are: 'header','body','all'
- */
- function updateTab(container, param){
- param.type = param.type || 'all';
- var selectHis = $.data(container, 'tabs').selectHis;
- var pp = param.tab; // the tab panel
- var opts = pp.panel('options'); // get the tab panel options
- var oldTitle = opts.title;
- $.extend(opts, param.options, {
- iconCls: (param.options.icon ? param.options.icon : undefined)
- });
- if (param.type == 'all' || param.type == 'body'){
- pp.panel();
- }
- if (param.type == 'all' || param.type == 'header'){
- var tab = opts.tab;
-
- if (opts.header){
- tab.find('.tabs-inner').html($(opts.header));
- } else {
- var s_title = tab.find('span.tabs-title');
- var s_icon = tab.find('span.tabs-icon');
- s_title.html(opts.title);
- s_icon.attr('class', 'tabs-icon');
-
- tab.find('a.tabs-close').remove();
- if (opts.closable){
- s_title.addClass('tabs-closable');
- $('<a href="javascript:;" class="tabs-close"></a>').appendTo(tab);
- } else{
- s_title.removeClass('tabs-closable');
- }
- if (opts.iconCls){
- s_title.addClass('tabs-with-icon');
- s_icon.addClass(opts.iconCls);
- } else {
- s_title.removeClass('tabs-with-icon');
- }
- if (opts.tools){
- var p_tool = tab.find('span.tabs-p-tool');
- if (!p_tool.length){
- var p_tool = $('<span class="tabs-p-tool"></span>').insertAfter(tab.find('a.tabs-inner'));
- }
- if ($.isArray(opts.tools)){
- p_tool.empty();
- for(var i=0; i<opts.tools.length; i++){
- var t = $('<a href="javascript:;"></a>').appendTo(p_tool);
- t.addClass(opts.tools[i].iconCls);
- if (opts.tools[i].handler){
- t.bind('click', {handler:opts.tools[i].handler}, function(e){
- if ($(this).parents('li').hasClass('tabs-disabled')){return;}
- e.data.handler.call(this);
- });
- }
- }
- } else {
- $(opts.tools).children().appendTo(p_tool);
- }
- var pr = p_tool.children().length * 12;
- if (opts.closable) {
- pr += 8;
- p_tool.css('right', '');
- } else {
- pr -= 3;
- p_tool.css('right','5px');
- }
- s_title.css('padding-right', pr+'px');
- } else {
- tab.find('span.tabs-p-tool').remove();
- s_title.css('padding-right', '');
- }
- }
- if (oldTitle != opts.title){
- for(var i=0; i<selectHis.length; i++){
- if (selectHis[i] == oldTitle){
- selectHis[i] = opts.title;
- }
- }
- }
- }
- if (opts.disabled){
- opts.tab.addClass('tabs-disabled');
- } else {
- opts.tab.removeClass('tabs-disabled');
- }
-
- setSize(container);
-
- $.data(container, 'tabs').options.onUpdate.call(container, opts.title, getTabIndex(container, pp));
- }
-
- /**
- * close a tab with specified index or title
- */
- function closeTab(container, which) {
- var opts = $.data(container, 'tabs').options;
- var tabs = $.data(container, 'tabs').tabs;
- var selectHis = $.data(container, 'tabs').selectHis;
-
- if (!exists(container, which)) return;
-
- var tab = getTab(container, which);
- var title = tab.panel('options').title;
- var index = getTabIndex(container, tab);
-
- if (opts.onBeforeClose.call(container, title, index) == false) return;
-
- var tab = getTab(container, which, true);
- tab.panel('options').tab.remove();
- tab.panel('destroy');
-
- opts.onClose.call(container, title, index);
-
- // setScrollers(container);
- setSize(container);
-
- // remove the select history item
- for(var i=0; i<selectHis.length; i++){
- if (selectHis[i] == title){
- selectHis.splice(i, 1);
- i --;
- }
- }
-
- // select the nearest tab panel
- var hisTitle = selectHis.pop();
- if (hisTitle){
- selectTab(container, hisTitle);
- } else if (tabs.length){
- selectTab(container, 0);
- }
- }
-
- /**
- * get the specified tab panel
- */
- function getTab(container, which, removeit){
- var tabs = $.data(container, 'tabs').tabs;
- var tab = null;
- if (typeof which == 'number'){
- if (which >=0 && which < tabs.length){
- tab = tabs[which];
- if (removeit){
- tabs.splice(which, 1);
- }
- }
- } else {
- var tmp = $('<span></span>');
- for(var i=0; i<tabs.length; i++){
- var p = tabs[i];
- tmp.html(p.panel('options').title);
- if (tmp.text() == which){
- tab = p;
- if (removeit){
- tabs.splice(i, 1);
- }
- break;
- }
- }
- tmp.remove();
- }
- return tab;
- }
-
- function getTabIndex(container, tab){
- var tabs = $.data(container, 'tabs').tabs;
- for(var i=0; i<tabs.length; i++){
- if (tabs[i][0] == $(tab)[0]){
- return i;
- }
- }
- return -1;
- }
-
- function getSelectedTab(container){
- var tabs = $.data(container, 'tabs').tabs;
- for(var i=0; i<tabs.length; i++){
- var tab = tabs[i];
- if (tab.panel('options').tab.hasClass('tabs-selected')){
- return tab;
- }
- }
- return null;
- }
-
- /**
- * do first select action, if no tab is setted the first tab will be selected.
- */
- function doFirstSelect(container){
- var state = $.data(container, 'tabs')
- var tabs = state.tabs;
- for(var i=0; i<tabs.length; i++){
- var opts = tabs[i].panel('options');
- if (opts.selected && !opts.disabled){
- selectTab(container, i);
- return;
- }
- }
- selectTab(container, state.options.selected);
- }
-
- function selectTab(container, which){
- var p = getTab(container, which);
- if (p && !p.is(':visible')){
- stopAnimate(container);
- if (!p.panel('options').disabled){
- p.panel('open');
- }
- }
- }
-
- function unselectTab(container, which){
- var p = getTab(container, which);
- if (p && p.is(':visible')){
- stopAnimate(container);
- p.panel('close');
- }
- }
- function stopAnimate(container){
- $(container).children('div.tabs-panels').each(function(){
- $(this).stop(true, true);
- });
- }
-
- function exists(container, which){
- return getTab(container, which) != null;
- }
-
- function showHeader(container, visible){
- var opts = $.data(container, 'tabs').options;
- opts.showHeader = visible;
- $(container).tabs('resize');
- }
-
- function showTool(container, visible){
- var tool = $(container).find('>.tabs-header>.tabs-tool');
- if (visible){
- tool.removeClass('tabs-tool-hidden').show();
- } else {
- tool.addClass('tabs-tool-hidden').hide();
- }
- $(container).tabs('resize').tabs('scrollBy', 0);
- }
-
-
- $.fn.tabs = function(options, param){
- if (typeof options == 'string') {
- return $.fn.tabs.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'tabs');
- if (state) {
- $.extend(state.options, options);
- } else {
- $.data(this, 'tabs', {
- options: $.extend({},$.fn.tabs.defaults, $.fn.tabs.parseOptions(this), options),
- tabs: [],
- selectHis: []
- });
- wrapTabs(this);
- }
-
- addTools(this);
- setProperties(this);
- setSize(this);
- bindEvents(this);
-
- doFirstSelect(this);
- });
- };
-
- $.fn.tabs.methods = {
- options: function(jq){
- var cc = jq[0];
- var opts = $.data(cc, 'tabs').options;
- var s = getSelectedTab(cc);
- opts.selected = s ? getTabIndex(cc, s) : -1;
- return opts;
- },
- tabs: function(jq){
- return $.data(jq[0], 'tabs').tabs;
- },
- resize: function(jq, param){
- return jq.each(function(){
- setSize(this, param);
- setSelectedSize(this);
- });
- },
- add: function(jq, options){
- return jq.each(function(){
- addTab(this, options);
- });
- },
- close: function(jq, which){
- return jq.each(function(){
- closeTab(this, which);
- });
- },
- getTab: function(jq, which){
- return getTab(jq[0], which);
- },
- getTabIndex: function(jq, tab){
- return getTabIndex(jq[0], tab);
- },
- getSelected: function(jq){
- return getSelectedTab(jq[0]);
- },
- select: function(jq, which){
- return jq.each(function(){
- selectTab(this, which);
- });
- },
- unselect: function(jq, which){
- return jq.each(function(){
- unselectTab(this, which);
- });
- },
- exists: function(jq, which){
- return exists(jq[0], which);
- },
- update: function(jq, options){
- return jq.each(function(){
- updateTab(this, options);
- });
- },
- enableTab: function(jq, which){
- return jq.each(function(){
- var opts = $(this).tabs('getTab', which).panel('options');
- opts.tab.removeClass('tabs-disabled');
- opts.disabled = false;
- });
- },
- disableTab: function(jq, which){
- return jq.each(function(){
- var opts = $(this).tabs('getTab', which).panel('options');
- opts.tab.addClass('tabs-disabled');
- opts.disabled = true;
- });
- },
- showHeader: function(jq){
- return jq.each(function(){
- showHeader(this, true);
- });
- },
- hideHeader: function(jq){
- return jq.each(function(){
- showHeader(this, false);
- });
- },
- showTool: function(jq){
- return jq.each(function(){
- showTool(this, true);
- });
- },
- hideTool: function(jq){
- return jq.each(function(){
- showTool(this, false);
- });
- },
- scrollBy: function(jq, deltaX){ // scroll the tab header by the specified amount of pixels
- return jq.each(function(){
- var opts = $(this).tabs('options');
- var wrap = $(this).find('>div.tabs-header>div.tabs-wrap');
- var pos = Math.min(wrap._scrollLeft() + deltaX, getMaxScrollWidth());
- wrap.animate({scrollLeft: pos}, opts.scrollDuration);
-
- function getMaxScrollWidth(){
- var w = 0;
- var ul = wrap.children('ul');
- ul.children('li').each(function(){
- w += $(this).outerWidth(true);
- });
- return w - wrap.width() + (ul.outerWidth() - ul.width());
- }
- });
- }
- };
-
- $.fn.tabs.parseOptions = function(target){
- return $.extend({}, $.parser.parseOptions(target, [
- 'tools','toolPosition','tabPosition',
- {fit:'boolean',border:'boolean',plain:'boolean'},
- {headerWidth:'number',tabWidth:'number',tabHeight:'number',selected:'number'},
- {showHeader:'boolean',justified:'boolean',narrow:'boolean',pill:'boolean'}
- ]));
- };
-
- $.fn.tabs.defaults = {
- width: 'auto',
- height: 'auto',
- headerWidth: 150, // the tab header width, it is valid only when tabPosition set to 'left' or 'right'
- tabWidth: 'auto', // the tab width
- tabHeight: 27, // the tab height
- selected: 0, // the initialized selected tab index
- showHeader: true,
- plain: false,
- fit: false,
- border: true,
- justified: false,
- narrow: false,
- pill: false,
- tools: null,
- toolPosition: 'right', // left,right
- tabPosition: 'top', // possible values: top,bottom
- scrollIncrement: 100,
- scrollDuration: 400,
- onLoad: function(panel){},
- onSelect: function(title, index){},
- onUnselect: function(title, index){},
- onBeforeClose: function(title, index){},
- onClose: function(title, index){},
- onAdd: function(title, index){},
- onUpdate: function(title, index){},
- onContextMenu: function(e, title, index){}
- };
- })(jQuery);
|