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:
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user