import attic from "../../../app/attic.js";
const getGregorianCalendar = year =>
[
31,
year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) ? 29 : 28,
31,
30,
31,
30,
31,
31,
30,
31,
30,
31
]
.map((numOfDays, monthIdx) =>
new Array(numOfDays)
.fill(0)
.map(
(_, dayIdx) =>
`${year}-${(monthIdx + 1)
.toString()
.padStart(2, "0")}-${(dayIdx + 1)
.toString()
.padStart(2, "0")}`
)
)
.flat();
const holidays = {
gregorian: [
{
name: {
en: "Imbolc",
nl: "Imbolc",
grc: "Ἴμβολξ"
},
date: "02-01",
class: "wiccan"
},
{
name: {
en: "Liberalia",
nl: "Liberaliën",
grc: "Λιβεράλια"
},
date: "03-17",
class: "theonym",
dedication: "Δ"
},
{
name: {
en: "April Fool’s Day",
nl: "…Kikker in je bil",
grc: "Πρωταπρίλια"
},
date: "04-01"
},
{
name: {
en: "<span class='theonym'>Earth</span> Day",
nl: "Dag van de <span class='theonym'>Aarde</span>",
grc: "Ἡμέρα τῆς <span class='theonym'>Γῆς</span>"
},
date: "04-22"
},
{
name: {
en: "St George’s Day",
nl: "Sint-Jorisdag",
grc: "Ἡμέρα τοῦ Γεωργίου"
},
date: "04-23",
class: "christian"
},
{
name: {
en: "Majuma*",
nl: "Majuma*",
grc: "Μαϊουμᾶς*"
},
date: "05-01",
dedication: "Δ"
},
{
name: {
en: "Beltane",
nl: "Beltane",
grc: "Βέλταν"
},
date: "05-01",
class: "wiccan"
},
{
name: {
en: "Mercuralia",
nl: "Mercuraliën",
grc: "Ἑρμαῖα"
},
date: "05-15",
class: "theonym",
dedication: "Ε"
},
{
name: {
en: "Lughnasadh",
nl: "Lughnasadh",
grc: "Λούνασα"
},
date: "08-01",
class: "wiccan"
},
{
name: {
en: "Hallowe’en",
nl: "Halloween",
grc: "Προτεραία Ἁγίων Πάντων"
},
date: "10-31",
class: "christian"
},
{
name: {
en: "Samhain",
nl: "Samhain",
grc: "Σαύαινον"
},
date: "11-01",
class: "wiccan"
},
{
name: {
en: "Bonfire Night",
nl: "Guy Fawkesnacht",
grc: "Νύξ τοῦ Γυίδου Φαύκος"
},
date: "11-05"
},
{
name: {
en: "“Salmacalia”",
nl: "„Salmacaliën”",
grc: "«Σαλμάκια»"
},
date: "11-05",
class: "theonym"
},
{
name: {
en: "St Martin’s Day",
nl: "Sint-Maarten",
grc: "Ἡμέρα τοῦ Μαρτίνου"
},
date: "11-11",
class: "christian"
},
{
name: {
en: "St Nicholas’ Day",
nl: "Sinterklaas",
grc: "Ἡμέρα τοῦ Νικολάου"
},
date: "12-05",
class: "christian"
},
{
name: {
en: "<span class='theonym'>Saturnalia</span> begins",
nl: "De <span class='theonym'>Saturnaliën</span> beginnen",
grc: "Ἀρχὴ τῶν <span class='theonym'>Κρονίων</span>"
},
date: "12-17"
},
{
name: {
en: "<span class='theonym'>Saturnalia</span> ends",
nl: "De <span class='theonym'>Saturnaliën</span> eindigen",
grc: "Τέλος τῶν <span class='theonym'>Κρονίων</span>"
},
date: "12-23"
},
{
name: {
en: "Christmas Eve",
nl: "Kerstavond",
grc: "Προτεραία Χριστουγέννων"
},
date: "12-24",
class: "christian"
},
{
name: {
en: "Christmas",
nl: "Eerste kerstdag",
grc: "Χριστούγεννα"
},
date: "12-25",
class: "christian"
},
{
name: {
en: "Boxing Day",
nl: "Tweede kerstdag",
grc: "Ὑστεραία Χριστουγέννων"
},
date: "12-26",
class: "christian"
}
],
attic: [
{
name: {
en: "Genesia",
nl: "Genesia",
grc: "Γενέσια"
},
class: "attic",
date: [2, 5]
},
{
name: {
en: "Boedromia",
nl: "Boëdromia",
grc: "Βοηδρόμια"
},
date: [2, 7],
class: "attic theonym",
dedication: "Α"
},
{
name: {
en: "Pyanepsia",
nl: "Pyanepsia",
grc: "Πυανέψια"
},
date: [3, 7],
class: "attic",
dedication: "Α"
},
{
name: {
en: "Oschophoria",
nl: "Oschophoria",
grc: "Ὠσχοφόρια"
},
date: [3, 7],
class: "attic",
dedication: "Δ"
},
{
name: {
en: "Country <span class='theonym'>Dionysia</span>*",
nl: "Kleine <span class='theonym'>Dionysia</span>*",
grc: "<span class='theonym'>Διονύσια</span> τὰ κατ’ ἀγρούς*"
},
date: [5, 10],
class: "attic",
dedication: "Δ"
},
{
name: {
en: "Haloa",
nl: "Haloa",
grc: "Ἁλῶα"
},
date: [5, -5],
class: "attic",
dedication: "Δ"
},
{
name: {
en: "<span class='attic'>Lenæa</span> begins",
nl: "De <span class='attic'>lenæa</span> beginnen",
grc: "Ἀρχὴ τῶν <span class='attic'>Ληναίων</span>"
},
date: [7, 12],
dedication: "Δ"
},
{
name: {
en: "<span class='attic'>Lenæa</span> ends",
nl: "De <span class='attic'>lenæa</span> eindigen",
grc: "Τέλος τῶν <span class='attic'>Ληναίων</span>"
},
date: [7, 15],
dedication: "Δ"
},
{
name: {
en: "<span class='attic'>Anthesteria</span> begins",
nl: "De <span class='attic'>anthesteria</span> beginnen",
grc: "Ἀρχὴ τῶν <span class='attic'>Ἀνθεστηρίων</span>"
},
date: [8, 11],
dedication: "Δ"
},
{
name: {
en: "<span class='attic'>Anthesteria</span> ends",
nl: "De <span class='attic'>anthesteria</span> eindigen",
grc: "Τέλος τῶν <span class='attic'>Ἀνθεστηρίων</span>"
},
date: [8, 13],
dedication: "Δ"
},
{
name: {
en: "<span class='attic'>City <span class='theonym'>Dionysia</span></span> begins",
nl: "De <span class='attic'>grote <span class='theonym'>Dionysia</span></span> beginnen",
grc: "Ἀρχή τῶν <span class='attic'><span class='theonym'>Διονυσίων</span> τῶν μεγάλων</span>"
},
date: [9, 10],
dedication: "Δ"
},
{
name: {
en: "<span class='attic'>City <span class='theonym'>Dionysia</span></span> ends",
nl: "De <span class='attic'>grote <span class='theonym'>Dionysia</span></span> eindigen",
grc: "Τέλος τῶν <span class='attic'><span class='theonym'>Διονυσίων</span> τῶν μεγάλων</span>"
},
date: [9, 16],
dedication: "Δ"
},
{
name: {
en: "<span class='attic'>Thargelia</span> begins",
nl: "De <span class='attic'>thargelia</span> beginnen",
grc: "Ἀρχή τῶν <span class='attic'>Θαργηλίων</span>"
},
date: [11, 6],
dedication: "Α"
},
{
name: {
en: "<span class='attic'>Thargelia</span> ends",
nl: "De <span class='attic'>thargelia</span> eindigen",
grc: "Τέλος τῶν <span class='attic'>Θαργηλίων</span>"
},
date: [11, 7],
dedication: "Α"
}
],
custom: [
{
name: {
en: "Easter",
nl: "Pasen",
grc: "Πάσχα"
},
dates: [
"04-12",
"04-04",
"04-17",
"04-09",
"03-31",
"04-20",
"04-05",
"03-28",
"04-16",
"04-01",
"04-21"
],
class: "christian"
},
{
name: {
en: "King’s Day",
nl: "Koningsdag",
grc: "Ἡμέρα Βασιλέως"
},
dates: [
"04-27",
"04-27",
"04-27",
"04-27",
"04-27",
"04-26",
"04-27",
"04-27",
"04-27",
"04-27",
"04-27"
]
},
{
name: {
en: "Spring equinox, <span class='wiccan'>Ostara</span>",
nl: "Lentepunt, <span class='wiccan'>Ostara</span>",
grc: "Ἰσημερία ἡαρινή, <span class='wiccan'>Ὄσταρα</span>"
},
dates: [
"03-20",
"03-20",
"03-20",
"03-20",
"03-20",
"03-20",
"03-20",
"03-20",
"03-20",
"03-20"
]
},
{
name: {
en: "Summer solstice, <span class='wiccan'>Litha</span>",
nl: "Zomerwende, <span class='wiccan'>Litha</span>",
grc: "Τροπαὶ αἰ θεριναί, <span class='wiccan'>Λίθα</span>"
},
dates: [
"06-20",
"06-21",
"06-21",
"06-21",
"06-20",
"06-21",
"06-21",
"06-21",
"06-20",
"06-21"
]
},
{
name: {
en: "Autumn equinox, <span class='wiccan'>Mabon</span>",
nl: "Herfstpunt, <span class='wiccan'>Mabon</span>",
grc: "Ἰσημερία ἡ μετοπωρινή, <span class='wiccan'>Μάβων</span>"
},
dates: [
"09-22",
"09-22",
"09-23",
"09-23",
"09-22",
"09-22",
"09-23",
"09-23",
"09-22",
"09-22"
]
},
{
name: {
en: "Winter solstice, <span class='wiccan'>Yule</span>",
nl: "Winterwende, <span class='wiccan'>Joelfeest</span>",
grc: "Τροπαὶ αἰ χειμεριναί, <span class='wiccan'>Ἰοῦλα</span>"
},
dates: [
"12-21",
"12-21",
"12-21",
"12-22",
"12-21",
"12-21",
"12-21",
"12-22",
"12-21",
"12-21"
]
}
]
};
const getCalendarObj = year => {
const cal = getGregorianCalendar(year).map(x => ({
gregorian: x,
attic: attic(x),
feasts: []
}));
for (const day of cal) {
day.feasts.push(
...holidays.gregorian.filter(holiday =>
day.gregorian.endsWith(holiday.date)
)
);
day.feasts.push(
...holidays.attic.filter(
holiday =>
day.attic.month == holiday.date[0] &&
day.attic.signedDate == holiday.date[1]
)
);
day.feasts.push(
...holidays.custom.filter(
holiday =>
holiday.dates.length > year - 2020 &&
day.gregorian.endsWith(holiday.dates[year - 2020])
)
);
day.feasts = Object.fromEntries(
["en", "nl", "grc"].map(lang => [
lang,
day.feasts
.map(
feast =>
`${
"class" in feast
? `<span class="${feast.class}">`
: ""
}${feast.name[lang]}${
"class" in feast ? "</span>" : ""
}${
"dedication" in feast
? ` <span class="dedication">(${feast.dedication})</span>`
: ""
}`
)
.join(", ")
])
);
}
return cal;
};
export default getCalendarObj;