chore(users): grfn -> aspen

Change-Id: I6c6847fac56f0a9a1a2209792e00a3aec5e672b9
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10809
Autosubmit: aspen <root@gws.fyi>
Reviewed-by: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
Reviewed-by: lukegb <lukegb@tvl.fyi>
This commit is contained in:
Aspen Smith 2024-02-11 22:00:40 -05:00 committed by clbot
parent 0ba476a426
commit 82ecd61f5c
478 changed files with 75 additions and 77 deletions

View file

@ -0,0 +1,152 @@
/* montserrat-italic - latin */
@font-face {
font-family: "Montserrat";
font-style: italic;
font-weight: 400;
src: local("Montserrat Italic"), local("Montserrat-Italic"),
url("/fonts/montserrat-v15-latin-italic.woff2") format("woff2"),
/* Chrome 26+, Opera 23+, Firefox 39+ */
url("/fonts/montserrat-v15-latin-italic.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* montserrat-regular - latin */
@font-face {
font-family: "Montserrat";
font-style: normal;
font-weight: 400;
src: local("Montserrat Regular"), local("Montserrat-Regular"),
url("/fonts/montserrat-v15-latin-regular.woff2") format("woff2"),
/* Chrome 26+, Opera 23+, Firefox 39+ */
url("/fonts/montserrat-v15-latin-regular.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* montserrat-500 - latin */
@font-face {
font-family: "Montserrat";
font-style: normal;
font-weight: 500;
src: local("Montserrat Medium"), local("Montserrat-Medium"),
url("/fonts/montserrat-v15-latin-500.woff2") format("woff2"),
/* Chrome 26+, Opera 23+, Firefox 39+ */
url("/fonts/montserrat-v15-latin-500.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* montserrat-500italic - latin */
@font-face {
font-family: "Montserrat";
font-style: italic;
font-weight: 500;
src: local("Montserrat Medium Italic"), local("Montserrat-MediumItalic"),
url("/fonts/montserrat-v15-latin-500italic.woff2") format("woff2"),
/* Chrome 26+, Opera 23+, Firefox 39+ */
url("/fonts/montserrat-v15-latin-500italic.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* montserrat-600 - latin */
@font-face {
font-family: "Montserrat";
font-style: normal;
font-weight: 600;
src: local("Montserrat SemiBold"), local("Montserrat-SemiBold"),
url("/fonts/montserrat-v15-latin-600.woff2") format("woff2"),
/* Chrome 26+, Opera 23+, Firefox 39+ */
url("/fonts/montserrat-v15-latin-600.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* montserrat-800 - latin */
@font-face {
font-family: "Montserrat";
font-style: normal;
font-weight: 800;
src: local("Montserrat ExtraBold"), local("Montserrat-ExtraBold"),
url("/fonts/montserrat-v15-latin-800.woff2") format("woff2"),
/* Chrome 26+, Opera 23+, Firefox 39+ */
url("/fonts/montserrat-v15-latin-800.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* montserrat-800italic - latin */
@font-face {
font-family: "Montserrat";
font-style: italic;
font-weight: 800;
src: local("Montserrat ExtraBold Italic"), local("Montserrat-ExtraBoldItalic"),
url("/fonts/montserrat-v15-latin-800italic.woff2") format("woff2"),
/* Chrome 26+, Opera 23+, Firefox 39+ */
url("/fonts/montserrat-v15-latin-800italic.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
body {
width: 100%;
font-family: "Montserrat", Helvetica, sans-serif;
margin: 0;
box-sizing: border-box;
}
*,
::before,
::after {
box-sizing: border-box;
}
ul,
ol {
padding: 0;
}
body,
h1,
h2,
h3,
h4,
p,
ul,
ol,
li,
figure,
figcaption,
blockquote,
dl,
dd {
margin: 0;
}
body {
min-height: 100vh;
scroll-behavior: smooth;
text-rendering: optimizeSpeed;
line-height: 1.5;
}
ul[class],
ol[class] {
list-style: none;
}
a:not([class]) {
text-decoration-skip-ink: auto;
}
img {
max-width: 100%;
display: block;
}
article > * + * {
margin-top: 1em;
}
input,
button,
textarea,
select {
font: inherit;
}
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}

View file

@ -0,0 +1,14 @@
drop table "public"."user";
-- ;;
drop table "public"."event_attendee";
-- ;;
drop table "public"."event";
-- ;;
drop table "public"."attendee";

View file

@ -0,0 +1,32 @@
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- ;;
CREATE TABLE "attendee" (
"id" UUID PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
"meetup_name" TEXT NOT NULL,
"discord_name" TEXT,
"meetup_user_id" TEXT,
"organizer_notes" TEXT NOT NULL DEFAULT '',
"created_at" TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now()
);
-- ;;
CREATE TABLE "event" (
"id" UUID PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
"date" DATE NOT NULL,
"created_at" TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now()
);
-- ;;
CREATE TABLE "event_attendee" (
"event_id" UUID NOT NULL REFERENCES "event" ("id"),
"attendee_id" UUID NOT NULL REFERENCES "attendee" ("id"),
"rsvpd_attending" BOOL,
"attended" BOOL,
"created_at" TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now(),
PRIMARY KEY ("event_id", "attendee_id")
);
-- ;;
CREATE TABLE "user" (
"id" UUID PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
"username" TEXT NOT NULL,
"discord_user_id" TEXT NOT NULL,
"created_at" TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now()
);

View file

@ -0,0 +1 @@
DROP TABLE "attendee_check";

View file

@ -0,0 +1,7 @@
CREATE TABLE attendee_check (
"id" UUID PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
"attendee_id" UUID NOT NULL REFERENCES attendee ("id"),
"user_id" UUID NOT NULL REFERENCES "public"."user" ("id"),
"last_dose_at" DATE,
"checked_at" TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now()
);

View file

@ -0,0 +1 @@
drop index attendee_uniq_meetup_user_id;

View file

@ -0,0 +1,2 @@
create unique index "attendee_uniq_meetup_user_id" on attendee (meetup_user_id);
-- ;;

View file

@ -0,0 +1,73 @@
window.onload = () => {
const input = document.getElementById("name-autocomplete");
if (input != null) {
const attendeeList = document.getElementById("attendees-list");
const filterAttendees = (filter) => {
if (filter == "") {
for (let elt of attendeeList.querySelectorAll("li")) {
elt.classList.remove("hidden");
}
return;
}
let re = "";
for (let c of filter) {
re += `${c}.*`;
}
let filterRe = new RegExp(re, "i");
for (let elt of attendeeList.querySelectorAll("li")) {
const attendee = JSON.parse(elt.dataset.attendee);
if (attendee["bbbg.attendee/meetup-name"].match(filterRe) == null) {
elt.classList.add("hidden");
} else {
elt.classList.remove("hidden");
}
}
};
const attendeeIDInput = document.getElementById("attendee-id");
const submit = document.querySelector("#submit-button");
const signupForm = document.getElementById("signup-form");
input.oninput = (e) => {
filterAttendees(e.target.value);
attendeeIDInput.value = null;
submit.classList.add("hidden");
submit.setAttribute("disabled", "disabled");
signupForm.setAttribute("disabled", "disabled");
};
attendeeList.addEventListener("click", (e) => {
if (!(e.target instanceof HTMLLIElement)) {
return;
}
if (e.target.dataset.attendee == null) {
return;
}
const attendee = JSON.parse(e.target.dataset.attendee);
input.value = attendee["bbbg.attendee/meetup-name"];
attendeeIDInput.value = attendee["bbbg.attendee/id"];
submit.classList.remove("hidden");
submit.removeAttribute("disabled");
signupForm.removeAttribute("disabled");
});
}
document.querySelectorAll("form").forEach((form) => {
form.addEventListener("submit", (e) => {
if (e.target.attributes.disabled) {
e.preventDefault();
}
const confirmMessage = e.target.dataset.confirm;
if (confirmMessage != null && !confirm(confirmMessage)) {
e.stopImmediatePropagation();
e.preventDefault();
}
});
});
};

View file

@ -0,0 +1,2 @@
User-agent: *
Disallow: /