jquery.combogrid.js 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. /**
  2. * jQuery EasyUI 1.5.2
  3. *
  4. * Copyright (c) 2009-2017 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. _20(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. _20(_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. _20(_1d,vv,_1e.remainText);
  81. };
  82. };
  83. function nav(_21,dir){
  84. var _22=$.data(_21,"combogrid");
  85. var _23=_22.options;
  86. var _24=_22.grid;
  87. var _25=_24.datagrid("getRows").length;
  88. if(!_25){
  89. return;
  90. }
  91. var tr=_23.finder.getTr(_24[0],null,"highlight");
  92. if(!tr.length){
  93. tr=_23.finder.getTr(_24[0],null,"selected");
  94. }
  95. var _26;
  96. if(!tr.length){
  97. _26=(dir=="next"?0:_25-1);
  98. }else{
  99. var _26=parseInt(tr.attr("datagrid-row-index"));
  100. _26+=(dir=="next"?1:-1);
  101. if(_26<0){
  102. _26=_25-1;
  103. }
  104. if(_26>=_25){
  105. _26=0;
  106. }
  107. }
  108. _24.datagrid("highlightRow",_26);
  109. if(_23.selectOnNavigation){
  110. _22.remainText=false;
  111. _24.datagrid("selectRow",_26);
  112. }
  113. };
  114. function _20(_27,_28,_29){
  115. var _2a=$.data(_27,"combogrid");
  116. var _2b=_2a.options;
  117. var _2c=_2a.grid;
  118. var _2d=$(_27).combo("getValues");
  119. var _2e=$(_27).combo("options");
  120. var _2f=_2e.onChange;
  121. _2e.onChange=function(){
  122. };
  123. var _30=_2c.datagrid("options");
  124. var _31=_30.onSelect;
  125. var _32=_30.onUnselectAll;
  126. _30.onSelect=_30.onUnselectAll=function(){
  127. };
  128. if(!$.isArray(_28)){
  129. _28=_28.split(_2b.separator);
  130. }
  131. if(!_2b.multiple){
  132. _28=_28.length?[_28[0]]:[""];
  133. }
  134. var vv=$.map(_28,function(_33){
  135. return String(_33);
  136. });
  137. vv=$.grep(vv,function(v,_34){
  138. return _34===$.inArray(v,vv);
  139. });
  140. var _35=$.grep(_2c.datagrid("getSelections"),function(row,_36){
  141. return $.inArray(String(row[_2b.idField]),vv)>=0;
  142. });
  143. _2c.datagrid("clearSelections");
  144. _2c.data("datagrid").selectedRows=_35;
  145. var ss=[];
  146. _2b.unselectedValues=[];
  147. $.map(vv,function(v){
  148. var _37=_2c.datagrid("getRowIndex",v);
  149. if(_37>=0){
  150. _2c.datagrid("selectRow",_37);
  151. }else{
  152. _2b.unselectedValues.push(v);
  153. }
  154. ss.push(_38(v,_2c.datagrid("getRows"))||_38(v,_35)||_38(v,_2b.mappingRows)||v);
  155. });
  156. $(_27).combo("setValues",_2d);
  157. _2e.onChange=_2f;
  158. _30.onSelect=_31;
  159. _30.onUnselectAll=_32;
  160. if(!_29){
  161. var s=ss.join(_2b.separator);
  162. if($(_27).combo("getText")!=s){
  163. $(_27).combo("setText",s);
  164. }
  165. }
  166. $(_27).combo("setValues",_28);
  167. function _38(_39,a){
  168. var _3a=$.easyui.getArrayItem(a,_2b.idField,_39);
  169. return _3a?_3a[_2b.textField]:undefined;
  170. };
  171. };
  172. function _3b(_3c,q){
  173. var _3d=$.data(_3c,"combogrid");
  174. var _3e=_3d.options;
  175. var _3f=_3d.grid;
  176. _3d.remainText=true;
  177. var qq=_3e.multiple?q.split(_3e.separator):[q];
  178. qq=$.grep(qq,function(q){
  179. return $.trim(q)!="";
  180. });
  181. if(_3e.mode=="remote"){
  182. _40(qq);
  183. _3f.datagrid("load",$.extend({},_3e.queryParams,{q:q}));
  184. }else{
  185. _3f.datagrid("highlightRow",-1);
  186. var _41=_3f.datagrid("getRows");
  187. var vv=[];
  188. $.map(qq,function(q){
  189. q=$.trim(q);
  190. var _42=q;
  191. _43(_3e.mappingRows,q);
  192. _43(_3f.datagrid("getSelections"),q);
  193. var _44=_43(_41,q);
  194. if(_44>=0){
  195. if(_3e.reversed){
  196. _3f.datagrid("highlightRow",_44);
  197. }
  198. }else{
  199. $.map(_41,function(row,i){
  200. if(_3e.filter.call(_3c,q,row)){
  201. _3f.datagrid("highlightRow",i);
  202. }
  203. });
  204. }
  205. });
  206. _40(vv);
  207. }
  208. function _43(_45,q){
  209. for(var i=0;i<_45.length;i++){
  210. var row=_45[i];
  211. if((row[_3e.textField]||"").toLowerCase()==q.toLowerCase()){
  212. vv.push(row[_3e.idField]);
  213. return i;
  214. }
  215. }
  216. return -1;
  217. };
  218. function _40(vv){
  219. if(!_3e.reversed){
  220. _20(_3c,vv,true);
  221. }
  222. };
  223. };
  224. function _46(_47){
  225. var _48=$.data(_47,"combogrid");
  226. var _49=_48.options;
  227. var _4a=_48.grid;
  228. var tr=_49.finder.getTr(_4a[0],null,"highlight");
  229. _48.remainText=false;
  230. if(tr.length){
  231. var _4b=parseInt(tr.attr("datagrid-row-index"));
  232. if(_49.multiple){
  233. if(tr.hasClass("datagrid-row-selected")){
  234. _4a.datagrid("unselectRow",_4b);
  235. }else{
  236. _4a.datagrid("selectRow",_4b);
  237. }
  238. }else{
  239. _4a.datagrid("selectRow",_4b);
  240. }
  241. }
  242. var vv=[];
  243. $.map(_4a.datagrid("getSelections"),function(row){
  244. vv.push(row[_49.idField]);
  245. });
  246. $.map(_49.unselectedValues,function(v){
  247. if($.easyui.indexOfArray(_49.mappingRows,_49.idField,v)>=0){
  248. $.easyui.addArrayItem(vv,v);
  249. }
  250. });
  251. $(_47).combogrid("setValues",vv);
  252. if(!_49.multiple){
  253. $(_47).combogrid("hidePanel");
  254. }
  255. };
  256. $.fn.combogrid=function(_4c,_4d){
  257. if(typeof _4c=="string"){
  258. var _4e=$.fn.combogrid.methods[_4c];
  259. if(_4e){
  260. return _4e(this,_4d);
  261. }else{
  262. return this.combo(_4c,_4d);
  263. }
  264. }
  265. _4c=_4c||{};
  266. return this.each(function(){
  267. var _4f=$.data(this,"combogrid");
  268. if(_4f){
  269. $.extend(_4f.options,_4c);
  270. }else{
  271. _4f=$.data(this,"combogrid",{options:$.extend({},$.fn.combogrid.defaults,$.fn.combogrid.parseOptions(this),_4c)});
  272. }
  273. _1(this);
  274. });
  275. };
  276. $.fn.combogrid.methods={options:function(jq){
  277. var _50=jq.combo("options");
  278. return $.extend($.data(jq[0],"combogrid").options,{width:_50.width,height:_50.height,originalValue:_50.originalValue,disabled:_50.disabled,readonly:_50.readonly});
  279. },cloneFrom:function(jq,_51){
  280. return jq.each(function(){
  281. $(this).combo("cloneFrom",_51);
  282. $.data(this,"combogrid",{options:$.extend(true,{cloned:true},$(_51).combogrid("options")),combo:$(this).next(),panel:$(_51).combo("panel"),grid:$(_51).combogrid("grid")});
  283. });
  284. },grid:function(jq){
  285. return $.data(jq[0],"combogrid").grid;
  286. },setValues:function(jq,_52){
  287. return jq.each(function(){
  288. var _53=$(this).combogrid("options");
  289. if($.isArray(_52)){
  290. _52=$.map(_52,function(_54){
  291. if(_54&&typeof _54=="object"){
  292. $.easyui.addArrayItem(_53.mappingRows,_53.idField,_54);
  293. return _54[_53.idField];
  294. }else{
  295. return _54;
  296. }
  297. });
  298. }
  299. _20(this,_52);
  300. });
  301. },setValue:function(jq,_55){
  302. return jq.each(function(){
  303. $(this).combogrid("setValues",$.isArray(_55)?_55:[_55]);
  304. });
  305. },clear:function(jq){
  306. return jq.each(function(){
  307. $(this).combogrid("setValues",[]);
  308. });
  309. },reset:function(jq){
  310. return jq.each(function(){
  311. var _56=$(this).combogrid("options");
  312. if(_56.multiple){
  313. $(this).combogrid("setValues",_56.originalValue);
  314. }else{
  315. $(this).combogrid("setValue",_56.originalValue);
  316. }
  317. });
  318. }};
  319. $.fn.combogrid.parseOptions=function(_57){
  320. var t=$(_57);
  321. return $.extend({},$.fn.combo.parseOptions(_57),$.fn.datagrid.parseOptions(_57),$.parser.parseOptions(_57,["idField","textField","mode"]));
  322. };
  323. $.fn.combogrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.datagrid.defaults,{loadMsg:null,idField:null,textField:null,unselectedValues:[],mappingRows:[],mode:"local",keyHandler:{up:function(e){
  324. nav(this,"prev");
  325. e.preventDefault();
  326. },down:function(e){
  327. nav(this,"next");
  328. e.preventDefault();
  329. },left:function(e){
  330. },right:function(e){
  331. },enter:function(e){
  332. _46(this);
  333. },query:function(q,e){
  334. _3b(this,q);
  335. }},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){
  336. var _58=e.data.target;
  337. var _59=$(_58).combogrid("options");
  338. if(_59.reversed){
  339. $(_58).combogrid("setValues",$(_58).combogrid("getValues"));
  340. }
  341. }}),filter:function(q,row){
  342. var _5a=$(this).combogrid("options");
  343. return (row[_5a.textField]||"").toLowerCase().indexOf(q.toLowerCase())>=0;
  344. }});
  345. })(jQuery);