jquery.tabs.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
  1. /**
  2. * jQuery EasyUI 1.3.4
  3. *
  4. * Copyright (c) 2009-2013 www.jeasyui.com. All rights reserved.
  5. *
  6. * Licensed under the GPL or commercial licenses
  7. * To use it on other terms please contact us: info@jeasyui.com
  8. * http://www.gnu.org/licenses/gpl.txt
  9. * http://www.jeasyui.com/license_commercial.php
  10. *
  11. */
  12. (function($){
  13. function _1(_2){
  14. var _3=$.data(_2,"tabs").options;
  15. if(_3.tabPosition=="left"||_3.tabPosition=="right"){
  16. return;
  17. }
  18. var _4=$(_2).children("div.tabs-header");
  19. var _5=_4.children("div.tabs-tool");
  20. var _6=_4.children("div.tabs-scroller-left");
  21. var _7=_4.children("div.tabs-scroller-right");
  22. var _8=_4.children("div.tabs-wrap");
  23. var _9=_4.outerHeight();
  24. if(_3.plain){
  25. _9-=_9-_4.height();
  26. }
  27. _5._outerHeight(_9);
  28. var _a=0;
  29. $("ul.tabs li",_4).each(function(){
  30. _a+=$(this).outerWidth(true);
  31. });
  32. var _b=_4.width()-_5._outerWidth();
  33. if(_a>_b){
  34. _6.add(_7).show()._outerHeight(_9);
  35. if(_3.toolPosition=="left"){
  36. _5.css({left:_6.outerWidth(),right:""});
  37. _8.css({marginLeft:_6.outerWidth()+_5._outerWidth(),marginRight:_7._outerWidth(),width:_b-_6.outerWidth()-_7.outerWidth()});
  38. }else{
  39. _5.css({left:"",right:_7.outerWidth()});
  40. _8.css({marginLeft:_6.outerWidth(),marginRight:_7.outerWidth()+_5._outerWidth(),width:_b-_6.outerWidth()-_7.outerWidth()});
  41. }
  42. }else{
  43. _6.add(_7).hide();
  44. if(_3.toolPosition=="left"){
  45. _5.css({left:0,right:""});
  46. _8.css({marginLeft:_5._outerWidth(),marginRight:0,width:_b});
  47. }else{
  48. _5.css({left:"",right:0});
  49. _8.css({marginLeft:0,marginRight:_5._outerWidth(),width:_b});
  50. }
  51. }
  52. };
  53. function _c(_d){
  54. var _e=$.data(_d,"tabs").options;
  55. var _f=$(_d).children("div.tabs-header");
  56. if(_e.tools){
  57. if(typeof _e.tools=="string"){
  58. $(_e.tools).addClass("tabs-tool").appendTo(_f);
  59. $(_e.tools).show();
  60. }else{
  61. _f.children("div.tabs-tool").remove();
  62. var _10=$("<div class=\"tabs-tool\"><table cellspacing=\"0\" cellpadding=\"0\" style=\"height:100%\"><tr></tr></table></div>").appendTo(_f);
  63. var tr=_10.find("tr");
  64. for(var i=0;i<_e.tools.length;i++){
  65. var td=$("<td></td>").appendTo(tr);
  66. var _11=$("<a href=\"javascript:void(0);\"></a>").appendTo(td);
  67. _11[0].onclick=eval(_e.tools[i].handler||function(){
  68. });
  69. _11.linkbutton($.extend({},_e.tools[i],{plain:true}));
  70. }
  71. }
  72. }else{
  73. _f.children("div.tabs-tool").remove();
  74. }
  75. };
  76. function _12(_13){
  77. var _14=$.data(_13,"tabs");
  78. var _15=_14.options;
  79. var cc=$(_13);
  80. _15.fit?$.extend(_15,cc._fit()):cc._fit(false);
  81. cc.width(_15.width).height(_15.height);
  82. var _16=$(_13).children("div.tabs-header");
  83. var _17=$(_13).children("div.tabs-panels");
  84. var _18=_16.find("div.tabs-wrap");
  85. var ul=_18.find(".tabs");
  86. for(var i=0;i<_14.tabs.length;i++){
  87. var _19=_14.tabs[i].panel("options");
  88. var p_t=_19.tab.find("a.tabs-inner");
  89. var _1a=parseInt(_19.tabWidth||_15.tabWidth)||undefined;
  90. if(_1a){
  91. p_t._outerWidth(_1a);
  92. }else{
  93. p_t.css("width","");
  94. }
  95. p_t._outerHeight(_15.tabHeight);
  96. p_t.css("lineHeight",p_t.height()+"px");
  97. }
  98. if(_15.tabPosition=="left"||_15.tabPosition=="right"){
  99. _16._outerWidth(_15.headerWidth);
  100. _17._outerWidth(cc.width()-_15.headerWidth);
  101. _16.add(_17)._outerHeight(_15.height);
  102. _18._outerWidth(_16.width());
  103. ul._outerWidth(_18.width()).css("height","");
  104. }else{
  105. _16._outerWidth(_15.width).css("height","");
  106. ul._outerHeight(_15.tabHeight).css("width","");
  107. _1(_13);
  108. var _1b=_15.height;
  109. if(!isNaN(_1b)){
  110. _17._outerHeight(_1b-_16.outerHeight());
  111. }else{
  112. _17.height("auto");
  113. }
  114. var _1a=_15.width;
  115. if(!isNaN(_1a)){
  116. _17._outerWidth(_1a);
  117. }else{
  118. _17.width("auto");
  119. }
  120. }
  121. };
  122. function _1c(_1d){
  123. var _1e=$.data(_1d,"tabs").options;
  124. var tab=_1f(_1d);
  125. if(tab){
  126. var _20=$(_1d).children("div.tabs-panels");
  127. var _21=_1e.width=="auto"?"auto":_20.width();
  128. var _22=_1e.height=="auto"?"auto":_20.height();
  129. tab.panel("resize",{width:_21,height:_22});
  130. }
  131. };
  132. function _23(_24){
  133. var _25=$.data(_24,"tabs").tabs;
  134. var cc=$(_24);
  135. cc.addClass("tabs-container");
  136. var pp=$("<div class=\"tabs-panels\"></div>").insertBefore(cc);
  137. cc.children("div").each(function(){
  138. pp[0].appendChild(this);
  139. });
  140. cc[0].appendChild(pp[0]);
  141. $("<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(_24);
  142. cc.children("div.tabs-panels").children("div").each(function(i){
  143. var _26=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr("selected")?true:undefined)});
  144. var pp=$(this);
  145. _25.push(pp);
  146. _33(_24,pp,_26);
  147. });
  148. cc.children("div.tabs-header").find(".tabs-scroller-left, .tabs-scroller-right").hover(function(){
  149. $(this).addClass("tabs-scroller-over");
  150. },function(){
  151. $(this).removeClass("tabs-scroller-over");
  152. });
  153. cc.bind("_resize",function(e,_27){
  154. var _28=$.data(_24,"tabs").options;
  155. if(_28.fit==true||_27){
  156. _12(_24);
  157. _1c(_24);
  158. }
  159. return false;
  160. });
  161. };
  162. function _29(_2a){
  163. var _2b=$.data(_2a,"tabs").options;
  164. $(_2a).children("div.tabs-header").unbind().bind("click",function(e){
  165. if($(e.target).hasClass("tabs-scroller-left")){
  166. $(_2a).tabs("scrollBy",-_2b.scrollIncrement);
  167. }else{
  168. if($(e.target).hasClass("tabs-scroller-right")){
  169. $(_2a).tabs("scrollBy",_2b.scrollIncrement);
  170. }else{
  171. var li=$(e.target).closest("li");
  172. if(li.hasClass("tabs-disabled")){
  173. return;
  174. }
  175. var a=$(e.target).closest("a.tabs-close");
  176. if(a.length){
  177. _49(_2a,_2c(li));
  178. }else{
  179. if(li.length){
  180. _3e(_2a,_2c(li));
  181. }
  182. }
  183. }
  184. }
  185. }).bind("contextmenu",function(e){
  186. var li=$(e.target).closest("li");
  187. if(li.hasClass("tabs-disabled")){
  188. return;
  189. }
  190. if(li.length){
  191. _2b.onContextMenu.call(_2a,e,li.find("span.tabs-title").html(),_2c(li));
  192. }
  193. });
  194. function _2c(li){
  195. var _2d=0;
  196. li.parent().children("li").each(function(i){
  197. if(li[0]==this){
  198. _2d=i;
  199. return false;
  200. }
  201. });
  202. return _2d;
  203. };
  204. };
  205. function _2e(_2f){
  206. var _30=$.data(_2f,"tabs").options;
  207. var _31=$(_2f).children("div.tabs-header");
  208. var _32=$(_2f).children("div.tabs-panels");
  209. _31.removeClass("tabs-header-top tabs-header-bottom tabs-header-left tabs-header-right");
  210. _32.removeClass("tabs-panels-top tabs-panels-bottom tabs-panels-left tabs-panels-right");
  211. if(_30.tabPosition=="top"){
  212. _31.insertBefore(_32);
  213. }else{
  214. if(_30.tabPosition=="bottom"){
  215. _31.insertAfter(_32);
  216. _31.addClass("tabs-header-bottom");
  217. _32.addClass("tabs-panels-top");
  218. }else{
  219. if(_30.tabPosition=="left"){
  220. _31.addClass("tabs-header-left");
  221. _32.addClass("tabs-panels-right");
  222. }else{
  223. if(_30.tabPosition=="right"){
  224. _31.addClass("tabs-header-right");
  225. _32.addClass("tabs-panels-left");
  226. }
  227. }
  228. }
  229. }
  230. if(_30.plain==true){
  231. _31.addClass("tabs-header-plain");
  232. }else{
  233. _31.removeClass("tabs-header-plain");
  234. }
  235. if(_30.border==true){
  236. _31.removeClass("tabs-header-noborder");
  237. _32.removeClass("tabs-panels-noborder");
  238. }else{
  239. _31.addClass("tabs-header-noborder");
  240. _32.addClass("tabs-panels-noborder");
  241. }
  242. };
  243. function _33(_34,pp,_35){
  244. var _36=$.data(_34,"tabs");
  245. _35=_35||{};
  246. pp.panel($.extend({},_35,{border:false,noheader:true,closed:true,doSize:false,iconCls:(_35.icon?_35.icon:undefined),onLoad:function(){
  247. if(_35.onLoad){
  248. _35.onLoad.call(this,arguments);
  249. }
  250. _36.options.onLoad.call(_34,$(this));
  251. }}));
  252. var _37=pp.panel("options");
  253. var _38=$(_34).children("div.tabs-header").find("ul.tabs");
  254. _37.tab=$("<li></li>").appendTo(_38);
  255. _37.tab.append("<a href=\"javascript:void(0)\" class=\"tabs-inner\">"+"<span class=\"tabs-title\"></span>"+"<span class=\"tabs-icon\"></span>"+"</a>");
  256. $(_34).tabs("update",{tab:pp,options:_37});
  257. };
  258. function _39(_3a,_3b){
  259. var _3c=$.data(_3a,"tabs").options;
  260. var _3d=$.data(_3a,"tabs").tabs;
  261. if(_3b.selected==undefined){
  262. _3b.selected=true;
  263. }
  264. var pp=$("<div></div>").appendTo($(_3a).children("div.tabs-panels"));
  265. _3d.push(pp);
  266. _33(_3a,pp,_3b);
  267. _3c.onAdd.call(_3a,_3b.title,_3d.length-1);
  268. _12(_3a);
  269. if(_3b.selected){
  270. _3e(_3a,_3d.length-1);
  271. }
  272. };
  273. function _3f(_40,_41){
  274. var _42=$.data(_40,"tabs").selectHis;
  275. var pp=_41.tab;
  276. var _43=pp.panel("options").title;
  277. pp.panel($.extend({},_41.options,{iconCls:(_41.options.icon?_41.options.icon:undefined)}));
  278. var _44=pp.panel("options");
  279. var tab=_44.tab;
  280. var _45=tab.find("span.tabs-title");
  281. var _46=tab.find("span.tabs-icon");
  282. _45.html(_44.title);
  283. _46.attr("class","tabs-icon");
  284. tab.find("a.tabs-close").remove();
  285. if(_44.closable){
  286. _45.addClass("tabs-closable");
  287. $("<a href=\"javascript:void(0)\" class=\"tabs-close\"></a>").appendTo(tab);
  288. }else{
  289. _45.removeClass("tabs-closable");
  290. }
  291. if(_44.iconCls){
  292. _45.addClass("tabs-with-icon");
  293. _46.addClass(_44.iconCls);
  294. }else{
  295. _45.removeClass("tabs-with-icon");
  296. }
  297. if(_43!=_44.title){
  298. for(var i=0;i<_42.length;i++){
  299. if(_42[i]==_43){
  300. _42[i]=_44.title;
  301. }
  302. }
  303. }
  304. tab.find("span.tabs-p-tool").remove();
  305. if(_44.tools){
  306. var _47=$("<span class=\"tabs-p-tool\"></span>").insertAfter(tab.find("a.tabs-inner"));
  307. if($.isArray(_44.tools)){
  308. for(var i=0;i<_44.tools.length;i++){
  309. var t=$("<a href=\"javascript:void(0)\"></a>").appendTo(_47);
  310. t.addClass(_44.tools[i].iconCls);
  311. if(_44.tools[i].handler){
  312. t.bind("click",{handler:_44.tools[i].handler},function(e){
  313. if($(this).parents("li").hasClass("tabs-disabled")){
  314. return;
  315. }
  316. e.data.handler.call(this);
  317. });
  318. }
  319. }
  320. }else{
  321. $(_44.tools).children().appendTo(_47);
  322. }
  323. var pr=_47.children().length*12;
  324. if(_44.closable){
  325. pr+=8;
  326. }else{
  327. pr-=3;
  328. _47.css("right","5px");
  329. }
  330. _45.css("padding-right",pr+"px");
  331. }
  332. _12(_40);
  333. $.data(_40,"tabs").options.onUpdate.call(_40,_44.title,_48(_40,pp));
  334. };
  335. function _49(_4a,_4b){
  336. var _4c=$.data(_4a,"tabs").options;
  337. var _4d=$.data(_4a,"tabs").tabs;
  338. var _4e=$.data(_4a,"tabs").selectHis;
  339. if(!_4f(_4a,_4b)){
  340. return;
  341. }
  342. var tab=_50(_4a,_4b);
  343. var _51=tab.panel("options").title;
  344. var _52=_48(_4a,tab);
  345. if(_4c.onBeforeClose.call(_4a,_51,_52)==false){
  346. return;
  347. }
  348. var tab=_50(_4a,_4b,true);
  349. tab.panel("options").tab.remove();
  350. tab.panel("destroy");
  351. _4c.onClose.call(_4a,_51,_52);
  352. _12(_4a);
  353. for(var i=0;i<_4e.length;i++){
  354. if(_4e[i]==_51){
  355. _4e.splice(i,1);
  356. i--;
  357. }
  358. }
  359. var _53=_4e.pop();
  360. if(_53){
  361. _3e(_4a,_53);
  362. }else{
  363. if(_4d.length){
  364. _3e(_4a,0);
  365. }
  366. }
  367. };
  368. function _50(_54,_55,_56){
  369. var _57=$.data(_54,"tabs").tabs;
  370. if(typeof _55=="number"){
  371. if(_55<0||_55>=_57.length){
  372. return null;
  373. }else{
  374. var tab=_57[_55];
  375. if(_56){
  376. _57.splice(_55,1);
  377. }
  378. return tab;
  379. }
  380. }
  381. for(var i=0;i<_57.length;i++){
  382. var tab=_57[i];
  383. if(tab.panel("options").title==_55){
  384. if(_56){
  385. _57.splice(i,1);
  386. }
  387. return tab;
  388. }
  389. }
  390. return null;
  391. };
  392. function _48(_58,tab){
  393. var _59=$.data(_58,"tabs").tabs;
  394. for(var i=0;i<_59.length;i++){
  395. if(_59[i][0]==$(tab)[0]){
  396. return i;
  397. }
  398. }
  399. return -1;
  400. };
  401. function _1f(_5a){
  402. var _5b=$.data(_5a,"tabs").tabs;
  403. for(var i=0;i<_5b.length;i++){
  404. var tab=_5b[i];
  405. if(tab.panel("options").closed==false){
  406. return tab;
  407. }
  408. }
  409. return null;
  410. };
  411. function _5c(_5d){
  412. var _5e=$.data(_5d,"tabs").tabs;
  413. for(var i=0;i<_5e.length;i++){
  414. if(_5e[i].panel("options").selected){
  415. _3e(_5d,i);
  416. return;
  417. }
  418. }
  419. if(_5e.length){
  420. _3e(_5d,0);
  421. }
  422. };
  423. function _3e(_5f,_60){
  424. var _61=$.data(_5f,"tabs").options;
  425. var _62=$.data(_5f,"tabs").tabs;
  426. var _63=$.data(_5f,"tabs").selectHis;
  427. if(_62.length==0){
  428. return;
  429. }
  430. var _64=_50(_5f,_60);
  431. if(!_64){
  432. return;
  433. }
  434. var _65=_1f(_5f);
  435. if(_65){
  436. _65.panel("close");
  437. _65.panel("options").tab.removeClass("tabs-selected");
  438. }
  439. _64.panel("open");
  440. var _66=_64.panel("options").title;
  441. _63.push(_66);
  442. var tab=_64.panel("options").tab;
  443. tab.addClass("tabs-selected");
  444. var _67=$(_5f).find(">div.tabs-header>div.tabs-wrap");
  445. var _68=tab.position().left;
  446. var _69=_68+tab.outerWidth();
  447. if(_68<0||_69>_67.width()){
  448. var _6a=_68-(_67.width()-tab.width())/2;
  449. $(_5f).tabs("scrollBy",_6a);
  450. }else{
  451. $(_5f).tabs("scrollBy",0);
  452. }
  453. _1c(_5f);
  454. _61.onSelect.call(_5f,_66,_48(_5f,_64));
  455. };
  456. function _4f(_6b,_6c){
  457. return _50(_6b,_6c)!=null;
  458. };
  459. $.fn.tabs=function(_6d,_6e){
  460. if(typeof _6d=="string"){
  461. return $.fn.tabs.methods[_6d](this,_6e);
  462. }
  463. _6d=_6d||{};
  464. return this.each(function(){
  465. var _6f=$.data(this,"tabs");
  466. var _70;
  467. if(_6f){
  468. _70=$.extend(_6f.options,_6d);
  469. _6f.options=_70;
  470. }else{
  471. $.data(this,"tabs",{options:$.extend({},$.fn.tabs.defaults,$.fn.tabs.parseOptions(this),_6d),tabs:[],selectHis:[]});
  472. _23(this);
  473. }
  474. _c(this);
  475. _2e(this);
  476. _12(this);
  477. _29(this);
  478. _5c(this);
  479. });
  480. };
  481. $.fn.tabs.methods={options:function(jq){
  482. return $.data(jq[0],"tabs").options;
  483. },tabs:function(jq){
  484. return $.data(jq[0],"tabs").tabs;
  485. },resize:function(jq){
  486. return jq.each(function(){
  487. _12(this);
  488. _1c(this);
  489. });
  490. },add:function(jq,_71){
  491. return jq.each(function(){
  492. _39(this,_71);
  493. });
  494. },close:function(jq,_72){
  495. return jq.each(function(){
  496. _49(this,_72);
  497. });
  498. },getTab:function(jq,_73){
  499. return _50(jq[0],_73);
  500. },getTabIndex:function(jq,tab){
  501. return _48(jq[0],tab);
  502. },getSelected:function(jq){
  503. return _1f(jq[0]);
  504. },select:function(jq,_74){
  505. return jq.each(function(){
  506. _3e(this,_74);
  507. });
  508. },exists:function(jq,_75){
  509. return _4f(jq[0],_75);
  510. },update:function(jq,_76){
  511. return jq.each(function(){
  512. _3f(this,_76);
  513. });
  514. },enableTab:function(jq,_77){
  515. return jq.each(function(){
  516. $(this).tabs("getTab",_77).panel("options").tab.removeClass("tabs-disabled");
  517. });
  518. },disableTab:function(jq,_78){
  519. return jq.each(function(){
  520. $(this).tabs("getTab",_78).panel("options").tab.addClass("tabs-disabled");
  521. });
  522. },scrollBy:function(jq,_79){
  523. return jq.each(function(){
  524. var _7a=$(this).tabs("options");
  525. var _7b=$(this).find(">div.tabs-header>div.tabs-wrap");
  526. var pos=Math.min(_7b._scrollLeft()+_79,_7c());
  527. _7b.animate({scrollLeft:pos},_7a.scrollDuration);
  528. function _7c(){
  529. var w=0;
  530. var ul=_7b.children("ul");
  531. ul.children("li").each(function(){
  532. w+=$(this).outerWidth(true);
  533. });
  534. return w-_7b.width()+(ul.outerWidth()-ul.width());
  535. };
  536. });
  537. }};
  538. $.fn.tabs.parseOptions=function(_7d){
  539. return $.extend({},$.parser.parseOptions(_7d,["width","height","tools","toolPosition","tabPosition",{fit:"boolean",border:"boolean",plain:"boolean",headerWidth:"number",tabWidth:"number",tabHeight:"number"}]));
  540. };
  541. $.fn.tabs.defaults={width:"auto",height:"auto",headerWidth:150,tabWidth:"auto",tabHeight:27,plain:false,fit:false,border:true,tools:null,toolPosition:"right",tabPosition:"top",scrollIncrement:100,scrollDuration:400,onLoad:function(_7e){
  542. },onSelect:function(_7f,_80){
  543. },onBeforeClose:function(_81,_82){
  544. },onClose:function(_83,_84){
  545. },onAdd:function(_85,_86){
  546. },onUpdate:function(_87,_88){
  547. },onContextMenu:function(e,_89,_8a){
  548. }};
  549. })(jQuery);