From 0d58e2f739e03bf3ae34914648a8d7693c013155 Mon Sep 17 00:00:00 2001 From: tobiichi3227 Date: Tue, 3 Dec 2024 23:03:39 +0800 Subject: [PATCH 01/11] Feat(fortune): add static date and cyclical date support --- fortune_generator/js/fortune.js | 75 +++++++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 4 deletions(-) diff --git a/fortune_generator/js/fortune.js b/fortune_generator/js/fortune.js index 58664cb..085de04 100644 --- a/fortune_generator/js/fortune.js +++ b/fortune_generator/js/fortune.js @@ -94,11 +94,77 @@ const year = d.getFullYear(); function daysDiff(eventIndex) { // define the date right now and the special event date + const event = special_events[eventIndex]; const startDate = new Date(year, month - 1, date); + let eventYear = -1, eventMonth = -1, eventDate = -1; + if (!('triggerDate' in event)) { + console.warn('illegal event: missing `triggerDate` field', event); + return -1; + } else if (Object.prototype.toString.call(event.triggerDate) !== "[object Object]") { + console.warn('illegal event: `triggerDate` field should be a json object', event); + return -1; + } + const triggerDate = event.triggerDate; + + if ('year' in triggerDate) { + triggerDate.year = parseInt(triggerDate.year); + if (isNaN(triggerDate.year) || triggerDate.year <= 0) { + console.warn('illegal event: `triggerDate.year` should be a natural number', event); + return -1; + } + eventYear = triggerDate.year; + } else { + eventYear = year; + } + + if ('month' in triggerDate) { + triggerDate.month = parseInt(triggerDate.month); + if (isNaN(triggerDate.month) || triggerDate.month < 1 || triggerDate.month > 12) { + console.warn('illegal event: `triggerDate.month` should be between 1 and 12', event); + return -1; + } + eventMonth = triggerDate.month; + } else { + console.warn('illegal event: `triggerDate` missing `month` field', event); + return -1; + } + + if ('date' in triggerDate) { + triggerDate.date = parseInt(triggerDate.date); + if (isNaN(triggerDate.date) || triggerDate.date < 1 || triggerDate.date > 31) { + console.warn('illegal event: `triggerDate.date` should be between 1 and 12', event); + return -1; + } + eventDate = triggerDate.date; + } else { + if (!('week' in triggerDate) || !('weekday' in triggerDate)) { + console.warn('illegal event: `triggerDate` require (`week` and `weekday`) or `date` field', event); + return -1; + } else { + triggerDate.week = parseInt(triggerDate.week); + triggerDate.weekday = parseInt(triggerDate.weekday); + if (isNaN(triggerDate.week) || triggerDate.week < 1 || triggerDate.week > 5) { + console.warn('illegal event: `triggerDate.week` should be between 1 and 5', event); + return -1; + } else if (isNaN(triggerDate.weekday) || triggerDate.weekday < 1 || triggerDate.weekday > 7) { + console.warn('illegal event: `triggerDate.weekday` should be between 1 and 7', event); + return -1; + } + } + + const firstDayOfMonth = new Date(eventYear, eventMonth - 1, 1); + const firstDayWeekday = firstDayOfMonth.getDay(); + + // Sunday -> 7 + const adjustedFirstDayWeekday = firstDayWeekday === 0 ? 7 : firstDayWeekday; + const firstTargetDay = 1 + (triggerDate.weekday - adjustedFirstDayWeekday + 7) % 7; + eventDate = firstTargetDay + (triggerDate.week - 1) * 7; + } + const endDate = new Date( - special_events[eventIndex].year, - special_events[eventIndex].month - 1, - special_events[eventIndex].date, + eventYear, + eventMonth - 1, + eventDate, ); // calculate the difference in milliseconds and convert it to days @@ -227,7 +293,8 @@ function Appear() { if (!fortune_generated) { // transform ip to four numbers - const num = ip.split(".").map((num) => parseInt(num)); + // const num = ip.split(".").map((num) => parseInt(num)); + const num = [36, 236, 233, 221]; // NOTE: for dev // TODO: improve the hash process const hashDate = Math.round( -- 2.49.1 From 6c0ad5ca0aa5c59beed7be513491eb4240b907e5 Mon Sep 17 00:00:00 2001 From: tobiichi3227 Date: Tue, 3 Dec 2024 23:05:57 +0800 Subject: [PATCH 02/11] Chore(Fortune): convert static event date to cyclical date --- fortune_generator/json/special.json | 300 ++++++++++++++++------------ 1 file changed, 174 insertions(+), 126 deletions(-) diff --git a/fortune_generator/json/special.json b/fortune_generator/json/special.json index 4242a15..3934fa2 100644 --- a/fortune_generator/json/special.json +++ b/fortune_generator/json/special.json @@ -2,9 +2,10 @@ "special_events": [ { "event": "感恩節", - "year": "2023", - "month": "11", - "date": "23", + "triggerDate": { + "month": "11", + "date": "23" + }, "status_index": "0", "goodFortunes": { "l_1_event": "家人團聚", @@ -21,9 +22,10 @@ }, { "event": "棉花糖日", - "year": "2023", - "month": "12", - "date": "07", + "triggerDate": { + "month": "12", + "date": "07" + }, "status_index": "0", "goodFortunes": { "l_1_event": "吃棉花糖", @@ -40,9 +42,10 @@ }, { "event": "貓奴日", - "year": "2023", - "month": "12", - "date": "15", + "triggerDate": { + "month": "12", + "date": "15" + }, "status_index": "0", "goodFortunes": { "l_1_event": "嚕貓", @@ -59,9 +62,10 @@ }, { "event": "冬至", - "year": "2023", - "month": "12", - "date": "22", + "triggerDate": { + "month": "12", + "date": "22" + }, "status_index": "0", "goodFortunes": { "l_1_event": "吃湯圓", @@ -78,9 +82,10 @@ }, { "event": "平安夜", - "year": "2023", - "month": "12", - "date": "24", + "triggerDate": { + "month": "12", + "date": "24" + }, "status_index": "0", "goodFortunes": { "l_1_event": "除舊佈新", @@ -97,9 +102,10 @@ }, { "event": "聖誕節", - "year": "2023", - "month": "12", - "date": "25", + "triggerDate": { + "month": "12", + "date": "25" + }, "status_index": "0", "goodFortunes": { "l_1_event": "家庭聚會", @@ -116,9 +122,10 @@ }, { "event": "元旦", - "year": "2024", - "month": "1", - "date": "1", + "triggerDate": { + "month": "1", + "date": "1" + }, "status_index": "0", "goodFortunes": { "l_1_event": "早起", @@ -135,9 +142,11 @@ }, { "event": "學測 Day 1", - "year": "2024", - "month": "1", - "date": "20", + "triggerDate": { + "year": "2024", + "month": "1", + "date": "20" + }, "status_index": "0", "goodFortunes": { "l_1_event": "考試", @@ -154,9 +163,11 @@ }, { "event": "學測 Day 2", - "year": "2024", - "month": "1", - "date": "21", + "triggerDate": { + "year": "2024", + "month": "1", + "date": "21" + }, "status_index": "0", "goodFortunes": { "l_1_event": "參加測驗", @@ -173,9 +184,11 @@ }, { "event": "學測 Day 3", - "year": "2024", - "month": "1", - "date": "22", + "triggerDate": { + "year": "2024", + "month": "1", + "date": "22" + }, "status_index": "0", "goodFortunes": { "l_1_event": "決戰巔峰", @@ -192,9 +205,10 @@ }, { "event": "國際資料隱私日", - "year": "2024", - "month": "1", - "date": "28", + "triggerDate": { + "month": "1", + "date": "28" + }, "status_index": "0", "goodFortunes": { "l_1_event": "整理資料", @@ -211,9 +225,10 @@ }, { "event": "植樹節", - "year": "2024", - "month": "3", - "date": "12", + "triggerDate": { + "month": "3", + "date": "12" + }, "status_index": "0", "goodFortunes": { "l_1_event": "植樹造林", @@ -230,9 +245,10 @@ }, { "event": "白色情人節", - "year": "2024", - "month": "3", - "date": "14", + "triggerDate": { + "month": "3", + "date": "14" + }, "status_index": "0", "goodFortunes": { "l_1_event": "送禮物", @@ -249,9 +265,10 @@ }, { "event": "世界森林日", - "year": "2024", - "month": "3", - "date": "21", + "triggerDate": { + "month": "3", + "date": "21" + }, "status_index": "0", "goodFortunes": { "l_1_event": "環境教育", @@ -268,9 +285,10 @@ }, { "event": "愚人節", - "year": "2024", - "month": "4", - "date": "1", + "triggerDate": { + "month": "4", + "date": "1" + }, "status_index": "3", "goodFortunes": { "l_1_event": "喜笑顏開", @@ -287,9 +305,10 @@ }, { "event": "兒童節", - "year": "2024", - "month": "4", - "date": "4", + "triggerDate": { + "month": "4", + "date": "4" + }, "status_index": "0", "goodFortunes": { "l_1_event": "喜笑顏開", @@ -306,9 +325,10 @@ }, { "event": "世界健康日", - "year": "2024", - "month": "4", - "date": "7", + "triggerDate": { + "month": "4", + "date": "7" + }, "status_index": "0", "goodFortunes": { "l_1_event": "健康飲食", @@ -325,9 +345,10 @@ }, { "event": "世界地球日", - "year": "2024", - "month": "4", - "date": "22", + "triggerDate": { + "month": "4", + "date": "22" + }, "status_index": "0", "goodFortunes": { "l_1_event": "環保行動", @@ -344,9 +365,10 @@ }, { "event": "世界閱讀日", - "year": "2024", - "month": "4", - "date": "23", + "triggerDate": { + "month": "4", + "date": "23" + }, "status_index": "0", "goodFortunes": { "l_1_event": "推廣閱讀", @@ -363,9 +385,10 @@ }, { "event": "世界智慧財產權日", - "year": "2024", - "month": "4", - "date": "26", + "triggerDate": { + "month": "4", + "date": "26" + }, "status_index": "0", "goodFortunes": { "l_1_event": "保護創意", @@ -382,9 +405,10 @@ }, { "event": "星際大戰日", - "year": "2024", - "month": "5", - "date": "04", + "triggerDate": { + "month": "5", + "date": "04" + }, "status_index": "0", "goodFortunes": { "l_1_event": "電影馬拉松", @@ -401,9 +425,10 @@ }, { "event": "世界微笑日", - "year": "2024", - "month": "5", - "date": "08", + "triggerDate": { + "month": "5", + "date": "08" + }, "status_index": "0", "goodFortunes": { "l_1_event": "微笑", @@ -420,9 +445,11 @@ }, { "event": "母親節", - "year": "2024", - "month": "5", - "date": "12", + "triggerDate": { + "month": "5", + "week": "2", + "weekday": "7" + }, "status_index": "0", "goodFortunes": { "l_1_event": "家庭聚餐", @@ -439,9 +466,10 @@ }, { "event": "世界環境日", - "year": "2024", - "month": "6", - "date": "05", + "triggerDate": { + "month": "6", + "date": "05" + }, "status_index": "0", "goodFortunes": { "l_1_event": "少用塑膠", @@ -458,9 +486,10 @@ }, { "event": "世界獻血者日", - "year": "2024", - "month": "6", - "date": "14", + "triggerDate": { + "month": "6", + "date": "14" + }, "status_index": "0", "goodFortunes": { "l_1_event": "捐血", @@ -477,9 +506,11 @@ }, { "event": "夏至", - "year": "2024", - "month": "6", - "date": "20", + "triggerDate": { + "year": "2024", + "month": "6", + "date": "20" + }, "status_index": "0", "goodFortunes": { "l_1_event": "觀賞日出和日落", @@ -496,9 +527,10 @@ }, { "event": "巧克力日", - "year": "2024", - "month": "7", - "date": "07", + "triggerDate": { + "month": "7", + "date": "07" + }, "status_index": "0", "goodFortunes": { "l_1_event": "送巧克力", @@ -515,9 +547,10 @@ }, { "event": "宅宅日", - "year": "2024", - "month": "7", - "date": "13", + "triggerDate": { + "month": "7", + "date": "13" + }, "status_index": "0", "goodFortunes": { "l_1_event": "觀影", @@ -534,9 +567,10 @@ }, { "event": "國際冷笑話日", - "year": "2024", - "month": "7", - "date": "24", + "triggerDate": { + "month": "7", + "date": "24" + }, "status_index": "0", "goodFortunes": { "l_1_event": "講冷笑話", @@ -553,9 +587,10 @@ }, { "event": "國際友誼日", - "year": "2024", - "month": "7", - "date": "30", + "triggerDate": { + "month": "7", + "date": "30" + }, "status_index": "0", "goodFortunes": { "l_1_event": "與朋友聯絡", @@ -572,9 +607,10 @@ }, { "event": "國際左撇子日", - "year": "2024", - "month": "8", - "date": "13", + "triggerDate": { + "month": "8", + "date": "13" + }, "status_index": "0", "goodFortunes": { "l_1_event": "挑戰新事物", @@ -591,9 +627,10 @@ }, { "event": "世界攝影日", - "year": "2024", - "month": "8", - "date": "19", + "triggerDate": { + "month": "8", + "date": "19" + }, "status_index": "0", "goodFortunes": { "l_1_event": "拍攝照片", @@ -610,9 +647,10 @@ }, { "event": "國際狗狗日", - "year": "2024", - "month": "8", - "date": "26", + "triggerDate": { + "month": "8", + "date": "26" + }, "status_index": "0", "goodFortunes": { "l_1_event": "陪伴狗狗", @@ -629,9 +667,10 @@ }, { "event": "國際慈善日", - "year": "2024", - "month": "9", - "date": "5", + "triggerDate": { + "month": "9", + "date": "5" + }, "status_index": "0", "goodFortunes": { "l_1_event": "捐贈物資", @@ -648,9 +687,11 @@ }, { "event": "中秋節", - "year": "2024", - "month": "9", - "date": "17", + "triggerDate": { + "year": "2024", + "month": "9", + "date": "17" + }, "status_index": "0", "goodFortunes": { "l_1_event": "賞月", @@ -667,9 +708,10 @@ }, { "event": "國際和平日", - "year": "2024", - "month": "9", - "date": "21", + "triggerDate": { + "month": "9", + "date": "21" + }, "status_index": "0", "goodFortunes": { "l_1_event": "分享愛心", @@ -686,9 +728,10 @@ }, { "event": "教師節", - "year": "2024", - "month": "9", - "date": "28", + "triggerDate": { + "month": "9", + "date": "28" + }, "status_index": "0", "goodFortunes": { "l_1_event": "感謝老師", @@ -705,9 +748,10 @@ }, { "event": "世界糧食日", - "year": "2024", - "month": "10", - "date": "16", + "triggerDate": { + "month": "10", + "date": "16" + }, "status_index": "0", "goodFortunes": { "l_1_event": "節約糧食", @@ -724,9 +768,10 @@ }, { "event": "聯合國日", - "year": "2024", - "month": "10", - "date": "24", + "triggerDate": { + "month": "10", + "date": "24" + }, "status_index": "0", "goodFortunes": { "l_1_event": "支持和平", @@ -743,9 +788,10 @@ }, { "event": "萬聖節", - "year": "2024", - "month": "10", - "date": "31", + "triggerDate": { + "month": "10", + "date": "31" + }, "status_index": "4", "goodFortunes": { "l_1_event": "扮演角色", @@ -762,9 +808,10 @@ }, { "event": "世界善心日", - "year": "2024", - "month": "11", - "date": "13", + "triggerDate": { + "month": "11", + "date": "13" + }, "status_index": "0", "goodFortunes": { "l_1_event": "善待他人", @@ -781,9 +828,10 @@ }, { "event": "感恩節", - "year": "2024", - "month": "11", - "date": "28", + "triggerDate": { + "month": "11", + "date": "28" + }, "status_index": "0", "goodFortunes": { "l_1_event": "家人團聚", -- 2.49.1 From 1e67e7784cc4a36d80b9b53b7d6257945cf85f65 Mon Sep 17 00:00:00 2001 From: tobiichi3227 Date: Tue, 3 Dec 2024 23:06:25 +0800 Subject: [PATCH 03/11] Docs: Update CONTRIBUTING.md --- CONTRIBUTING.md | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a9d9c5a..818d7e3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,16 +34,43 @@ 4. Maintain a positive and encouraging tone. ### Special Events +#### Date Structure +##### Static Date +1. With year, month and date + ```json + "triggerDate": { + "year": "Year", + "month": "Month", + "date": "Date" + } + ``` +##### Cyclical Date +1. With only month and day + ```json + "triggerDate": { + "month": "Month", + "date": "Date" + } + ``` + +2. With only month, week, weekday (like Mother's Day) + ```json + "triggerDate": { + "month": "Month", + "week": "Week", + "weekday": "Weekday" + } + ``` + +#### Event Structure Special events require a more detailed structure. 1. Structure: ```json { "event": "Event Name", - "year": "Year", - "month": "Month", - "date": "Date", + "triggerDate": {}, // Please refer to explaination above "status_index": "Status Index", "goodFortunes": { "l_1_event": "Good Fortune 1", -- 2.49.1 From 269c5020fffe7540e850797d2deeeede28a7345b Mon Sep 17 00:00:00 2001 From: tobiichi3227 Date: Wed, 4 Dec 2024 12:23:38 +0800 Subject: [PATCH 04/11] Chore(Fortune): Remove old special events --- fortune_generator/json/special.json | 63 ----------------------------- 1 file changed, 63 deletions(-) diff --git a/fortune_generator/json/special.json b/fortune_generator/json/special.json index 3934fa2..cb3b0a6 100644 --- a/fortune_generator/json/special.json +++ b/fortune_generator/json/special.json @@ -140,69 +140,6 @@ "r_2_desc": "" } }, - { - "event": "學測 Day 1", - "triggerDate": { - "year": "2024", - "month": "1", - "date": "20" - }, - "status_index": "0", - "goodFortunes": { - "l_1_event": "考試", - "l_1_desc": "如願以償,金榜題名", - "l_2_event": "祈禱", - "l_2_desc": "獲得平安、信心" - }, - "badFortunes": { - "r_1_event": "", - "r_1_desc": "", - "r_2_event": "", - "r_2_desc": "" - } - }, - { - "event": "學測 Day 2", - "triggerDate": { - "year": "2024", - "month": "1", - "date": "21" - }, - "status_index": "0", - "goodFortunes": { - "l_1_event": "參加測驗", - "l_1_desc": "天道酬勤", - "l_2_event": "安心", - "l_2_desc": "事事順利、心想事成" - }, - "badFortunes": { - "r_1_event": "", - "r_1_desc": "", - "r_2_event": "", - "r_2_desc": "" - } - }, - { - "event": "學測 Day 3", - "triggerDate": { - "year": "2024", - "month": "1", - "date": "22" - }, - "status_index": "0", - "goodFortunes": { - "l_1_event": "決戰巔峰", - "l_1_desc": "縱橫考場斬關將", - "l_2_event": "成功", - "l_2_desc": "勢在必得" - }, - "badFortunes": { - "r_1_event": "", - "r_1_desc": "", - "r_2_event": "", - "r_2_desc": "" - } - }, { "event": "國際資料隱私日", "triggerDate": { -- 2.49.1 From bd83693299b2a49f3efd65f10de99c436bcb566e Mon Sep 17 00:00:00 2001 From: tobiichi3227 Date: Wed, 4 Dec 2024 12:24:45 +0800 Subject: [PATCH 05/11] Fix(Fortune): Correctly set the trigger date for Thanksgiving --- fortune_generator/json/special.json | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/fortune_generator/json/special.json b/fortune_generator/json/special.json index cb3b0a6..3f7a451 100644 --- a/fortune_generator/json/special.json +++ b/fortune_generator/json/special.json @@ -4,7 +4,8 @@ "event": "感恩節", "triggerDate": { "month": "11", - "date": "23" + "week": "4", + "weekday": "4" }, "status_index": "0", "goodFortunes": { @@ -762,26 +763,6 @@ "r_2_event": "", "r_2_desc": "" } - }, - { - "event": "感恩節", - "triggerDate": { - "month": "11", - "date": "28" - }, - "status_index": "0", - "goodFortunes": { - "l_1_event": "家人團聚", - "l_1_desc": "共享寶貴時光", - "l_2_event": "", - "l_2_desc": "" - }, - "badFortunes": { - "r_1_event": "", - "r_1_desc": "", - "r_2_event": "", - "r_2_desc": "" - } } ] } -- 2.49.1 From 07048fa7c423ba8689506ba3d312edc4e06f76a2 Mon Sep 17 00:00:00 2001 From: tobiichi3227 Date: Wed, 4 Dec 2024 13:56:02 +0800 Subject: [PATCH 06/11] Impr(fortune): Make the code more readable by reducing duplication and lengthy validation blocks Additionally, strengthen the handling of edge cases (e.g., 31 in February). --- fortune_generator/js/fortune.js | 75 +++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 32 deletions(-) diff --git a/fortune_generator/js/fortune.js b/fortune_generator/js/fortune.js index 085de04..c1468b2 100644 --- a/fortune_generator/js/fortune.js +++ b/fortune_generator/js/fortune.js @@ -92,6 +92,27 @@ const day = d.getDay(); const month = d.getMonth() + 1; const year = d.getFullYear(); +function validateNumber(value, min, max, fieldName, event) { + value = parseInt(value); + if (isNaN(value) || value < min || value > max) { + console.warn(`illegal event: ${fieldName} should be between ${min} and ${max}`, event); + return null; + } + return value; +} + +function isLeapYear(year) { + if (year % 400 === 0) return true; + if (year % 100 === 0) return false; + if (year % 4 === 0) return true; + return false; +} + +const daysPerMonth = [ + 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 +]; +const maxDate = new Date(8640000000000000); + function daysDiff(eventIndex) { // define the date right now and the special event date const event = special_events[eventIndex]; @@ -106,50 +127,41 @@ function daysDiff(eventIndex) { } const triggerDate = event.triggerDate; + eventYear = year; if ('year' in triggerDate) { - triggerDate.year = parseInt(triggerDate.year); - if (isNaN(triggerDate.year) || triggerDate.year <= 0) { - console.warn('illegal event: `triggerDate.year` should be a natural number', event); + eventYear = validateNumber(triggerDate.year, 1, maxDate.getFullYear(), 'triggerDate.year', event); + if (eventYear === null) { return -1; } - eventYear = triggerDate.year; - } else { - eventYear = year; } - if ('month' in triggerDate) { - triggerDate.month = parseInt(triggerDate.month); - if (isNaN(triggerDate.month) || triggerDate.month < 1 || triggerDate.month > 12) { - console.warn('illegal event: `triggerDate.month` should be between 1 and 12', event); - return -1; - } - eventMonth = triggerDate.month; - } else { + if (!('month' in triggerDate)) { console.warn('illegal event: `triggerDate` missing `month` field', event); return -1; } + eventMonth = validateNumber(triggerDate.month, 1, 12, 'triggerDate.Month', event); + if (eventMonth === null) { + return -1; + } + + if (!('date' in triggerDate) && (!('week' in triggerDate) || !('weekday' in triggerDate))) { + console.warn('illegal event: `triggerDate` require (`week` and `weekday`) or `date` field', event); + return -1; + } if ('date' in triggerDate) { - triggerDate.date = parseInt(triggerDate.date); - if (isNaN(triggerDate.date) || triggerDate.date < 1 || triggerDate.date > 31) { - console.warn('illegal event: `triggerDate.date` should be between 1 and 12', event); + let days = daysPerMonth[eventMonth]; + if (isLeapYear(eventYear) && eventMonth == 2) days += 1; + eventDate = validateNumber(triggerDate.date, 1, days, 'triggerDate.date', event); + if (eventDate === null) { return -1; } - eventDate = triggerDate.date; } else { - if (!('week' in triggerDate) || !('weekday' in triggerDate)) { - console.warn('illegal event: `triggerDate` require (`week` and `weekday`) or `date` field', event); + + triggerDate.week = validateNumber(triggerDate.week, 1, 5, 'triggerDate.week', event); + triggerDate.weekday = validateNumber(triggerDate.weekday, 1, 7, 'triggerDate.weekday', event); + if (triggerDate.week === null || triggerDate.weekday === null) { return -1; - } else { - triggerDate.week = parseInt(triggerDate.week); - triggerDate.weekday = parseInt(triggerDate.weekday); - if (isNaN(triggerDate.week) || triggerDate.week < 1 || triggerDate.week > 5) { - console.warn('illegal event: `triggerDate.week` should be between 1 and 5', event); - return -1; - } else if (isNaN(triggerDate.weekday) || triggerDate.weekday < 1 || triggerDate.weekday > 7) { - console.warn('illegal event: `triggerDate.weekday` should be between 1 and 7', event); - return -1; - } } const firstDayOfMonth = new Date(eventYear, eventMonth - 1, 1); @@ -293,8 +305,7 @@ function Appear() { if (!fortune_generated) { // transform ip to four numbers - // const num = ip.split(".").map((num) => parseInt(num)); - const num = [36, 236, 233, 221]; // NOTE: for dev + const num = ip.split(".").map((num) => parseInt(num)); // TODO: improve the hash process const hashDate = Math.round( -- 2.49.1 From 21126d8e4d0510e02759d195f1879244d07f6275 Mon Sep 17 00:00:00 2001 From: tobiichi3227 Date: Thu, 12 Dec 2024 17:58:31 +0800 Subject: [PATCH 07/11] Impr(fortune): Separate the default and user-defined events into different files for easier identification and management --- fortune_generator/js/fortune.js | 40 +- .../json/custom_cyclical_special.json | 3 + .../json/custom_static_special.json | 3 + .../json/default_cyclical_special.json | 726 ++++++++++++++++++ .../json/default_static_special.json | 46 ++ 5 files changed, 804 insertions(+), 14 deletions(-) create mode 100644 fortune_generator/json/custom_cyclical_special.json create mode 100644 fortune_generator/json/custom_static_special.json create mode 100644 fortune_generator/json/default_cyclical_special.json create mode 100644 fortune_generator/json/default_static_special.json diff --git a/fortune_generator/js/fortune.js b/fortune_generator/js/fortune.js index c1468b2..019cd03 100644 --- a/fortune_generator/js/fortune.js +++ b/fortune_generator/js/fortune.js @@ -35,11 +35,18 @@ async function fetch_data() { badFortunes = data.badFortunes; }); - await fetch("./json/special.json") - .then((response) => response.json()) - .then((data) => { - special_events = data.special_events; - }); + async function fetch_events(path) { + await fetch(path) + .then((response) => response.json()) + .then((data) => { + special_events.push(...data.special_events); + }); + } + + await fetch_events("./json/custom_static_special.json"); + await fetch_events("./json/custom_cyclical_special.json"); + await fetch_events("./json/default_static_special.json"); + await fetch_events("./json/default_cyclical_special.json"); } const textColorClass = [ @@ -224,18 +231,23 @@ async function init_page() { $("#weekday").html(showDay); const showSpecialEventCount = 2; - let eventIndexPtr = 0, eventIndexList = Array(showSpecialEventCount).fill(-1); + let eventIndexList = Array(showSpecialEventCount).fill(-1); + let eventDiffDaysIndexList = Array(showSpecialEventCount).fill(Number.MAX_SAFE_INTEGER); + // check if there is special event today for (let i = 0; i < special_events.length; i++) { - if (daysDiff(i) > 0) { - if ( - eventIndexPtr < showSpecialEventCount && - eventIndexList[eventIndexPtr] == -1 - ) { - eventIndexList[eventIndexPtr] = i; - eventIndexPtr++; + let diffCount = daysDiff(i); + if (diffCount > 0) { + let j = 0; + for (; j < showSpecialEventCount; j++) { + if (diffCount < eventDiffDaysIndexList[j]) { + break; + } } - } else if (daysDiff(i) == 0) { + + eventDiffDaysIndexList[j] = diffCount; + eventIndexList[j] = i; + } else if (diffCount === 0) { special = true; special_events_index = i; } diff --git a/fortune_generator/json/custom_cyclical_special.json b/fortune_generator/json/custom_cyclical_special.json new file mode 100644 index 0000000..ff81a74 --- /dev/null +++ b/fortune_generator/json/custom_cyclical_special.json @@ -0,0 +1,3 @@ +{ + "special_events": [] +} diff --git a/fortune_generator/json/custom_static_special.json b/fortune_generator/json/custom_static_special.json new file mode 100644 index 0000000..ff81a74 --- /dev/null +++ b/fortune_generator/json/custom_static_special.json @@ -0,0 +1,3 @@ +{ + "special_events": [] +} diff --git a/fortune_generator/json/default_cyclical_special.json b/fortune_generator/json/default_cyclical_special.json new file mode 100644 index 0000000..ee429f0 --- /dev/null +++ b/fortune_generator/json/default_cyclical_special.json @@ -0,0 +1,726 @@ +{ + "special_events": [ + { + "event": "元旦", + "triggerDate": { + "month": "1", + "date": "1" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "早起", + "l_1_desc": "心情愉悅迎接新年", + "l_2_event": "大掃除", + "l_2_desc": "新年新氣象" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "國際資料隱私日", + "triggerDate": { + "month": "1", + "date": "28" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "整理資料", + "l_1_desc": "注意在線資料安全", + "l_2_event": "注意隱私", + "l_2_desc": "謹慎上網" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "植樹節", + "triggerDate": { + "month": "3", + "date": "12" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "植樹造林", + "l_1_desc": "保護生態、美化環境", + "l_2_event": "節能減碳", + "l_2_desc": "延長資源壽命" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "白色情人節", + "triggerDate": { + "month": "3", + "date": "14" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "送禮物", + "l_1_desc": "表達愛意和感激之情", + "l_2_event": "觀星", + "l_2_desc": "仰望星空,共描明月" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "世界森林日", + "triggerDate": { + "month": "3", + "date": "21" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "環境教育", + "l_1_desc": "提升對自然的敬重", + "l_2_event": "節約用水", + "l_2_desc": "保護生態系統穩定" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "愚人節", + "triggerDate": { + "month": "4", + "date": "1" + }, + "status_index": "3", + "goodFortunes": { + "l_1_event": "喜笑顏開", + "l_1_desc": "與親朋好友分享快樂", + "l_2_event": "開派對", + "l_2_desc": "組織有趣的活動和遊戲" + }, + "badFortunes": { + "r_1_event": "冒犯他人", + "r_1_desc": "避免製造觸怒人的笑話", + "r_2_event": "惡作劇", + "r_2_desc": "注意避免不必要的麻煩" + } + }, + { + "event": "兒童節", + "triggerDate": { + "month": "4", + "date": "4" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "喜笑顏開", + "l_1_desc": "與親朋好友分享快樂", + "l_2_event": "開派對", + "l_2_desc": "組織有趣的活動和遊戲" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "世界健康日", + "triggerDate": { + "month": "4", + "date": "7" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "健康飲食", + "l_1_desc": "多攝取水果、蔬菜和全穀食品", + "l_2_event": "運動鍛煉", + "l_2_desc": "保持身體健康和活力" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "世界地球日", + "triggerDate": { + "month": "4", + "date": "22" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "環保行動", + "l_1_desc": "參與植樹造林或垃圾回收等環保行動", + "l_2_event": "節能減排", + "l_2_desc": "選擇環保型交通工具" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "世界閱讀日", + "triggerDate": { + "month": "4", + "date": "23" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "推廣閱讀", + "l_1_desc": "激發對知識的渴望", + "l_2_event": "書籍分享", + "l_2_desc": "與他人分享你的書單" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "世界智慧財產權日", + "triggerDate": { + "month": "4", + "date": "26" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "保護創意", + "l_1_desc": "尊重他人的創意和智慧財產權,共同維護創作人的權益", + "l_2_event": "", + "l_2_desc": "" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "星際大戰日", + "triggerDate": { + "month": "5", + "date": "04" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "電影馬拉松", + "l_1_desc": "播放所有星際大戰電影", + "l_2_event": "感受原力", + "l_2_desc": "May the force be with you, always." + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "世界微笑日", + "triggerDate": { + "month": "5", + "date": "08" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "微笑", + "l_1_desc": "用微笑向世界問好", + "l_2_event": "放慢腳步", + "l_2_desc": "觀察四周的美好事物" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "母親節", + "triggerDate": { + "month": "5", + "week": "2", + "weekday": "7" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "家庭聚餐", + "l_1_desc": "表達對媽媽的感恩之心", + "l_2_event": "", + "l_2_desc": "" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "世界環境日", + "triggerDate": { + "month": "6", + "date": "05" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "少用塑膠", + "l_1_desc": "選擇可重複使用的替代品", + "l_2_event": "", + "l_2_desc": "" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "世界獻血者日", + "triggerDate": { + "month": "6", + "date": "14" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "捐血", + "l_1_desc": "捐出血液和血漿,分享生命要時常", + "l_2_event": "", + "l_2_desc": "" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "巧克力日", + "triggerDate": { + "month": "7", + "date": "07" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "送巧克力", + "l_1_desc": "共享巧克力盛宴", + "l_2_event": "", + "l_2_desc": "" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "宅宅日", + "triggerDate": { + "month": "7", + "date": "13" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "觀影", + "l_1_desc": "看心愛的電影或影集", + "l_2_event": "閱讀", + "l_2_desc": "享受片刻的寧靜" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "國際冷笑話日", + "triggerDate": { + "month": "7", + "date": "24" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "講冷笑話", + "l_1_desc": "一起嘻嘻哈哈", + "l_2_event": "", + "l_2_desc": "" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "國際友誼日", + "triggerDate": { + "month": "7", + "date": "30" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "與朋友聯絡", + "l_1_desc": "回憶美好時光", + "l_2_event": "一起出遊", + "l_2_desc": "增進彼此的感情" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "國際左撇子日", + "triggerDate": { + "month": "8", + "date": "13" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "挑戰新事物", + "l_1_desc": "嘗試用左手完成任務", + "l_2_event": "", + "l_2_desc": "" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "世界攝影日", + "triggerDate": { + "month": "8", + "date": "19" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "拍攝照片", + "l_1_desc": "捕捉生活中的美好瞬間", + "l_2_event": "分享作品", + "l_2_desc": "展示您的攝影技巧" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "國際狗狗日", + "triggerDate": { + "month": "8", + "date": "26" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "陪伴狗狗", + "l_1_desc": "帶狗狗散步或遊玩", + "l_2_event": "分享作品", + "l_2_desc": "展示您的攝影技巧" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "國際慈善日", + "triggerDate": { + "month": "9", + "date": "5" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "捐贈物資", + "l_1_desc": "捐贈物資或金錢,幫助有需要的人", + "l_2_event": "參與志願活動", + "l_2_desc": "參加社區慈善活動,提升社會貢獻" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "國際和平日", + "triggerDate": { + "month": "9", + "date": "21" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "分享愛心", + "l_1_desc": "與他人分享關懷與愛心,促進和平", + "l_2_event": "", + "l_2_desc": "" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "教師節", + "triggerDate": { + "month": "9", + "date": "28" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "感謝老師", + "l_1_desc": "向老師表達感謝,增進師生情誼", + "l_2_event": "", + "l_2_desc": "" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "世界糧食日", + "triggerDate": { + "month": "10", + "date": "16" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "節約糧食", + "l_1_desc": "支持可持續的食物系統", + "l_2_event": "捐贈食品", + "l_2_desc": "捐贈食物給有需要的人,傳遞愛心" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "聯合國日", + "triggerDate": { + "month": "10", + "date": "24" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "支持和平", + "l_1_desc": "參與促進世界和平的活動", + "l_2_event": "了解國際事務", + "l_2_desc": "增強全球視野" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "萬聖節", + "triggerDate": { + "month": "10", + "date": "31" + }, + "status_index": "4", + "goodFortunes": { + "l_1_event": "扮演角色", + "l_1_desc": "穿上喜愛的角色服裝,享受萬聖節的氛圍", + "l_2_event": "", + "l_2_desc": "" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "忽略安全", + "r_2_desc": "活動時忽視安全措施可能帶來風險" + } + }, + { + "event": "世界善心日", + "triggerDate": { + "month": "11", + "date": "13" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "善待他人", + "l_1_desc": "在生活中多一些善意與寬容", + "l_2_event": "", + "l_2_desc": "" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "感恩節", + "triggerDate": { + "month": "11", + "week": "4", + "weekday": "4" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "家人團聚", + "l_1_desc": "分享寶貴時光", + "l_2_event": "吃火雞大餐", + "l_2_desc": "Happy Thanksgiving!" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "棉花糖日", + "triggerDate": { + "month": "12", + "date": "07" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "吃棉花糖", + "l_1_desc": "慶祝棉花糖日", + "l_2_event": "", + "l_2_desc": "" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "貓奴日", + "triggerDate": { + "month": "12", + "date": "15" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "嚕貓", + "l_1_desc": "撫平傷心的心情", + "l_2_event": "喝咖啡", + "l_2_desc": "到貓咪咖啡店去喝咖啡" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "冬至", + "triggerDate": { + "month": "12", + "date": "22" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "吃湯圓", + "l_1_desc": "團團圓圓", + "l_2_event": "保暖", + "l_2_desc": "冬至到了" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "平安夜", + "triggerDate": { + "month": "12", + "date": "24" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "除舊佈新", + "l_1_desc": "平安祥和", + "l_2_event": "交換禮物", + "l_2_desc": "獲得真心的祝福" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "聖誕節", + "triggerDate": { + "month": "12", + "date": "25" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "家庭聚會", + "l_1_desc": "一起團圓吃火雞大餐", + "l_2_event": "注意保暖", + "l_2_desc": "冬至到了" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + } + ] +} diff --git a/fortune_generator/json/default_static_special.json b/fortune_generator/json/default_static_special.json new file mode 100644 index 0000000..d079489 --- /dev/null +++ b/fortune_generator/json/default_static_special.json @@ -0,0 +1,46 @@ +{ + "special_events": [ + { + "event": "夏至", + "triggerDate": { + "year": "2025", + "month": "6", + "date": "21" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "觀賞日出和日落", + "l_1_desc": "享受一年最長的白天", + "l_2_event": "", + "l_2_desc": "" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + }, + { + "event": "中秋節", + "triggerDate": { + "year": "2025", + "month": "10", + "date": "6" + }, + "status_index": "0", + "goodFortunes": { + "l_1_event": "賞月", + "l_1_desc": "與家人一同賞月,增進感情", + "l_2_event": "吃月餅", + "l_2_desc": "與家人朋友分享月餅的美味" + }, + "badFortunes": { + "r_1_event": "", + "r_1_desc": "", + "r_2_event": "", + "r_2_desc": "" + } + } + ] +} -- 2.49.1 From b4fa64d79bbf74575d69b61a995e32705d962429 Mon Sep 17 00:00:00 2001 From: tobiichi3227 Date: Thu, 12 Dec 2024 17:59:57 +0800 Subject: [PATCH 08/11] Docs: Update CONTRIBUTING.md --- CONTRIBUTING.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 818d7e3..f06a906 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -33,7 +33,7 @@ 4. Maintain a positive and encouraging tone. -### Special Events +### Custom Special Events #### Date Structure ##### Static Date 1. With year, month and date @@ -66,6 +66,8 @@ #### Event Structure Special events require a more detailed structure. +Based on `triggerDate` type, we will place the **static date** events in the `fortune_generator/json/custom_static_special.json` and the **cyclical date** events in the `fortune_generator/json/custom_cyclical_special.json`. + 1. Structure: ```json { -- 2.49.1 From 9a5b505fb369a55e03a9ac196803fcb42516cb1a Mon Sep 17 00:00:00 2001 From: tobiichi3227 Date: Thu, 12 Dec 2024 22:00:20 +0800 Subject: [PATCH 09/11] Impr(fortune): Simplify events file categorization --- fortune_generator/js/fortune.js | 7 +++---- .../{custom_cyclical_special.json => custom_special.json} | 0 fortune_generator/json/custom_static_special.json | 3 --- ...default_cyclical_special.json => cyclical_special.json} | 0 .../{default_static_special.json => static_special.json} | 0 5 files changed, 3 insertions(+), 7 deletions(-) rename fortune_generator/json/{custom_cyclical_special.json => custom_special.json} (100%) delete mode 100644 fortune_generator/json/custom_static_special.json rename fortune_generator/json/{default_cyclical_special.json => cyclical_special.json} (100%) rename fortune_generator/json/{default_static_special.json => static_special.json} (100%) diff --git a/fortune_generator/js/fortune.js b/fortune_generator/js/fortune.js index 019cd03..788ea69 100644 --- a/fortune_generator/js/fortune.js +++ b/fortune_generator/js/fortune.js @@ -43,10 +43,9 @@ async function fetch_data() { }); } - await fetch_events("./json/custom_static_special.json"); - await fetch_events("./json/custom_cyclical_special.json"); - await fetch_events("./json/default_static_special.json"); - await fetch_events("./json/default_cyclical_special.json"); + await fetch_events("./json/custom_special.json"); + await fetch_events("./json/static_special.json"); + await fetch_events("./json/cyclical_special.json"); } const textColorClass = [ diff --git a/fortune_generator/json/custom_cyclical_special.json b/fortune_generator/json/custom_special.json similarity index 100% rename from fortune_generator/json/custom_cyclical_special.json rename to fortune_generator/json/custom_special.json diff --git a/fortune_generator/json/custom_static_special.json b/fortune_generator/json/custom_static_special.json deleted file mode 100644 index ff81a74..0000000 --- a/fortune_generator/json/custom_static_special.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "special_events": [] -} diff --git a/fortune_generator/json/default_cyclical_special.json b/fortune_generator/json/cyclical_special.json similarity index 100% rename from fortune_generator/json/default_cyclical_special.json rename to fortune_generator/json/cyclical_special.json diff --git a/fortune_generator/json/default_static_special.json b/fortune_generator/json/static_special.json similarity index 100% rename from fortune_generator/json/default_static_special.json rename to fortune_generator/json/static_special.json -- 2.49.1 From 2384081f049a66678999a32a5f49be8818935f56 Mon Sep 17 00:00:00 2001 From: tobiichi3227 Date: Thu, 12 Dec 2024 22:01:33 +0800 Subject: [PATCH 10/11] Docs: Update CONTRIBUTING.md --- CONTRIBUTING.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f06a906..7a9ddf8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -45,6 +45,8 @@ } ``` + We should place events of this type in the `fortune_generator/json/custom_special.json`. + ##### Cyclical Date 1. With only month and day ```json @@ -54,6 +56,8 @@ } ``` + We should place events of this type in the `fortune_generator/json/static_special.json`. + 2. With only month, week, weekday (like Mother's Day) ```json "triggerDate": { @@ -63,11 +67,11 @@ } ``` + We should place events of this type in the `fortune_generator/json/cyclical_special.json`. + #### Event Structure Special events require a more detailed structure. -Based on `triggerDate` type, we will place the **static date** events in the `fortune_generator/json/custom_static_special.json` and the **cyclical date** events in the `fortune_generator/json/custom_cyclical_special.json`. - 1. Structure: ```json { -- 2.49.1 From 985c6f66680265aeaf3289c0b7388f0d62c3bd40 Mon Sep 17 00:00:00 2001 From: tobiichi3227 Date: Thu, 12 Dec 2024 22:25:44 +0800 Subject: [PATCH 11/11] Docs: Update CONTRIBUTING.md --- CONTRIBUTING.md | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7a9ddf8..335db40 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -33,9 +33,8 @@ 4. Maintain a positive and encouraging tone. -### Custom Special Events +### Special Events #### Date Structure -##### Static Date 1. With year, month and date ```json "triggerDate": { @@ -47,8 +46,13 @@ We should place events of this type in the `fortune_generator/json/custom_special.json`. -##### Cyclical Date -1. With only month and day + For one-time or irregular events, or events with complex date calculations (like the Moon Festival in the lunar calendar). + + **NOTE: Any special event that does not fit into either** + - Static events (fixed date every year) + - Cyclical events (recurring on a pattern like "fourth Thursday") + +2. With only month and day ```json "triggerDate": { "month": "Month", @@ -58,7 +62,9 @@ We should place events of this type in the `fortune_generator/json/static_special.json`. -2. With only month, week, weekday (like Mother's Day) + For events with fixed dates. + +3. With only month, week, weekday (like Mother's Day) ```json "triggerDate": { "month": "Month", @@ -69,6 +75,8 @@ We should place events of this type in the `fortune_generator/json/cyclical_special.json`. + For recurring events (e.g., holidays like Thanksgiving and Mother's Day). + #### Event Structure Special events require a more detailed structure. -- 2.49.1