jquery.calendar.js 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. /**
  2. * jQuery EasyUI 1.4.4
  3. *
  4. * Copyright (c) 2009-2015 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,_3){
  12. var _4=$.data(_2,"calendar").options;
  13. var t=$(_2);
  14. if(_3){
  15. $.extend(_4,{width:_3.width,height:_3.height});
  16. }
  17. t._size(_4,t.parent());
  18. t.find(".calendar-body")._outerHeight(t.height()-t.find(".calendar-header")._outerHeight());
  19. if(t.find(".calendar-menu").is(":visible")){
  20. _5(_2);
  21. }
  22. };
  23. function _6(_7){
  24. $(_7).addClass("calendar").html("<div class=\"calendar-header\">"+"<div class=\"calendar-nav calendar-prevmonth\"></div>"+"<div class=\"calendar-nav calendar-nextmonth\"></div>"+"<div class=\"calendar-nav calendar-prevyear\"></div>"+"<div class=\"calendar-nav calendar-nextyear\"></div>"+"<div class=\"calendar-title\">"+"<span class=\"calendar-text\"></span>"+"</div>"+"</div>"+"<div class=\"calendar-body\">"+"<div class=\"calendar-menu\">"+"<div class=\"calendar-menu-year-inner\">"+"<span class=\"calendar-nav calendar-menu-prev\"></span>"+"<span><input class=\"calendar-menu-year\" type=\"text\"></input></span>"+"<span class=\"calendar-nav calendar-menu-next\"></span>"+"</div>"+"<div class=\"calendar-menu-month-inner\">"+"</div>"+"</div>"+"</div>");
  25. $(_7).bind("_resize",function(e,_8){
  26. if($(this).hasClass("easyui-fluid")||_8){
  27. _1(_7);
  28. }
  29. return false;
  30. });
  31. };
  32. function _9(_a){
  33. var _b=$.data(_a,"calendar").options;
  34. var _c=$(_a).find(".calendar-menu");
  35. _c.find(".calendar-menu-year").unbind(".calendar").bind("keypress.calendar",function(e){
  36. if(e.keyCode==13){
  37. _d(true);
  38. }
  39. });
  40. $(_a).unbind(".calendar").bind("mouseover.calendar",function(e){
  41. var t=_e(e.target);
  42. if(t.hasClass("calendar-nav")||t.hasClass("calendar-text")||(t.hasClass("calendar-day")&&!t.hasClass("calendar-disabled"))){
  43. t.addClass("calendar-nav-hover");
  44. }
  45. }).bind("mouseout.calendar",function(e){
  46. var t=_e(e.target);
  47. if(t.hasClass("calendar-nav")||t.hasClass("calendar-text")||(t.hasClass("calendar-day")&&!t.hasClass("calendar-disabled"))){
  48. t.removeClass("calendar-nav-hover");
  49. }
  50. }).bind("click.calendar",function(e){
  51. var t=_e(e.target);
  52. if(t.hasClass("calendar-menu-next")||t.hasClass("calendar-nextyear")){
  53. _f(1);
  54. }else{
  55. if(t.hasClass("calendar-menu-prev")||t.hasClass("calendar-prevyear")){
  56. _f(-1);
  57. }else{
  58. if(t.hasClass("calendar-menu-month")){
  59. _c.find(".calendar-selected").removeClass("calendar-selected");
  60. t.addClass("calendar-selected");
  61. _d(true);
  62. }else{
  63. if(t.hasClass("calendar-prevmonth")){
  64. _10(-1);
  65. }else{
  66. if(t.hasClass("calendar-nextmonth")){
  67. _10(1);
  68. }else{
  69. if(t.hasClass("calendar-text")){
  70. if(_c.is(":visible")){
  71. _c.hide();
  72. }else{
  73. _5(_a);
  74. }
  75. }else{
  76. if(t.hasClass("calendar-day")){
  77. if(t.hasClass("calendar-disabled")){
  78. return;
  79. }
  80. var _11=_b.current;
  81. t.closest("div.calendar-body").find(".calendar-selected").removeClass("calendar-selected");
  82. t.addClass("calendar-selected");
  83. var _12=t.attr("abbr").split(",");
  84. var y=parseInt(_12[0]);
  85. var m=parseInt(_12[1]);
  86. var d=parseInt(_12[2]);
  87. _b.current=new Date(y,m-1,d);
  88. _b.onSelect.call(_a,_b.current);
  89. if(!_11||_11.getTime()!=_b.current.getTime()){
  90. _b.onChange.call(_a,_b.current,_11);
  91. }
  92. if(_b.year!=y||_b.month!=m){
  93. _b.year=y;
  94. _b.month=m;
  95. _19(_a);
  96. }
  97. }
  98. }
  99. }
  100. }
  101. }
  102. }
  103. }
  104. });
  105. function _e(t){
  106. var day=$(t).closest(".calendar-day");
  107. if(day.length){
  108. return day;
  109. }else{
  110. return $(t);
  111. }
  112. };
  113. function _d(_13){
  114. var _14=$(_a).find(".calendar-menu");
  115. var _15=_14.find(".calendar-menu-year").val();
  116. var _16=_14.find(".calendar-selected").attr("abbr");
  117. if(!isNaN(_15)){
  118. _b.year=parseInt(_15);
  119. _b.month=parseInt(_16);
  120. _19(_a);
  121. }
  122. if(_13){
  123. _14.hide();
  124. }
  125. };
  126. function _f(_17){
  127. _b.year+=_17;
  128. _19(_a);
  129. _c.find(".calendar-menu-year").val(_b.year);
  130. };
  131. function _10(_18){
  132. _b.month+=_18;
  133. if(_b.month>12){
  134. _b.year++;
  135. _b.month=1;
  136. }else{
  137. if(_b.month<1){
  138. _b.year--;
  139. _b.month=12;
  140. }
  141. }
  142. _19(_a);
  143. _c.find("td.calendar-selected").removeClass("calendar-selected");
  144. _c.find("td:eq("+(_b.month-1)+")").addClass("calendar-selected");
  145. };
  146. };
  147. function _5(_1a){
  148. var _1b=$.data(_1a,"calendar").options;
  149. $(_1a).find(".calendar-menu").show();
  150. if($(_1a).find(".calendar-menu-month-inner").is(":empty")){
  151. $(_1a).find(".calendar-menu-month-inner").empty();
  152. var t=$("<table class=\"calendar-mtable\"></table>").appendTo($(_1a).find(".calendar-menu-month-inner"));
  153. var idx=0;
  154. for(var i=0;i<3;i++){
  155. var tr=$("<tr></tr>").appendTo(t);
  156. for(var j=0;j<4;j++){
  157. $("<td class=\"calendar-nav calendar-menu-month\"></td>").html(_1b.months[idx++]).attr("abbr",idx).appendTo(tr);
  158. }
  159. }
  160. }
  161. var _1c=$(_1a).find(".calendar-body");
  162. var _1d=$(_1a).find(".calendar-menu");
  163. var _1e=_1d.find(".calendar-menu-year-inner");
  164. var _1f=_1d.find(".calendar-menu-month-inner");
  165. _1e.find("input").val(_1b.year).focus();
  166. _1f.find("td.calendar-selected").removeClass("calendar-selected");
  167. _1f.find("td:eq("+(_1b.month-1)+")").addClass("calendar-selected");
  168. _1d._outerWidth(_1c._outerWidth());
  169. _1d._outerHeight(_1c._outerHeight());
  170. _1f._outerHeight(_1d.height()-_1e._outerHeight());
  171. };
  172. function _20(_21,_22,_23){
  173. var _24=$.data(_21,"calendar").options;
  174. var _25=[];
  175. var _26=new Date(_22,_23,0).getDate();
  176. for(var i=1;i<=_26;i++){
  177. _25.push([_22,_23,i]);
  178. }
  179. var _27=[],_28=[];
  180. var _29=-1;
  181. while(_25.length>0){
  182. var _2a=_25.shift();
  183. _28.push(_2a);
  184. var day=new Date(_2a[0],_2a[1]-1,_2a[2]).getDay();
  185. if(_29==day){
  186. day=0;
  187. }else{
  188. if(day==(_24.firstDay==0?7:_24.firstDay)-1){
  189. _27.push(_28);
  190. _28=[];
  191. }
  192. }
  193. _29=day;
  194. }
  195. if(_28.length){
  196. _27.push(_28);
  197. }
  198. var _2b=_27[0];
  199. if(_2b.length<7){
  200. while(_2b.length<7){
  201. var _2c=_2b[0];
  202. var _2a=new Date(_2c[0],_2c[1]-1,_2c[2]-1);
  203. _2b.unshift([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);
  204. }
  205. }else{
  206. var _2c=_2b[0];
  207. var _28=[];
  208. for(var i=1;i<=7;i++){
  209. var _2a=new Date(_2c[0],_2c[1]-1,_2c[2]-i);
  210. _28.unshift([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);
  211. }
  212. _27.unshift(_28);
  213. }
  214. var _2d=_27[_27.length-1];
  215. while(_2d.length<7){
  216. var _2e=_2d[_2d.length-1];
  217. var _2a=new Date(_2e[0],_2e[1]-1,_2e[2]+1);
  218. _2d.push([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);
  219. }
  220. if(_27.length<6){
  221. var _2e=_2d[_2d.length-1];
  222. var _28=[];
  223. for(var i=1;i<=7;i++){
  224. var _2a=new Date(_2e[0],_2e[1]-1,_2e[2]+i);
  225. _28.push([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);
  226. }
  227. _27.push(_28);
  228. }
  229. return _27;
  230. };
  231. function _19(_2f){
  232. var _30=$.data(_2f,"calendar").options;
  233. if(_30.current&&!_30.validator.call(_2f,_30.current)){
  234. _30.current=null;
  235. }
  236. var now=new Date();
  237. var _31=now.getFullYear()+","+(now.getMonth()+1)+","+now.getDate();
  238. var _32=_30.current?(_30.current.getFullYear()+","+(_30.current.getMonth()+1)+","+_30.current.getDate()):"";
  239. var _33=6-_30.firstDay;
  240. var _34=_33+1;
  241. if(_33>=7){
  242. _33-=7;
  243. }
  244. if(_34>=7){
  245. _34-=7;
  246. }
  247. $(_2f).find(".calendar-title span").html(_30.months[_30.month-1]+" "+_30.year);
  248. var _35=$(_2f).find("div.calendar-body");
  249. _35.children("table").remove();
  250. var _36=["<table class=\"calendar-dtable\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">"];
  251. _36.push("<thead><tr>");
  252. for(var i=_30.firstDay;i<_30.weeks.length;i++){
  253. _36.push("<th>"+_30.weeks[i]+"</th>");
  254. }
  255. for(var i=0;i<_30.firstDay;i++){
  256. _36.push("<th>"+_30.weeks[i]+"</th>");
  257. }
  258. _36.push("</tr></thead>");
  259. _36.push("<tbody>");
  260. var _37=_20(_2f,_30.year,_30.month);
  261. for(var i=0;i<_37.length;i++){
  262. var _38=_37[i];
  263. var cls="";
  264. if(i==0){
  265. cls="calendar-first";
  266. }else{
  267. if(i==_37.length-1){
  268. cls="calendar-last";
  269. }
  270. }
  271. _36.push("<tr class=\""+cls+"\">");
  272. for(var j=0;j<_38.length;j++){
  273. var day=_38[j];
  274. var s=day[0]+","+day[1]+","+day[2];
  275. var _39=new Date(day[0],parseInt(day[1])-1,day[2]);
  276. var d=_30.formatter.call(_2f,_39);
  277. var css=_30.styler.call(_2f,_39);
  278. var _3a="";
  279. var _3b="";
  280. if(typeof css=="string"){
  281. _3b=css;
  282. }else{
  283. if(css){
  284. _3a=css["class"]||"";
  285. _3b=css["style"]||"";
  286. }
  287. }
  288. var cls="calendar-day";
  289. if(!(_30.year==day[0]&&_30.month==day[1])){
  290. cls+=" calendar-other-month";
  291. }
  292. if(s==_31){
  293. cls+=" calendar-today";
  294. }
  295. if(s==_32){
  296. cls+=" calendar-selected";
  297. }
  298. if(j==_33){
  299. cls+=" calendar-saturday";
  300. }else{
  301. if(j==_34){
  302. cls+=" calendar-sunday";
  303. }
  304. }
  305. if(j==0){
  306. cls+=" calendar-first";
  307. }else{
  308. if(j==_38.length-1){
  309. cls+=" calendar-last";
  310. }
  311. }
  312. cls+=" "+_3a;
  313. if(!_30.validator.call(_2f,_39)){
  314. cls+=" calendar-disabled";
  315. }
  316. _36.push("<td class=\""+cls+"\" abbr=\""+s+"\" style=\""+_3b+"\">"+d+"</td>");
  317. }
  318. _36.push("</tr>");
  319. }
  320. _36.push("</tbody>");
  321. _36.push("</table>");
  322. _35.append(_36.join(""));
  323. _35.children("table.calendar-dtable").prependTo(_35);
  324. _30.onNavigate.call(_2f,_30.year,_30.month);
  325. };
  326. $.fn.calendar=function(_3c,_3d){
  327. if(typeof _3c=="string"){
  328. return $.fn.calendar.methods[_3c](this,_3d);
  329. }
  330. _3c=_3c||{};
  331. return this.each(function(){
  332. var _3e=$.data(this,"calendar");
  333. if(_3e){
  334. $.extend(_3e.options,_3c);
  335. }else{
  336. _3e=$.data(this,"calendar",{options:$.extend({},$.fn.calendar.defaults,$.fn.calendar.parseOptions(this),_3c)});
  337. _6(this);
  338. }
  339. if(_3e.options.border==false){
  340. $(this).addClass("calendar-noborder");
  341. }
  342. _1(this);
  343. _9(this);
  344. _19(this);
  345. $(this).find("div.calendar-menu").hide();
  346. });
  347. };
  348. $.fn.calendar.methods={options:function(jq){
  349. return $.data(jq[0],"calendar").options;
  350. },resize:function(jq,_3f){
  351. return jq.each(function(){
  352. _1(this,_3f);
  353. });
  354. },moveTo:function(jq,_40){
  355. return jq.each(function(){
  356. if(!_40){
  357. var now=new Date();
  358. $(this).calendar({year:now.getFullYear(),month:now.getMonth()+1,current:_40});
  359. return;
  360. }
  361. var _41=$(this).calendar("options");
  362. if(_41.validator.call(this,_40)){
  363. var _42=_41.current;
  364. $(this).calendar({year:_40.getFullYear(),month:_40.getMonth()+1,current:_40});
  365. if(!_42||_42.getTime()!=_40.getTime()){
  366. _41.onChange.call(this,_41.current,_42);
  367. }
  368. }
  369. });
  370. }};
  371. $.fn.calendar.parseOptions=function(_43){
  372. var t=$(_43);
  373. return $.extend({},$.parser.parseOptions(_43,[{firstDay:"number",fit:"boolean",border:"boolean"}]));
  374. };
  375. $.fn.calendar.defaults={width:180,height:180,fit:false,border:true,firstDay:0,weeks:["S","M","T","W","T","F","S"],months:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],year:new Date().getFullYear(),month:new Date().getMonth()+1,current:(function(){
  376. var d=new Date();
  377. return new Date(d.getFullYear(),d.getMonth(),d.getDate());
  378. })(),formatter:function(_44){
  379. return _44.getDate();
  380. },styler:function(_45){
  381. return "";
  382. },validator:function(_46){
  383. return true;
  384. },onSelect:function(_47){
  385. },onChange:function(_48,_49){
  386. },onNavigate:function(_4a,_4b){
  387. }};
  388. })(jQuery);