jquery.propertygrid.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. /**
  2. * EasyUI for jQuery 1.6.10
  3. *
  4. * Copyright (c) 2009-2018 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;
  12. $(document).unbind(".propertygrid").bind("mousedown.propertygrid",function(e){
  13. var p=$(e.target).closest("div.datagrid-view,div.combo-panel");
  14. if(p.length){
  15. return;
  16. }
  17. _2(_1);
  18. _1=undefined;
  19. });
  20. function _3(_4){
  21. var _5=$.data(_4,"propertygrid");
  22. var _6=$.data(_4,"propertygrid").options;
  23. $(_4).datagrid($.extend({},_6,{cls:"propertygrid",view:(_6.showGroup?_6.groupView:_6.view),onBeforeEdit:function(_7,_8){
  24. if(_6.onBeforeEdit.call(_4,_7,_8)==false){
  25. return false;
  26. }
  27. var dg=$(this);
  28. var _8=dg.datagrid("getRows")[_7];
  29. var _9=dg.datagrid("getColumnOption","value");
  30. _9.editor=_8.editor;
  31. },onClickCell:function(_a,_b,_c){
  32. if(_1!=this){
  33. _2(_1);
  34. _1=this;
  35. }
  36. if(_6.editIndex!=_a){
  37. _2(_1);
  38. $(this).datagrid("beginEdit",_a);
  39. var ed=$(this).datagrid("getEditor",{index:_a,field:_b});
  40. if(!ed){
  41. ed=$(this).datagrid("getEditor",{index:_a,field:"value"});
  42. }
  43. if(ed){
  44. var t=$(ed.target);
  45. var _d=t.data("textbox")?t.textbox("textbox"):t;
  46. _d.focus();
  47. _6.editIndex=_a;
  48. }
  49. }
  50. _6.onClickCell.call(_4,_a,_b,_c);
  51. },loadFilter:function(_e){
  52. _2(this);
  53. return _6.loadFilter.call(this,_e);
  54. }}));
  55. };
  56. function _2(_f){
  57. var t=$(_f);
  58. if(!t.length){
  59. return;
  60. }
  61. var _10=$.data(_f,"propertygrid").options;
  62. _10.finder.getTr(_f,null,"editing").each(function(){
  63. var _11=parseInt($(this).attr("datagrid-row-index"));
  64. if(t.datagrid("validateRow",_11)){
  65. t.datagrid("endEdit",_11);
  66. }else{
  67. t.datagrid("cancelEdit",_11);
  68. }
  69. });
  70. _10.editIndex=undefined;
  71. };
  72. $.fn.propertygrid=function(_12,_13){
  73. if(typeof _12=="string"){
  74. var _14=$.fn.propertygrid.methods[_12];
  75. if(_14){
  76. return _14(this,_13);
  77. }else{
  78. return this.datagrid(_12,_13);
  79. }
  80. }
  81. _12=_12||{};
  82. return this.each(function(){
  83. var _15=$.data(this,"propertygrid");
  84. if(_15){
  85. $.extend(_15.options,_12);
  86. }else{
  87. var _16=$.extend({},$.fn.propertygrid.defaults,$.fn.propertygrid.parseOptions(this),_12);
  88. _16.frozenColumns=$.extend(true,[],_16.frozenColumns);
  89. _16.columns=$.extend(true,[],_16.columns);
  90. $.data(this,"propertygrid",{options:_16});
  91. }
  92. _3(this);
  93. });
  94. };
  95. $.fn.propertygrid.methods={options:function(jq){
  96. return $.data(jq[0],"propertygrid").options;
  97. }};
  98. $.fn.propertygrid.parseOptions=function(_17){
  99. return $.extend({},$.fn.datagrid.parseOptions(_17),$.parser.parseOptions(_17,[{showGroup:"boolean"}]));
  100. };
  101. var _18=$.extend({},$.fn.datagrid.defaults.view,{render:function(_19,_1a,_1b){
  102. var _1c=[];
  103. var _1d=this.groups;
  104. for(var i=0;i<_1d.length;i++){
  105. _1c.push(this.renderGroup.call(this,_19,i,_1d[i],_1b));
  106. }
  107. $(_1a).html(_1c.join(""));
  108. },renderGroup:function(_1e,_1f,_20,_21){
  109. var _22=$.data(_1e,"datagrid");
  110. var _23=_22.options;
  111. var _24=$(_1e).datagrid("getColumnFields",_21);
  112. var _25=_23.frozenColumns&&_23.frozenColumns.length;
  113. if(_21){
  114. if(!(_23.rownumbers||_25)){
  115. return "";
  116. }
  117. }
  118. var _26=[];
  119. var css=_23.groupStyler.call(_1e,_20.value,_20.rows);
  120. var cs=_27(css,"datagrid-group");
  121. _26.push("<div group-index="+_1f+" "+cs+">");
  122. if((_21&&(_23.rownumbers||_23.frozenColumns.length))||(!_21&&!(_23.rownumbers||_23.frozenColumns.length))){
  123. _26.push("<span class=\"datagrid-group-expander\">");
  124. _26.push("<span class=\"datagrid-row-expander datagrid-row-collapse\">&nbsp;</span>");
  125. _26.push("</span>");
  126. }
  127. if((_21&&_25)||(!_21)){
  128. _26.push("<span class=\"datagrid-group-title\">");
  129. _26.push(_23.groupFormatter.call(_1e,_20.value,_20.rows));
  130. _26.push("</span>");
  131. }
  132. _26.push("</div>");
  133. _26.push("<table class=\"datagrid-btable\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody>");
  134. var _28=_20.startIndex;
  135. for(var j=0;j<_20.rows.length;j++){
  136. var css=_23.rowStyler?_23.rowStyler.call(_1e,_28,_20.rows[j]):"";
  137. var _29="";
  138. var _2a="";
  139. if(typeof css=="string"){
  140. _2a=css;
  141. }else{
  142. if(css){
  143. _29=css["class"]||"";
  144. _2a=css["style"]||"";
  145. }
  146. }
  147. var cls="class=\"datagrid-row "+(_28%2&&_23.striped?"datagrid-row-alt ":" ")+_29+"\"";
  148. var _2b=_2a?"style=\""+_2a+"\"":"";
  149. var _2c=_22.rowIdPrefix+"-"+(_21?1:2)+"-"+_28;
  150. _26.push("<tr id=\""+_2c+"\" datagrid-row-index=\""+_28+"\" "+cls+" "+_2b+">");
  151. _26.push(this.renderRow.call(this,_1e,_24,_21,_28,_20.rows[j]));
  152. _26.push("</tr>");
  153. _28++;
  154. }
  155. _26.push("</tbody></table>");
  156. return _26.join("");
  157. function _27(css,cls){
  158. var _2d="";
  159. var _2e="";
  160. if(typeof css=="string"){
  161. _2e=css;
  162. }else{
  163. if(css){
  164. _2d=css["class"]||"";
  165. _2e=css["style"]||"";
  166. }
  167. }
  168. return "class=\""+cls+(_2d?" "+_2d:"")+"\" "+"style=\""+_2e+"\"";
  169. };
  170. },bindEvents:function(_2f){
  171. var _30=$.data(_2f,"datagrid");
  172. var dc=_30.dc;
  173. var _31=dc.body1.add(dc.body2);
  174. var _32=($.data(_31[0],"events")||$._data(_31[0],"events")).click[0].handler;
  175. _31.unbind("click").bind("click",function(e){
  176. var tt=$(e.target);
  177. var _33=tt.closest("span.datagrid-row-expander");
  178. if(_33.length){
  179. var _34=_33.closest("div.datagrid-group").attr("group-index");
  180. if(_33.hasClass("datagrid-row-collapse")){
  181. $(_2f).datagrid("collapseGroup",_34);
  182. }else{
  183. $(_2f).datagrid("expandGroup",_34);
  184. }
  185. }else{
  186. _32(e);
  187. }
  188. e.stopPropagation();
  189. });
  190. },onBeforeRender:function(_35,_36){
  191. var _37=$.data(_35,"datagrid");
  192. var _38=_37.options;
  193. _39();
  194. var _3a=[];
  195. for(var i=0;i<_36.length;i++){
  196. var row=_36[i];
  197. var _3b=_3c(row[_38.groupField]);
  198. if(!_3b){
  199. _3b={value:row[_38.groupField],rows:[row]};
  200. _3a.push(_3b);
  201. }else{
  202. _3b.rows.push(row);
  203. }
  204. }
  205. var _3d=0;
  206. var _3e=[];
  207. for(var i=0;i<_3a.length;i++){
  208. var _3b=_3a[i];
  209. _3b.startIndex=_3d;
  210. _3d+=_3b.rows.length;
  211. _3e=_3e.concat(_3b.rows);
  212. }
  213. _37.data.rows=_3e;
  214. this.groups=_3a;
  215. var _3f=this;
  216. setTimeout(function(){
  217. _3f.bindEvents(_35);
  218. },0);
  219. function _3c(_40){
  220. for(var i=0;i<_3a.length;i++){
  221. var _41=_3a[i];
  222. if(_41.value==_40){
  223. return _41;
  224. }
  225. }
  226. return null;
  227. };
  228. function _39(){
  229. if(!$("#datagrid-group-style").length){
  230. $("head").append("<style id=\"datagrid-group-style\">"+".datagrid-group{height:"+_38.groupHeight+"px;overflow:hidden;font-weight:bold;border-bottom:1px solid #ccc;white-space:nowrap;word-break:normal;}"+".datagrid-group-title,.datagrid-group-expander{display:inline-block;vertical-align:bottom;height:100%;line-height:"+_38.groupHeight+"px;padding:0 4px;}"+".datagrid-group-title{position:relative;}"+".datagrid-group-expander{width:"+_38.expanderWidth+"px;text-align:center;padding:0}"+".datagrid-row-expander{margin:"+Math.floor((_38.groupHeight-16)/2)+"px 0;display:inline-block;width:16px;height:16px;cursor:pointer}"+"</style>");
  231. }
  232. };
  233. },onAfterRender:function(_42){
  234. $.fn.datagrid.defaults.view.onAfterRender.call(this,_42);
  235. var _43=this;
  236. var _44=$.data(_42,"datagrid");
  237. var _45=_44.options;
  238. if(!_44.onResizeColumn){
  239. _44.onResizeColumn=_45.onResizeColumn;
  240. }
  241. if(!_44.onResize){
  242. _44.onResize=_45.onResize;
  243. }
  244. _45.onResizeColumn=function(_46,_47){
  245. _43.resizeGroup(_42);
  246. _44.onResizeColumn.call(_42,_46,_47);
  247. };
  248. _45.onResize=function(_48,_49){
  249. _43.resizeGroup(_42);
  250. _44.onResize.call($(_42).datagrid("getPanel")[0],_48,_49);
  251. };
  252. _43.resizeGroup(_42);
  253. }});
  254. $.extend($.fn.datagrid.methods,{groups:function(jq){
  255. return jq.datagrid("options").view.groups;
  256. },expandGroup:function(jq,_4a){
  257. return jq.each(function(){
  258. var _4b=$(this).datagrid("options");
  259. var _4c=$.data(this,"datagrid").dc.view;
  260. var _4d=_4c.find(_4a!=undefined?"div.datagrid-group[group-index=\""+_4a+"\"]":"div.datagrid-group");
  261. var _4e=_4d.find("span.datagrid-row-expander");
  262. if(_4e.hasClass("datagrid-row-expand")){
  263. _4e.removeClass("datagrid-row-expand").addClass("datagrid-row-collapse");
  264. _4d.next("table").show();
  265. }
  266. $(this).datagrid("fixRowHeight");
  267. if(_4b.onExpandGroup){
  268. _4b.onExpandGroup.call(this,_4a);
  269. }
  270. });
  271. },collapseGroup:function(jq,_4f){
  272. return jq.each(function(){
  273. var _50=$(this).datagrid("options");
  274. var _51=$.data(this,"datagrid").dc.view;
  275. var _52=_51.find(_4f!=undefined?"div.datagrid-group[group-index=\""+_4f+"\"]":"div.datagrid-group");
  276. var _53=_52.find("span.datagrid-row-expander");
  277. if(_53.hasClass("datagrid-row-collapse")){
  278. _53.removeClass("datagrid-row-collapse").addClass("datagrid-row-expand");
  279. _52.next("table").hide();
  280. }
  281. $(this).datagrid("fixRowHeight");
  282. if(_50.onCollapseGroup){
  283. _50.onCollapseGroup.call(this,_4f);
  284. }
  285. });
  286. },scrollToGroup:function(jq,_54){
  287. return jq.each(function(){
  288. var _55=$.data(this,"datagrid");
  289. var dc=_55.dc;
  290. var _56=dc.body2.children("div.datagrid-group[group-index=\""+_54+"\"]");
  291. if(_56.length){
  292. var _57=_56.outerHeight();
  293. var _58=dc.view2.children("div.datagrid-header")._outerHeight();
  294. var _59=dc.body2.outerHeight(true)-dc.body2.outerHeight();
  295. var top=_56.position().top-_58-_59;
  296. if(top<0){
  297. dc.body2.scrollTop(dc.body2.scrollTop()+top);
  298. }else{
  299. if(top+_57>dc.body2.height()-18){
  300. dc.body2.scrollTop(dc.body2.scrollTop()+top+_57-dc.body2.height()+18);
  301. }
  302. }
  303. }
  304. });
  305. }});
  306. $.extend(_18,{refreshGroupTitle:function(_5a,_5b){
  307. var _5c=$.data(_5a,"datagrid");
  308. var _5d=_5c.options;
  309. var dc=_5c.dc;
  310. var _5e=this.groups[_5b];
  311. var _5f=dc.body1.add(dc.body2).children("div.datagrid-group[group-index="+_5b+"]").find("span.datagrid-group-title");
  312. _5f.html(_5d.groupFormatter.call(_5a,_5e.value,_5e.rows));
  313. },resizeGroup:function(_60,_61){
  314. var _62=$.data(_60,"datagrid");
  315. var dc=_62.dc;
  316. var ht=dc.header2.find("table");
  317. var fr=ht.find("tr.datagrid-filter-row").hide();
  318. var ww=dc.body2.children("table.datagrid-btable:first").width();
  319. if(_61==undefined){
  320. var _63=dc.body2.children("div.datagrid-group");
  321. }else{
  322. var _63=dc.body2.children("div.datagrid-group[group-index="+_61+"]");
  323. }
  324. _63._outerWidth(ww);
  325. var _64=_62.options;
  326. if(_64.frozenColumns&&_64.frozenColumns.length){
  327. var _65=dc.view1.width()-_64.expanderWidth;
  328. var _66=dc.view1.css("direction").toLowerCase()=="rtl";
  329. _63.find(".datagrid-group-title").css(_66?"right":"left",-_65+"px");
  330. }
  331. if(fr.length){
  332. if(_64.showFilterBar){
  333. fr.show();
  334. }
  335. }
  336. },insertRow:function(_67,_68,row){
  337. var _69=$.data(_67,"datagrid");
  338. var _6a=_69.options;
  339. var dc=_69.dc;
  340. var _6b=null;
  341. var _6c;
  342. if(!_69.data.rows.length){
  343. $(_67).datagrid("loadData",[row]);
  344. return;
  345. }
  346. for(var i=0;i<this.groups.length;i++){
  347. if(this.groups[i].value==row[_6a.groupField]){
  348. _6b=this.groups[i];
  349. _6c=i;
  350. break;
  351. }
  352. }
  353. if(_6b){
  354. if(_68==undefined||_68==null){
  355. _68=_69.data.rows.length;
  356. }
  357. if(_68<_6b.startIndex){
  358. _68=_6b.startIndex;
  359. }else{
  360. if(_68>_6b.startIndex+_6b.rows.length){
  361. _68=_6b.startIndex+_6b.rows.length;
  362. }
  363. }
  364. $.fn.datagrid.defaults.view.insertRow.call(this,_67,_68,row);
  365. if(_68>=_6b.startIndex+_6b.rows.length){
  366. _6d(_68,true);
  367. _6d(_68,false);
  368. }
  369. _6b.rows.splice(_68-_6b.startIndex,0,row);
  370. }else{
  371. _6b={value:row[_6a.groupField],rows:[row],startIndex:_69.data.rows.length};
  372. _6c=this.groups.length;
  373. dc.body1.append(this.renderGroup.call(this,_67,_6c,_6b,true));
  374. dc.body2.append(this.renderGroup.call(this,_67,_6c,_6b,false));
  375. this.groups.push(_6b);
  376. _69.data.rows.push(row);
  377. }
  378. this.setGroupIndex(_67);
  379. this.refreshGroupTitle(_67,_6c);
  380. this.resizeGroup(_67);
  381. function _6d(_6e,_6f){
  382. var _70=_6f?1:2;
  383. var _71=_6a.finder.getTr(_67,_6e-1,"body",_70);
  384. var tr=_6a.finder.getTr(_67,_6e,"body",_70);
  385. tr.insertAfter(_71);
  386. };
  387. },updateRow:function(_72,_73,row){
  388. var _74=$.data(_72,"datagrid").options;
  389. $.fn.datagrid.defaults.view.updateRow.call(this,_72,_73,row);
  390. var tb=_74.finder.getTr(_72,_73,"body",2).closest("table.datagrid-btable");
  391. var _75=parseInt(tb.prev().attr("group-index"));
  392. this.refreshGroupTitle(_72,_75);
  393. },deleteRow:function(_76,_77){
  394. var _78=$.data(_76,"datagrid");
  395. var _79=_78.options;
  396. var dc=_78.dc;
  397. var _7a=dc.body1.add(dc.body2);
  398. var tb=_79.finder.getTr(_76,_77,"body",2).closest("table.datagrid-btable");
  399. var _7b=parseInt(tb.prev().attr("group-index"));
  400. $.fn.datagrid.defaults.view.deleteRow.call(this,_76,_77);
  401. var _7c=this.groups[_7b];
  402. if(_7c.rows.length>1){
  403. _7c.rows.splice(_77-_7c.startIndex,1);
  404. this.refreshGroupTitle(_76,_7b);
  405. }else{
  406. _7a.children("div.datagrid-group[group-index="+_7b+"]").remove();
  407. for(var i=_7b+1;i<this.groups.length;i++){
  408. _7a.children("div.datagrid-group[group-index="+i+"]").attr("group-index",i-1);
  409. }
  410. this.groups.splice(_7b,1);
  411. }
  412. this.setGroupIndex(_76);
  413. },setGroupIndex:function(_7d){
  414. var _7e=0;
  415. for(var i=0;i<this.groups.length;i++){
  416. var _7f=this.groups[i];
  417. _7f.startIndex=_7e;
  418. _7e+=_7f.rows.length;
  419. }
  420. }});
  421. $.fn.propertygrid.defaults=$.extend({},$.fn.datagrid.defaults,{groupHeight:28,expanderWidth:20,singleSelect:true,remoteSort:false,fitColumns:true,loadMsg:"",frozenColumns:[[{field:"f",width:20,resizable:false}]],columns:[[{field:"name",title:"Name",width:100,sortable:true},{field:"value",title:"Value",width:100,resizable:false}]],showGroup:false,groupView:_18,groupField:"group",groupStyler:function(_80,_81){
  422. return "";
  423. },groupFormatter:function(_82,_83){
  424. return _82;
  425. }});
  426. })(jQuery);