jquery.layout.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  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. var _1=false;
  12. function _2(_3,_4){
  13. var _5=$.data(_3,"layout");
  14. var _6=_5.options;
  15. var _7=_5.panels;
  16. var cc=$(_3);
  17. if(_4){
  18. $.extend(_6,{width:_4.width,height:_4.height});
  19. }
  20. if(_3.tagName.toLowerCase()=="body"){
  21. cc._size("fit");
  22. }else{
  23. cc._size(_6);
  24. }
  25. var _8={top:0,left:0,width:cc.width(),height:cc.height()};
  26. _9(_a(_7.expandNorth)?_7.expandNorth:_7.north,"n");
  27. _9(_a(_7.expandSouth)?_7.expandSouth:_7.south,"s");
  28. _b(_a(_7.expandEast)?_7.expandEast:_7.east,"e");
  29. _b(_a(_7.expandWest)?_7.expandWest:_7.west,"w");
  30. _7.center.panel("resize",_8);
  31. function _9(pp,_c){
  32. if(!pp.length||!_a(pp)){
  33. return;
  34. }
  35. var _d=pp.panel("options");
  36. pp.panel("resize",{width:cc.width(),height:_d.height});
  37. var _e=pp.panel("panel").outerHeight();
  38. pp.panel("move",{left:0,top:(_c=="n"?0:cc.height()-_e)});
  39. _8.height-=_e;
  40. if(_c=="n"){
  41. _8.top+=_e;
  42. if(!_d.split&&_d.border){
  43. _8.top--;
  44. }
  45. }
  46. if(!_d.split&&_d.border){
  47. _8.height++;
  48. }
  49. };
  50. function _b(pp,_f){
  51. if(!pp.length||!_a(pp)){
  52. return;
  53. }
  54. var _10=pp.panel("options");
  55. pp.panel("resize",{width:_10.width,height:_8.height});
  56. var _11=pp.panel("panel").outerWidth();
  57. pp.panel("move",{left:(_f=="e"?cc.width()-_11:0),top:_8.top});
  58. _8.width-=_11;
  59. if(_f=="w"){
  60. _8.left+=_11;
  61. if(!_10.split&&_10.border){
  62. _8.left--;
  63. }
  64. }
  65. if(!_10.split&&_10.border){
  66. _8.width++;
  67. }
  68. };
  69. };
  70. function _12(_13){
  71. var cc=$(_13);
  72. cc.addClass("layout");
  73. function _14(cc){
  74. var _15=cc.layout("options");
  75. var _16=_15.onAdd;
  76. _15.onAdd=function(){
  77. };
  78. cc.children("div").each(function(){
  79. var _17=$.fn.layout.parsePanelOptions(this);
  80. if("north,south,east,west,center".indexOf(_17.region)>=0){
  81. _19(_13,_17,this);
  82. }
  83. });
  84. _15.onAdd=_16;
  85. };
  86. cc.children("form").length?_14(cc.children("form")):_14(cc);
  87. cc.append("<div class=\"layout-split-proxy-h\"></div><div class=\"layout-split-proxy-v\"></div>");
  88. cc.bind("_resize",function(e,_18){
  89. if($(this).hasClass("easyui-fluid")||_18){
  90. _2(_13);
  91. }
  92. return false;
  93. });
  94. };
  95. function _19(_1a,_1b,el){
  96. _1b.region=_1b.region||"center";
  97. var _1c=$.data(_1a,"layout").panels;
  98. var cc=$(_1a);
  99. var dir=_1b.region;
  100. if(_1c[dir].length){
  101. return;
  102. }
  103. var pp=$(el);
  104. if(!pp.length){
  105. pp=$("<div></div>").appendTo(cc);
  106. }
  107. var _1d=$.extend({},$.fn.layout.paneldefaults,{width:(pp.length?parseInt(pp[0].style.width)||pp.outerWidth():"auto"),height:(pp.length?parseInt(pp[0].style.height)||pp.outerHeight():"auto"),doSize:false,collapsible:true,onOpen:function(){
  108. var _1e=$(this).panel("header").children("div.panel-tool");
  109. _1e.children("a.panel-tool-collapse").hide();
  110. var _1f={north:"up",south:"down",east:"right",west:"left"};
  111. if(!_1f[dir]){
  112. return;
  113. }
  114. var _20="layout-button-"+_1f[dir];
  115. var t=_1e.children("a."+_20);
  116. if(!t.length){
  117. t=$("<a href=\"javascript:void(0)\"></a>").addClass(_20).appendTo(_1e);
  118. t.bind("click",{dir:dir},function(e){
  119. _2d(_1a,e.data.dir);
  120. return false;
  121. });
  122. }
  123. $(this).panel("options").collapsible?t.show():t.hide();
  124. }},_1b,{cls:((_1b.cls||"")+" layout-panel layout-panel-"+dir),bodyCls:((_1b.bodyCls||"")+" layout-body")});
  125. pp.panel(_1d);
  126. _1c[dir]=pp;
  127. var _21={north:"s",south:"n",east:"w",west:"e"};
  128. var _22=pp.panel("panel");
  129. if(pp.panel("options").split){
  130. _22.addClass("layout-split-"+dir);
  131. }
  132. _22.resizable($.extend({},{handles:(_21[dir]||""),disabled:(!pp.panel("options").split),onStartResize:function(e){
  133. _1=true;
  134. if(dir=="north"||dir=="south"){
  135. var _23=$(">div.layout-split-proxy-v",_1a);
  136. }else{
  137. var _23=$(">div.layout-split-proxy-h",_1a);
  138. }
  139. var top=0,_24=0,_25=0,_26=0;
  140. var pos={display:"block"};
  141. if(dir=="north"){
  142. pos.top=parseInt(_22.css("top"))+_22.outerHeight()-_23.height();
  143. pos.left=parseInt(_22.css("left"));
  144. pos.width=_22.outerWidth();
  145. pos.height=_23.height();
  146. }else{
  147. if(dir=="south"){
  148. pos.top=parseInt(_22.css("top"));
  149. pos.left=parseInt(_22.css("left"));
  150. pos.width=_22.outerWidth();
  151. pos.height=_23.height();
  152. }else{
  153. if(dir=="east"){
  154. pos.top=parseInt(_22.css("top"))||0;
  155. pos.left=parseInt(_22.css("left"))||0;
  156. pos.width=_23.width();
  157. pos.height=_22.outerHeight();
  158. }else{
  159. if(dir=="west"){
  160. pos.top=parseInt(_22.css("top"))||0;
  161. pos.left=_22.outerWidth()-_23.width();
  162. pos.width=_23.width();
  163. pos.height=_22.outerHeight();
  164. }
  165. }
  166. }
  167. }
  168. _23.css(pos);
  169. $("<div class=\"layout-mask\"></div>").css({left:0,top:0,width:cc.width(),height:cc.height()}).appendTo(cc);
  170. },onResize:function(e){
  171. if(dir=="north"||dir=="south"){
  172. var _27=$(">div.layout-split-proxy-v",_1a);
  173. _27.css("top",e.pageY-$(_1a).offset().top-_27.height()/2);
  174. }else{
  175. var _27=$(">div.layout-split-proxy-h",_1a);
  176. _27.css("left",e.pageX-$(_1a).offset().left-_27.width()/2);
  177. }
  178. return false;
  179. },onStopResize:function(e){
  180. cc.children("div.layout-split-proxy-v,div.layout-split-proxy-h").hide();
  181. pp.panel("resize",e.data);
  182. _2(_1a);
  183. _1=false;
  184. cc.find(">div.layout-mask").remove();
  185. }},_1b));
  186. cc.layout("options").onAdd.call(_1a,dir);
  187. };
  188. function _28(_29,_2a){
  189. var _2b=$.data(_29,"layout").panels;
  190. if(_2b[_2a].length){
  191. _2b[_2a].panel("destroy");
  192. _2b[_2a]=$();
  193. var _2c="expand"+_2a.substring(0,1).toUpperCase()+_2a.substring(1);
  194. if(_2b[_2c]){
  195. _2b[_2c].panel("destroy");
  196. _2b[_2c]=undefined;
  197. }
  198. $(_29).layout("options").onRemove.call(_29,_2a);
  199. }
  200. };
  201. function _2d(_2e,_2f,_30){
  202. if(_30==undefined){
  203. _30="normal";
  204. }
  205. var _31=$.data(_2e,"layout").panels;
  206. var p=_31[_2f];
  207. var _32=p.panel("options");
  208. if(_32.onBeforeCollapse.call(p)==false){
  209. return;
  210. }
  211. var _33="expand"+_2f.substring(0,1).toUpperCase()+_2f.substring(1);
  212. if(!_31[_33]){
  213. _31[_33]=_34(_2f);
  214. var ep=_31[_33].panel("panel");
  215. if(!_32.expandMode){
  216. ep.css("cursor","default");
  217. }else{
  218. ep.bind("click",function(){
  219. if(_32.expandMode=="dock"){
  220. _41(_2e,_2f);
  221. }else{
  222. p.panel("expand",false).panel("open");
  223. var _35=_36();
  224. p.panel("resize",_35.collapse);
  225. p.panel("panel").animate(_35.expand,function(){
  226. $(this).unbind(".layout").bind("mouseleave.layout",{region:_2f},function(e){
  227. if(_1==true){
  228. return;
  229. }
  230. if($("body>div.combo-p>div.combo-panel:visible").length){
  231. return;
  232. }
  233. _2d(_2e,e.data.region);
  234. });
  235. $(_2e).layout("options").onExpand.call(_2e,_2f);
  236. });
  237. }
  238. return false;
  239. });
  240. }
  241. }
  242. var _37=_36();
  243. if(!_a(_31[_33])){
  244. _31.center.panel("resize",_37.resizeC);
  245. }
  246. p.panel("panel").animate(_37.collapse,_30,function(){
  247. p.panel("collapse",false).panel("close");
  248. _31[_33].panel("open").panel("resize",_37.expandP);
  249. $(this).unbind(".layout");
  250. $(_2e).layout("options").onCollapse.call(_2e,_2f);
  251. });
  252. function _34(dir){
  253. var _38={"east":"left","west":"right","north":"down","south":"up"};
  254. var _39=(_32.region=="north"||_32.region=="south");
  255. var _3a="layout-button-"+_38[dir];
  256. var p=$("<div></div>").appendTo(_2e);
  257. p.panel($.extend({},$.fn.layout.paneldefaults,{cls:("layout-expand layout-expand-"+dir),title:"&nbsp;",iconCls:(_32.hideCollapsedContent?null:_32.iconCls),closed:true,minWidth:0,minHeight:0,doSize:false,region:_32.region,collapsedSize:_32.collapsedSize,noheader:(!_39&&_32.hideExpandTool),tools:((_39&&_32.hideExpandTool)?null:[{iconCls:_3a,handler:function(){
  258. _41(_2e,_2f);
  259. return false;
  260. }}])}));
  261. if(!_32.hideCollapsedContent){
  262. var _3b=typeof _32.collapsedContent=="function"?_32.collapsedContent.call(p[0],_32.title):_32.collapsedContent;
  263. _39?p.panel("setTitle",_3b):p.html(_3b);
  264. }
  265. p.panel("panel").hover(function(){
  266. $(this).addClass("layout-expand-over");
  267. },function(){
  268. $(this).removeClass("layout-expand-over");
  269. });
  270. return p;
  271. };
  272. function _36(){
  273. var cc=$(_2e);
  274. var _3c=_31.center.panel("options");
  275. var _3d=_32.collapsedSize;
  276. if(_2f=="east"){
  277. var _3e=p.panel("panel")._outerWidth();
  278. var _3f=_3c.width+_3e-_3d;
  279. if(_32.split||!_32.border){
  280. _3f++;
  281. }
  282. return {resizeC:{width:_3f},expand:{left:cc.width()-_3e},expandP:{top:_3c.top,left:cc.width()-_3d,width:_3d,height:_3c.height},collapse:{left:cc.width(),top:_3c.top,height:_3c.height}};
  283. }else{
  284. if(_2f=="west"){
  285. var _3e=p.panel("panel")._outerWidth();
  286. var _3f=_3c.width+_3e-_3d;
  287. if(_32.split||!_32.border){
  288. _3f++;
  289. }
  290. return {resizeC:{width:_3f,left:_3d-1},expand:{left:0},expandP:{left:0,top:_3c.top,width:_3d,height:_3c.height},collapse:{left:-_3e,top:_3c.top,height:_3c.height}};
  291. }else{
  292. if(_2f=="north"){
  293. var _40=p.panel("panel")._outerHeight();
  294. var hh=_3c.height;
  295. if(!_a(_31.expandNorth)){
  296. hh+=_40-_3d+((_32.split||!_32.border)?1:0);
  297. }
  298. _31.east.add(_31.west).add(_31.expandEast).add(_31.expandWest).panel("resize",{top:_3d-1,height:hh});
  299. return {resizeC:{top:_3d-1,height:hh},expand:{top:0},expandP:{top:0,left:0,width:cc.width(),height:_3d},collapse:{top:-_40,width:cc.width()}};
  300. }else{
  301. if(_2f=="south"){
  302. var _40=p.panel("panel")._outerHeight();
  303. var hh=_3c.height;
  304. if(!_a(_31.expandSouth)){
  305. hh+=_40-_3d+((_32.split||!_32.border)?1:0);
  306. }
  307. _31.east.add(_31.west).add(_31.expandEast).add(_31.expandWest).panel("resize",{height:hh});
  308. return {resizeC:{height:hh},expand:{top:cc.height()-_40},expandP:{top:cc.height()-_3d,left:0,width:cc.width(),height:_3d},collapse:{top:cc.height(),width:cc.width()}};
  309. }
  310. }
  311. }
  312. }
  313. };
  314. };
  315. function _41(_42,_43){
  316. var _44=$.data(_42,"layout").panels;
  317. var p=_44[_43];
  318. var _45=p.panel("options");
  319. if(_45.onBeforeExpand.call(p)==false){
  320. return;
  321. }
  322. var _46="expand"+_43.substring(0,1).toUpperCase()+_43.substring(1);
  323. if(_44[_46]){
  324. _44[_46].panel("close");
  325. p.panel("panel").stop(true,true);
  326. p.panel("expand",false).panel("open");
  327. var _47=_48();
  328. p.panel("resize",_47.collapse);
  329. p.panel("panel").animate(_47.expand,function(){
  330. _2(_42);
  331. $(_42).layout("options").onExpand.call(_42,_43);
  332. });
  333. }
  334. function _48(){
  335. var cc=$(_42);
  336. var _49=_44.center.panel("options");
  337. if(_43=="east"&&_44.expandEast){
  338. return {collapse:{left:cc.width(),top:_49.top,height:_49.height},expand:{left:cc.width()-p.panel("panel")._outerWidth()}};
  339. }else{
  340. if(_43=="west"&&_44.expandWest){
  341. return {collapse:{left:-p.panel("panel")._outerWidth(),top:_49.top,height:_49.height},expand:{left:0}};
  342. }else{
  343. if(_43=="north"&&_44.expandNorth){
  344. return {collapse:{top:-p.panel("panel")._outerHeight(),width:cc.width()},expand:{top:0}};
  345. }else{
  346. if(_43=="south"&&_44.expandSouth){
  347. return {collapse:{top:cc.height(),width:cc.width()},expand:{top:cc.height()-p.panel("panel")._outerHeight()}};
  348. }
  349. }
  350. }
  351. }
  352. };
  353. };
  354. function _a(pp){
  355. if(!pp){
  356. return false;
  357. }
  358. if(pp.length){
  359. return pp.panel("panel").is(":visible");
  360. }else{
  361. return false;
  362. }
  363. };
  364. function _4a(_4b){
  365. var _4c=$.data(_4b,"layout");
  366. var _4d=_4c.options;
  367. var _4e=_4c.panels;
  368. var _4f=_4d.onCollapse;
  369. _4d.onCollapse=function(){
  370. };
  371. _50("east");
  372. _50("west");
  373. _50("north");
  374. _50("south");
  375. _4d.onCollapse=_4f;
  376. function _50(_51){
  377. var p=_4e[_51];
  378. if(p.length&&p.panel("options").collapsed){
  379. _2d(_4b,_51,0);
  380. }
  381. };
  382. };
  383. function _52(_53,_54,_55){
  384. var p=$(_53).layout("panel",_54);
  385. p.panel("options").split=_55;
  386. var cls="layout-split-"+_54;
  387. var _56=p.panel("panel").removeClass(cls);
  388. if(_55){
  389. _56.addClass(cls);
  390. }
  391. _56.resizable({disabled:(!_55)});
  392. _2(_53);
  393. };
  394. $.fn.layout=function(_57,_58){
  395. if(typeof _57=="string"){
  396. return $.fn.layout.methods[_57](this,_58);
  397. }
  398. _57=_57||{};
  399. return this.each(function(){
  400. var _59=$.data(this,"layout");
  401. if(_59){
  402. $.extend(_59.options,_57);
  403. }else{
  404. var _5a=$.extend({},$.fn.layout.defaults,$.fn.layout.parseOptions(this),_57);
  405. $.data(this,"layout",{options:_5a,panels:{center:$(),north:$(),south:$(),east:$(),west:$()}});
  406. _12(this);
  407. }
  408. _2(this);
  409. _4a(this);
  410. });
  411. };
  412. $.fn.layout.methods={options:function(jq){
  413. return $.data(jq[0],"layout").options;
  414. },resize:function(jq,_5b){
  415. return jq.each(function(){
  416. _2(this,_5b);
  417. });
  418. },panel:function(jq,_5c){
  419. return $.data(jq[0],"layout").panels[_5c];
  420. },collapse:function(jq,_5d){
  421. return jq.each(function(){
  422. _2d(this,_5d);
  423. });
  424. },expand:function(jq,_5e){
  425. return jq.each(function(){
  426. _41(this,_5e);
  427. });
  428. },add:function(jq,_5f){
  429. return jq.each(function(){
  430. _19(this,_5f);
  431. _2(this);
  432. if($(this).layout("panel",_5f.region).panel("options").collapsed){
  433. _2d(this,_5f.region,0);
  434. }
  435. });
  436. },remove:function(jq,_60){
  437. return jq.each(function(){
  438. _28(this,_60);
  439. _2(this);
  440. });
  441. },split:function(jq,_61){
  442. return jq.each(function(){
  443. _52(this,_61,true);
  444. });
  445. },unsplit:function(jq,_62){
  446. return jq.each(function(){
  447. _52(this,_62,false);
  448. });
  449. }};
  450. $.fn.layout.parseOptions=function(_63){
  451. return $.extend({},$.parser.parseOptions(_63,[{fit:"boolean"}]));
  452. };
  453. $.fn.layout.defaults={fit:false,onExpand:function(_64){
  454. },onCollapse:function(_65){
  455. },onAdd:function(_66){
  456. },onRemove:function(_67){
  457. }};
  458. $.fn.layout.parsePanelOptions=function(_68){
  459. var t=$(_68);
  460. return $.extend({},$.fn.panel.parseOptions(_68),$.parser.parseOptions(_68,["region",{split:"boolean",collpasedSize:"number",minWidth:"number",minHeight:"number",maxWidth:"number",maxHeight:"number"}]));
  461. };
  462. $.fn.layout.paneldefaults=$.extend({},$.fn.panel.defaults,{region:null,split:false,collapsedSize:28,expandMode:"float",hideExpandTool:false,hideCollapsedContent:true,collapsedContent:function(_69){
  463. var p=$(this);
  464. var _6a=p.panel("options");
  465. if(_6a.region=="north"||_6a.region=="south"){
  466. return _69;
  467. }
  468. var _6b=_6a.collapsedSize-2;
  469. var _6c=(_6b-16)/2;
  470. _6c=_6b-_6c;
  471. var cc=[];
  472. if(_6a.iconCls){
  473. cc.push("<div class=\"panel-icon "+_6a.iconCls+"\"></div>");
  474. }
  475. cc.push("<div class=\"panel-title layout-expand-title");
  476. cc.push(_6a.iconCls?" layout-expand-with-icon":"");
  477. cc.push("\" style=\"left:"+_6c+"px\">");
  478. cc.push(_69);
  479. cc.push("</div>");
  480. return cc.join("");
  481. },minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000});
  482. })(jQuery);