PageRenderTime 37ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/easyui/plugins/jquery.combo.js

https://bitbucket.org/chanthorn/easyace
JavaScript | 425 lines | 413 code | 1 blank | 11 comment | 35 complexity | 0eb84f236e535e2d9c0f271cd5d152c5 MD5 | raw file
  1. /**
  2. * jQuery EasyUI 1.3.3
  3. *
  4. * Copyright (c) 2009-2013 www.jeasyui.com. All rights reserved.
  5. *
  6. * Licensed under the GPL or commercial licenses
  7. * To use it on other terms please contact us: info@jeasyui.com
  8. * http://www.gnu.org/licenses/gpl.txt
  9. * http://www.jeasyui.com/license_commercial.php
  10. *
  11. */
  12. (function($){
  13. function _1(_2,_3){
  14. var _4=$.data(_2,"combo").options;
  15. var _5=$.data(_2,"combo").combo;
  16. var _6=$.data(_2,"combo").panel;
  17. if(_3){
  18. _4.width=_3;
  19. }
  20. if(isNaN(_4.width)){
  21. var c=$(_2).clone();
  22. c.css("visibility","hidden");
  23. c.appendTo("body");
  24. _4.width=c.outerWidth();
  25. c.remove();
  26. }
  27. _5.appendTo("body");
  28. var _7=_5.find("input.combo-text");
  29. var _8=_5.find(".combo-arrow");
  30. var _9=_4.hasDownArrow?_8._outerWidth():0;
  31. _5._outerWidth(_4.width)._outerHeight(_4.height);
  32. _7._outerWidth(_5.width()-_9);
  33. _7.css({height:_5.height()+"px",lineHeight:_5.height()+"px"});
  34. _8._outerHeight(_5.height());
  35. _6.panel("resize",{width:(_4.panelWidth?_4.panelWidth:_5.outerWidth()),height:_4.panelHeight});
  36. _5.insertAfter(_2);
  37. };
  38. function _a(_b){
  39. $(_b).addClass("combo-f").hide();
  40. var _c=$("<span class=\"combo\"></span>").insertAfter(_b);
  41. var _d=$("<input type=\"text\" class=\"combo-text\">").appendTo(_c);
  42. $("<span><span class=\"combo-arrow\"></span></span>").appendTo(_c);
  43. $("<input type=\"hidden\" class=\"combo-value\">").appendTo(_c);
  44. var _e=$("<div class=\"combo-panel\"></div>").appendTo("body");
  45. _e.panel({doSize:false,closed:true,cls:"combo-p",style:{position:"absolute",zIndex:10},onOpen:function(){
  46. $(this).panel("resize");
  47. },onClose:function(){
  48. var _f=$.data(_b,"combo");
  49. if(_f){
  50. _f.options.onHidePanel.call(_b);
  51. }
  52. }});
  53. var _10=$(_b).attr("name");
  54. if(_10){
  55. _c.find("input.combo-value").attr("name",_10);
  56. $(_b).removeAttr("name").attr("comboName",_10);
  57. }
  58. _d.attr("autocomplete","off");
  59. return {combo:_c,panel:_e};
  60. };
  61. function _11(_12){
  62. var _13=$.data(_12,"combo");
  63. var _14=_13.options;
  64. var _15=_13.combo;
  65. if(_14.hasDownArrow){
  66. _15.find(".combo-arrow").show();
  67. }else{
  68. _15.find(".combo-arrow").hide();
  69. }
  70. _16(_12,_14.disabled);
  71. _17(_12,_14.readonly);
  72. };
  73. function _18(_19){
  74. var _1a=$.data(_19,"combo");
  75. var _1b=_1a.combo.find("input.combo-text");
  76. _1b.validatebox("destroy");
  77. _1a.panel.panel("destroy");
  78. _1a.combo.remove();
  79. $(_19).remove();
  80. };
  81. function _1c(_1d){
  82. var _1e=$.data(_1d,"combo");
  83. var _1f=_1e.options;
  84. var _20=_1e.panel;
  85. var _21=_1e.combo;
  86. var _22=_21.find(".combo-text");
  87. var _23=_21.find(".combo-arrow");
  88. $(document).unbind(".combo").bind("mousedown.combo",function(e){
  89. var p=$(e.target).closest("span.combo,div.combo-panel");
  90. if(p.length){
  91. return;
  92. }
  93. $("body>div.combo-p>div.combo-panel:visible").panel("close");
  94. });
  95. _22.unbind(".combo");
  96. _23.unbind(".combo");
  97. if(!_1f.disabled&&!_1f.readonly){
  98. _22.bind("mousedown.combo",function(e){
  99. $("div.combo-panel").not(_20).panel("close");
  100. e.stopPropagation();
  101. }).bind("keydown.combo",function(e){
  102. switch(e.keyCode){
  103. case 38:
  104. _1f.keyHandler.up.call(_1d);
  105. break;
  106. case 40:
  107. _1f.keyHandler.down.call(_1d);
  108. break;
  109. case 13:
  110. e.preventDefault();
  111. _1f.keyHandler.enter.call(_1d);
  112. return false;
  113. case 9:
  114. case 27:
  115. _2c(_1d);
  116. break;
  117. default:
  118. if(_1f.editable){
  119. if(_1e.timer){
  120. clearTimeout(_1e.timer);
  121. }
  122. _1e.timer=setTimeout(function(){
  123. var q=_22.val();
  124. if(_1e.previousValue!=q){
  125. _1e.previousValue=q;
  126. $(_1d).combo("showPanel");
  127. _1f.keyHandler.query.call(_1d,_22.val());
  128. _2f(_1d,true);
  129. }
  130. },_1f.delay);
  131. }
  132. }
  133. });
  134. _23.bind("click.combo",function(){
  135. if(_20.is(":visible")){
  136. _2c(_1d);
  137. }else{
  138. $("div.combo-panel:visible").panel("close");
  139. $(_1d).combo("showPanel");
  140. }
  141. _22.focus();
  142. }).bind("mouseenter.combo",function(){
  143. $(this).addClass("combo-arrow-hover");
  144. }).bind("mouseleave.combo",function(){
  145. $(this).removeClass("combo-arrow-hover");
  146. });
  147. }
  148. };
  149. function _24(_25){
  150. var _26=$.data(_25,"combo").options;
  151. var _27=$.data(_25,"combo").combo;
  152. var _28=$.data(_25,"combo").panel;
  153. if($.fn.window){
  154. _28.panel("panel").css("z-index",$.fn.window.defaults.zIndex++);
  155. }
  156. _28.panel("move",{left:_27.offset().left,top:_29()});
  157. if(_28.panel("options").closed){
  158. _28.panel("open");
  159. _26.onShowPanel.call(_25);
  160. }
  161. (function(){
  162. if(_28.is(":visible")){
  163. _28.panel("move",{left:_2a(),top:_29()});
  164. setTimeout(arguments.callee,200);
  165. }
  166. })();
  167. function _2a(){
  168. var _2b=_27.offset().left;
  169. if(_2b+_28._outerWidth()>$(window)._outerWidth()+$(document).scrollLeft()){
  170. _2b=$(window)._outerWidth()+$(document).scrollLeft()-_28._outerWidth();
  171. }
  172. if(_2b<0){
  173. _2b=0;
  174. }
  175. return _2b;
  176. };
  177. function _29(){
  178. var top=_27.offset().top+_27._outerHeight();
  179. if(top+_28._outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){
  180. top=_27.offset().top-_28._outerHeight();
  181. }
  182. if(top<$(document).scrollTop()){
  183. top=_27.offset().top+_27._outerHeight();
  184. }
  185. return top;
  186. };
  187. };
  188. function _2c(_2d){
  189. var _2e=$.data(_2d,"combo").panel;
  190. _2e.panel("close");
  191. };
  192. function _2f(_30,_31){
  193. var _32=$.data(_30,"combo").options;
  194. var _33=$.data(_30,"combo").combo.find("input.combo-text");
  195. _33.validatebox($.extend({},_32,{deltaX:(_32.hasDownArrow?_32.deltaX:(_32.deltaX>0?1:-1))}));
  196. if(_31){
  197. _33.validatebox("validate");
  198. }
  199. };
  200. function _16(_34,_35){
  201. var _36=$.data(_34,"combo");
  202. var _37=_36.options;
  203. var _38=_36.combo;
  204. if(_35){
  205. _37.disabled=true;
  206. $(_34).attr("disabled",true);
  207. _38.find(".combo-value").attr("disabled",true);
  208. _38.find(".combo-text").attr("disabled",true);
  209. }else{
  210. _37.disabled=false;
  211. $(_34).removeAttr("disabled");
  212. _38.find(".combo-value").removeAttr("disabled");
  213. _38.find(".combo-text").removeAttr("disabled");
  214. }
  215. };
  216. function _17(_39,_3a){
  217. var _3b=$.data(_39,"combo");
  218. var _3c=_3b.options;
  219. _3c.readonly=_3a==undefined?true:_3a;
  220. _3b.combo.find(".combo-text").attr("readonly",_3c.readonly?true:(!_3c.editable));
  221. };
  222. function _3d(_3e){
  223. var _3f=$.data(_3e,"combo");
  224. var _40=_3f.options;
  225. var _41=_3f.combo;
  226. if(_40.multiple){
  227. _41.find("input.combo-value").remove();
  228. }else{
  229. _41.find("input.combo-value").val("");
  230. }
  231. _41.find("input.combo-text").val("");
  232. };
  233. function _42(_43){
  234. var _44=$.data(_43,"combo").combo;
  235. return _44.find("input.combo-text").val();
  236. };
  237. function _45(_46,_47){
  238. var _48=$.data(_46,"combo").combo;
  239. _48.find("input.combo-text").val(_47);
  240. _2f(_46,true);
  241. $.data(_46,"combo").previousValue=_47;
  242. };
  243. function _49(_4a){
  244. var _4b=[];
  245. var _4c=$.data(_4a,"combo").combo;
  246. _4c.find("input.combo-value").each(function(){
  247. _4b.push($(this).val());
  248. });
  249. return _4b;
  250. };
  251. function _4d(_4e,_4f){
  252. var _50=$.data(_4e,"combo").options;
  253. var _51=_49(_4e);
  254. var _52=$.data(_4e,"combo").combo;
  255. _52.find("input.combo-value").remove();
  256. var _53=$(_4e).attr("comboName");
  257. for(var i=0;i<_4f.length;i++){
  258. var _54=$("<input type=\"hidden\" class=\"combo-value\">").appendTo(_52);
  259. if(_53){
  260. _54.attr("name",_53);
  261. }
  262. _54.val(_4f[i]);
  263. }
  264. var tmp=[];
  265. for(var i=0;i<_51.length;i++){
  266. tmp[i]=_51[i];
  267. }
  268. var aa=[];
  269. for(var i=0;i<_4f.length;i++){
  270. for(var j=0;j<tmp.length;j++){
  271. if(_4f[i]==tmp[j]){
  272. aa.push(_4f[i]);
  273. tmp.splice(j,1);
  274. break;
  275. }
  276. }
  277. }
  278. if(aa.length!=_4f.length||_4f.length!=_51.length){
  279. if(_50.multiple){
  280. _50.onChange.call(_4e,_4f,_51);
  281. }else{
  282. _50.onChange.call(_4e,_4f[0],_51[0]);
  283. }
  284. }
  285. };
  286. function _55(_56){
  287. var _57=_49(_56);
  288. return _57[0];
  289. };
  290. function _58(_59,_5a){
  291. _4d(_59,[_5a]);
  292. };
  293. function _5b(_5c){
  294. var _5d=$.data(_5c,"combo").options;
  295. var fn=_5d.onChange;
  296. _5d.onChange=function(){
  297. };
  298. if(_5d.multiple){
  299. if(_5d.value){
  300. if(typeof _5d.value=="object"){
  301. _4d(_5c,_5d.value);
  302. }else{
  303. _58(_5c,_5d.value);
  304. }
  305. }else{
  306. _4d(_5c,[]);
  307. }
  308. _5d.originalValue=_49(_5c);
  309. }else{
  310. _58(_5c,_5d.value);
  311. _5d.originalValue=_5d.value;
  312. }
  313. _5d.onChange=fn;
  314. };
  315. $.fn.combo=function(_5e,_5f){
  316. if(typeof _5e=="string"){
  317. return $.fn.combo.methods[_5e](this,_5f);
  318. }
  319. _5e=_5e||{};
  320. return this.each(function(){
  321. var _60=$.data(this,"combo");
  322. if(_60){
  323. $.extend(_60.options,_5e);
  324. }else{
  325. var r=_a(this);
  326. _60=$.data(this,"combo",{options:$.extend({},$.fn.combo.defaults,$.fn.combo.parseOptions(this),_5e),combo:r.combo,panel:r.panel,previousValue:null});
  327. $(this).removeAttr("disabled");
  328. }
  329. _11(this);
  330. _1(this);
  331. _1c(this);
  332. _2f(this);
  333. _5b(this);
  334. });
  335. };
  336. $.fn.combo.methods={options:function(jq){
  337. return $.data(jq[0],"combo").options;
  338. },panel:function(jq){
  339. return $.data(jq[0],"combo").panel;
  340. },textbox:function(jq){
  341. return $.data(jq[0],"combo").combo.find("input.combo-text");
  342. },destroy:function(jq){
  343. return jq.each(function(){
  344. _18(this);
  345. });
  346. },resize:function(jq,_61){
  347. return jq.each(function(){
  348. _1(this,_61);
  349. });
  350. },showPanel:function(jq){
  351. return jq.each(function(){
  352. _24(this);
  353. });
  354. },hidePanel:function(jq){
  355. return jq.each(function(){
  356. _2c(this);
  357. });
  358. },disable:function(jq){
  359. return jq.each(function(){
  360. _16(this,true);
  361. _1c(this);
  362. });
  363. },enable:function(jq){
  364. return jq.each(function(){
  365. _16(this,false);
  366. _1c(this);
  367. });
  368. },readonly:function(jq,_62){
  369. return jq.each(function(){
  370. _17(this,_62);
  371. _1c(this);
  372. });
  373. },validate:function(jq){
  374. return jq.each(function(){
  375. _2f(this,true);
  376. });
  377. },isValid:function(jq){
  378. var _63=$.data(jq[0],"combo").combo.find("input.combo-text");
  379. return _63.validatebox("isValid");
  380. },clear:function(jq){
  381. return jq.each(function(){
  382. _3d(this);
  383. });
  384. },reset:function(jq){
  385. return jq.each(function(){
  386. var _64=$.data(this,"combo").options;
  387. if(_64.multiple){
  388. $(this).combo("setValues",_64.originalValue);
  389. }else{
  390. $(this).combo("setValue",_64.originalValue);
  391. }
  392. });
  393. },getText:function(jq){
  394. return _42(jq[0]);
  395. },setText:function(jq,_65){
  396. return jq.each(function(){
  397. _45(this,_65);
  398. });
  399. },getValues:function(jq){
  400. return _49(jq[0]);
  401. },setValues:function(jq,_66){
  402. return jq.each(function(){
  403. _4d(this,_66);
  404. });
  405. },getValue:function(jq){
  406. return _55(jq[0]);
  407. },setValue:function(jq,_67){
  408. return jq.each(function(){
  409. _58(this,_67);
  410. });
  411. }};
  412. $.fn.combo.parseOptions=function(_68){
  413. var t=$(_68);
  414. return $.extend({},$.fn.validatebox.parseOptions(_68),$.parser.parseOptions(_68,["width","height","separator",{panelWidth:"number",editable:"boolean",hasDownArrow:"boolean",delay:"number",selectOnNavigation:"boolean"}]),{panelHeight:(t.attr("panelHeight")=="auto"?"auto":parseInt(t.attr("panelHeight"))||undefined),multiple:(t.attr("multiple")?true:undefined),disabled:(t.attr("disabled")?true:undefined),readonly:(t.attr("readonly")?true:undefined),value:(t.val()||undefined)});
  415. };
  416. $.fn.combo.defaults=$.extend({},$.fn.validatebox.defaults,{width:"auto",height:22,panelWidth:null,panelHeight:200,multiple:false,selectOnNavigation:true,separator:",",editable:true,disabled:false,readonly:false,hasDownArrow:true,value:"",delay:200,deltaX:19,keyHandler:{up:function(){
  417. },down:function(){
  418. },enter:function(){
  419. },query:function(q){
  420. }},onShowPanel:function(){
  421. },onHidePanel:function(){
  422. },onChange:function(_69,_6a){
  423. }});
  424. })(jQuery);