jquery.combogrid.js 8.5 KB

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