jquery.calendar.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  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,_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. if(_30.showWeek){
  253. _36.push("<th class=\"calendar-week\">"+_30.weekNumberHeader+"</th>");
  254. }
  255. for(var i=_30.firstDay;i<_30.weeks.length;i++){
  256. _36.push("<th>"+_30.weeks[i]+"</th>");
  257. }
  258. for(var i=0;i<_30.firstDay;i++){
  259. _36.push("<th>"+_30.weeks[i]+"</th>");
  260. }
  261. _36.push("</tr></thead>");
  262. _36.push("<tbody>");
  263. var _37=_20(_2f,_30.year,_30.month);
  264. for(var i=0;i<_37.length;i++){
  265. var _38=_37[i];
  266. var cls="";
  267. if(i==0){
  268. cls="calendar-first";
  269. }else{
  270. if(i==_37.length-1){
  271. cls="calendar-last";
  272. }
  273. }
  274. _36.push("<tr class=\""+cls+"\">");
  275. if(_30.showWeek){
  276. var _39=_30.getWeekNumber(new Date(_38[0][0],parseInt(_38[0][1])-1,_38[0][2]));
  277. _36.push("<td class=\"calendar-week\">"+_39+"</td>");
  278. }
  279. for(var j=0;j<_38.length;j++){
  280. var day=_38[j];
  281. var s=day[0]+","+day[1]+","+day[2];
  282. var _3a=new Date(day[0],parseInt(day[1])-1,day[2]);
  283. var d=_30.formatter.call(_2f,_3a);
  284. var css=_30.styler.call(_2f,_3a);
  285. var _3b="";
  286. var _3c="";
  287. if(typeof css=="string"){
  288. _3c=css;
  289. }else{
  290. if(css){
  291. _3b=css["class"]||"";
  292. _3c=css["style"]||"";
  293. }
  294. }
  295. var cls="calendar-day";
  296. if(!(_30.year==day[0]&&_30.month==day[1])){
  297. cls+=" calendar-other-month";
  298. }
  299. if(s==_31){
  300. cls+=" calendar-today";
  301. }
  302. if(s==_32){
  303. cls+=" calendar-selected";
  304. }
  305. if(j==_33){
  306. cls+=" calendar-saturday";
  307. }else{
  308. if(j==_34){
  309. cls+=" calendar-sunday";
  310. }
  311. }
  312. if(j==0){
  313. cls+=" calendar-first";
  314. }else{
  315. if(j==_38.length-1){
  316. cls+=" calendar-last";
  317. }
  318. }
  319. cls+=" "+_3b;
  320. if(!_30.validator.call(_2f,_3a)){
  321. cls+=" calendar-disabled";
  322. }
  323. _36.push("<td class=\""+cls+"\" abbr=\""+s+"\" style=\""+_3c+"\">"+d+"</td>");
  324. }
  325. _36.push("</tr>");
  326. }
  327. _36.push("</tbody>");
  328. _36.push("</table>");
  329. _35.append(_36.join(""));
  330. _35.children("table.calendar-dtable").prependTo(_35);
  331. _30.onNavigate.call(_2f,_30.year,_30.month);
  332. };
  333. $.fn.calendar=function(_3d,_3e){
  334. if(typeof _3d=="string"){
  335. return $.fn.calendar.methods[_3d](this,_3e);
  336. }
  337. _3d=_3d||{};
  338. return this.each(function(){
  339. var _3f=$.data(this,"calendar");
  340. if(_3f){
  341. $.extend(_3f.options,_3d);
  342. }else{
  343. _3f=$.data(this,"calendar",{options:$.extend({},$.fn.calendar.defaults,$.fn.calendar.parseOptions(this),_3d)});
  344. _6(this);
  345. }
  346. if(_3f.options.border==false){
  347. $(this).addClass("calendar-noborder");
  348. }
  349. _1(this);
  350. _9(this);
  351. _19(this);
  352. $(this).find("div.calendar-menu").hide();
  353. });
  354. };
  355. $.fn.calendar.methods={options:function(jq){
  356. return $.data(jq[0],"calendar").options;
  357. },resize:function(jq,_40){
  358. return jq.each(function(){
  359. _1(this,_40);
  360. });
  361. },moveTo:function(jq,_41){
  362. return jq.each(function(){
  363. if(!_41){
  364. var now=new Date();
  365. $(this).calendar({year:now.getFullYear(),month:now.getMonth()+1,current:_41});
  366. return;
  367. }
  368. var _42=$(this).calendar("options");
  369. if(_42.validator.call(this,_41)){
  370. var _43=_42.current;
  371. $(this).calendar({year:_41.getFullYear(),month:_41.getMonth()+1,current:_41});
  372. if(!_43||_43.getTime()!=_41.getTime()){
  373. _42.onChange.call(this,_42.current,_43);
  374. }
  375. }
  376. });
  377. }};
  378. $.fn.calendar.parseOptions=function(_44){
  379. var t=$(_44);
  380. return $.extend({},$.parser.parseOptions(_44,["weekNumberHeader",{firstDay:"number",fit:"boolean",border:"boolean",showWeek:"boolean"}]));
  381. };
  382. $.fn.calendar.defaults={width:180,height:180,fit:false,border:true,showWeek:false,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(){
  383. var d=new Date();
  384. return new Date(d.getFullYear(),d.getMonth(),d.getDate());
  385. })(),weekNumberHeader:"",getWeekNumber:function(_45){
  386. var _46=new Date(_45.getTime());
  387. _46.setDate(_46.getDate()+4-(_46.getDay()||7));
  388. var _47=_46.getTime();
  389. _46.setMonth(0);
  390. _46.setDate(1);
  391. return Math.floor(Math.round((_47-_46)/86400000)/7)+1;
  392. },formatter:function(_48){
  393. return _48.getDate();
  394. },styler:function(_49){
  395. return "";
  396. },validator:function(_4a){
  397. return true;
  398. },onSelect:function(_4b){
  399. },onChange:function(_4c,_4d){
  400. },onNavigate:function(_4e,_4f){
  401. }};
  402. })(jQuery);