Guest User

Untitled

a guest
Jun 20th, 2018
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.59 KB | None | 0 0
  1. months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
  2. daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  3. weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
  4.  
  5. Calendar = function(configuration) {
  6. this.relativeElement = $("#"+configuration.relativeElementId);
  7. this.date = new Date();
  8. this.setLayout();
  9. this.setEvents(this);
  10. this.updateDaysTable(this.date);
  11. }
  12.  
  13. Calendar.prototype.setLayout = function() {
  14. this.calendarDiv = $("<div>").addClass("calendar");
  15. $("body").append(this.calendarDiv);
  16.  
  17. this.headerDiv = $("<div>").addClass("header");
  18. $(this.calendarDiv).append(this.headerDiv);
  19. $(this.calendarDiv).css( { "top": $(this.relativeElement).position().top + 22 + "px" } );
  20.  
  21. this.monthYearSpan = $("<span>").addClass("month-year");
  22. $(this.headerDiv).append(this.monthYearSpan);
  23.  
  24. this.leftArrow = $("<a>").addClass("left-arrow").html("&larr;").attr("href", "#");
  25. $(this.headerDiv).append(this.leftArrow);
  26.  
  27. this.rightArrow = $("<a>").addClass("right-arrow").html("&rarr;").attr("href", "#");
  28. $(this.headerDiv).append(this.rightArrow);
  29.  
  30. var weekDaysDiv = $("<div>").addClass("week-days");
  31. $(this.headerDiv).append(weekDaysDiv);
  32.  
  33. var weekDaysTable = $("<table>").append("<tr>");
  34. var row = $("tr", weekDaysTable);
  35. for (var i = 0; i < 7; i++) {
  36. var cell = $(row).append("<td>").children().last().append(weekdays[i].substr(0, 3));
  37. }
  38. $(weekDaysDiv).append(weekDaysTable);
  39.  
  40. this.daysTableWrapperDiv = $("<div>").addClass("days-table-wrapper");
  41. $(this.calendarDiv).append(this.daysTableWrapperDiv);
  42. }
  43.  
  44. Calendar.prototype.updateMonthYear = function(month, year) {
  45. $(this.monthYearSpan).html(month + " " + year);
  46. }
  47.  
  48. Calendar.prototype.updateDaysTable = function(date) {
  49. if (this.daysTable != null) {
  50. $(this.daysTable).remove();
  51. }
  52. var calendarObject = this;
  53. date.setDate(1);
  54. var first = date.getDay();
  55. var monthNumber = date.getMonth();
  56. var year = date.getFullYear();
  57. var monthLength = year % 4 == 0 && year % 100 != 0 && monthNumber == 1 || year % 400 == 0 ? 29 : daysInMonths[monthNumber];
  58. var d = 1;
  59.  
  60. this.daysTable = $("<table>");
  61. for (var i = 0; i < Math.ceil((first + monthLength) / 7); i++) {
  62. var row = $(this.daysTable).append("<tr>").children().last().children().last();
  63. for (var j = 0; j < 7; j++) {
  64. var cell = $(row).append("<td>").children().last().addClass("day").attr("value", d);
  65. if (i * 7 + j >= first && d <= monthLength) {
  66. $(cell).click(function() {
  67. date.setDate($(this).attr("value"));
  68. $(calendarObject.relativeElement).attr("value", date.toDateString());
  69. calendarObject.showOrHide();
  70. });
  71. $(cell).append(d++);
  72. }
  73. }
  74. }
  75. $(this.daysTableWrapperDiv).append(this.daysTable);
  76. $(this.calendarDiv).height($(this.headerDiv).height() + $(this.daysTable).height());
  77. this.updateMonthYear(months[monthNumber], year);
  78. }
  79.  
  80. Calendar.prototype.setEvents = function(calendarObject) {
  81.  
  82. var d = calendarObject.date;
  83.  
  84. $(this.leftArrow).click(function() {
  85. d.setMonth(d.getMonth() - 1);
  86. calendarObject.updateDaysTable(d);
  87. });
  88.  
  89. this.rightArrow.click(function() {
  90. d.setMonth(d.getMonth() + 1);
  91. calendarObject.updateDaysTable(d);
  92. });
  93.  
  94. }
  95.  
  96. Calendar.prototype.showOrHide = function() {
  97. $(this.calendarDiv).toggle();
  98. }
Add Comment
Please, Sign In to add comment