Valentyne Stigloher 10180aa6a3 (refactor) use #shared alias instead of ~~/shared
the #shared alias used by Nuxt cannot be easily disabled and to prevent breackage with jiti, we make use of it
2025-08-17 18:56:02 +02:00

412 lines
18 KiB
TypeScript

import { Event, Day, day, week, month, EventLevel, weekStarting, dayYear } from '#shared/calendar/helpers.ts';
export default [
// --- months ---
new Event('pride_month', 'Progress Pride', 6, month, EventLevel.Month, ['lgbtq', 'pride parade', 'gay', 'homosexual']),
new Event('trans_month', 'Transgender', 11, month, EventLevel.Month, ['transgender']),
new Event('bi_health_month', 'Bisexual', 3, month, EventLevel.Month, ['bisexual']),
new Event('aro_month', 'Aromantic', 2, month, EventLevel.Month, ['aromantic', 'aromantic spectrum']),
new Event('suicide_prevention_month', '_yellow-ribbon', 9, month, EventLevel.Month),
new Event('aids_awareness_month', '_red-ribbon', 12, month, EventLevel.Month, ['aids']),
new Event('trans_history_month', 'Transgender', 8, month, EventLevel.Month, ['transgender']),
new Event('wrath_month', 'LGBTQ', 7, month, EventLevel.Month),
// --- project celebrations ---
new Event('zaimki_birthday', { type: 'flag', name: '_zaimki', class: 'invertible' }, 7, day(23), EventLevel.Day),
// --- static date ---
new Event('agender_day', 'Agender', 5, day(19), EventLevel.Day, ['agender']),
new Event('asexuality_day', 'Asexual', 4, day(6), EventLevel.Day, ['asexual', 'asexual spectrum']),
new Event('bisexuality_day', 'Bisexual', 9, day(23), EventLevel.Day, ['bisexual']),
new Event('drag_day', '-Drag', 7, day(16), EventLevel.Day, ['drag']),
new Event('idahobit', null, 5, day(17), EventLevel.Day, ['homophobia', 'transphobia', 'biphobia']),
new Event('intersex_day', 'Intersex', 10, day(26), EventLevel.Day, ['intersex']),
new Event('intersex_remembrance_day', 'Intersex', 11, day(8), EventLevel.Day, ['intersex']),
new Event('lesbian_day', 'Lesbian', 10, day(8), EventLevel.Day, ['lesbian', 'homosexual']),
new Event('lesbian_visibility_day', 'Lesbian', 4, day(26), EventLevel.Day, ['lesbian', 'homosexual']),
new Event('coming_out_day', null, 10, day(11), EventLevel.Day, ['coming out']),
// halfway between women's day and men's day
new Event('nonbinary_day', 'Nonbinary', 7, day(14), EventLevel.Day, ['nonbinary']),
new Event('pan_day', 'Pansexual', 5, day(24), EventLevel.Day, ['pansexual', 'panromantic']),
new Event('trans_remembrance_day', 'Transgender', 11, day(20), EventLevel.Day, ['transgender']),
new Event('trans_visibility_day', 'Transgender', 3, day(31), EventLevel.Day, ['transgender']),
new Event('zero_discrimination_day', null, 3, day(1), EventLevel.Day, ['homophobia', 'transphobia', 'biphobia']),
new Event('polyamory_day', 'Polyamorous____', 11, day(23), EventLevel.Day, ['polyamory', 'polyamorous']),
new Event('homophobia_sport', null, 2, day(19), EventLevel.Day, ['homophobia']),
new Event('lgbtq_stem', null, 11, day(18), EventLevel.Day, ['lgbtq']),
new Event('trans_depathologization', 'Transgender', 10, day(22), EventLevel.Day, ['transgender']),
new Event('lgbti_book_day', 'LGBTQ', 4, day(1), EventLevel.Day, ['lgbtq']),
new Event('human_rights_day', null, 12, day(10), EventLevel.Day),
new Event('trans_prisoner', 'Transgender', 1, day(22), EventLevel.Day, ['transgender']),
new Event('xenogender_day', 'Xenogender', 5, day(15), EventLevel.Day, ['xenogender']),
new Event('genderqueer_day', 'Genderqueer', 4, day(25), EventLevel.Day, ['genderqueer']),
new Event('genderfluid_day', 'Genderfluid', 6, day(16), EventLevel.Day, ['genderfluid', 'demifluid']),
new Event('aids_day', '_red-ribbon', 12, day(1), EventLevel.Day, ['aids']),
new Event('tolerance_day', null, 11, day(16), EventLevel.Day),
new Event('social_justice_day', null, 2, day(20), EventLevel.Day, ['progress pride']),
new Event('stonewall_day', 'Progress Pride', 6, day(28), EventLevel.Day, ['pride parade']),
new Event('domestic_violence', null, 5, day(28), EventLevel.Day, ['lgbtq']),
new Event('polysexual_day', 'Polysexual', 7, day(26), EventLevel.Day, ['polysexual', 'polyromantic']),
new Event('orlando_day', '_black-ribbon', 6, day(12), EventLevel.Day, ['homophobia']),
new Event('demigender_day', 'Demigender', 12, day(15), EventLevel.Day, ['demigender', 'demiboy', 'demigirl', 'deminonbinary', 'demineutrois', 'demifluid']),
new Event('pan_pride_day', 'Pansexual', 12, day(8), EventLevel.Day, ['pansexual', 'panromantic']),
new Event('transmasculine_day', 'Transmasculine', 2, day(20), EventLevel.Day, ['trans man', 'transmasculine']),
new Event('asexual_visibility_day', 'Asexual', 5, day(8), EventLevel.Day, ['asexual', 'asexual spectrum']),
new Event('holocaust_remembrance_day', '_black-ribbon', 1, day(27), EventLevel.Day, ['pink triangle']),
new Event('black_ribbon_day', '_black-ribbon', 8, day(23), EventLevel.Day, ['pink triangle']),
new Event('mena_lesbian_day', 'Lesbian', 6, day(13), EventLevel.Day, ['lesbian', 'progress pride', 'homosexual']),
new Event('suicide_prevention_day', '_yellow-ribbon', 9, day(10), EventLevel.Day),
new Event('hiv_testing_day', '_red-ribbon', 6, day(27), EventLevel.Day, ['aids']),
new Event('freedressing_day', 'Genderqueer', 12, day(3), EventLevel.Day, ['genderqueer', 'gender non-conforming']),
new Event('sexual_health_day', null, 2, day(12), EventLevel.Day),
new Event('world_sexual_health_day', null, 9, day(4), EventLevel.Day),
new Event('aids_vaccine_day', '_red-ribbon', 5, day(18), EventLevel.Day, ['aids']),
new Event('omnisexual_day', 'Omnisexual', 7, day(6), EventLevel.Day, ['omnisexual']),
new Event('queer_youth_day', 'LGBTQ', 6, day(30), EventLevel.Day),
new Event('unlabeled_day', 'Unlabeled', 1, day(19), EventLevel.Day, ['unlabeled', 'unlabeled gender']),
new Event('hiv_long_term_survivors_day', '_red-ribbon', 6, day(5), EventLevel.Day, ['aids']),
new Event('women_hiv_awareness_day', '_red-ribbon', 3, day(10), EventLevel.Day, ['aids']),
new Event('youth_hiv_awareness_day', '_red-ribbon', 4, day(10), EventLevel.Day, ['aids']),
new Event('gay_hiv_awareness_day', '_red-ribbon', 9, day(27), EventLevel.Day, ['aids']),
new Event('black_hiv_awareness_day', '_red-ribbon', 2, day(7), EventLevel.Day, ['aids']),
new Event('hiv_aging_awareness_day', '_red-ribbon', 9, day(18), EventLevel.Day, ['aids']),
new Event('trans_hiv_testing_day', '_red-ribbon', 4, day(18), EventLevel.Day, ['aids']),
new Event('trans_youth_day', 'Transgender', 5, day(14), EventLevel.Day, ['transgender']),
new Event('mspec_lesbian_day', '_mspec_lesbians', 5, day(26), EventLevel.Day, ['mspec lesbian', 'bi lesbian', 'bi gay']),
new Event('mspec_lesbian_week', '_mspec_lesbians', 5, weekStarting(22), EventLevel.Week, ['mspec lesbian', 'bi lesbian', 'bi gay']),
new Event('sex_worker_day', '_sex-work', 6, day(2), EventLevel.Day),
new Event('sex_worker_pride', '_sex-work', 9, day(14), EventLevel.Day),
new Event('sex_worker_rights_day', '_sex-work', 3, day(3), EventLevel.Day),
new Event('sex_worker_violence_day', '_sex-work', 12, day(17), EventLevel.Day),
new Event('omnisexual_omniromantic_day', 'Omnisexual', 6, day(6), EventLevel.Day, ['omnisexual', 'omniromantic']),
new Event('mspec_gay_day', '_mspec_lesbians', 7, day(7), EventLevel.Day, ['mspec gay', 'bi gay']),
new Event('mspec_gay_week', '_mspec_lesbians', 7, weekStarting(4), EventLevel.Week, ['mspec gay', 'bi gay']),
new Event('hiv_is_not_a_crime', '_red-ribbon', 2, day(28), EventLevel.Day, ['aids']),
new Event('trans_flag_day', 'Transgender', 8, day(19), EventLevel.Day, ['transgender']),
new Event('alan_turing_day', '_black-ribbon', 6, day(23), EventLevel.Day),
new Event('nonbinary_kids_day', 'Nonbinary', 10, day(1), EventLevel.Day, ['nonbinary']),
new Event('masc_lesbian_day', 'Lesbian', 8, day(4), EventLevel.Day, ['lesbian']),
new Event('masc_lesbian_week', 'Lesbian', 8, weekStarting(1), EventLevel.Week, ['lesbian']),
new Event('bi_creators_day', 'Bisexual', 4, day(15), EventLevel.Day, ['bisexual']),
new Event('aplatonic_visibility_day', '_Aplatonic', 5, day(4), EventLevel.Day, ['aplatonic', 'aplatonic spectrum']),
new Event('aromantic_visibility_day', 'Aromantic', 6, day(5), EventLevel.Day, ['aromantic', 'aromantic spectrum']),
new Event('aromantic_spectrum_visibility_day', 'Aromantic', 8, day(25), EventLevel.Day, ['aromantic', 'aromantic spectrum']),
new Event('nonmonogamy_visibility_day', '_non-monogamy', 7, day(15), EventLevel.Day, ['non-monogamy']),
// --- dynamic date ---
// full week starting on a Sunday following Valentine's Day
// http://www.arospecweek.org/about-asaw/
new Event('arospec_week', 'Aromantic', 2, week(function* (monthDays) {
let started = false;
for (const d of monthDays) {
if (!started && d.day > 14 && d.dayOfWeek === 7) {
started = true;
}
if (started) {
yield d;
}
}
}), EventLevel.Week, ['aromantic', 'aromantic spectrum']),
// last full week of October (starting on Sunday)
// https://aceweek.org/stories/ace-week-dates
new Event('asexual_week', 'Asexual', 10, week(function* (monthDays) {
let started = false;
for (const d of monthDays) {
if (!started && d.day >= 19 && d.dayOfWeek === 7) {
started = true;
}
if (started) {
yield d;
}
}
}), EventLevel.Week, ['asexual', 'asexual spectrum']),
// https://www.glaad.org/biweek2021
new Event('bisexual_week', 'Bisexual', 9, week(function* (monthDays) {
for (const d of monthDays) {
if (d.day >= 16 && d.day <= 22) {
yield d;
}
}
}), EventLevel.Week, ['bisexual']),
// 3rd Wednesday of October
// https://pronounsday.org/
new Event('pronouns_day', null, 10, function* (monthDays) {
let wednesdays = 0;
for (const d of monthDays) {
if (d.dayOfWeek === 3) {
wednesdays++;
if (wednesdays === 3) {
yield d;
return;
}
}
}
}, EventLevel.Day, ['neopronouns']),
// https://www.glaad.org/transweek
new Event('trans_week', 'Transgender', 11, week(function* (monthDays) {
for (const d of monthDays) {
if (d.day >= 13 && d.day <= 19) {
yield d;
}
}
}), EventLevel.Week, ['transgender']),
// first Sunday of November
new Event('trans_parent_day', 'Transgender', 11, week(function* (monthDays) {
for (const d of monthDays) {
if (d.dayOfWeek === 7) {
yield d;
return;
}
}
}), EventLevel.Day, ['transgender']),
// full week (Mon-Sun) containing Nonbinary Day
new Event('nonbinary_week', 'Nonbinary', 7, week(function* (monthDays) {
let buffer = [];
for (const d of monthDays) {
if (d.day >= 14) {
for (const dd of buffer) {
yield dd;
}
buffer = [];
yield d;
continue;
}
if (d.dayOfWeek === 1) {
buffer = [];
}
buffer.push(d);
}
}), EventLevel.Week, ['nonbinary']),
// on the second Sunday in July
new Event('lesbian_aunts_day', 'Lesbian', 7, function* (monthDays) {
let sundays = 0;
for (const d of monthDays) {
if (d.dayOfWeek === 7) {
sundays++;
if (sundays === 2) {
yield d;
return;
}
}
}
}, EventLevel.Day, ['lesbian']),
// on the second Sunday in August
new Event('gay_uncles_day', 'Gay_', 8, function* (monthDays) {
let sundays = 0;
for (const d of monthDays) {
if (d.dayOfWeek === 7) {
sundays++;
if (sundays === 2) {
yield d;
return;
}
}
}
}, EventLevel.Day, ['gay', 'homosexual']),
// third Sunday of May
// https://www.candlelightmemorial.org/
new Event('aids_memorial', '_red-ribbon', 5, function* (monthDays) {
let sundays = 0;
for (const d of monthDays) {
if (d.dayOfWeek === 7) {
sundays++;
if (sundays === 3) {
yield d;
return;
}
}
}
}, EventLevel.Day, ['aids']),
// Mon-Fri in the last week of March
new Event('health_week', 'LGBTQ', 3, week(function* (monthDays) {
let prevBuffer: Day[] = [];
let buffer: Day[] = [];
for (const d of monthDays) {
if (d.dayOfWeek <= 5) {
buffer.push(d);
}
if (d.dayOfWeek === 5) {
prevBuffer = buffer;
buffer = [];
}
}
yield* prevBuffer;
}), EventLevel.Week),
new Event('lesbian_visibility_week', 'Lesbian', 4, week(function* (monthDays) {
let buffer = [];
const ret = [];
for (const d of monthDays) {
if (d.day >= 26) {
for (const dd of buffer) {
ret.push(dd);
}
buffer = [];
ret.push(d);
continue;
}
if (d.dayOfWeek === 1) {
buffer = [];
}
buffer.push(d);
}
let i = 1;
while (ret.length < 7) {
ret.push(new Day(ret[0].year, 5, i++));
}
yield* ret;
}), EventLevel.Week, ['lesbian']),
// first Sunday of May
new Event('family_equality_day', '_hrc', 5, function* (monthDays) {
for (const d of monthDays) {
if (d.dayOfWeek === 7) {
yield d;
return;
}
}
}, EventLevel.Day),
// third week of February
new Event('black_queer_week', 'Progress Pride', 2, week(function* (monthDays) {
const weeks: Day[][] = [];
for (const d of monthDays) {
if (d.dayOfWeek === 1) {
weeks.push([]);
}
if (weeks.length === 0) {
continue;
}
weeks[weeks.length - 1].push(d);
}
yield* weeks[2];
}), EventLevel.Week, ['progress pride']),
// from the second to the third Saturday of October (inclusive)
new Event('hate_crime_awareness_week', null, 10, function* (monthDays) {
let saturdays = 0;
for (const d of monthDays) {
if (d.dayOfWeek === 6) {
saturdays++;
}
if (saturdays === 2 || saturdays === 3 && d.dayOfWeek === 6) {
yield d;
}
}
}, EventLevel.Week, ['homophobia', 'transphobia', 'biphobia']),
new Event('genderfluid_week', 'Genderfluid', 10, week(function* (monthDays) {
for (const d of monthDays) {
if (d.day >= 17 && d.day <= 24) {
yield d;
}
}
}), EventLevel.Week, ['genderfluid']),
new Event('pan_week', 'Pansexual', 12, week(function* (monthDays) {
for (const d of monthDays) {
if (d.day >= 6) {
yield d;
}
}
}), EventLevel.Week, ['pansexual', 'panromantic']),
// first Sunday of December
new Event('parents_day', '_hrc', 12, function* (monthDays) {
for (const d of monthDays) {
if (d.dayOfWeek === 7) {
yield d;
return;
}
}
}, EventLevel.Day),
// last full week (Monday - Friday) in January
new Event('transition_week', 'Transgender', 1, function* (monthDays) {
let lastFullWeek: Day[] = [];
let currentWeek: Day[] = [];
for (const d of monthDays) {
if (d.dayOfWeek === 1) {
lastFullWeek = currentWeek;
currentWeek = [];
}
if (d.dayOfWeek >= 1 && d.dayOfWeek <= 5) {
currentWeek.push(d);
}
}
yield* currentWeek.length === 5
? currentWeek
: lastFullWeek;
}, EventLevel.Week),
// third Sunday of April
new Event('nonbinary_parents_day', 'Nonbinary', 4, function* (monthDays) {
let sundays = 0;
for (const d of monthDays) {
if (d.dayOfWeek === 7) {
sundays++;
if (sundays === 3) {
yield d;
return;
}
}
}
}, EventLevel.Day, ['nonbinary']),
// --- one-off events ---
new Event('deaf_awareness_week', 'Progress Pride', 4, function* (monthDays) {
for (const d of monthDays) {
if (d.day >= 11 && d.day <= 17 && d.year === 2021) {
yield d;
}
}
}, EventLevel.Week, ['progress pride']),
new Event('deaf_awareness_week', 'Progress Pride', 4, function* (monthDays) {
for (const d of monthDays) {
if (d.day >= 4 && d.day <= 10 && d.year === 2022) {
yield d;
}
}
}, EventLevel.Week, ['progress pride']),
new Event('equal_pay_day', '_hrc', 6, dayYear(16, 2021), EventLevel.Day),
new Event('equal_pay_day', '_hrc', 6, dayYear(15, 2022), EventLevel.Day),
new Event(
'spring_testing_week',
'_red-ribbon',
5,
weekStarting(16),
EventLevel.Week,
['aids'],
null,
null,
(year) => year >= 2022,
),
new Event(
'autumn_testing_week',
'_red-ribbon',
11,
weekStarting(21),
EventLevel.Week,
['aids'],
null,
null,
(year) => year >= 2022,
),
];