Feat(Fortune): Support multiple event in same day (#61)

* Feat(Fortune): Support multiple event in same day

* Fix(Fortune): f-string typo

* Docs(Fortune): Multiple events supporting
This commit was merged in pull request #61.
This commit is contained in:
tobiichi3227
2025-03-06 14:23:02 +08:00
committed by GitHub
parent 237f0e1551
commit 1d969400e5
3 changed files with 26 additions and 5 deletions

View File

@@ -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

View File

@@ -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) {

View File

@@ -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 = {