jquery.panel.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602
  1. /**
  2. * jQuery EasyUI 1.4.1
  3. *
  4. * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.
  5. *
  6. * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt
  7. * To use it on other terms please contact us at info@jeasyui.com
  8. *
  9. */
  10. (function($){
  11. $.fn._remove=function(){
  12. return this.each(function(){
  13. $(this).remove();
  14. try{
  15. this.outerHTML="";
  16. }
  17. catch(err){
  18. }
  19. });
  20. };
  21. function _1(_2){
  22. _2._remove();
  23. };
  24. function _3(_4,_5){
  25. var _6=$.data(_4,"panel");
  26. var _7=_6.options;
  27. var _8=_6.panel;
  28. var _9=_8.children("div.panel-header");
  29. var _a=_8.children("div.panel-body");
  30. var _b=_8.children("div.panel-footer");
  31. if(_5){
  32. $.extend(_7,{width:_5.width,height:_5.height,minWidth:_5.minWidth,maxWidth:_5.maxWidth,minHeight:_5.minHeight,maxHeight:_5.maxHeight,left:_5.left,top:_5.top});
  33. }
  34. _8._size(_7);
  35. _9.add(_a)._outerWidth(_8.width());
  36. if(!isNaN(parseInt(_7.height))){
  37. _a._outerHeight(_8.height()-_9._outerHeight()-_b._outerHeight());
  38. }else{
  39. _a.css("height","");
  40. var _c=$.parser.parseValue("minHeight",_7.minHeight,_8.parent());
  41. var _d=$.parser.parseValue("maxHeight",_7.maxHeight,_8.parent());
  42. var _e=_9._outerHeight()+_b._outerHeight()+_8._outerHeight()-_8.height();
  43. _a._size("minHeight",_c?(_c-_e):"");
  44. _a._size("maxHeight",_d?(_d-_e):"");
  45. }
  46. _8.css({height:"",minHeight:"",maxHeight:"",left:_7.left,top:_7.top});
  47. _7.onResize.apply(_4,[_7.width,_7.height]);
  48. $(_4).panel("doLayout");
  49. };
  50. function _f(_10,_11){
  51. var _12=$.data(_10,"panel").options;
  52. var _13=$.data(_10,"panel").panel;
  53. if(_11){
  54. if(_11.left!=null){
  55. _12.left=_11.left;
  56. }
  57. if(_11.top!=null){
  58. _12.top=_11.top;
  59. }
  60. }
  61. _13.css({left:_12.left,top:_12.top});
  62. _12.onMove.apply(_10,[_12.left,_12.top]);
  63. };
  64. function _14(_15){
  65. $(_15).addClass("panel-body")._size("clear");
  66. var _16=$("<div class=\"panel\"></div>").insertBefore(_15);
  67. _16[0].appendChild(_15);
  68. _16.bind("_resize",function(e,_17){
  69. if($(this).hasClass("easyui-fluid")||_17){
  70. _3(_15);
  71. }
  72. return false;
  73. });
  74. return _16;
  75. };
  76. function _18(_19){
  77. var _1a=$.data(_19,"panel");
  78. var _1b=_1a.options;
  79. var _1c=_1a.panel;
  80. _1c.css(_1b.style);
  81. _1c.addClass(_1b.cls);
  82. _1d();
  83. _1e();
  84. var _1f=$(_19).panel("header");
  85. var _20=$(_19).panel("body");
  86. var _21=$(_19).siblings("div.panel-footer");
  87. if(_1b.border){
  88. _1f.removeClass("panel-header-noborder");
  89. _20.removeClass("panel-body-noborder");
  90. _21.removeClass("panel-footer-noborder");
  91. }else{
  92. _1f.addClass("panel-header-noborder");
  93. _20.addClass("panel-body-noborder");
  94. _21.addClass("panel-footer-noborder");
  95. }
  96. _1f.addClass(_1b.headerCls);
  97. _20.addClass(_1b.bodyCls);
  98. $(_19).attr("id",_1b.id||"");
  99. if(_1b.content){
  100. $(_19).panel("clear");
  101. $(_19).html(_1b.content);
  102. $.parser.parse($(_19));
  103. }
  104. function _1d(){
  105. if(_1b.tools&&typeof _1b.tools=="string"){
  106. _1c.find(">div.panel-header>div.panel-tool .panel-tool-a").appendTo(_1b.tools);
  107. }
  108. _1(_1c.children("div.panel-header"));
  109. if(_1b.title&&!_1b.noheader){
  110. var _22=$("<div class=\"panel-header\"></div>").prependTo(_1c);
  111. var _23=$("<div class=\"panel-title\"></div>").html(_1b.title).appendTo(_22);
  112. if(_1b.iconCls){
  113. _23.addClass("panel-with-icon");
  114. $("<div class=\"panel-icon\"></div>").addClass(_1b.iconCls).appendTo(_22);
  115. }
  116. var _24=$("<div class=\"panel-tool\"></div>").appendTo(_22);
  117. _24.bind("click",function(e){
  118. e.stopPropagation();
  119. });
  120. if(_1b.tools){
  121. if($.isArray(_1b.tools)){
  122. for(var i=0;i<_1b.tools.length;i++){
  123. var t=$("<a href=\"javascript:void(0)\"></a>").addClass(_1b.tools[i].iconCls).appendTo(_24);
  124. if(_1b.tools[i].handler){
  125. t.bind("click",eval(_1b.tools[i].handler));
  126. }
  127. }
  128. }else{
  129. $(_1b.tools).children().each(function(){
  130. $(this).addClass($(this).attr("iconCls")).addClass("panel-tool-a").appendTo(_24);
  131. });
  132. }
  133. }
  134. if(_1b.collapsible){
  135. $("<a class=\"panel-tool-collapse\" href=\"javascript:void(0)\"></a>").appendTo(_24).bind("click",function(){
  136. if(_1b.collapsed==true){
  137. _4a(_19,true);
  138. }else{
  139. _38(_19,true);
  140. }
  141. return false;
  142. });
  143. }
  144. if(_1b.minimizable){
  145. $("<a class=\"panel-tool-min\" href=\"javascript:void(0)\"></a>").appendTo(_24).bind("click",function(){
  146. _55(_19);
  147. return false;
  148. });
  149. }
  150. if(_1b.maximizable){
  151. $("<a class=\"panel-tool-max\" href=\"javascript:void(0)\"></a>").appendTo(_24).bind("click",function(){
  152. if(_1b.maximized==true){
  153. _59(_19);
  154. }else{
  155. _37(_19);
  156. }
  157. return false;
  158. });
  159. }
  160. if(_1b.closable){
  161. $("<a class=\"panel-tool-close\" href=\"javascript:void(0)\"></a>").appendTo(_24).bind("click",function(){
  162. _39(_19);
  163. return false;
  164. });
  165. }
  166. _1c.children("div.panel-body").removeClass("panel-body-noheader");
  167. }else{
  168. _1c.children("div.panel-body").addClass("panel-body-noheader");
  169. }
  170. };
  171. function _1e(){
  172. if(_1b.footer){
  173. $(_1b.footer).addClass("panel-footer").appendTo(_1c);
  174. $(_19).addClass("panel-body-nobottom");
  175. }else{
  176. _1c.children("div.panel-footer").remove();
  177. $(_19).removeClass("panel-body-nobottom");
  178. }
  179. };
  180. };
  181. function _25(_26,_27){
  182. var _28=$.data(_26,"panel");
  183. var _29=_28.options;
  184. if(_2a){
  185. _29.queryParams=_27;
  186. }
  187. if(!_29.href){
  188. return;
  189. }
  190. if(!_28.isLoaded||!_29.cache){
  191. var _2a=$.extend({},_29.queryParams);
  192. if(_29.onBeforeLoad.call(_26,_2a)==false){
  193. return;
  194. }
  195. _28.isLoaded=false;
  196. $(_26).panel("clear");
  197. if(_29.loadingMessage){
  198. $(_26).html($("<div class=\"panel-loading\"></div>").html(_29.loadingMessage));
  199. }
  200. _29.loader.call(_26,_2a,function(_2b){
  201. var _2c=_29.extractor.call(_26,_2b);
  202. $(_26).html(_2c);
  203. $.parser.parse($(_26));
  204. _29.onLoad.apply(_26,arguments);
  205. _28.isLoaded=true;
  206. },function(){
  207. _29.onLoadError.apply(_26,arguments);
  208. });
  209. }
  210. };
  211. function _2d(_2e){
  212. var t=$(_2e);
  213. t.find(".combo-f").each(function(){
  214. $(this).combo("destroy");
  215. });
  216. t.find(".m-btn").each(function(){
  217. $(this).menubutton("destroy");
  218. });
  219. t.find(".s-btn").each(function(){
  220. $(this).splitbutton("destroy");
  221. });
  222. t.find(".tooltip-f").each(function(){
  223. $(this).tooltip("destroy");
  224. });
  225. t.children("div").each(function(){
  226. $(this)._size("unfit");
  227. });
  228. t.empty();
  229. };
  230. function _2f(_30){
  231. $(_30).panel("doLayout",true);
  232. };
  233. function _31(_32,_33){
  234. var _34=$.data(_32,"panel").options;
  235. var _35=$.data(_32,"panel").panel;
  236. if(_33!=true){
  237. if(_34.onBeforeOpen.call(_32)==false){
  238. return;
  239. }
  240. }
  241. _35.stop(true,true);
  242. if($.isFunction(_34.openAnimation)){
  243. _34.openAnimation.call(_32,cb);
  244. }else{
  245. switch(_34.openAnimation){
  246. case "slide":
  247. _35.slideDown(_34.openDuration,cb);
  248. break;
  249. case "fade":
  250. _35.fadeIn(_34.openDuration,cb);
  251. break;
  252. case "show":
  253. _35.show(_34.openDuration,cb);
  254. break;
  255. default:
  256. _35.show();
  257. cb();
  258. }
  259. }
  260. function cb(){
  261. _34.closed=false;
  262. _34.minimized=false;
  263. var _36=_35.children("div.panel-header").find("a.panel-tool-restore");
  264. if(_36.length){
  265. _34.maximized=true;
  266. }
  267. _34.onOpen.call(_32);
  268. if(_34.maximized==true){
  269. _34.maximized=false;
  270. _37(_32);
  271. }
  272. if(_34.collapsed==true){
  273. _34.collapsed=false;
  274. _38(_32);
  275. }
  276. if(!_34.collapsed){
  277. _25(_32);
  278. _2f(_32);
  279. }
  280. };
  281. };
  282. function _39(_3a,_3b){
  283. var _3c=$.data(_3a,"panel").options;
  284. var _3d=$.data(_3a,"panel").panel;
  285. if(_3b!=true){
  286. if(_3c.onBeforeClose.call(_3a)==false){
  287. return;
  288. }
  289. }
  290. _3d.stop(true,true);
  291. _3d._size("unfit");
  292. if($.isFunction(_3c.closeAnimation)){
  293. _3c.closeAnimation.call(_3a,cb);
  294. }else{
  295. switch(_3c.closeAnimation){
  296. case "slide":
  297. _3d.slideUp(_3c.closeDuration,cb);
  298. break;
  299. case "fade":
  300. _3d.fadeOut(_3c.closeDuration,cb);
  301. break;
  302. case "hide":
  303. _3d.hide(_3c.closeDuration,cb);
  304. break;
  305. default:
  306. _3d.hide();
  307. cb();
  308. }
  309. }
  310. function cb(){
  311. _3c.closed=true;
  312. _3c.onClose.call(_3a);
  313. };
  314. };
  315. function _3e(_3f,_40){
  316. var _41=$.data(_3f,"panel");
  317. var _42=_41.options;
  318. var _43=_41.panel;
  319. if(_40!=true){
  320. if(_42.onBeforeDestroy.call(_3f)==false){
  321. return;
  322. }
  323. }
  324. $(_3f).panel("clear").panel("clear","footer");
  325. _1(_43);
  326. _42.onDestroy.call(_3f);
  327. };
  328. function _38(_44,_45){
  329. var _46=$.data(_44,"panel").options;
  330. var _47=$.data(_44,"panel").panel;
  331. var _48=_47.children("div.panel-body");
  332. var _49=_47.children("div.panel-header").find("a.panel-tool-collapse");
  333. if(_46.collapsed==true){
  334. return;
  335. }
  336. _48.stop(true,true);
  337. if(_46.onBeforeCollapse.call(_44)==false){
  338. return;
  339. }
  340. _49.addClass("panel-tool-expand");
  341. if(_45==true){
  342. _48.slideUp("normal",function(){
  343. _46.collapsed=true;
  344. _46.onCollapse.call(_44);
  345. });
  346. }else{
  347. _48.hide();
  348. _46.collapsed=true;
  349. _46.onCollapse.call(_44);
  350. }
  351. };
  352. function _4a(_4b,_4c){
  353. var _4d=$.data(_4b,"panel").options;
  354. var _4e=$.data(_4b,"panel").panel;
  355. var _4f=_4e.children("div.panel-body");
  356. var _50=_4e.children("div.panel-header").find("a.panel-tool-collapse");
  357. if(_4d.collapsed==false){
  358. return;
  359. }
  360. _4f.stop(true,true);
  361. if(_4d.onBeforeExpand.call(_4b)==false){
  362. return;
  363. }
  364. _50.removeClass("panel-tool-expand");
  365. if(_4c==true){
  366. _4f.slideDown("normal",function(){
  367. _4d.collapsed=false;
  368. _4d.onExpand.call(_4b);
  369. _25(_4b);
  370. _2f(_4b);
  371. });
  372. }else{
  373. _4f.show();
  374. _4d.collapsed=false;
  375. _4d.onExpand.call(_4b);
  376. _25(_4b);
  377. _2f(_4b);
  378. }
  379. };
  380. function _37(_51){
  381. var _52=$.data(_51,"panel").options;
  382. var _53=$.data(_51,"panel").panel;
  383. var _54=_53.children("div.panel-header").find("a.panel-tool-max");
  384. if(_52.maximized==true){
  385. return;
  386. }
  387. _54.addClass("panel-tool-restore");
  388. if(!$.data(_51,"panel").original){
  389. $.data(_51,"panel").original={width:_52.width,height:_52.height,left:_52.left,top:_52.top,fit:_52.fit};
  390. }
  391. _52.left=0;
  392. _52.top=0;
  393. _52.fit=true;
  394. _3(_51);
  395. _52.minimized=false;
  396. _52.maximized=true;
  397. _52.onMaximize.call(_51);
  398. };
  399. function _55(_56){
  400. var _57=$.data(_56,"panel").options;
  401. var _58=$.data(_56,"panel").panel;
  402. _58._size("unfit");
  403. _58.hide();
  404. _57.minimized=true;
  405. _57.maximized=false;
  406. _57.onMinimize.call(_56);
  407. };
  408. function _59(_5a){
  409. var _5b=$.data(_5a,"panel").options;
  410. var _5c=$.data(_5a,"panel").panel;
  411. var _5d=_5c.children("div.panel-header").find("a.panel-tool-max");
  412. if(_5b.maximized==false){
  413. return;
  414. }
  415. _5c.show();
  416. _5d.removeClass("panel-tool-restore");
  417. $.extend(_5b,$.data(_5a,"panel").original);
  418. _3(_5a);
  419. _5b.minimized=false;
  420. _5b.maximized=false;
  421. $.data(_5a,"panel").original=null;
  422. _5b.onRestore.call(_5a);
  423. };
  424. function _5e(_5f,_60){
  425. $.data(_5f,"panel").options.title=_60;
  426. $(_5f).panel("header").find("div.panel-title").html(_60);
  427. };
  428. var _61=null;
  429. $(window).unbind(".panel").bind("resize.panel",function(){
  430. if(_61){
  431. clearTimeout(_61);
  432. }
  433. _61=setTimeout(function(){
  434. var _62=$("body.layout");
  435. if(_62.length){
  436. _62.layout("resize");
  437. $("body").children(".easyui-fluid:visible").trigger("_resize");
  438. }else{
  439. $("body").panel("doLayout");
  440. }
  441. _61=null;
  442. },100);
  443. });
  444. $.fn.panel=function(_63,_64){
  445. if(typeof _63=="string"){
  446. return $.fn.panel.methods[_63](this,_64);
  447. }
  448. _63=_63||{};
  449. return this.each(function(){
  450. var _65=$.data(this,"panel");
  451. var _66;
  452. if(_65){
  453. _66=$.extend(_65.options,_63);
  454. _65.isLoaded=false;
  455. }else{
  456. _66=$.extend({},$.fn.panel.defaults,$.fn.panel.parseOptions(this),_63);
  457. $(this).attr("title","");
  458. _65=$.data(this,"panel",{options:_66,panel:_14(this),isLoaded:false});
  459. }
  460. _18(this);
  461. if(_66.doSize==true){
  462. _65.panel.css("display","block");
  463. _3(this);
  464. }
  465. if(_66.closed==true||_66.minimized==true){
  466. _65.panel.hide();
  467. }else{
  468. _31(this);
  469. }
  470. });
  471. };
  472. $.fn.panel.methods={options:function(jq){
  473. return $.data(jq[0],"panel").options;
  474. },panel:function(jq){
  475. return $.data(jq[0],"panel").panel;
  476. },header:function(jq){
  477. return $.data(jq[0],"panel").panel.find(">div.panel-header");
  478. },footer:function(jq){
  479. return jq.panel("panel").children(".panel-footer");
  480. },body:function(jq){
  481. return $.data(jq[0],"panel").panel.find(">div.panel-body");
  482. },setTitle:function(jq,_67){
  483. return jq.each(function(){
  484. _5e(this,_67);
  485. });
  486. },open:function(jq,_68){
  487. return jq.each(function(){
  488. _31(this,_68);
  489. });
  490. },close:function(jq,_69){
  491. return jq.each(function(){
  492. _39(this,_69);
  493. });
  494. },destroy:function(jq,_6a){
  495. return jq.each(function(){
  496. _3e(this,_6a);
  497. });
  498. },clear:function(jq,_6b){
  499. return jq.each(function(){
  500. _2d(_6b=="footer"?$(this).panel("footer"):this);
  501. });
  502. },refresh:function(jq,_6c){
  503. return jq.each(function(){
  504. var _6d=$.data(this,"panel");
  505. _6d.isLoaded=false;
  506. if(_6c){
  507. if(typeof _6c=="string"){
  508. _6d.options.href=_6c;
  509. }else{
  510. _6d.options.queryParams=_6c;
  511. }
  512. }
  513. _25(this);
  514. });
  515. },resize:function(jq,_6e){
  516. return jq.each(function(){
  517. _3(this,_6e);
  518. });
  519. },doLayout:function(jq,all){
  520. return jq.each(function(){
  521. _6f(this,"body");
  522. _6f($(this).siblings("div.panel-footer")[0],"footer");
  523. function _6f(_70,_71){
  524. if(!_70){
  525. return;
  526. }
  527. var _72=_70==$("body")[0];
  528. var s=$(_70).find("div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible,.easyui-fluid:visible").filter(function(_73,el){
  529. var p=$(el).parents("div.panel-"+_71+":first");
  530. return _72?p.length==0:p[0]==_70;
  531. });
  532. s.trigger("_resize",[all||false]);
  533. };
  534. });
  535. },move:function(jq,_74){
  536. return jq.each(function(){
  537. _f(this,_74);
  538. });
  539. },maximize:function(jq){
  540. return jq.each(function(){
  541. _37(this);
  542. });
  543. },minimize:function(jq){
  544. return jq.each(function(){
  545. _55(this);
  546. });
  547. },restore:function(jq){
  548. return jq.each(function(){
  549. _59(this);
  550. });
  551. },collapse:function(jq,_75){
  552. return jq.each(function(){
  553. _38(this,_75);
  554. });
  555. },expand:function(jq,_76){
  556. return jq.each(function(){
  557. _4a(this,_76);
  558. });
  559. }};
  560. $.fn.panel.parseOptions=function(_77){
  561. var t=$(_77);
  562. return $.extend({},$.parser.parseOptions(_77,["id","width","height","left","top","title","iconCls","cls","headerCls","bodyCls","tools","href","method",{cache:"boolean",fit:"boolean",border:"boolean",noheader:"boolean"},{collapsible:"boolean",minimizable:"boolean",maximizable:"boolean"},{closable:"boolean",collapsed:"boolean",minimized:"boolean",maximized:"boolean",closed:"boolean"},"openAnimation","closeAnimation",{openDuration:"number",closeDuration:"number"},]),{loadingMessage:(t.attr("loadingMessage")!=undefined?t.attr("loadingMessage"):undefined)});
  563. };
  564. $.fn.panel.defaults={id:null,title:null,iconCls:null,width:"auto",height:"auto",left:null,top:null,cls:null,headerCls:null,bodyCls:null,style:{},href:null,cache:true,fit:false,border:true,doSize:true,noheader:false,content:null,collapsible:false,minimizable:false,maximizable:false,closable:false,collapsed:false,minimized:false,maximized:false,closed:false,openAnimation:false,openDuration:400,closeAnimation:false,closeDuration:400,tools:null,footer:null,queryParams:{},method:"get",href:null,loadingMessage:"Loading...",loader:function(_78,_79,_7a){
  565. var _7b=$(this).panel("options");
  566. if(!_7b.href){
  567. return false;
  568. }
  569. $.ajax({type:_7b.method,url:_7b.href,cache:false,data:_78,dataType:"html",success:function(_7c){
  570. _79(_7c);
  571. },error:function(){
  572. _7a.apply(this,arguments);
  573. }});
  574. },extractor:function(_7d){
  575. var _7e=/<body[^>]*>((.|[\n\r])*)<\/body>/im;
  576. var _7f=_7e.exec(_7d);
  577. if(_7f){
  578. return _7f[1];
  579. }else{
  580. return _7d;
  581. }
  582. },onBeforeLoad:function(_80){
  583. },onLoad:function(){
  584. },onLoadError:function(){
  585. },onBeforeOpen:function(){
  586. },onOpen:function(){
  587. },onBeforeClose:function(){
  588. },onClose:function(){
  589. },onBeforeDestroy:function(){
  590. },onDestroy:function(){
  591. },onResize:function(_81,_82){
  592. },onMove:function(_83,top){
  593. },onMaximize:function(){
  594. },onRestore:function(){
  595. },onMinimize:function(){
  596. },onBeforeCollapse:function(){
  597. },onBeforeExpand:function(){
  598. },onCollapse:function(){
  599. },onExpand:function(){
  600. }};
  601. })(jQuery);