-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcalendar.js
More file actions
174 lines (148 loc) · 6.55 KB
/
Copy pathcalendar.js
File metadata and controls
174 lines (148 loc) · 6.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
var calendar = {
init: function () {
/**
* Set week days and get current date
*/
var sun = 'Sun',
mon = 'Mon',
tue = 'Tue',
wed = 'Wed',
thu = 'Thu',
fri = 'Fri',
sat = 'Sat';
var d = new Date();
var yearNumber = (new Date).getFullYear();
var strDate = yearNumber + "/" + (d.getMonth() + 1) + "/" + d.getDate();
/**
* Get current month and set as '.current-month' in title
*/
var monthNumber = d.getMonth() + 1;
function GetMonthName(monthNumber) {
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
return months[monthNumber - 1];
}
function setMonth(monthNumber, sun, mon, tue, wed, thu, fri, sat) {
jQuery('.month').text(GetMonthName(monthNumber) + ' ' + yearNumber);
jQuery('.month').attr('data-month', monthNumber);
printDateNumber(monthNumber, sun, mon, tue, wed, thu, fri, sat);
}
setMonth(monthNumber, sun, mon, tue, wed, thu, fri, sat);
jQuery('.qcc-btn-next').on('click', function (e) {
var monthNumber = parseInt(jQuery('.month').attr('data-month'));
if (monthNumber > 11) {
monthNumber = 1;
yearNumber++;
} else {
monthNumber++;
}
jQuery('.month').attr('data-month', monthNumber);
setMonth(monthNumber, sun, mon, tue, wed, thu, fri, sat);
e.preventDefault();
});
jQuery('.qcc-btn-prev').on('click', function (e) {
var monthNumber = parseInt(jQuery('.month').attr('data-month'));
if (monthNumber < 2) {
monthNumber = 12;
yearNumber--;
} else {
monthNumber--;
}
jQuery('.month').attr('data-month', monthNumber);
setMonth(monthNumber, sun, mon, tue, wed, thu, fri, sat);
e.preventDefault();
});
/**
* Get all dates for current month
*/
function setDaysInOrder(sun, mon, tue, wed, thu, fri, sat) {
jQuery('.qcc-calendar-container thead tr').append(
'<td>' + sun + '</td><td>' + mon + '</td><td>' + tue + '</td><td>' + wed + '</td><td>' + thu + '</td><td>' + fri + '</td><td>' + sat + '</td>'
);
}
function printDateNumber(monthNumber, sun, mon, tue, wed, thu, fri, sat) {
jQuery('.qcc-calendar-container tbody tr').each(function() {
jQuery(this).empty();
});
jQuery('.qcc-calendar-container thead tr').empty();
setDaysInOrder(sun, mon, tue, wed, thu, fri, sat);
var firstDay = new Date(yearNumber, monthNumber - 1, 1);
var startingDay = firstDay.getDay(); // 0 (Sunday) to 6 (Saturday)
var monthLength = new Date(yearNumber, monthNumber, 0).getDate();
var day = 1;
var rows = Math.ceil((startingDay + monthLength) / 7);
for (var i = 0; i < rows; i++) {
var row = jQuery('.qcc-calendar-container tbody tr').eq(i);
for (var j = 0; j < 7; j++) {
if (i === 0 && j < startingDay) {
row.append('<td></td>');
} else if (day > monthLength) {
break;
} else {
let dataset_timestamp = `${yearNumber}-${monthNumber}-${day}`;
row.append('<td data-timestamp="' + dataset_timestamp + '" date-year="' + yearNumber + '" date-month="' + monthNumber + '" date-day="' + day + '">' + day + '</td>');
day++;
}
}
}
setCurrentDay(d.getMonth() + 1);
setEvent();
displayEvent();
}
/**
* Get current day and set as '.current-day'
*/
function setCurrentDay(month) {
var viewMonth = jQuery('.month').attr('data-month');
if (parseInt(month, 10) === parseInt(viewMonth, 10)) {
jQuery('.qcc-calendar-container tbody td[date-day="' + d.getDate() + '"]').addClass('qcc-current-day');
}
}
/**
* Add class '.active' on calendar date
*/
jQuery('.qcc-calendar-container tbody').on('click', 'td', function (e) {
if (jQuery(this).hasClass('qcc-event')) {
jQuery('.qcc-calendar-container tbody td').removeClass('active');
jQuery(this).addClass('active');
} else {
jQuery('.qcc-calendar-container tbody td').removeClass('active');
}
});
/**
* Add '.event' class to all days that have an event
*/
function setEvent() {
jQuery('.qcc-day-event').each(function (i) {
var eventYear = jQuery(this).attr('date-year'),
eventMonth = jQuery(this).attr('date-month'),
eventDay = jQuery(this).attr('date-day');
jQuery('.qcc-calendar-container tbody tr td[date-year="' + eventYear + '"][date-month="' + eventMonth + '"][date-day="' + eventDay + '"]').addClass('qcc-event');
// Add each event as a label
jQuery('.qcc-calendar-container tbody tr td[date-year="' + eventYear + '"][date-month="' + eventMonth + '"][date-day="' + eventDay + '"]').append('<div class="qcc-label">' + jQuery(this).attr('title') + '</div>');
});
}
/**
* Get current day on click in calendar
* and find day-event to display
*/
function displayEvent() {
jQuery('.qcc-calendar-container tbody').on('click', 'td', function (e) {
jQuery('.qcc-day-event').slideUp('fast');
var monthEvent = jQuery(this).attr('date-month'),
yearEvent = jQuery(this).attr('date-year'),
dayEvent = jQuery(this).attr('date-day');
jQuery('.qcc-day-event[date-year="' + yearEvent + '"][date-month="' + monthEvent + '"][date-day="' + dayEvent + '"]').slideDown('fast');
});
}
/**
* Close day-event
*/
jQuery('.qcc-close').on('click', function (e) {
jQuery(this).parent().slideUp('fast');
e.preventDefault();
});
}
};
jQuery(document).ready(function () {
calendar.init();
});