Files
TheaninovOS/desktops/hyprland/ags/scripts/calendarlayout.js
2023-11-15 16:09:26 +01:00

128 lines
4.2 KiB
JavaScript

export function getCalendarLayout(d, highlight) {
if (!d) d = new Date()
var calendar = [...Array(6)].map(() => Array(7))
var today = [...Array(6)].map(() => Array(7))
const year = d.getFullYear()
const month = d.getMonth() + 1
const day = d.getDate()
const weekdayOfMonthFirst = new Date(`${year}-${month}-01`).getDay()
const leapYear = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)
const daysInMonth =
(month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0)
? 31
: month == 2 && leapYear
? 29
: month == 2 && !leapYear
? 28
: 30
const daysInNextMonth =
month == 1 && leapYear
? 29
: month == 1 && !leapYear
? 28
: month == 7 || month == 12
? 31
: (month <= 6 && month % 2 == 1) || (month >= 8 && month % 2 == 0)
? 30
: 31
const daysInLastMonth =
month == 3 && leapYear
? 29
: month == 3 && !leapYear
? 28
: month == 1 || month == 8
? 31
: (month <= 7 && month % 2 == 1) || (month >= 9 && month % 2 == 0)
? 30
: 31
var monthDiff = weekdayOfMonthFirst == 0 ? 0 : -1
var dim = daysInLastMonth
var toFill = weekdayOfMonthFirst == 0 ? 1 : daysInLastMonth + 1 - weekdayOfMonthFirst
var i = 0,
j = 0
while (i < 6 && j < 7) {
calendar[i][j] = toFill
if (toFill == day && monthDiff == 0 && highlight) today[i][j] = 1
else if (monthDiff == 0) today[i][j] = 0
else today[i][j] = -1
toFill++
if (toFill > dim) {
monthDiff++
if (monthDiff == 0) dim = daysInMonth
else if (monthDiff == 1) dim = daysInNextMonth
toFill = 1
}
j++
if (j == 7) {
j = 0
i++
}
}
var cal = []
for (var i = 0; i < 6; i++) {
var arr = []
for (var j = 0; j < 7; j++) {
arr.push({
day: calendar[i][j],
today: today[i][j],
})
}
cal.push(arr)
}
return cal
}
export default getCalendarLayout
// export function getCalendarLayout(d, highlight) {
// if (!d) d = new Date();
// var calendar = [...Array(6)].map(() => Array(7));
// var today = [...Array(6)].map(() => Array(7));
// const year = d.getFullYear();
// const month = d.getMonth() + 1;
// const day = d.getDate();
// const weekdayOfMonthFirst = new Date(`${year}-${month}-01`).getDay();
// const leapYear = (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0));
// const daysInMonth = (((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0)) ? 31 : ((month == 2 && leapYear) ? 29 : ((month == 2 && !leapYear) ? 28 : 30)));
// const daysInNextMonth = ((month == 1 && leapYear) ? 29 : ((month == 1 && !leapYear) ? 28 : ((month == 7 || month == 12) ? 31 : (((month <= 6 && month % 2 == 1) || (month >= 8 && month % 2 == 0)) ? 30 : 31))));
// const daysInLastMonth = ((month == 3 && leapYear) ? 29 : ((month == 3 && !leapYear) ? 28 : ((month == 1 || month == 8) ? 31 : ((month <= 7 && month % 2 == 1) || (month >= 9 && month % 2 == 0)) ? 30 : 31)));
// var monthDiff = (weekdayOfMonthFirst == 1 ? 0 : -1);
// var dim = daysInLastMonth;
// var toFill = (weekdayOfMonthFirst == 1 ? 1 : (weekdayOfMonthFirst == 0 ? (daysInLastMonth - 5) : (daysInLastMonth + 2 - weekdayOfMonthFirst)));
// var i = 0, j = 0;
// while (i < 6 && j < 7) {
// calendar[i][j] = toFill;
// if (toFill == day && monthDiff == 0 && highlight) today[i][j] = 1;
// else if (monthDiff == 0) today[i][j] = 0;
// else today[i][j] = -1;
// toFill++;
// if (toFill > dim) {
// monthDiff++;
// if (monthDiff == 0) dim = daysInMonth;
// else if (monthDiff == 1) dim = daysInNextMonth;
// toFill = 1;
// }
// j++;
// if (j == 7) {
// j = 0;
// i++;
// }
// }
// var cal = [];
// for (var i = 0; i < 6; i++) {
// var arr = [];
// for (var j = 0; j < 7; j++) {
// arr.push({
// day: calendar[i][j],
// today: today[i][j]
// });
// }
// cal.push(arr);
// }
// return cal;
// }
// export default getCalendarLayout;