jquery.calendar.js 10 KB

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