diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 335db40..775cae2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -104,6 +104,9 @@ Special events require a more detailed structure. 2. Empty Fields: If there are no fortunes to add, leave the corresponding fields as empty strings (`""`). +3. We support adding multiple special events on the same day, + and the hash function will determine which event will be shown for that day. + ### Adding New Themes #### JSON Theme Structure diff --git a/fortune_generator/js/fortune.js b/fortune_generator/js/fortune.js index 4b1249a..8a2601a 100644 --- a/fortune_generator/js/fortune.js +++ b/fortune_generator/js/fortune.js @@ -268,6 +268,7 @@ const J_ip_to_fortune = $("#ip-to-fortune"); let special = false; let special_events_index = 0; +let current_day_special_events = []; // init page async function init_page() { @@ -315,9 +316,14 @@ async function init_page() { eventIndexList[j] = i; } else if (diffCount === 0) { special = true; - special_events_index = i; + current_day_special_events.push(i); } } + + special_events_index = ip.split(".").map(num => parseInt(num)).reduce((acc, cur) => acc + cur); + special_events_index %= current_day_special_events.length; + special_events_index = current_day_special_events[special_events_index]; + // if there is upcoming event then show for (let eventIndex = 0; eventIndex < showSpecialEventCount; eventIndex++) { if (eventIndexList[eventIndex] != -1) { diff --git a/scripts/check-events.py b/scripts/check-events.py index 707712e..9ea20d2 100644 --- a/scripts/check-events.py +++ b/scripts/check-events.py @@ -277,6 +277,12 @@ def check_static_date(event: dict, idx: int): idx, trigger_date["date"], 1, DAYSPERMONTH[month], "triggerDate.date" ) + key = f'{event_name}:{trigger_date["month"]}/{trigger_date["date"]}' + if key in event_dates: + errors[idx].append(f"The `{key}` is repeated.") + + event_dates.add(key) + def check_cyclical_date(event: dict, idx: int): trigger_date: dict = event["triggerDate"] @@ -309,6 +315,12 @@ def check_cyclical_date(event: dict, idx: int): validate_number(idx, trigger_date["week"], 1, 5, "triggerDate.week") validate_number(idx, trigger_date["weekday"], 1, 7, "triggerDate.weekday") + key = f'{event_name}:{trigger_date["month"]}/{trigger_date["week"]}/{trigger_date["weekday"]}' + if key in event_dates: + errors[idx].append(f"The `{key}` is repeated.") + + event_dates.add(key) + def check_custom_date(event: dict, idx: int): trigger_date: dict = event["triggerDate"] @@ -357,11 +369,11 @@ def check_custom_date(event: dict, idx: int): if date is None: return - date_str = f"{year}/{month}/{date}" - if date_str in event_dates: - errors[idx].append(f"The date `{date_str}` of `{event_name}` is repeated.") + key = f'{event_name}:{year}/{month}/{date}' + if key in event_dates: + errors[idx].append(f"The `{key}` is repeated.") - event_dates.add(date_str) + event_dates.add(key) date_checker = {