Files
TheaninovOS/desktops/hyprland/ags/scripts/calendarlayout.js
2023-10-29 15:05:17 +01:00

101 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;