🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

kenat

Package Overview
Dependencies
Maintainers
1
Versions
24
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

kenat - npm Package Compare versions

Comparing version
2.0.3
to
2.1.0
+1281
src/nigs.js
export const orthodoxMonthlydays = {
ledeta_mariam: {
key: "ledeta_mariam",
name: {
english: "Ldata Mariam, The nativity of Our Holy Mother Virgin Mariam",
amharic: "ልደታ ማርያም",
},
description: {
english: "Commemoration of the birth of St. Mary.",
amharic: "የቅድስት ድንግል ማርያም ልደት መታሰቢያ።",
},
recuringDate: 1,
major: true,
negs: 9,
},
archangel_raguel: {
key: "archangel_raguel",
name: {
english: "Archangel Raguel",
amharic: "ራጉኤል",
},
description: {
english: "Commemoration of Archangel Raguel.",
amharic: "የመላኩ ራጉኤል መታሰቢያ።",
},
recuringDate: 1,
major: true,
negs: null,
},
bartholomew_the_apostle: {
key: "bartholomew_the_apostle",
name: {
english: "Bartholomew the Apostle",
amharic: "ሐዋርያው በርተሎሜዎስ",
},
description: {
english: "Commemoration of Bartholomew the Apostle.",
amharic: "የሐዋርያው በርተሎሜዎስ መታሰቢያ።",
},
recuringDate: 1,
major: true,
negs: null,
},
prophet_elijah_ginbot: {
key: "prophet_elijah_ginbot",
name: {
english: "Prophet Elijah",
amharic: "ነብዩ ኤልያስ",
},
description: {
english: "Commemoration of Prophet Elijah.",
amharic: "የነብዩ ኤልያስ መታሰቢያ።",
},
recuringDate: 1,
major: true,
negs: 4,
},
kidus_yohannes: {
key: "kidus_yohannes",
name: {
english: "Kidus Yohannes",
amharic: "ቅዱስ ዮሐንስ",
},
description: {
english: "Commemoration of Kidus Yohannes.",
amharic: "የቅዱስ ዮሐንስ መታሰቢያ።",
},
recuringDate: 1,
major: false,
negs: 1,
},
thaddeus_the_apostle: {
key: "thaddeus_the_apostle",
name: {
english: "Thaddeus the Apostle",
amharic: "ሐዋርያው ታድዮስ",
},
description: {
english: "Commemoration of Thaddeus the Apostle.",
amharic: "የሐዋርያው ታድዮስ መታሰቢያ።",
},
recuringDate: 2,
major: true,
negs: 11,
},
abba_guba: {
key: "abba_guba",
name: {
english: "Abba Guba, one of the Nine Saints",
amharic: "አባ ጉባ",
},
description: {
english: "Commemoration of Abba Guba, one of the Nine Saints.",
amharic: "ከዘጠኙ ቅዱሳን አንዱ የአባ ጉባ መታሰቢያ።",
},
recuringDate: 2,
major: true,
negs: null,
},
thaddeus_apostle: {
key: "thaddeus_apostle",
name: {
english: "Thaddeus the Apostle",
amharic: "ሐዋርያው ታድዮስ",
},
description: {
english: "Commemoration of Thaddeus the Apostle.",
amharic: "የሐዋርያው ታድዮስ መታሰቢያ።",
},
recuringDate: 2,
major: false,
negs: 13,
},
st_john_the_baptist_martyrdom: {
key: "st_john_the_baptist_martyrdom",
name: {
english: "The Martyrdom (Beheading) of St. John the Baptist",
amharic: "የቅዱስ ዮሐንስ መጥምቅ አንገት መቁረጥ",
},
description: {
english:
"Commemoration of the Martyrdom (Beheading) of St. John the Baptist.",
amharic: "የቅዱስ ዮሐንስ መጥምቅ አንገት መቁረጥ መታሰቢያ።",
},
recuringDate: 2,
major: false,
negs: 1,
},
beata: {
key: "beata",
name: {
english:
"Beata: The Entrance of the three years old Virgin Mariam into the Temple",
amharic: "በአታለማርያም",
},
description: {
english: "Commemoration of St. Mary's entrance into the Temple.",
amharic: "የቅድስት ድንግል ማርያም ወደ ቤተመቅደስ መግባት መታሰቢያ።",
},
recuringDate: 3,
major: true,
negs: 4,
},
abune_zena_markos: {
key: "abune_zena_markos",
name: {
english: "Abune Zena Markos",
amharic: "አቡነ ዜና ማርቆስ",
},
description: {
english: "Commemoration of Abune Zena Markos.",
amharic: "የአቡነ ዜና ማርቆስ መታሰቢያ።",
},
recuringDate: 3,
major: true,
negs: null,
},
archangel_phanuel: {
key: "archangel_phanuel",
name: {
english: "Archangel Phanuel",
amharic: "ቅዱስ ፋኑኤል",
},
description: {
english: "Commemoration of Archangel Phanuel.",
amharic: "የመላኩ ፋኑኤል መታሰቢያ።",
},
recuringDate: 3,
major: true,
negs: 13,
},
saint_neakuto_leab: {
key: "saint_neakuto_leab",
name: {
english: "Saint Neakuto Leab",
amharic: "ቅዱስ ነአኩቶ ለአብ",
},
description: {
english: "Commemoration of Saint Neakuto Leab.",
amharic: "የቅዱስ ነአኩቶ ለአብ መታሰቢያ።",
},
recuringDate: 3,
major: true,
negs: null,
},
johannis_welde_negedguad: {
key: "johannis_welde_negedguad",
name: {
english: "John the son of the Thunder (Yohannis Welde Negedguad)",
amharic: "ዮሐንስ ወልደ ነጎድጓድ",
},
description: {
english: "Commemoration of John the son of the Thunder.",
amharic: "የዮሐንስ ወልደ ነጎድጓድ መታሰቢያ።",
},
recuringDate: 4,
major: true,
negs: 5,
},
andrew_the_apostle: {
key: "andrew_the_apostle",
name: {
english: "Andrew the Apostle",
amharic: "ሐዋርያው እንድርያስ",
},
description: {
english: "Commemoration of Andrew the Apostle.",
amharic: "የሐዋርያው እንድርያስ መታሰቢያ።",
},
recuringDate: 4,
major: true,
negs: 4,
},
petros_we_paulos: {
key: "petros_we_paulos",
name: {
english: "Petros we Paulos (Peter and Paul)",
amharic: "ጴጥሮስወ ጳውሎስ",
},
description: {
english: "Commemoration of Saints Peter and Paul.",
amharic: "የቅዱሳን ጴጥሮስና ጳውሎስ መታሰቢያ።",
},
recuringDate: 5,
major: true,
negs: 11,
},
abuna_gebre_menfes_kidus: {
key: "abuna_gebre_menfes_kidus",
name: {
english: "Abuna Gebre Menfes Kidus",
amharic: "ገብረ መንፈስ ቅዱስ",
},
description: {
english: "Commemoration of Abuna Gebre Menfes Kidus.",
amharic: "የአቡነ ገብረ መንፈስ ቅዱስ መታሰቢያ።",
},
recuringDate: 5,
major: true,
negs: 2,
},
abune_arone: {
key: "abune_arone",
name: {
english: "Abune Arone",
amharic: "አቡነ አሮን",
},
description: {
english: "Commemoration of Abune Arone.",
amharic: "የአቡነ አሮን መታሰቢያ።",
},
recuringDate: 5,
major: true,
negs: null,
},
iyyasu: {
key: "iyyasu",
name: {
english: "Iyyasus",
amharic: "ኢየሱስ",
},
description: {
english: "Commemoration of Iyyasus.",
amharic: "የኢየሱስ መታሰቢያ።",
},
recuringDate: 6,
major: true,
negs: 5,
},
dabra_quesqam_mariam: {
key: "dabra_quesqam_mariam",
name: {
english: "Dabra Quesqam Mariam",
amharic: "ቁስቋም ማርያም",
},
description: {
english: "Commemoration of Dabra Quesqam Mariam.",
amharic: "የቁስቋም ማርያም መታሰቢያ።",
},
recuringDate: 6,
major: true,
negs: 3,
},
saint_arsema: {
key: "saint_arsema",
name: {
english: "Saint Arsema",
amharic: "አርሴማ",
},
description: {
english: "Commemoration of Saint Arsema.",
amharic: "የቅድስት አርሴማ መታሰቢያ።",
},
recuringDate: 6,
major: true,
negs: 4,
},
holy_trinity: {
key: "holy_trinity",
name: {
english: "Holy Trinity",
amharic: "አጋዕዝተ አለም ስላሴ",
},
description: {
english: "Commemoration of the Holy Trinity.",
amharic: "የአጋዕዝተ ዓለም ስላሴ መታሰቢያ።",
},
recuringDate: 7,
major: true,
negs: 5,
},
cherubim: {
key: "cherubim",
name: {
english: "Cherubim (Four Living Creatures)",
amharic: "ኪሩቤል አርባእቱ እንስሳ",
},
description: {
english: "Commemoration of the Cherubim, the four living creatures.",
amharic: "የኪሩቤል አርባእቱ እንስሳ መታሰቢያ።",
},
recuringDate: 8,
major: true,
negs: 3,
},
saint_matthias_apostle: {
key: "saint_matthias_apostle",
name: {
english: "Saint Matthias the Apostle",
amharic: "ሐዋርያው ማትያስ",
},
description: {
english: "Commemoration of Saint Matthias the Apostle.",
amharic: "የሐዋርያው ማትያስ መታሰቢያ።",
},
recuringDate: 8,
major: true,
negs: 7,
},
abune_kiros: {
key: "abune_kiros",
name: {
english: "Abune Kiros",
amharic: "አቡነ ኪሮስ",
},
description: {
english: "Commemoration of Abune Kiros.",
amharic: "የአቡነ ኪሮስ መታሰቢያ።",
},
recuringDate: 8,
major: true,
negs: 3,
},
abba_banuda: {
key: "abba_banuda",
name: {
english: "Abba Banuda",
amharic: "አባ ባኑዳ",
},
description: {
english: "Commemoration of Abba Banuda.",
amharic: "የአባ ባኑዳ መታሰቢያ።",
},
recuringDate: 8,
major: false,
negs: null,
},
saint_thomas_apostle: {
key: "saint_thomas_apostle",
name: {
english: "Saint Thomas the Apostle",
amharic: "ሐዋርያው ቶማስ",
},
description: {
english: "Commemoration of Saint Thomas the Apostle.",
amharic: "የሐዋርያው ቶማስ መታሰቢያ።",
},
recuringDate: 9,
major: true,
negs: 2,
},
abune_isitinifase_kirisitosi: {
key: "abune_isitinifase_kirisitosi",
name: {
english: "Abune Isitinifase Kirisitosi",
amharic: "አቡነ እስትንፋሰ ክርስቶስ",
},
description: {
english: "Commemoration of Abune Isitinifase Kirisitosi.",
amharic: "የአቡነ እስትንፋሰ ክርስቶስ መታሰቢያ።",
},
recuringDate: 9,
major: true,
negs: null,
},
three_eighteen_holy_fathers_nice: {
key: "three_eighteen_holy_fathers_nice",
name: {
english: "The 318 holy fathers assembled in the city of Nice",
amharic: "ሰልስቱ ምዕት",
},
description: {
english:
"Commemoration of the 318 holy fathers assembled in the city of Nice.",
amharic: "በኒቂያ ከተማ የተሰበሰቡት 318 ቅዱሳን አባቶች መታሰቢያ።",
},
recuringDate: 9,
major: true,
negs: null,
},
holy_cross: {
key: "holy_cross",
name: {
english: "Holy Cross (Masqal)",
amharic: "መስቀለ ክርስቶስ",
},
description: {
english:
"Commemoration of the Holy Cross (Masqal)/the finding of true cross.",
amharic: "የመስቀለ ክርስቶስ መታሰቢያ።",
},
recuringDate: 10,
major: true,
negs: 7,
},
tsedeniya_mariyami: {
key: "tsedeniya_mariyami",
name: {
english: "Ts'edeniya Mariyami",
amharic: "ፀደንያ ማርያም",
},
description: {
english: "Commemoration of Ts'edeniya Mariyami.",
amharic: "የፀደንያ ማርያም መታሰቢያ።",
},
recuringDate: 10,
major: true,
negs: 1,
},
simon_the_zealot: {
key: "simon_the_zealot",
name: {
english: "Simon the Zealot",
amharic: "ስምኦን ቀኖናዊ ሐዋርያ",
},
description: {
english: "Commemoration of Simon the Zealot.",
amharic: "የስምኦን ቀኖናዊ ሐዋርያ መታሰቢያ።",
},
recuringDate: 10,
major: true,
negs: 11,
},
saint_hanna: {
key: "saint_hanna",
name: {
english: "Saint Hanna, the mother of our holy Mother",
amharic: "ሐና",
},
description: {
english: "Commemoration of Saint Hanna, the mother of Our Holy Mother.",
amharic: "የቅድስት ሐና (የእመቤታችን እናት) መታሰቢያ።",
},
recuringDate: 11,
major: true,
negs: 11,
},
saint_joachim: {
key: "saint_joachim",
name: {
english: "Saint Joachim, the father of our holy Mother",
amharic: "ኢያቄም",
},
description: {
english: "Commemoration of Saint Joachim, the father of Our Holy Mother.",
amharic: "የቅዱስ ኢያቄም (የእመቤታችን አባት) መታሰቢያ።",
},
recuringDate: 11,
major: false,
negs: null,
},
saint_yared: {
key: "saint_yared",
name: {
english: "Saint Yared",
amharic: "ቅዱስ ያሬድ",
},
description: {
english: "Commemoration of Saint Yared.",
amharic: "የቅዱስ ያሬድ መታሰቢያ።",
},
recuringDate: 11,
major: true,
negs: 9,
},
abune_hara: {
key: "abune_hara",
name: {
english: "Abune Hara",
amharic: "አቡነ ሐራ",
},
description: {
english: "Commemoration of Abune Hara.",
amharic: "የአቡነ ሐራ መታሰቢያ።",
},
recuringDate: 11,
major: false,
negs: null,
},
archangel_michael: {
key: "archangel_michael",
name: {
english: "Archangel Michael",
amharic: "ቅዱስ ሚካኤል",
},
description: {
english: "Commemoration of Archangel Michael.",
amharic: "የቅዱስ ሚካኤል መታሰቢያ።",
},
recuringDate: 12,
major: true,
negs: [3, 12],
},
matthew_apostle: {
key: "matthew_apostle",
name: {
english: "Matthew the Apostle",
amharic: "ሐዋርያ ማቴዎስ",
},
description: {
english: "Commemoration of Matthew the Apostle.",
amharic: "የሐዋርያ ማቴዎስ መታሰቢያ።",
},
recuringDate: 12,
major: true,
negs: null,
},
abba_samuel_waldeba: {
key: "abba_samuel_waldeba",
name: {
english: "Abba Samuel from Waldeba",
amharic: "አባ ሳሙኤል",
},
description: {
english: "Commemoration of Abba Samuel from Waldeba.",
amharic: "ከዋልድባ የአባ ሳሙኤል መታሰቢያ።",
},
recuringDate: 12,
major: true,
negs: 4,
},
god_the_father: {
key: "god_the_father",
name: {
english: "Egziabher Abe (God the Father)",
amharic: "እግዚአብሔር አብ",
},
description: {
english: "Commemoration of God the Father.",
amharic: "የእግዚአብሔር አብ መታሰቢያ።",
},
recuringDate: 13,
major: true,
negs: 3,
},
archangel_raphael: {
key: "archangel_raphael",
name: {
english: "Archangel Raphael",
amharic: "ቅዱስ ሩፋኤል",
},
description: {
english: "Commemoration of Archangel Raphael.",
amharic: "የቅዱስ ሩፋኤል መታሰቢያ።",
},
recuringDate: 13,
major: true,
negs: 4,
},
saint_abba_zara_buruk: {
key: "saint_abba_zara_buruk",
name: {
english: "Saint Abba Zar'a-Buruk",
amharic: "አቡነ ዘርአ ብሩክ",
},
description: {
english:
"Commemoration of Saint Abba Zar'a-Buruk-departed from this world.",
amharic: "የቅዱስ አባ ዘርአ ብሩክ እረፍታቸው መታሰቢያ።",
},
recuringDate: 13,
major: true,
negs: 5,
},
// 14. Abuna Aragwi
abuna_aragwi: {
key: "abuna_aragwi",
name: {
english: "Abuna Aragwi-one of the Nine Saints",
amharic: "አቡነ አረጋዊ ",
},
description: {
english: "Commemoration of Abuna Aragwi, one of the Nine Saints",
amharic: "ከዘጠኙ ቅዱሳን አንዱ የአቡነ አረጋዊ መታሰቢያ።",
},
recuringDate: 14,
major: true,
negs: 2,
},
gabra_krestos_the_hermit: {
key: "gabra_krestos_the_hermit",
name: {
english: "Gabra Krestos the hermit",
amharic: "ገብረ ክርስቶስ/ገብረ መርአዊ",
},
description: {
english: "Commemoration of Gabra Krestos the hermit.",
amharic: "የገብረ ክርስቶስ ገዳማዊ መታሰቢያ።",
},
recuringDate: 14,
major: true,
negs: 9,
},
cyriacus_julietta: {
key: "cyriacus_julietta",
name: {
english: "St. Cyriacus and St. Julietta",
amharic: "ቂርቆስና እየሉጣ",
},
description: {
english: "Commemoration of St. Cyriacus and St. Julietta.",
amharic: "የቅዱስ ቂርቆስና የቅድስት እየሉጣ መታሰቢያ።",
},
recuringDate: 15,
major: true,
negs: [11, 5],
},
saint_stefanos_migration_of_his_body: {
key: "saint_stefanos_migration_of_his_body",
name: {
english: "Saint Stefanos",
amharic: "ቅዱስ እስጢፋኖስ ",
},
description: {
english:
"Commemoration of Saint Estifanos the First Martyr migration of his body",
amharic: "የቅዱስ እስጢፋኖስ ሰማዕት (ቀዳሚ ሰማዕትና ሊቀ ዲያቆናት) አካል ሽግግራቸው መታሰቢያ",
},
recuringDate: 15,
major: false,
negs: null,
},
kidane_meheret: {
key: "kidane_meheret",
name: {
english: "Kidane Meheret - Our Lady, Covenant of Mercy",
amharic: "ኪዳነ ምህረት",
},
description: {
english: "Commemoration of Kidane Meheret (Covenant of Mercy).",
amharic: "የኪዳነ ምህረት መታሰቢያ።",
},
recuringDate: 16,
major: true,
negs: [12, 6],
},
johannis_welde_negedguad_erget: {
key: "johannis_welde_negedguad_16",
name: {
english: "John the son of the Thunder (Yohannis Welde Negedguad)",
amharic: "ዮሐንስ ወልደ ነጎድጓድ",
},
description: {
english:
"Commemoration of John, the Son of Thunder his taken away to heaven.",
amharic: "የዮሐንስ ወልደ ነጎድጓድ ወደ ሰማይ መውሰዳቸው መታሰቢያ።",
},
recuringDate: 16,
major: false,
negs: 11,
},
saint_stefanos: {
key: "saint_stefanos",
name: {
english:
"Saint Stefanos (Stephen the Martyr) - the First Martyr and Archdeacon)",
amharic: "ቅዱስ እስጢፋኖስ ፣ ሐዋርያውያዕቆብ ወልደ ዘብዲዮስ ፣ አባ ገሪማ",
},
description: {
english:
"Commemoration of Saint Stephen the Martyr (First Martyr and Archdeacon) ordination date",
amharic: "የቅዱስ እስጢፋኖስ ሰማዕት (ቀዳሚ ሰማዕትና ሊቀ ዲያቆናት) የክህነት ዘመቻቸው መታሰቢያ",
},
recuringDate: 17,
major: true,
negs: 2,
},
james_the_apostle_17: {
key: "james_the_apostle_17",
name: {
english: " James the apostle",
amharic: " ሐዋርያው ያዕቆብ ወልደ ዘብዲዮስ",
},
description: {
english: "Commemoration of James the Apostle.",
amharic: "የሐዋርያው ያዕቆብ ወልደ ዘብዲዮስ መታሰቢያ።",
},
recuringDate: 17,
major: true,
negs: 8,
},
abba_gerima: {
key: "abba_gerima",
name: {
english: "Abba Gerima (one of the Nine saints)",
amharic: "አባ ገሪማ",
},
description: {
english: "Commemoration of Abba Gerima (one of the Nine Saints).",
amharic: "የአባ ገሪማ (ከዘጠኙ ቅዱሳን አንዱ) መታሰቢያ።",
},
recuringDate: 17,
major: true,
negs: null,
},
philip_the_apostle: {
key: "philip_the_apostle",
name: {
english: "Philip the Apostle /Abune Ewostatewos",
amharic: "ሐዋርያው ፊሊጶስ ",
},
description: {
english: "Commemoration of Philip the Apostle.",
amharic: "የሐዋርያው ፊሊጶስ መታሰቢያ።",
},
recuringDate: 18,
major: true,
negs: 3,
},
abune_ewostatewos: {
key: "abune_ewostatewos",
name: {
english: "Abune_Ewostatewos",
amharic: "አቡነ ኢዩስጣቲዮስ",
},
description: {
english: "Commemoration of Abune Ewostatewos.",
amharic: "የአቡነ ኢዩስጣቲዮስ መታሰቢያ።",
},
recuringDate: 18,
major: true,
negs: 1,
},
saint_georgis_scattering_of_his_bone: {
key: "saint_georgis_scattering_of_his_bone",
name: {
english: "Saint Georgis",
amharic: "ቅዱስ ጊዮርጊስ",
},
description: {
english:
" Feast of the Great Martyr Saint George, the scattering of his bone",
amharic: "ቅዱስ ጊዮርጊስ የአጥንቱ ፍልሰት መታሰቢያ",
},
recuringDate: 24,
major: false,
negs: 5,
},
james_the_apostle_18: {
key: "james_the_apostle_18",
name: {
english: " James the apostle",
amharic: " ሐዋርያው ያዕቆብ ወልደ ዘብዲዮስ",
},
description: {
english: "Commemoration of James the Apostle.",
amharic: "የሐዋርያው ያዕቆብ ወልደ ዘብዲዮስ መታሰቢያ።",
},
recuringDate: 18,
major: false,
negs: 11,
},
// 19. Gabriel the Archangel
gabriel_archangel_rescue_of_the_three_youths: {
key: "gabriel_archangel_rescue_of_the_three_youths",
name: {
english: "Gabriel the Archangel",
amharic: "ቅዱስ ገብርኤል",
},
description: {
english:
"Commemoration of Archangel Gabriel is dedicated to the rescue of the three youths (Sidraq, Misaq, and Abdenago).",
amharic: "ሊቀ መላእክት ገብርኤል ሦስቱን ወጣቶች (ሲድራቅ፣ ሚሳቅና አብደናጎን) ማዳን መታሰቢያ",
},
recuringDate: 19,
major: true,
negs: 4,
},
gabriel_archangel_rescue_of_rescue_of_quirqos_and_his_mother: {
key: "gabriel_archangel_rescue_of_rescue_of_quirqos_and_his_mother",
name: {
english: "Gabriel the Archangel",
amharic: "ቅዱስ ገብርኤል",
},
description: {
english:
"Commemoration of Archangel Gabriel is dedicated to the rescue of rescue of Quirqos and his mother, Saint Iyeluta (Julitta). .",
amharic: "የእግዚአብሔር መልአክ ቅዱስ ገብርኤል ቂርቆስን እና እናቱን ቅድስት ኢየሉጣን ማዳን መታሰቢያ",
},
recuringDate: 19,
major: false,
negs: 11,
},
hnstata_betkerestyan: {
key: "hnstata_betkerestyan",
name: {
english: "Hnstata Betkerestyan",
amharic: "ሕንፀተ ቤተ ክርስቲያን",
},
description: {
english:
"Commemoration of the building of the church in the name of Our Holy Virgin Mary.",
amharic:
"ሄነሳተ ቤተ ክርስቲያን - ለቅድስት ድንግል ማርያም የተሰጠች የመጀመሪያዋ ቤተ ክርስቲያን በፊልጵስዩስ መመሥረት",
},
recuringDate: 20,
major: true,
negs: 10,
},
egzeet_na_maryam_departure: {
key: "egzeet_na_maryam_departure",
name: {
english: "Egze'et-na Maryam",
amharic: "ቅድስት ድንግል ማርያም",
},
description: {
english: "The departure of Our Holy Mother.",
amharic: "የቅድስት ድንግል ማርያም ዕርገት",
},
recuringDate: 21,
major: false,
negs: 5,
},
egzeet_na_maryam_debre_mitmak: {
key: "egzeet_na_maryam_debre_mitmak",
name: {
english: "Egze'et-na Maryam",
amharic: "ቅድስት ድንግል ማርያም",
},
description: {
english:
"The appearance of Our Holy Mother Virgin Mariam in the church of Debre Mitmak",
amharic: "የቅድስት ድንግል ማርያም በደብረ ምጥማቅ ቤተ ክርስቲያን መገለጥ።",
},
recuringDate: 21,
major: false,
negs: 9,
},
egzeet_na_maryam_prayed_at_golgota: {
key: "egzeet_na_maryam_prayed_at_golgota",
name: {
english: "Egze'et-na Maryam",
amharic: "ቅድስት ድንግል ማርያም",
},
description: {
english: "Sene Golgota - Our Holy Mother Virgin Mariam prayed at Golgota",
amharic: "ሰኔ ጎልጎታ - ቅድስት ድንግል ማርያም በጎልጎታ ጸለየች",
},
recuringDate: 21,
major: false,
negs: 10,
},
// 22. Archangel Uriel
archangel_uriel: {
key: "archangel_uriel",
name: {
english: "Archangel Uriel",
amharic: "ቅዱስ ኡራኤል",
},
description: {
english: "Archangel Uriel received covenant and ordained as an Archangel",
amharic: "ሊቀ መላእክት ዑራኤል ቃል ኪዳን ተቀብሎ ሊቀ መልአክ ሆኖ ተሾመ።",
},
recuringDate: 22,
major: false,
negs: 11,
},
saint_lukas: {
key: "saint_lukas",
name: {
english: "Saint Lukas",
amharic: "ቅዱስ ሉቃስ",
},
description: {
english: "Saint Mark departed from this world",
amharic: "ቅዱስ ማርቆስ ከዚህ ዓለም በሞት ተለየ",
},
recuringDate: 22,
major: true,
negs: 2,
},
saint_daqsyos: {
key: "saint_daqsyos",
name: {
english: "Saint Daqsyos",
amharic: "ቅዱስ ደቅስዮስ",
},
description: {
english: "Saint_Daqsyos",
amharic: "ቅዱስ ደቅስዮስ",
},
recuringDate: 22,
major: true,
negs: 4,
},
bisrate_gebriel: {
key: "bisrate_gebriel",
name: {
english: "bisrate gebriel ",
amharic: "ብስራተ ገብርኤል",
},
description: {
english: "Commemoration of the Annunciation",
amharic: "ብስራተ ገብርኤል",
},
recuringDate: 22,
major: true,
negs: 4,
},
saint_georgis_of_Lydda: {
key: "saint_georgis_of_Lydda",
name: {
english: "Saint Georgis - George of Lydda",
amharic: "ቅዱስ ጊዮርጊስ",
},
description: {
english: " Saint Georgis - George of Lydda",
amharic: "ቅዱስ ጊዮርጊስ ",
},
recuringDate: 23,
major: false,
negs: 8,
},
saint_georgis_the_battle_of_adwa: {
key: "saint_georgis_the_battle_of_adwa",
name: {
english: "Saint Giorgis (George)-The Battle of Adwa",
amharic: "ቅዱስ ጊዮርጊስ - የአድዋ ጦርነት",
},
description: {
english: "Saint Giorgis (George)-The Battle of Adwa",
amharic: "ቅዱስ ጊዮርጊስ - የአድዋ ጦርነት",
},
recuringDate: 23,
major: true,
negs: 6,
},
takla_haymanot_diparted_from_this_world: {
key: "takla_haymanot_diparted_from_this_world",
name: {
english: "Abuna Takla Haymanot",
amharic: "አቡነ ተክለ ሐይማኖት",
},
description: {
english: "Abuna Takla Haymanot departed from this world",
amharic: "አቡነ ተክለ ሃይማኖት ከዚህ ዓለም በሞት ተለዩ",
},
recuringDate: 24,
major: true,
negs: 12,
},
takla_haymanot_legs_broke: {
key: "takla_haymanot_legs_broke",
name: {
english: "Abuna Takla Haymanot",
amharic: "አቡነ ተክለ ሐይማኖት",
},
description: {
english: "Takla Haymanot - having stood 7 years one of his legs broke",
amharic: "አቡነ ተክለ ሃይማኖት - ለሰባት ዓመታት ከቆሙ በኋላ አንደኛው እግራቸው ተሰበረ። ",
},
recuringDate: 24,
negs: 5,
},
takla_haymanot_birth_date: {
key: "takla_haymanot_birth_date",
name: {
english: "Abuna Takla Haymanot",
amharic: "አቡነ ተክለ ሐይማኖት",
},
description: {
english: "Abuna Takla Haymanot's birth date",
amharic: "የአቡነ ተክለ ሃይማኖት የልደት ቀን ",
},
recuringDate: 24,
major: false,
negs: 4,
},
saint_kirstos_semera: {
key: "saint_kirstos_semera",
name: {
english: "Saint Kirstos Semera",
amharic: "ቅድስት ክርስረቶስ ሰምራ ",
},
description: {
english: "Saint Kirstos Semera",
amharic: "ቅድስት ክርስረቶስ ሰምራ ",
},
recuringDate: 24,
major: true,
negs: 12,
},
heavenly_priests: {
key: "24_heavenly_priests",
name: {
english: "24 Heavenly Priests",
amharic: "24ቱ ካህናተ ሰማይ",
},
description: {
english: "24 Heavenly Priests",
amharic: "24ቱ ካህናተ ሰማይ",
},
recuringDate: 24,
major: true,
negs: 3,
},
saint_marqorewos: {
key: "saint_marqorewos",
name: {
english: "Saint Marqorewos (Merkorios)/ Abune Habibe",
amharic: "ቅዱስ መርቆሬዎስ ፣አቡነ ሀቢብ (አባ ቡላ)",
},
description: {
english: "Saint Joseph",
amharic: "አረጋዊው ዮሴፍ ",
},
recuringDate: 27,
major: true,
negs: 3,
},
abune_habibe: {
key: "abune_habibe",
name: {
english: "Abune Habibe",
amharic: "አቡነ ሀቢብ (አባ ቡላ)",
},
description: {
english: "Abune_Habibe",
amharic: "አረጋዊው ዮሴፍ ",
},
recuringDate: 25,
major: true,
negs: 2,
},
saint_jude_son_of_alpheus: {
key: "saint_jude_son_of_alpheus",
name: {
english: "Saint Jude, son of Alpheus, the Apostle",
amharic: "ቅዱስ ይሁዳ ዘአልፍዮስ ሐዋርያው",
},
description: {
english: "Saint Jude, son of Alpheus, the Apostle his martyrdom",
amharic: "ቅዱስ ይሁዳ ዘአልፍዮስ ሐዋርያውሰማዕትነቱ",
},
recuringDate: 25,
major: false,
negs: 10,
},
saint_joseph: {
key: "saint_joseph",
name: {
english: "Saint Joseph ",
amharic: "አረጋዊው ዮሴፍ",
},
description: {
english: "Saint Joseph",
amharic: "አረጋዊው ዮሴፍ ",
},
recuringDate: 26,
major: true,
negs: 11,
},
abba_salama_frumentius: {
key: "abba_salama_frumentius",
name: {
english: " Abba_Salama_Frumentius, the Enlightener of Ethiopia",
amharic: "አባ ሰላማ ከሳቴ ብርሀን",
},
description: {
english: "Abba_Salama_Frumentius, the Enlightener of Ethiopia",
amharic: "አባ ሰላማ ከሳቴ ብርሀን ",
},
recuringDate: 26,
major: true,
negs: 11,
},
thomas_the_apostle: {
key: "thomas_the_apostle",
name: {
english: "Thomas the apostle",
amharic: " ቶማስ ዘህንደኬ",
},
description: {
english: "Thomas the apostle",
amharic: "ቶማስ ዘህንደኬ ",
},
recuringDate: 26,
major: true,
negs: 9,
},
abune_habte_mariam: {
key: "abune_habte_mariam",
name: {
english: "Abune Habte Mariam",
amharic: "አቡነ ሀብተ ማርያም",
},
description: {
english: "Abune Habte Mariam",
amharic: "አቡነ ሀብተ ማርያም",
},
recuringDate: 26,
major: true,
negs: 3,
},
aba_eyesus_moea: {
key: "aba_eyesus_moea",
name: {
english: "Aba Eyesus Moe`a",
amharic: "አባ ኢየሱስ ሞአ",
},
description: {
english: "Saint Eyesus Moe`a",
amharic: "አባ ኢየሱስ ሞአ ",
},
recuringDate: 26,
major: true,
negs: null,
},
medhane_alem: {
key: "medhane_alem",
name: {
english: "Medhane Alem -The Saviour of the world/ Abune Mebea Zion",
amharic: "መድሐኔአለም ",
},
description: {
english: "Medhane Alem -The Saviour of the world",
amharic: "የዓለም መድኃኒት",
},
recuringDate: 27,
major: true,
negs: 7,
},
abune_mebea_zion: {
key: "abune_mebea_zion",
name: {
english: " Abune Mebea Zion",
amharic: "አቡነ መባዓ ፅዮን",
},
description: {
english: "Abune Mebea Zion",
amharic: "አቡነ መባዓ ፅዮን",
},
recuringDate: 27,
negs: 2,
},
ammanuel: {
key: "ammanuel",
name: {
english: "ammanuel",
amharic: "አማኑኤል",
},
description: {
english: "ammanuel",
amharic: "አማኑኤል",
},
recuringDate: 28,
major: true,
negs: [2, 5, 9],
},
baale_wold: {
key: "baale_wold",
name: {
english: "Ba`ale Wold",
amharic: "በዓለወልድ",
},
description: {
english: "Ba`ale Wold (Feast of God The Son)",
amharic: "ዮሐንስ መጥምቅ",
},
recuringDate: 29,
major: true,
negs: [4, 5],
},
saint_lalibela: {
key: "saint_lalibela",
name: {
english: "Saint Lalibela",
amharic: "ቅዱስ ላሊበላ",
},
description: {
english: "Saint Lalibela",
amharic: "ቅዱስ ላሊበላ",
},
recuringDate: 29,
major: true,
negs: 4,
},
saint_arsema_Beheading: {
key: "saint_arsema_29",
name: {
english: "Saint Arsema",
amharic: "አርሴማ",
},
description: {
english: "Commemoration of The Martyrdom (Beheading) of Kidist Arsema",
amharic: "የቅድስት አርሴማ ሰማዕትነት (ራስ መቁረጥ)",
},
recuringDate: 29,
major: false,
negs: 1,
},
john_baptist: {
key: "john_baptist",
name: {
english: "John the baptist",
amharic: "ዮሐንስ መጥምቅ ",
},
description: {
english: "John the baptist",
amharic: "ዮሐንስ መጥምቅ",
},
recuringDate: 30,
major: true,
negs: 10,
},
saint_markos: {
key: "saint_markos",
name: {
english: "Saint_Markos",
amharic: "ቅዱስ ማርቆስ",
},
description: {
english: "Saint Markos /St. Mark the Evangelist/",
amharic: "የቅዱስ ማርቆስ የልደት",
},
recuringDate: 30,
major: true,
negs: [2, 8],
},
};
+266
-102
<!DOCTYPE html>
<html lang="en">
<head>

