+1281
| 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">×</span> | ||
| <div class="modal-content"><span class="modal-close">×</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> |
+1
-1
| { | ||
| "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", |
+249
-84
| 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], | ||
| }, | ||
| }; | ||
+3
-2
@@ -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 @@ |
+103
-30
| 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) { | ||
| } | ||
490433
9.63%37
2.78%4748
44.98%