jquery.combotreegrid.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. /**
  2. * EasyUI for jQuery 1.9.4
  3. *
  4. * Copyright (c) 2009-2020 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. function _1(_2){
  12. var _3=$.data(_2,"combotreegrid");
  13. var _4=_3.options;
  14. $(_2).addClass("combotreegrid-f").combo($.extend({},_4,{onShowPanel:function(){
  15. var p=$(this).combotreegrid("panel");
  16. var _5=p.outerHeight()-p.height();
  17. var _6=p._size("minHeight");
  18. var _7=p._size("maxHeight");
  19. var dg=$(this).combotreegrid("grid");
  20. dg.treegrid("resize",{width:"100%",height:(isNaN(parseInt(_4.panelHeight))?"auto":"100%"),minHeight:(_6?_6-_5:""),maxHeight:(_7?_7-_5:"")});
  21. var _8=dg.treegrid("getSelected");
  22. if(_8){
  23. dg.treegrid("scrollTo",_8[_4.idField]);
  24. }
  25. _4.onShowPanel.call(this);
  26. }}));
  27. if(!_3.grid){
  28. var _9=$(_2).combo("panel");
  29. _3.grid=$("<table></table>").appendTo(_9);
  30. }
  31. _3.grid.treegrid($.extend({},_4,{border:false,checkbox:_4.multiple,onLoadSuccess:function(_a,_b){
  32. var _c=$(_2).combotreegrid("getValues");
  33. if(_4.multiple){
  34. $.map($(this).treegrid("getCheckedNodes"),function(_d){
  35. $.easyui.addArrayItem(_c,_d[_4.idField]);
  36. });
  37. }
  38. _16(_2,_c);
  39. _4.onLoadSuccess.call(this,_a,_b);
  40. _3.remainText=false;
  41. },onClickRow:function(_e){
  42. if(_4.multiple){
  43. $(this).treegrid(_e.checked?"uncheckNode":"checkNode",_e[_4.idField]);
  44. $(this).treegrid("unselect",_e[_4.idField]);
  45. }else{
  46. $(_2).combo("hidePanel");
  47. }
  48. _11(_2);
  49. _4.onClickRow.call(this,_e);
  50. },onCheckNode:function(_f,_10){
  51. _11(_2);
  52. _4.onCheckNode.call(this,_f,_10);
  53. }}));
  54. };
  55. function _11(_12){
  56. var _13=$.data(_12,"combotreegrid");
  57. var _14=_13.options;
  58. var _15=_13.grid;
  59. var vv=[];
  60. if(_14.multiple){
  61. vv=$.map(_15.treegrid("getCheckedNodes"),function(row){
  62. return row[_14.idField];
  63. });
  64. }else{
  65. var row=_15.treegrid("getSelected");
  66. if(row){
  67. vv.push(row[_14.idField]);
  68. }
  69. }
  70. vv=vv.concat(_14.unselectedValues);
  71. _16(_12,vv);
  72. };
  73. function _16(_17,_18){
  74. var _19=$.data(_17,"combotreegrid");
  75. var _1a=_19.options;
  76. var _1b=_19.grid;
  77. var _1c=_1b.datagrid("options");
  78. var _1d=_1c.onBeforeCheck;
  79. var _1e=_1c.onCheck;
  80. var _1f=_1c.onBeforeSelect;
  81. var _20=_1c.onSelect;
  82. _1c.onBeforeCheck=_1c.onCheck=_1c.onBeforeSelect=_1c.onSelect=function(){
  83. };
  84. if(!$.isArray(_18)){
  85. _18=_18.split(_1a.separator);
  86. }
  87. if(!_1a.multiple){
  88. _18=_18.length?[_18[0]]:[""];
  89. }
  90. var vv=$.map(_18,function(_21){
  91. return String(_21);
  92. });
  93. vv=$.grep(vv,function(v,_22){
  94. return _22===$.inArray(v,vv);
  95. });
  96. var _23=_1b.treegrid("getSelected");
  97. if(_23){
  98. _1b.treegrid("unselect",_23[_1a.idField]);
  99. }
  100. $.map(_1b.treegrid("getCheckedNodes"),function(row){
  101. if($.inArray(String(row[_1a.idField]),vv)==-1){
  102. _1b.treegrid("uncheckNode",row[_1a.idField]);
  103. }
  104. });
  105. var ss=[];
  106. _1a.unselectedValues=[];
  107. $.map(vv,function(v){
  108. var row=_1b.treegrid("find",v);
  109. if(row){
  110. if(_1a.multiple){
  111. _1b.treegrid("checkNode",v);
  112. }else{
  113. _1b.treegrid("select",v);
  114. }
  115. ss.push(_24(row));
  116. }else{
  117. ss.push(_25(v,_1a.mappingRows)||v);
  118. _1a.unselectedValues.push(v);
  119. }
  120. });
  121. if(_1a.multiple){
  122. $.map(_1b.treegrid("getCheckedNodes"),function(row){
  123. var id=String(row[_1a.idField]);
  124. if($.inArray(id,vv)==-1){
  125. vv.push(id);
  126. ss.push(_24(row));
  127. }
  128. });
  129. }
  130. _1c.onBeforeCheck=_1d;
  131. _1c.onCheck=_1e;
  132. _1c.onBeforeSelect=_1f;
  133. _1c.onSelect=_20;
  134. if(!_19.remainText){
  135. var s=ss.join(_1a.separator);
  136. if($(_17).combo("getText")!=s){
  137. $(_17).combo("setText",s);
  138. }
  139. }
  140. $(_17).combo("setValues",vv);
  141. function _25(_26,a){
  142. var _27=$.easyui.getArrayItem(a,_1a.idField,_26);
  143. return _27?_24(_27):undefined;
  144. };
  145. function _24(row){
  146. return row[_1a.textField||""]||row[_1a.treeField];
  147. };
  148. };
  149. function _28(_29,q){
  150. var _2a=$.data(_29,"combotreegrid");
  151. var _2b=_2a.options;
  152. var _2c=_2a.grid;
  153. _2a.remainText=true;
  154. var qq=_2b.multiple?q.split(_2b.separator):[q];
  155. qq=$.grep(qq,function(q){
  156. return $.trim(q)!="";
  157. });
  158. _2c.treegrid("clearSelections").treegrid("clearChecked").treegrid("highlightRow",-1);
  159. if(_2b.mode=="remote"){
  160. _2d(qq);
  161. _2c.treegrid("load",$.extend({},_2b.queryParams,{q:q}));
  162. }else{
  163. if(q){
  164. var _2e=_2c.treegrid("getData");
  165. var vv=[];
  166. $.map(qq,function(q){
  167. q=$.trim(q);
  168. if(q){
  169. var v=undefined;
  170. $.easyui.forEach(_2e,true,function(row){
  171. if(q.toLowerCase()==String(row[_2b.treeField]).toLowerCase()){
  172. v=row[_2b.idField];
  173. return false;
  174. }else{
  175. if(_2b.filter.call(_29,q,row)){
  176. _2c.treegrid("expandTo",row[_2b.idField]);
  177. _2c.treegrid("highlightRow",row[_2b.idField]);
  178. return false;
  179. }
  180. }
  181. });
  182. if(v==undefined){
  183. $.easyui.forEach(_2b.mappingRows,false,function(row){
  184. if(q.toLowerCase()==String(row[_2b.treeField])){
  185. v=row[_2b.idField];
  186. return false;
  187. }
  188. });
  189. }
  190. if(v!=undefined){
  191. vv.push(v);
  192. }else{
  193. vv.push(q);
  194. }
  195. }
  196. });
  197. _2d(vv);
  198. _2a.remainText=false;
  199. }
  200. }
  201. function _2d(vv){
  202. if(!_2b.reversed){
  203. $(_29).combotreegrid("setValues",vv);
  204. }
  205. };
  206. };
  207. function _2f(_30){
  208. var _31=$.data(_30,"combotreegrid");
  209. var _32=_31.options;
  210. var _33=_31.grid;
  211. var tr=_32.finder.getTr(_33[0],null,"highlight");
  212. _31.remainText=false;
  213. if(tr.length){
  214. var id=tr.attr("node-id");
  215. if(_32.multiple){
  216. if(tr.hasClass("datagrid-row-selected")){
  217. _33.treegrid("uncheckNode",id);
  218. }else{
  219. _33.treegrid("checkNode",id);
  220. }
  221. }else{
  222. _33.treegrid("selectRow",id);
  223. }
  224. }
  225. var vv=[];
  226. if(_32.multiple){
  227. $.map(_33.treegrid("getCheckedNodes"),function(row){
  228. vv.push(row[_32.idField]);
  229. });
  230. }else{
  231. var row=_33.treegrid("getSelected");
  232. if(row){
  233. vv.push(row[_32.idField]);
  234. }
  235. }
  236. $.map(_32.unselectedValues,function(v){
  237. if($.easyui.indexOfArray(_32.mappingRows,_32.idField,v)>=0){
  238. $.easyui.addArrayItem(vv,v);
  239. }
  240. });
  241. $(_30).combotreegrid("setValues",vv);
  242. if(!_32.multiple){
  243. $(_30).combotreegrid("hidePanel");
  244. }
  245. };
  246. $.fn.combotreegrid=function(_34,_35){
  247. if(typeof _34=="string"){
  248. var _36=$.fn.combotreegrid.methods[_34];
  249. if(_36){
  250. return _36(this,_35);
  251. }else{
  252. return this.combo(_34,_35);
  253. }
  254. }
  255. _34=_34||{};
  256. return this.each(function(){
  257. var _37=$.data(this,"combotreegrid");
  258. if(_37){
  259. $.extend(_37.options,_34);
  260. }else{
  261. _37=$.data(this,"combotreegrid",{options:$.extend({},$.fn.combotreegrid.defaults,$.fn.combotreegrid.parseOptions(this),_34)});
  262. }
  263. _1(this);
  264. });
  265. };
  266. $.fn.combotreegrid.methods={options:function(jq){
  267. var _38=jq.combo("options");
  268. return $.extend($.data(jq[0],"combotreegrid").options,{width:_38.width,height:_38.height,originalValue:_38.originalValue,disabled:_38.disabled,readonly:_38.readonly});
  269. },grid:function(jq){
  270. return $.data(jq[0],"combotreegrid").grid;
  271. },setValues:function(jq,_39){
  272. return jq.each(function(){
  273. var _3a=$(this).combotreegrid("options");
  274. if($.isArray(_39)){
  275. _39=$.map(_39,function(_3b){
  276. if(_3b&&typeof _3b=="object"){
  277. $.easyui.addArrayItem(_3a.mappingRows,_3a.idField,_3b);
  278. return _3b[_3a.idField];
  279. }else{
  280. return _3b;
  281. }
  282. });
  283. }
  284. _16(this,_39);
  285. });
  286. },setValue:function(jq,_3c){
  287. return jq.each(function(){
  288. $(this).combotreegrid("setValues",$.isArray(_3c)?_3c:[_3c]);
  289. });
  290. },clear:function(jq){
  291. return jq.each(function(){
  292. $(this).combotreegrid("setValues",[]);
  293. });
  294. },reset:function(jq){
  295. return jq.each(function(){
  296. var _3d=$(this).combotreegrid("options");
  297. if(_3d.multiple){
  298. $(this).combotreegrid("setValues",_3d.originalValue);
  299. }else{
  300. $(this).combotreegrid("setValue",_3d.originalValue);
  301. }
  302. });
  303. }};
  304. $.fn.combotreegrid.parseOptions=function(_3e){
  305. var t=$(_3e);
  306. return $.extend({},$.fn.combo.parseOptions(_3e),$.fn.treegrid.parseOptions(_3e),$.parser.parseOptions(_3e,["mode",{limitToGrid:"boolean"}]));
  307. };
  308. $.fn.combotreegrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.treegrid.defaults,{editable:false,singleSelect:true,limitToGrid:false,unselectedValues:[],mappingRows:[],mode:"local",textField:null,keyHandler:{up:function(e){
  309. },down:function(e){
  310. },left:function(e){
  311. },right:function(e){
  312. },enter:function(e){
  313. _2f(this);
  314. },query:function(q,e){
  315. _28(this,q);
  316. }},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){
  317. $.fn.combo.defaults.inputEvents.blur(e);
  318. var _3f=e.data.target;
  319. var _40=$(_3f).combotreegrid("options");
  320. if(_40.limitToGrid){
  321. _2f(_3f);
  322. }
  323. }}),filter:function(q,row){
  324. var _41=$(this).combotreegrid("options");
  325. return (row[_41.treeField]||"").toLowerCase().indexOf(q.toLowerCase())>=0;
  326. }});
  327. })(jQuery);