@@ -8,17 +9,118 @@ <meta charset="UTF-8">

<style>
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; text-align: center; background-color: #f9f9f9; padding: 1rem;}
table { border-collapse: collapse; margin: 1rem auto; box-shadow: 0 4px 12px rgba(0,0,0,0.1); background-color: #fff; }
th, td { border: 1px solid #e0e0e0; padding: 0.5rem; width: 85px; height: 85px; vertical-align: top; }
th { background-color: #f5f5f5; font-weight: 600; }
.today { background-color: #fffde7; border: 2px solid #ffc107; font-weight: bold; }
.holiday { background-color: #e3f2fd; cursor: pointer; transition: background-color 0.2s; }
.holiday:hover { background-color: #bbdefb; }
.holiday-labels { font-size: 0.75rem; color: #1e88e5; margin-top: 5px; line-height: 1.2; }
/* Navigation and Controls Styling */
.header-controls, .controls, .filter-controls { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; margin: 1rem 0; align-items: center; }
.nav-controls { display: flex; align-items: center; gap: 0.5rem; }
.filter-controls { margin-bottom: 1.5rem; background-color: #fff; padding: 1rem; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.05); }
.filter-controls label { font-size: 0.9rem; cursor: pointer; display: flex; align-items: center; gap: 4px; }
button, select {
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
text-align: center;
background-color: #f9f9f9;
padding: 1rem;
}
table {
border-collapse: collapse;
margin: 1rem auto;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
background-color: #fff;
}
th,
td {
border: 1px solid #e0e0e0;
padding: 0.5rem;
width: 85px;
height: 85px;
vertical-align: top;
position: relative;
}
th {
background-color: #f5f5f5;
font-weight: 600;
}
.today {
background-color: #fffde7;
border: 2px solid #ffc107;
font-weight: bold;
}
td.event-day {
cursor: pointer;
}
.official-holiday {
background-color: #e3f2fd;
}
.christian-holiday {
background-color: #ebf5ff;
}
.jummah-day {
background-color: #e8f5e9;
}
.holiday-labels {
font-size: 0.75rem;
color: #333;
margin-top: 5px;
line-height: 1.2;
text-align: left;
max-height: 3.6em;
overflow: hidden;
}
.holiday-labels .is-nigs {
font-weight: bold;
color: #b58c00;
}
.holiday-labels .jummah-label {
font-weight: bold;
color: #388e3c;
}
.header-controls,
.controls,
.filter-controls {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: center;
margin: 1rem 0;
align-items: center;
}
.nav-controls {
display: flex;
align-items: center;
gap: 0.5rem;
}
.controls {
gap: 20px;
}
.filter-controls {
margin-bottom: 1.5rem;
background-color: #fff;
padding: 1rem;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
}
.filter-controls label,
.controls label {
font-size: 0.9rem;
cursor: pointer;
display: flex;
align-items: center;
gap: 4px;
}
.filter-controls label.disabled {
color: #aaa;
cursor: not-allowed;
}
button,
select {
padding: 0.6rem 1.2rem;

@@ -30,17 +132,57 @@ font-size: 0.9rem;

background-color: #fff;
transition: background-color 0.2s, box-shadow 0.2s;
}
select { padding: 0.5rem; }
button:hover { background-color: #f0f0f0; }
button:active { box-shadow: inset 0 2px 4px rgba(0,0,0,0.1); }
/* Modal Styles */
.modal { display: none; position: fixed; z-index: 1000; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgba(0,0,0,0.5); justify-content: center; align-items: center; }
.modal-content { background-color: #fefefe; margin: auto; padding: 25px; border: 1px solid #888; width: 90%; max-width: 500px; border-radius: 10px; position: relative; box-shadow: 0 5px 15px rgba(0,0,0,0.3); text-align: left; }
.modal-close { color: #aaa; position: absolute; top: 10px; right: 20px; font-size: 28px; font-weight: bold; cursor: pointer; }
.modal-close:hover { color: #000; }
.modal-content h3 { margin-top: 0; }
.modal-content hr { border: 0; border-top: 1px solid #eee; margin: 15px 0; }
.modal {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgba(0, 0, 0, 0.5);
justify-content: center;
align-items: center;
}
.modal-content {
background-color: #fefefe;
margin: auto;
padding: 25px;
border: 1px solid #888;
width: 90%;
max-width: 500px;
border-radius: 10px;
position: relative;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
text-align: left;
}
.modal-close {
color: #aaa;
position: absolute;
top: 10px;
right: 20px;
font-size: 28px;
font-weight: bold;
cursor: pointer;
}
.modal-content h3 {
margin-top: 0;
}
.modal-content .is-nigs-title {
color: #b58c00;
}
.modal-content hr {
border: 0;
border-top: 1px solid #eee;
margin: 15px 0;
}
</style>
</head>
<body>

@@ -50,6 +192,4 @@ <h1>Kenat Calendar</h1>

<!-- Modal HTML -->
<div id="holidayModal" class="modal">
<div class="modal-content">
<span class="modal-close">&times;</span>
<div class="modal-content"><span class="modal-close">&times;</span>
<div id="modalBody"></div>

@@ -62,6 +202,4 @@ </div>

import { monthNames } from '../../src/constants.js';
let monthGridInstance;
// Settings
let useGeez = false;

@@ -71,3 +209,5 @@ let weekdayLang = 'amharic';

let holidayFilter = null;
let activeMode = 'public';
let showAllSaints = false;
const initialDate = new Kenat().getEthiopian();

@@ -77,3 +217,2 @@ let currentYear = initialDate.year;

// --- MODAL LOGIC ---
const modal = document.getElementById('holidayModal');

@@ -86,3 +225,5 @@ const modalBody = document.getElementById('modalBody');

holidays.forEach((h, index) => {
content += `<h3>${h.name}</h3><p>${h.description}</p>`;
const nigsClass = h.isNigs ? 'is-nigs-title' : '';
const description = h.description ? `<p>${h.description}</p>` : '';
content += `<h3 class="${nigsClass}">${h.name}</h3>${description}`;
if (index < holidays.length - 1) content += '<hr>';

@@ -96,35 +237,20 @@ });

window.onclick = (event) => { if (event.target == modal) modal.style.display = 'none'; }
// --- CALENDAR RENDERING ---
function renderCalendar(gridData) {
let { headers, days, year, month, monthName } = gridData;
const holidaysForDay = (item) => item.holidays.map(h => h.name).join(', ');
let { headers, days, year, month } = gridData;
const holidaysForDay = (item) => {
return item.holidays.map(h => {
let specialClass = '';
if (h.isNigs) specialClass = 'is-nigs';
if (h.key === 'jummah') specialClass = 'jummah-label';
return `<div class="${specialClass}">${h.name}</div>`;
}).join('');
};
const yearForComparison = typeof year === 'string' ? toArabic(year) : year;
const yearOptions = Array.from({length: 201}, (_, i) => 1900 + i)
.map(y => `<option value="${y}" ${y === yearForComparison ? 'selected' : ''}>${y}</option>`).join('');
const monthOptions = monthNames.amharic
.map((name, i) => `<option value="${i + 1}" ${i + 1 === month ? 'selected' : ''}>${name}</option>`).join('');
const yearOptions = Array.from({ length: 201 }, (_, i) => 1900 + i).map(y => `<option value="${y}" ${y === yearForComparison ? 'selected' : ''}>${y}</option>`).join('');
const monthOptions = monthNames.amharic.map((name, i) => `<option value="${i + 1}" ${i + 1 === month ? 'selected' : ''}>${name}</option>`).join('');
let html = `<div class="header-controls"><button id="prevMonth">⬅️</button><div class="nav-controls"><select id="monthSelector">${monthOptions}</select><select id="yearSelector">${yearOptions}</select></div><button id="nextMonth">➡️</button></div><div class="controls" id="topControls"></div><div class="filter-controls" id="filterControls"></div><table><thead><tr>${headers.map(day => `<th>${day}</th>`).join('')}</tr></thead><tbody>`;
let html = `
<div class="header-controls">
<button id="prevMonth">⬅️</button>
<div class="nav-controls">
<select id="monthSelector">${monthOptions}</select>
<select id="yearSelector">${yearOptions}</select>
</div>
<button id="nextMonth">➡️</button>
</div>
<div class="controls">
<button id="toggleGeez">Geez (${useGeez ? 'ON' : 'OFF'})</button>
<button id="toggleLang">Lang (${weekdayLang})</button>
<button id="toggleWeekStart">Start (${weekStart === 1 ? 'Mon' : 'Sun'})</button>
</div>
<div class="filter-controls" id="filterControls"></div>
<table><thead><tr>`;
html += headers.map(day => `<th>${day}</th>`).join('');
html += '</tr></thead><tbody>';
for (let i = 0; i < days.length; i += 7) {

@@ -137,11 +263,19 @@ html += '<tr>';

} else {
const todayClass = item.isToday ? 'today' : '';
const isHoliday = item.holidays && item.holidays.length > 0;
const holidaysText = isHoliday ? holidaysForDay(item) : '';
const holidayAttr = isHoliday ? `data-day-index="${i + j}"` : '';
html += `<td class="${todayClass} ${isHoliday ? 'holiday' : ''}" ${holidayAttr}>
<strong>${item.ethiopian.day}</strong><br/>
<small>${item.gregorian.month}/${item.gregorian.day}</small>
${holidaysText ? `<div class="holiday-labels">${holidaysText}</div>` : ''}
</td>`;
const hasEvents = item.holidays && item.holidays.length > 0;
let dayClasses = [item.isToday ? 'today' : ''];
if (hasEvents) {
dayClasses.push('event-day');
const isOfficial = item.holidays.some(h => h.tags.includes(HolidayTags.PUBLIC) || h.tags.includes(HolidayTags.STATE));
const isChristian = item.holidays.some(h => h.tags.includes(HolidayTags.CHRISTIAN));
const isJummah = item.holidays.some(h => h.key === 'jummah');
if (isOfficial) dayClasses.push('official-holiday');
if (isChristian && !isOfficial) dayClasses.push('christian-holiday');
if (isJummah) dayClasses.push('jummah-day');
}
const holidaysText = hasEvents ? holidaysForDay(item) : '';
const eventAttr = hasEvents ? `data-day-index="${i + j}"` : '';
html += `<td class="${dayClasses.join(' ')}" ${eventAttr}><strong>${item.ethiopian.day}</strong><br/><small>${item.gregorian.month}/${item.gregorian.day}</small>${holidaysText ? `<div class="holiday-labels">${holidaysText}</div>` : ''}</td>`;
}

@@ -153,16 +287,26 @@ }

document.getElementById('calendar').innerHTML = html;
renderFilterControls();
renderControls();
attachEventListeners();
}
function renderFilterControls() {
const controlsContainer = document.getElementById('filterControls');
let controlsHtml = `<label><input type="checkbox" name="holidayTag" value="all" ${!holidayFilter ? 'checked' : ''}> All</label>`;
function renderControls() {
const topControlsContainer = document.getElementById('topControls');
const filterControlsContainer = document.getElementById('filterControls');
topControlsContainer.innerHTML = `<label for="modeSelector">Mode:</label><select id="modeSelector"><option value="none" ${activeMode === 'none' ? 'selected' : ''}>All</option><option value="christian" ${activeMode === 'christian' ? 'selected' : ''}>Christian</option><option value="muslim" ${activeMode === 'muslim' ? 'selected' : ''}>Muslim</option></select><button id="toggleGeez">Geez (${useGeez ? 'ON' : 'OFF'})</button><button id="toggleLang">Lang (${weekdayLang})</button><button id="toggleWeekStart">Start (${weekStart === 1 ? 'Mon' : 'Sun'})</button>`;
let filterHtml = '';
if (activeMode === 'christian') {
filterHtml += `<label><input type="checkbox" id="showAllSaintsToggle" ${showAllSaints ? 'checked' : ''}> Show All Saints</label>`;
}
const isDisabled = activeMode !== 'none';
const disabledAttr = isDisabled ? 'disabled' : '';
filterHtml += `<label class="${isDisabled ? 'disabled' : ''}"><input type="checkbox" name="holidayTag" value="all" ${!holidayFilter || isDisabled ? 'checked' : ''} ${disabledAttr}> All Holidays</label>`;
for (const key in HolidayTags) {
const value = HolidayTags[key];
const isChecked = holidayFilter && holidayFilter.includes(value);
controlsHtml += `<label><input type="checkbox" name="holidayTag" value="${value}" ${isChecked ? 'checked' : ''}> ${value}</label>`;
const isChecked = !isDisabled && holidayFilter && holidayFilter.includes(value);
filterHtml += `<label class="${isDisabled ? 'disabled' : ''}"><input type="checkbox" name="holidayTag" value="${value}" ${isChecked ? 'checked' : ''} ${disabledAttr}> ${value}</label>`;
}
controlsContainer.innerHTML = controlsHtml;
filterControlsContainer.innerHTML = filterHtml;
}

@@ -189,4 +333,21 @@

document.getElementById('toggleWeekStart').onclick = () => { weekStart = weekStart === 1 ? 0 : 1; rerender(); };
document.querySelectorAll('.holiday').forEach(cell => {
document.getElementById('modeSelector').onchange = (e) => {
activeMode = e.target.value;
if (activeMode !== 'none') {
holidayFilter = null;
}
showAllSaints = false;
rerender();
};
const saintsToggle = document.getElementById('showAllSaintsToggle');
if (saintsToggle) {
saintsToggle.onchange = (e) => {
showAllSaints = e.target.checked;
rerender();
};
}
document.querySelectorAll('.event-day').forEach(cell => {
cell.onclick = () => {

@@ -200,3 +361,3 @@ const dayIndex = parseInt(cell.getAttribute('data-day-index'));

});
const allCheckbox = document.querySelector('input[name="holidayTag"][value="all"]');

@@ -216,13 +377,17 @@ const otherCheckboxes = document.querySelectorAll('input[name="holidayTag"]:not([value="all"])');

};
allCheckbox.onchange = () => {
if (allCheckbox.checked) {
otherCheckboxes.forEach(cb => cb.checked = false);
holidayFilter = null;
rerender();
} else {
allCheckbox.checked = true;
}
};
otherCheckboxes.forEach(checkbox => { checkbox.onchange = updateFilter; });
if (allCheckbox) {
allCheckbox.onchange = () => {
if (allCheckbox.checked) {
otherCheckboxes.forEach(cb => cb.checked = false);
holidayFilter = null;
rerender();
} else {
allCheckbox.checked = true;
}
};
}
otherCheckboxes.forEach(checkbox => {
if (checkbox) checkbox.onchange = updateFilter;
});
}

@@ -234,14 +399,13 @@

month: currentMonth,
useGeez,
weekdayLang,
weekStart,
useGeez, weekdayLang, weekStart,
holidayFilter,
mode: activeMode,
showAllSaints: showAllSaints,
});
renderCalendar(monthGridInstance.generate());
}
// Initial render
rerender();
</script>
</body>
</html>
</html>
{
"name": "kenat",
"version": "2.0.3",
"version": "2.1.0",
"description": "A JavaScript library for the Ethiopian calendar with date and time support.",

@@ -5,0 +5,0 @@ "main": "src/index.js",

export const monthNames = {
english: [
"Meskerem", "Tikimt", "Hidar", "Tahsas", "Tir", "Yekatit",
"Megabit", "Miazia", "Ginbot", "Sene", "Hamle", "Nehase", "Pagume"
"Meskerem",
"Tikimt",
"Hidar",
"Tahsas",
"Tir",
"Yekatit",
"Megabit",
"Miazia",
"Ginbot",
"Sene",
"Hamle",
"Nehase",
"Pagume",
],
amharic: [
"መስከረም", "ጥቅምት", "ህዳር", "ታህሳስ", "ጥር", "የካቲት",
"መጋቢት", "ሚያዝያ", "ግንቦት", "ሰኔ", "ሀምሌ", "ነሐሴ", "ጳጉሜ"
"መስከረም",
"ጥቅምት",
"ህዳር",
"ታህሳስ",
"ጥር",
"የካቲት",
"መጋቢት",
"ሚያዝያ",
"ግንቦት",
"ሰኔ",
"ሀምሌ",
"ነሐሴ",
"ጳጉሜ",
],
gregorian: [
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
],

@@ -18,24 +50,40 @@ };

english: [
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
],
amharic: [
"እሑድ", "ሰኞ", "ማክሰኞ", "ረቡዕ", "ሐሙስ", "ዓርብ", "ቅዳሜ"
],
amharic: ["እሑድ", "ሰኞ", "ማክሰኞ", "ረቡዕ", "ሐሙስ", "ዓርብ", "ቅዳሜ"],
};
export const HolidayTags = {
PUBLIC: "public", RELIGIOUS: "religious", CHRISTIAN: "christian",
MUSLIM: "muslim", STATE: "state", CULTURAL: "cultural", OTHER: "other",
PUBLIC: "public",
RELIGIOUS: "religious",
CHRISTIAN: "christian",
MUSLIM: "muslim",
STATE: "state",
CULTURAL: "cultural",
OTHER: "other",
};
export const keyToTewsakMap = {
nineveh: 'NINEVEH', abiyTsome: 'ABIY_TSOME', debreZeit: 'DEBRE_ZEIT',
hosanna: 'HOSANNA', siklet: 'SIKLET', fasika: 'TINSAYE',
rikbeKahnat: 'RIKBE_KAHNAT', erget: 'ERGET', paraclete: 'PARACLETE',
tsomeHawaryat: 'TSOME_HAWARYAT', tsomeDihnet: 'TSOME_DIHENET'
nineveh: "NINEVEH",
abiyTsome: "ABIY_TSOME",
debreZeit: "DEBRE_ZEIT",
hosanna: "HOSANNA",
siklet: "SIKLET",
fasika: "TINSAYE",
rikbeKahnat: "RIKBE_KAHNAT",
erget: "ERGET",
paraclete: "PARACLETE",
tsomeHawaryat: "TSOME_HAWARYAT",
tsomeDihnet: "TSOME_DIHENET",
};
export const PERIOD_LABELS = {
day: 'ጠዋት',
night: 'ማታ',
day: "ጠዋት",
night: "ማታ",
};

@@ -46,92 +94,187 @@

enkutatash: {
name: { amharic: 'እንቁጣጣሽ', english: 'Ethiopian New Year (Enkutatash)' },
description: { amharic: 'የኢትዮጵያ አዲስ ዓመት መጀመሪያ፤ የዝናብ ወቅት ማብቃቱን እና ዳግም መታደስን ያመለክታል።', english: 'Marks the start of the Ethiopian year; symbolizes renewal and the end of the rainy season.' }
name: { amharic: "እንቁጣጣሽ", english: "Ethiopian New Year (Enkutatash)" },
description: {
amharic: "የኢትዮጵያ አዲስ ዓመት መጀመሪያ፤ የዝናብ ወቅት ማብቃቱን እና ዳግም መታደስን ያመለክታል።",
english:
"Marks the start of the Ethiopian year; symbolizes renewal and the end of the rainy season.",
},
},
meskel: {
name: { amharic: 'መስቀል', english: 'Finding of the True Cross (Meskel)' },
description: { amharic: 'በ4ኛው መቶ ክፍለ ዘመን በንግሥት እሌኒ አማካኝነት የጌታችን መስቀል መገኘቱን ያከብራል።', english: 'Commemorates the discovery of the True Cross by Empress Helena in the 4th century.' }
name: { amharic: "መስቀል", english: "Finding of the True Cross (Meskel)" },
description: {
amharic: "በ4ኛው መቶ ክፍለ ዘመን በንግሥት እሌኒ አማካኝነት የጌታችን መስቀል መገኘቱን ያከብራል።",
english:
"Commemorates the discovery of the True Cross by Empress Helena in the 4th century.",
},
},
beherbehereseb: {
name: { amharic: 'የብሔር ብሔረሰቦች ቀን', english: 'Nations, Nationalities, and Peoples\' Day' },
description: { amharic: 'የኢትዮጵያ ብሔር ብሔረሰቦችን ልዩነት የሚያከብር፣ እኩል መብታቸውን የሚያረጋግጥ እና በባህልና ቋንቋ አንድነትን የሚያጠናክር በዓል ነው።', english: 'Acknowledges and celebrates the diversity of Ethiopia\'s ethnic groups, affirming their equal rights and fostering unity.' }
name: {
amharic: "የብሔር ብሔረሰቦች ቀን",
english: "Nations, Nationalities, and Peoples' Day",
},
description: {
amharic:
"የኢትዮጵያ ብሔር ብሔረሰቦችን ልዩነት የሚያከብር፣ እኩል መብታቸውን የሚያረጋግጥ እና በባህልና ቋንቋ አንድነትን የሚያጠናክር በዓል ነው።",
english:
"Acknowledges and celebrates the diversity of Ethiopia's ethnic groups, affirming their equal rights and fostering unity.",
},
},
gena: {
name: { amharic: 'ገና', english: 'Ethiopian Christmas (Genna)' },
description: { amharic: 'የኢየሱስ ክርስቶስን ልደት የሚያከብር የኢትዮጵያ ኦርቶዶክስ ተዋሕዶ ቤተ ክርስቲያን በዓል።', english: 'Ethiopian Orthodox Christmas celebrating the birth of Jesus Christ.' }
name: { amharic: "ገና", english: "Ethiopian Christmas (Genna)" },
description: {
amharic: "የኢየሱስ ክርስቶስን ልደት የሚያከብር የኢትዮጵያ ኦርቶዶክስ ተዋሕዶ ቤተ ክርስቲያን በዓል።",
english:
"Ethiopian Orthodox Christmas celebrating the birth of Jesus Christ.",
},
},
timket: {
name: { amharic: 'ጥምቀት', english: 'Ethiopian Epiphany (Timket)' },
description: { amharic: 'የኢየሱስ ክርስቶስን በዮርዳኖስ ወንዝ መጠመቁን ያከብራል።', english: 'Commemorates the baptism of Jesus in the Jordan River.' }
name: { amharic: "ጥምቀት", english: "Ethiopian Epiphany (Timket)" },
description: {
amharic: "የኢየሱስ ክርስቶስን በዮርዳኖስ ወንዝ መጠመቁን ያከብራል።",
english: "Commemorates the baptism of Jesus in the Jordan River.",
},
},
martyrsDay: {
name: { amharic: 'የሰማዕታት ቀን', english: 'Martyrs\' Day' },
description: { amharic: 'ለኢትዮጵያ ነፃነትና ክብር ሕይወታቸውን የሠዉ ሰማዕታትን ያስባል።', english: 'Honors those who sacrificed their lives for Ethiopia’s freedom and independence.' }
name: { amharic: "የሰማዕታት ቀን", english: "Martyrs' Day" },
description: {
amharic: "ለኢትዮጵያ ነፃነትና ክብር ሕይወታቸውን የሠዉ ሰማዕታትን ያስባል።",
english:
"Honors those who sacrificed their lives for Ethiopia’s freedom and independence.",
},
},
adwa: {
name: { amharic: 'የአድዋ ድል በዓል', english: 'Victory of Adwa' },
description: { amharic: 'በ1896 ዓ.ም. ኢትዮጵያ በጣሊያን ቅኝ ገዥዎች ላይ የተቀዳጀችውን ድል ያከብራል።', english: 'Celebrates Ethiopia’s victory over Italian colonizers in 1896.' }
name: { amharic: "የአድዋ ድል በዓል", english: "Victory of Adwa" },
description: {
amharic: "በ1896 ዓ.ም. ኢትዮጵያ በጣሊያን ቅኝ ገዥዎች ላይ የተቀዳጀችውን ድል ያከብራል።",
english: "Celebrates Ethiopia’s victory over Italian colonizers in 1896.",
},
},
labour: {
name: { amharic: 'የሰራተኞች ቀን', english: 'International Labour Day' },
description: { amharic: 'ዓለም አቀፍ የሠራተኞችና የሥራ መብቶች ቀን ነው።', english: 'A global celebration of workers and labor rights.' }
name: { amharic: "የሰራተኞች ቀን", english: "International Labour Day" },
description: {
amharic: "ዓለም አቀፍ የሠራተኞችና የሥራ መብቶች ቀን ነው።",
english: "A global celebration of workers and labor rights.",
},
},
patriots: {
name: { amharic: 'የአርበኞች ቀን', english: 'Patriots\' Victory Day' },
description: { amharic: 'የጣሊያን ወረራን የተቋቋሙ ኢትዮጵያውያን አርበኞችን ድል ያስባል።', english: 'Honors Ethiopian resistance fighters who defeated Italian occupation.' }
name: { amharic: "የአርበኞች ቀን", english: "Patriots' Victory Day" },
description: {
amharic: "የጣሊያን ወረራን የተቋቋሙ ኢትዮጵያውያን አርበኞችን ድል ያስባል።",
english:
"Honors Ethiopian resistance fighters who defeated Italian occupation.",
},
},
nineveh: {
name: { amharic: 'ጾመ ነነዌ', english: 'Fast of Nineveh' },
description: { amharic: 'የነነዌ ሰዎች ንስሐ መግባታቸውን የሚያስታውስ የሦስት ቀን ጾም ነው።', english: 'A three-day fast commemorating the repentance of the people of Nineveh.' }
name: { amharic: "ጾመ ነነዌ", english: "Fast of Nineveh" },
description: {
amharic: "የነነዌ ሰዎች ንስሐ መግባታቸውን የሚያስታውስ የሦስት ቀን ጾም ነው።",
english:
"A three-day fast commemorating the repentance of the people of Nineveh.",
},
},
abiyTsome: {
name: { amharic: 'ዐቢይ ጾም', english: 'Great Lent' },
description: { amharic: 'ከፋሲካ በፊት የሚጾም የ55 ቀናት የጾም ወቅት ነው።', english: 'The Great Lent, a 55-day fasting period before Easter.' }
name: { amharic: "ዐቢይ ጾም", english: "Great Lent" },
description: {
amharic: "ከፋሲካ በፊት የሚጾም የ55 ቀናት የጾም ወቅት ነው።",
english: "The Great Lent, a 55-day fasting period before Easter.",
},
},
debreZeit: {
name: { amharic: 'ደብረ ዘይት', english: 'Mid-Lent Sunday' },
description: { amharic: 'ኢየሱስ በደብረ ዘይት ተራራ ያስተማረውን ትምህርት የሚያስታውስ የዐቢይ ጾም አጋማሽ እሑድ።', english: 'Mid-Lent Sunday, commemorating Jesus\'s sermon on the Mount of Olives.' }
name: { amharic: "ደብረ ዘይት", english: "Mid-Lent Sunday" },
description: {
amharic: "ኢየሱስ በደብረ ዘይት ተራራ ያስተማረውን ትምህርት የሚያስታውስ የዐቢይ ጾም አጋማሽ እሑድ።",
english:
"Mid-Lent Sunday, commemorating Jesus's sermon on the Mount of Olives.",
},
},
hosanna: {
name: { amharic: 'ሆሳዕና', english: 'Palm Sunday' },
description: { amharic: 'ኢየሱስ በክብር ወደ ኢየሩሳሌም መግባቱን የሚያስታውስ በዓል።', english: 'Palm Sunday, commemorating Jesus\'s triumphal entry into Jerusalem.' }
name: { amharic: "ሆሳዕና", english: "Palm Sunday" },
description: {
amharic: "ኢየሱስ በክብር ወደ ኢየሩሳሌም መግባቱን የሚያስታውስ በዓል።",
english:
"Palm Sunday, commemorating Jesus's triumphal entry into Jerusalem.",
},
},
siklet: {
name: { amharic: 'ስቅለት', english: 'Good Friday' },
description: { amharic: 'የኢየሱስ ክርስቶስን ስቅለት የሚያስታውስ ነው።', english: 'Marks the crucifixion of Jesus Christ.' }
name: { amharic: "ስቅለት", english: "Good Friday" },
description: {
amharic: "የኢየሱስ ክርስቶስን ስቅለት የሚያስታውስ ነው።",
english: "Marks the crucifixion of Jesus Christ.",
},
},
fasika: {
name: { amharic: 'ፋሲካ', english: 'Ethiopian Easter' },
description: { amharic: 'የኢየሱስ ክርስቶስን ከሙታን መነሣት ያከብራል። በኢትዮጵያ ውስጥ ካሉ ክርስቲያናዊ በዓላት አንዱና ዋነኛው ነው።', english: 'Celebrates the resurrection of Jesus Christ. One of the most important Christian holidays in Ethiopia.' }
name: { amharic: "ፋሲካ", english: "Ethiopian Easter" },
description: {
amharic:
"የኢየሱስ ክርስቶስን ከሙታን መነሣት ያከብራል። በኢትዮጵያ ውስጥ ካሉ ክርስቲያናዊ በዓላት አንዱና ዋነኛው ነው።",
english:
"Celebrates the resurrection of Jesus Christ. One of the most important Christian holidays in Ethiopia.",
},
},
rikbeKahnat: {
name: { amharic: 'ርክበ ካህናት', english: 'Meeting of the Priests' },
description: { amharic: 'ከፋሲካ 24 ቀናት በኋላ የሚከበር የካህናት መሰባሰብ በዓል ነው።', english: 'The Meeting of the Priests, 24 days after Easter.' }
name: { amharic: "ርክበ ካህናት", english: "Meeting of the Priests" },
description: {
amharic: "ከፋሲካ 24 ቀናት በኋላ የሚከበር የካህናት መሰባሰብ በዓል ነው።",
english: "The Meeting of the Priests, 24 days after Easter.",
},
},
erget: {
name: { amharic: 'ዕርገት', english: 'Ascension' },
description: { amharic: 'ከፋሲካ 40 ቀናት በኋላ ኢየሱስ ወደ ሰማይ ማረጉን ያከብራል።', english: 'The Ascension of Jesus into heaven, 40 days after Easter.' }
name: { amharic: "ዕርገት", english: "Ascension" },
description: {
amharic: "ከፋሲካ 40 ቀናት በኋላ ኢየሱስ ወደ ሰማይ ማረጉን ያከብራል።",
english: "The Ascension of Jesus into heaven, 40 days after Easter.",
},
},
paraclete: {
name: { amharic: 'ጰራቅሊጦስ', english: 'Pentecost' },
description: { amharic: 'መንፈስ ቅዱስ በሐዋርያት ላይ መውረዱን የሚያከብር በዓል፣ ከፋሲካ 50 ቀናት በኋላ።', english: 'Pentecost, celebrating the descent of the Holy Spirit upon the Apostles, 50 days after Easter.' }
name: { amharic: "ጰራቅሊጦስ", english: "Pentecost" },
description: {
amharic: "መንፈስ ቅዱስ በሐዋርያት ላይ መውረዱን የሚያከብር በዓል፣ ከፋሲካ 50 ቀናት በኋላ።",
english:
"Pentecost, celebrating the descent of the Holy Spirit upon the Apostles, 50 days after Easter.",
},
},
tsomeHawaryat: {
name: { amharic: 'ጾመ ሐዋርያት', english: 'Apostles\' Fast' },
description: { amharic: 'ከጰራቅሊጦስ ማግስት የሚጀምር የሐዋርያት ጾም ነው።', english: 'The Fast of the Apostles, which begins the day after Pentecost.' }
name: { amharic: "ጾመ ሐዋርያት", english: "Apostles' Fast" },
description: {
amharic: "ከጰራቅሊጦስ ማግስት የሚጀምር የሐዋርያት ጾም ነው።",
english:
"The Fast of the Apostles, which begins the day after Pentecost.",
},
},
tsomeDihnet: {
name: { amharic: 'ጾመ ድኅነት', english: 'Fast of Salvation' },
description: { amharic: 'በየሳምንቱ ረቡዕ እና ዓርብ የሚጾም የድኅነት ጾም ነው።', english: 'The Fast of Salvation, observed on Wednesdays and Fridays.' }
name: { amharic: "ጾመ ድኅነት", english: "Fast of Salvation" },
description: {
amharic: "በየሳምንቱ ረቡዕ እና ዓርብ የሚጾም የድኅነት ጾም ነው።",
english: "The Fast of Salvation, observed on Wednesdays and Fridays.",
},
},
eidFitr: {
name: { amharic: 'ዒድ አል ፈጥር', english: 'Eid al-Fitr' },
description: { amharic: 'የረመዳን ጾም ወር መገባደድን የሚያመለክት በዓል።', english: 'Marks the end of Ramadan, the month of fasting for Muslims.' }
name: { amharic: "ዒድ አል ፈጥር", english: "Eid al-Fitr" },
description: {
amharic: "የረመዳን ጾም ወር መገባደድን የሚያመለክት በዓል።",
english: "Marks the end of Ramadan, the month of fasting for Muslims.",
},
},
eidAdha: {
name: { amharic: 'ዒድ አል አድሐ', english: 'Eid al-Adha' },
description: { amharic: 'አብርሃም ለእግዚአብሔር በመታዘዝ ልጁን ለመሠዋት ፈቃደኝነቱን የሚያስታውስ በዓል።', english: 'Commemorates Abraham’s willingness to sacrifice his son as an act of obedience to God.' }
name: { amharic: "ዒድ አል አድሐ", english: "Eid al-Adha" },
description: {
amharic: "አብርሃም ለእግዚአብሔር በመታዘዝ ልጁን ለመሠዋት ፈቃደኝነቱን የሚያስታውስ በዓል።",
english:
"Commemorates Abraham’s willingness to sacrifice his son as an act of obedience to God.",
},
},
moulid: {
name: { amharic: 'መውሊድ', english: 'Birth of the Prophet' },
description: { amharic: 'የነቢዩ ሙሐመድን የልደት በዓል ያከብራል።', english: 'Celebrates the birthday of the Prophet Mohammed.' }
name: { amharic: "መውሊድ", english: "Birth of the Prophet" },
description: {
amharic: "የነቢዩ ሙሐመድን የልደት በዓል ያከብራል።",
english: "Celebrates the birthday of the Prophet Mohammed.",
},
},
jummah: {
name: { amharic: "ጁምዓ", english: "Jummah" },
description: {
amharic: "ሳምንታዊ የሙስሊሞች የጋራ ስግደት።",
english: "The weekly Muslim congregational prayer."
}
}

@@ -142,31 +285,53 @@ };

export const evangelistNames = {
english: { 1: 'Matthew', 2: 'Mark', 3: 'Luke', 0: 'John' },
amharic: { 1: 'ማቴዎስ', 2: 'ማርቆስ', 3: 'ሉቃስ', 0: 'ዮሐንስ' }
english: { 1: "Matthew", 2: "Mark", 3: "Luke", 0: "John" },
amharic: { 1: "ማቴዎስ", 2: "ማርቆስ", 3: "ሉቃስ", 0: "ዮሐንስ" },
};
export const tewsakMap = {
'Sunday': 7, 'Monday': 6, 'Tuesday': 5, 'Wednesday': 4, 'Thursday': 3, 'Friday': 2, 'Saturday': 8
Sunday: 7,
Monday: 6,
Tuesday: 5,
Wednesday: 4,
Thursday: 3,
Friday: 2,
Saturday: 8,
};
export const movableHolidayTewsak = {
NINEVEH: 0, ABIY_TSOME: 14, DEBRE_ZEIT: 41, HOSANNA: 62, SIKLET: 67, TINSAYE: 69,
RIKBE_KAHNAT: 93, ERGET: 108, PARACLETE: 118, TSOME_HAWARYAT: 119, TSOME_DIHENET: 121,
NINEVEH: 0,
ABIY_TSOME: 14,
DEBRE_ZEIT: 41,
HOSANNA: 62,
SIKLET: 67,
TINSAYE: 69,
RIKBE_KAHNAT: 93,
ERGET: 108,
PARACLETE: 118,
TSOME_HAWARYAT: 119,
TSOME_DIHENET: 121,
};
export const movableHolidays = {
nineveh: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
abiyTsome: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
debreZeit: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
hosanna: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
siklet: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
fasika: { tags: [HolidayTags.PUBLIC, HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
rikbeKahnat: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
erget: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
paraclete: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
tsomeHawaryat: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
tsomeDihnet: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
eidFitr: { tags: [HolidayTags.PUBLIC, HolidayTags.RELIGIOUS, HolidayTags.MUSLIM] },
eidAdha: { tags: [HolidayTags.PUBLIC, HolidayTags.RELIGIOUS, HolidayTags.MUSLIM] },
moulid: { tags: [HolidayTags.PUBLIC, HolidayTags.RELIGIOUS, HolidayTags.MUSLIM] },
nineveh: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
abiyTsome: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
debreZeit: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
hosanna: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
siklet: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN, HolidayTags.PUBLIC] },
fasika: {
tags: [HolidayTags.PUBLIC, HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN],
},
rikbeKahnat: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
erget: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
paraclete: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
tsomeHawaryat: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
tsomeDihnet: { tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN] },
eidFitr: {
tags: [HolidayTags.PUBLIC, HolidayTags.RELIGIOUS, HolidayTags.MUSLIM],
},
eidAdha: {
tags: [HolidayTags.PUBLIC, HolidayTags.RELIGIOUS, HolidayTags.MUSLIM],
},
moulid: {
tags: [HolidayTags.PUBLIC, HolidayTags.RELIGIOUS, HolidayTags.MUSLIM],
},
};

@@ -321,3 +321,3 @@ import { toGC, toEC } from './conversions.js';

static getMonthCalendar(year, month, options = {}) {
const { useGeez = false, weekdayLang = 'amharic', weekStart = 0, holidayFilter = null } = options;
const { useGeez = false, weekdayLang = 'amharic', weekStart = 0, holidayFilter = null, mode = "public" } = options;

@@ -330,3 +330,4 @@ const monthGrid = MonthGrid.create({

weekStart,
holidayFilter // Pass filter to MonthGrid
holidayFilter,
mode
});

@@ -333,0 +334,0 @@

import { Kenat } from './Kenat.js';
import { getHolidaysInMonth } from './holidays.js';
import { toGeez } from './geezConverter.js';
import { daysOfWeek, monthNames } from './constants.js';
import { orthodoxMonthlydays } from './nigs.js';
import { daysOfWeek, monthNames, HolidayTags, holidayInfo } from './constants.js';
import { getWeekday, validateNumericInputs } from './utils.js';

@@ -19,2 +20,4 @@ import { InvalidGridConfigError } from './errors/errorHandler.js';

this.holidayFilter = config.holidayFilter ?? null;
this.mode = config.mode ?? null;
this.showAllSaints = config.showAllSaints ?? false;
}

@@ -25,3 +28,2 @@

// If one is provided, both must be.
if ((year !== undefined && month === undefined) || (year === undefined && month !== undefined)) {

@@ -54,17 +56,71 @@ throw new InvalidGridConfigError('If providing year or month, both must be provided.');

generate() {
const y = this.year;
const m = this.month;
const rawDays = this._getRawDays();
const holidays = this._getFilteredHolidays();
const saints = this._getSaintsMap();
const paddedDays = this._mergeDays(rawDays, holidays, saints);
const headers = this._getWeekdayHeaders();
const monthName = this._getLocalizedMonthName();
const yearLabel = this._getLocalizedYear();
const todayEth = Kenat.now().getEthiopian();
const temp = new Kenat(`${y}/${m}/1`);
const rawDays = temp.getMonthCalendar(y, m, this.useGeez);
return {
headers,
days: paddedDays,
year: yearLabel,
month: this.month,
monthName,
up: () => this.up().generate(),
down: () => this.down().generate()
};
}
_getRawDays() {
const base = new Kenat(`${this.year}/${this.month}/1`);
return base.getMonthCalendar(this.year, this.month, this.useGeez);
}
_getFilteredHolidays() {
let filter = this.holidayFilter;
if (this.mode === 'christian') filter = [HolidayTags.CHRISTIAN];
if (this.mode === 'muslim') filter = [HolidayTags.MUSLIM];
if (this.mode === 'public') filter = [HolidayTags.PUBLIC];
return getHolidaysInMonth(this.year, this.month, {
lang: this.weekdayLang,
filter
});
}
_getSaintsMap() {
if (this.mode !== 'christian') return {};
const map = {};
Object.values(orthodoxMonthlydays).forEach(saint => {
const isNigs = Array.isArray(saint.negs)
? saint.negs.includes(this.month)
: saint.negs === this.month;
if (isNigs || this.showAllSaints) {
const day = saint.recuringDate;
if (!map[day]) map[day] = [];
map[day].push({
key: saint.key,
name: saint.name[this.weekdayLang] || saint.name.english,
description: saint.description[this.weekdayLang] || saint.description.english,
isNigs,
tags: [HolidayTags.RELIGIOUS, HolidayTags.CHRISTIAN, isNigs ? 'NIGS' : 'SAINT_DAY']
});
}
});
return map;
}
_mergeDays(rawDays, holidaysList, saintsMap) {
const today = Kenat.now().getEthiopian();
const labels = daysOfWeek[this.weekdayLang] || daysOfWeek.amharic;
const monthLabels = monthNames[this.weekdayLang] || monthNames.amharic;
const monthHolidays = getHolidaysInMonth(y, m, {
lang: this.weekdayLang,
filter: this.holidayFilter
});
const holidayMap = {};
monthHolidays.forEach(h => {
holidaysList.forEach(h => {
const key = `${h.ethiopian.year}-${h.ethiopian.month}-${h.ethiopian.day}`;

@@ -75,10 +131,23 @@ if (!holidayMap[key]) holidayMap[key] = [];

const daysWithWeekday = rawDays.map(day => {
const mapped = rawDays.map(day => {
const eth = day.ethiopian;
const greg = day.gregorian;
const isToday = eth.year === todayEth.year && eth.month === todayEth.month && eth.day === todayEth.day;
const weekday = getWeekday(eth);
const key = `${eth.year}-${eth.month}-${eth.day}`;
const holidays = holidayMap[key] || [];
let holidays = holidayMap[key] || [];
if (this.mode === 'christian') {
holidays = holidays.concat(saintsMap[eth.day] || []);
}
if (this.mode === 'muslim' && weekday === 5) {
const j = holidayInfo.jummah;
holidays.push({
key: 'jummah',
name: j.name[this.weekdayLang] || j.name.english,
description: j.description[this.weekdayLang] || j.description.english,
tags: [HolidayTags.RELIGIOUS, HolidayTags.MUSLIM]
});
}
return {

@@ -93,3 +162,6 @@ ethiopian: {

weekdayName: labels[weekday],
isToday,
isToday:
eth.year === today.year &&
eth.month === today.month &&
eth.day === today.day,
holidays

@@ -99,19 +171,19 @@ };

const offset = ((daysWithWeekday[0].weekday - this.weekStart + 7) % 7);
const padded = Array(offset).fill(null).concat(daysWithWeekday);
const headers = labels.slice(this.weekStart).concat(labels.slice(0, this.weekStart));
const localizedYear = this.useGeez ? toGeez(this.year) : this.year;
const localizedMonthName = monthLabels[this.month - 1];
const offset = ((mapped[0].weekday - this.weekStart + 7) % 7);
return Array(offset).fill(null).concat(mapped);
}
return {
headers,
days: padded,
year: localizedYear,
month: this.month,
monthName: localizedMonthName,
up: () => this.up().generate(),
down: () => this.down().generate()
};
_getWeekdayHeaders() {
const labels = daysOfWeek[this.weekdayLang] || daysOfWeek.amharic;
return labels.slice(this.weekStart).concat(labels.slice(0, this.weekStart));
}
_getLocalizedMonthName() {
return (monthNames[this.weekdayLang] || monthNames.amharic)[this.month - 1];
}
_getLocalizedYear() {
return this.useGeez ? toGeez(this.year) : this.year;
}
up() {

@@ -137,1 +209,2 @@ if (this.month === 13) {

}