jquery.calendar.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. /**
  2. * jQuery EasyUI 1.3.4
  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){
  14. var _3=$.data(_2,"calendar").options;
  15. var t=$(_2);
  16. _3.fit?$.extend(_3,t._fit()):t._fit(false);
  17. var _4=t.find(".calendar-header");
  18. t._outerWidth(_3.width);
  19. t._outerHeight(_3.height);
  20. t.find(".calendar-body")._outerHeight(t.height()-_4._outerHeight());
  21. };
  22. function _5(_6){
  23. $(_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>");
  24. $(_6).find(".calendar-title span").hover(function(){
  25. $(this).addClass("calendar-menu-hover");
  26. },function(){
  27. $(this).removeClass("calendar-menu-hover");
  28. }).click(function(){
  29. var _7=$(_6).find(".calendar-menu");
  30. if(_7.is(":visible")){
  31. _7.hide();
  32. }else{
  33. _14(_6);
  34. }
  35. });
  36. $(".calendar-prevmonth,.calendar-nextmonth,.calendar-prevyear,.calendar-nextyear",_6).hover(function(){
  37. $(this).addClass("calendar-nav-hover");
  38. },function(){
  39. $(this).removeClass("calendar-nav-hover");
  40. });
  41. $(_6).find(".calendar-nextmonth").click(function(){
  42. _9(_6,1);
  43. });
  44. $(_6).find(".calendar-prevmonth").click(function(){
  45. _9(_6,-1);
  46. });
  47. $(_6).find(".calendar-nextyear").click(function(){
  48. _f(_6,1);
  49. });
  50. $(_6).find(".calendar-prevyear").click(function(){
  51. _f(_6,-1);
  52. });
  53. $(_6).bind("_resize",function(){
  54. var _8=$.data(_6,"calendar").options;
  55. if(_8.fit==true){
  56. _1(_6);
  57. }
  58. return false;
  59. });
  60. };
  61. function _9(_a,_b){
  62. var _c=$.data(_a,"calendar").options;
  63. _c.month+=_b;
  64. if(_c.month>12){
  65. _c.year++;
  66. _c.month=1;
  67. }else{
  68. if(_c.month<1){
  69. _c.year--;
  70. _c.month=12;
  71. }
  72. }
  73. _d(_a);
  74. var _e=$(_a).find(".calendar-menu-month-inner");
  75. _e.find("td.calendar-selected").removeClass("calendar-selected");
  76. _e.find("td:eq("+(_c.month-1)+")").addClass("calendar-selected");
  77. };
  78. function _f(_10,_11){
  79. var _12=$.data(_10,"calendar").options;
  80. _12.year+=_11;
  81. _d(_10);
  82. var _13=$(_10).find(".calendar-menu-year");
  83. _13.val(_12.year);
  84. };
  85. function _14(_15){
  86. var _16=$.data(_15,"calendar").options;
  87. $(_15).find(".calendar-menu").show();
  88. if($(_15).find(".calendar-menu-month-inner").is(":empty")){
  89. $(_15).find(".calendar-menu-month-inner").empty();
  90. var t=$("<table></table>").appendTo($(_15).find(".calendar-menu-month-inner"));
  91. var idx=0;
  92. for(var i=0;i<3;i++){
  93. var tr=$("<tr></tr>").appendTo(t);
  94. for(var j=0;j<4;j++){
  95. $("<td class=\"calendar-menu-month\"></td>").html(_16.months[idx++]).attr("abbr",idx).appendTo(tr);
  96. }
  97. }
  98. $(_15).find(".calendar-menu-prev,.calendar-menu-next").hover(function(){
  99. $(this).addClass("calendar-menu-hover");
  100. },function(){
  101. $(this).removeClass("calendar-menu-hover");
  102. });
  103. $(_15).find(".calendar-menu-next").click(function(){
  104. var y=$(_15).find(".calendar-menu-year");
  105. if(!isNaN(y.val())){
  106. y.val(parseInt(y.val())+1);
  107. }
  108. });
  109. $(_15).find(".calendar-menu-prev").click(function(){
  110. var y=$(_15).find(".calendar-menu-year");
  111. if(!isNaN(y.val())){
  112. y.val(parseInt(y.val()-1));
  113. }
  114. });
  115. $(_15).find(".calendar-menu-year").keypress(function(e){
  116. if(e.keyCode==13){
  117. _17();
  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();
  129. });
  130. }
  131. function _17(){
  132. var _19=$(_15).find(".calendar-menu");
  133. var _1a=_19.find(".calendar-menu-year").val();
  134. var _1b=_19.find(".calendar-selected").attr("abbr");
  135. if(!isNaN(_1a)){
  136. _16.year=parseInt(_1a);
  137. _16.month=parseInt(_1b);
  138. _d(_15);
  139. }
  140. _19.hide();
  141. };
  142. var _1c=$(_15).find(".calendar-body");
  143. var _1d=$(_15).find(".calendar-menu");
  144. var _1e=_1d.find(".calendar-menu-year-inner");
  145. var _1f=_1d.find(".calendar-menu-month-inner");
  146. _1e.find("input").val(_16.year).focus();
  147. _1f.find("td.calendar-selected").removeClass("calendar-selected");
  148. _1f.find("td:eq("+(_16.month-1)+")").addClass("calendar-selected");
  149. _1d._outerWidth(_1c._outerWidth());
  150. _1d._outerHeight(_1c._outerHeight());
  151. _1f._outerHeight(_1d.height()-_1e._outerHeight());
  152. };
  153. function _20(_21,_22,_23){
  154. var _24=$.data(_21,"calendar").options;
  155. var _25=[];
  156. var _26=new Date(_22,_23,0).getDate();
  157. for(var i=1;i<=_26;i++){
  158. _25.push([_22,_23,i]);
  159. }
  160. var _27=[],_28=[];
  161. var _29=-1;
  162. while(_25.length>0){
  163. var _2a=_25.shift();
  164. _28.push(_2a);
  165. var day=new Date(_2a[0],_2a[1]-1,_2a[2]).getDay();
  166. if(_29==day){
  167. day=0;
  168. }else{
  169. if(day==(_24.firstDay==0?7:_24.firstDay)-1){
  170. _27.push(_28);
  171. _28=[];
  172. }
  173. }
  174. _29=day;
  175. }
  176. if(_28.length){
  177. _27.push(_28);
  178. }
  179. var _2b=_27[0];
  180. if(_2b.length<7){
  181. while(_2b.length<7){
  182. var _2c=_2b[0];
  183. var _2a=new Date(_2c[0],_2c[1]-1,_2c[2]-1);
  184. _2b.unshift([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);
  185. }
  186. }else{
  187. var _2c=_2b[0];
  188. var _28=[];
  189. for(var i=1;i<=7;i++){
  190. var _2a=new Date(_2c[0],_2c[1]-1,_2c[2]-i);
  191. _28.unshift([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);
  192. }
  193. _27.unshift(_28);
  194. }
  195. var _2d=_27[_27.length-1];
  196. while(_2d.length<7){
  197. var _2e=_2d[_2d.length-1];
  198. var _2a=new Date(_2e[0],_2e[1]-1,_2e[2]+1);
  199. _2d.push([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);
  200. }
  201. if(_27.length<6){
  202. var _2e=_2d[_2d.length-1];
  203. var _28=[];
  204. for(var i=1;i<=7;i++){
  205. var _2a=new Date(_2e[0],_2e[1]-1,_2e[2]+i);
  206. _28.push([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);
  207. }
  208. _27.push(_28);
  209. }
  210. return _27;
  211. };
  212. function _d(_2f){
  213. var _30=$.data(_2f,"calendar").options;
  214. $(_2f).find(".calendar-title span").html(_30.months[_30.month-1]+" "+_30.year);
  215. var _31=$(_2f).find("div.calendar-body");
  216. _31.find(">table").remove();
  217. var t=$("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><thead></thead><tbody></tbody></table>").prependTo(_31);
  218. var tr=$("<tr></tr>").appendTo(t.find("thead"));
  219. for(var i=_30.firstDay;i<_30.weeks.length;i++){
  220. tr.append("<th>"+_30.weeks[i]+"</th>");
  221. }
  222. for(var i=0;i<_30.firstDay;i++){
  223. tr.append("<th>"+_30.weeks[i]+"</th>");
  224. }
  225. var _32=_20(_2f,_30.year,_30.month);
  226. for(var i=0;i<_32.length;i++){
  227. var _33=_32[i];
  228. var tr=$("<tr></tr>").appendTo(t.find("tbody"));
  229. for(var j=0;j<_33.length;j++){
  230. var day=_33[j];
  231. $("<td class=\"calendar-day calendar-other-month\"></td>").attr("abbr",day[0]+","+day[1]+","+day[2]).html(day[2]).appendTo(tr);
  232. }
  233. }
  234. t.find("td[abbr^=\""+_30.year+","+_30.month+"\"]").removeClass("calendar-other-month");
  235. var now=new Date();
  236. var _34=now.getFullYear()+","+(now.getMonth()+1)+","+now.getDate();
  237. t.find("td[abbr=\""+_34+"\"]").addClass("calendar-today");
  238. if(_30.current){
  239. t.find(".calendar-selected").removeClass("calendar-selected");
  240. var _35=_30.current.getFullYear()+","+(_30.current.getMonth()+1)+","+_30.current.getDate();
  241. t.find("td[abbr=\""+_35+"\"]").addClass("calendar-selected");
  242. }
  243. var _36=6-_30.firstDay;
  244. var _37=_36+1;
  245. if(_36>=7){
  246. _36-=7;
  247. }
  248. if(_37>=7){
  249. _37-=7;
  250. }
  251. t.find("tr").find("td:eq("+_36+")").addClass("calendar-saturday");
  252. t.find("tr").find("td:eq("+_37+")").addClass("calendar-sunday");
  253. t.find("td").hover(function(){
  254. $(this).addClass("calendar-hover");
  255. },function(){
  256. $(this).removeClass("calendar-hover");
  257. }).click(function(){
  258. t.find(".calendar-selected").removeClass("calendar-selected");
  259. $(this).addClass("calendar-selected");
  260. var _38=$(this).attr("abbr").split(",");
  261. _30.current=new Date(_38[0],parseInt(_38[1])-1,_38[2]);
  262. _30.onSelect.call(_2f,_30.current);
  263. });
  264. };
  265. $.fn.calendar=function(_39,_3a){
  266. if(typeof _39=="string"){
  267. return $.fn.calendar.methods[_39](this,_3a);
  268. }
  269. _39=_39||{};
  270. return this.each(function(){
  271. var _3b=$.data(this,"calendar");
  272. if(_3b){
  273. $.extend(_3b.options,_39);
  274. }else{
  275. _3b=$.data(this,"calendar",{options:$.extend({},$.fn.calendar.defaults,$.fn.calendar.parseOptions(this),_39)});
  276. _5(this);
  277. }
  278. if(_3b.options.border==false){
  279. $(this).addClass("calendar-noborder");
  280. }
  281. _1(this);
  282. _d(this);
  283. $(this).find("div.calendar-menu").hide();
  284. });
  285. };
  286. $.fn.calendar.methods={options:function(jq){
  287. return $.data(jq[0],"calendar").options;
  288. },resize:function(jq){
  289. return jq.each(function(){
  290. _1(this);
  291. });
  292. },moveTo:function(jq,_3c){
  293. return jq.each(function(){
  294. $(this).calendar({year:_3c.getFullYear(),month:_3c.getMonth()+1,current:_3c});
  295. });
  296. }};
  297. $.fn.calendar.parseOptions=function(_3d){
  298. var t=$(_3d);
  299. return $.extend({},$.parser.parseOptions(_3d,["width","height",{firstDay:"number",fit:"boolean",border:"boolean"}]));
  300. };
  301. $.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:new Date(),onSelect:function(_3e){
  302. }};
  303. })(jQuery);