jquery.combotreegrid.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  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. 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. if(!$.isArray(_18)){
  78. _18=_18.split(_1a.separator);
  79. }
  80. if(!_1a.multiple){
  81. _18=_18.length?[_18[0]]:[""];
  82. }
  83. var vv=$.map(_18,function(_1c){
  84. return String(_1c);
  85. });
  86. vv=$.grep(vv,function(v,_1d){
  87. return _1d===$.inArray(v,vv);
  88. });
  89. var _1e=_1b.treegrid("getSelected");
  90. if(_1e){
  91. _1b.treegrid("unselect",_1e[_1a.idField]);
  92. }
  93. $.map(_1b.treegrid("getCheckedNodes"),function(row){
  94. if($.inArray(String(row[_1a.idField]),vv)==-1){
  95. _1b.treegrid("uncheckNode",row[_1a.idField]);
  96. }
  97. });
  98. var ss=[];
  99. _1a.unselectedValues=[];
  100. $.map(vv,function(v){
  101. var row=_1b.treegrid("find",v);
  102. if(row){
  103. if(_1a.multiple){
  104. _1b.treegrid("checkNode",v);
  105. }else{
  106. _1b.treegrid("select",v);
  107. }
  108. ss.push(_1f(row));
  109. }else{
  110. ss.push(_20(v,_1a.mappingRows)||v);
  111. _1a.unselectedValues.push(v);
  112. }
  113. });
  114. if(_1a.multiple){
  115. $.map(_1b.treegrid("getCheckedNodes"),function(row){
  116. var id=String(row[_1a.idField]);
  117. if($.inArray(id,vv)==-1){
  118. vv.push(id);
  119. ss.push(_1f(row));
  120. }
  121. });
  122. }
  123. if(!_19.remainText){
  124. var s=ss.join(_1a.separator);
  125. if($(_17).combo("getText")!=s){
  126. $(_17).combo("setText",s);
  127. }
  128. }
  129. $(_17).combo("setValues",vv);
  130. function _20(_21,a){
  131. var _22=$.easyui.getArrayItem(a,_1a.idField,_21);
  132. return _22?_1f(_22):undefined;
  133. };
  134. function _1f(row){
  135. return row[_1a.textField||""]||row[_1a.treeField];
  136. };
  137. };
  138. function _23(_24,q){
  139. var _25=$.data(_24,"combotreegrid");
  140. var _26=_25.options;
  141. var _27=_25.grid;
  142. _25.remainText=true;
  143. var qq=_26.multiple?q.split(_26.separator):[q];
  144. qq=$.grep(qq,function(q){
  145. return $.trim(q)!="";
  146. });
  147. _27.treegrid("clearSelections").treegrid("clearChecked").treegrid("highlightRow",-1);
  148. if(_26.mode=="remote"){
  149. _28(qq);
  150. _27.treegrid("load",$.extend({},_26.queryParams,{q:q}));
  151. }else{
  152. if(q){
  153. var _29=_27.treegrid("getData");
  154. var vv=[];
  155. $.map(qq,function(q){
  156. q=$.trim(q);
  157. if(q){
  158. var v=undefined;
  159. $.easyui.forEach(_29,true,function(row){
  160. if(q.toLowerCase()==String(row[_26.treeField]).toLowerCase()){
  161. v=row[_26.idField];
  162. return false;
  163. }else{
  164. if(_26.filter.call(_24,q,row)){
  165. _27.treegrid("expandTo",row[_26.idField]);
  166. _27.treegrid("highlightRow",row[_26.idField]);
  167. return false;
  168. }
  169. }
  170. });
  171. if(v==undefined){
  172. $.easyui.forEach(_26.mappingRows,false,function(row){
  173. if(q.toLowerCase()==String(row[_26.treeField])){
  174. v=row[_26.idField];
  175. return false;
  176. }
  177. });
  178. }
  179. if(v!=undefined){
  180. vv.push(v);
  181. }else{
  182. vv.push(q);
  183. }
  184. }
  185. });
  186. _28(vv);
  187. _25.remainText=false;
  188. }
  189. }
  190. function _28(vv){
  191. if(!_26.reversed){
  192. $(_24).combotreegrid("setValues",vv);
  193. }
  194. };
  195. };
  196. function _2a(_2b){
  197. var _2c=$.data(_2b,"combotreegrid");
  198. var _2d=_2c.options;
  199. var _2e=_2c.grid;
  200. var tr=_2d.finder.getTr(_2e[0],null,"highlight");
  201. _2c.remainText=false;
  202. if(tr.length){
  203. var id=tr.attr("node-id");
  204. if(_2d.multiple){
  205. if(tr.hasClass("datagrid-row-selected")){
  206. _2e.treegrid("uncheckNode",id);
  207. }else{
  208. _2e.treegrid("checkNode",id);
  209. }
  210. }else{
  211. _2e.treegrid("selectRow",id);
  212. }
  213. }
  214. var vv=[];
  215. if(_2d.multiple){
  216. $.map(_2e.treegrid("getCheckedNodes"),function(row){
  217. vv.push(row[_2d.idField]);
  218. });
  219. }else{
  220. var row=_2e.treegrid("getSelected");
  221. if(row){
  222. vv.push(row[_2d.idField]);
  223. }
  224. }
  225. $.map(_2d.unselectedValues,function(v){
  226. if($.easyui.indexOfArray(_2d.mappingRows,_2d.idField,v)>=0){
  227. $.easyui.addArrayItem(vv,v);
  228. }
  229. });
  230. $(_2b).combotreegrid("setValues",vv);
  231. if(!_2d.multiple){
  232. $(_2b).combotreegrid("hidePanel");
  233. }
  234. };
  235. $.fn.combotreegrid=function(_2f,_30){
  236. if(typeof _2f=="string"){
  237. var _31=$.fn.combotreegrid.methods[_2f];
  238. if(_31){
  239. return _31(this,_30);
  240. }else{
  241. return this.combo(_2f,_30);
  242. }
  243. }
  244. _2f=_2f||{};
  245. return this.each(function(){
  246. var _32=$.data(this,"combotreegrid");
  247. if(_32){
  248. $.extend(_32.options,_2f);
  249. }else{
  250. _32=$.data(this,"combotreegrid",{options:$.extend({},$.fn.combotreegrid.defaults,$.fn.combotreegrid.parseOptions(this),_2f)});
  251. }
  252. _1(this);
  253. });
  254. };
  255. $.fn.combotreegrid.methods={options:function(jq){
  256. var _33=jq.combo("options");
  257. return $.extend($.data(jq[0],"combotreegrid").options,{width:_33.width,height:_33.height,originalValue:_33.originalValue,disabled:_33.disabled,readonly:_33.readonly});
  258. },grid:function(jq){
  259. return $.data(jq[0],"combotreegrid").grid;
  260. },setValues:function(jq,_34){
  261. return jq.each(function(){
  262. var _35=$(this).combotreegrid("options");
  263. if($.isArray(_34)){
  264. _34=$.map(_34,function(_36){
  265. if(_36&&typeof _36=="object"){
  266. $.easyui.addArrayItem(_35.mappingRows,_35.idField,_36);
  267. return _36[_35.idField];
  268. }else{
  269. return _36;
  270. }
  271. });
  272. }
  273. _16(this,_34);
  274. });
  275. },setValue:function(jq,_37){
  276. return jq.each(function(){
  277. $(this).combotreegrid("setValues",$.isArray(_37)?_37:[_37]);
  278. });
  279. },clear:function(jq){
  280. return jq.each(function(){
  281. $(this).combotreegrid("setValues",[]);
  282. });
  283. },reset:function(jq){
  284. return jq.each(function(){
  285. var _38=$(this).combotreegrid("options");
  286. if(_38.multiple){
  287. $(this).combotreegrid("setValues",_38.originalValue);
  288. }else{
  289. $(this).combotreegrid("setValue",_38.originalValue);
  290. }
  291. });
  292. }};
  293. $.fn.combotreegrid.parseOptions=function(_39){
  294. var t=$(_39);
  295. return $.extend({},$.fn.combo.parseOptions(_39),$.fn.treegrid.parseOptions(_39),$.parser.parseOptions(_39,["mode",{limitToGrid:"boolean"}]));
  296. };
  297. $.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){
  298. },down:function(e){
  299. },left:function(e){
  300. },right:function(e){
  301. },enter:function(e){
  302. _2a(this);
  303. },query:function(q,e){
  304. _23(this,q);
  305. }},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){
  306. $.fn.combo.defaults.inputEvents.blur(e);
  307. var _3a=e.data.target;
  308. var _3b=$(_3a).combotreegrid("options");
  309. if(_3b.limitToGrid){
  310. _2a(_3a);
  311. }
  312. }}),filter:function(q,row){
  313. var _3c=$(this).combotreegrid("options");
  314. return (row[_3c.treeField]||"").toLowerCase().indexOf(q.toLowerCase())>=0;
  315. }});
  316. })(jQuery);