jquery.panel.js 14 KB

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