Improvements to types and age verification screen
This commit is contained in:
parent
18e98cdb3b
commit
7f7a62a391
78 changed files with 1132 additions and 1102 deletions
|
|
@ -108,70 +108,67 @@ function getUsernameForWebsite(user: CollectionEntry<"users">, website: Website)
|
|||
throw new Error(`Cannot get "${website}" username for user "${user.id}"`);
|
||||
}
|
||||
|
||||
function isPreferredWebsite(
|
||||
user: CollectionEntry<"users">,
|
||||
website: Website,
|
||||
preferredChoices: readonly Website[],
|
||||
): boolean {
|
||||
const { preferredLink, links } = user.data;
|
||||
if (!(website in links)) {
|
||||
return false;
|
||||
}
|
||||
if (!preferredLink || preferredLink == website) {
|
||||
return true;
|
||||
}
|
||||
return !preferredChoices.includes(preferredLink);
|
||||
}
|
||||
|
||||
function getLinkForUser(user: CollectionEntry<"users">, website: ExportWebsite): string {
|
||||
if (user.data.isAnonymous) {
|
||||
return "anonymous";
|
||||
}
|
||||
switch (website) {
|
||||
case "eka":
|
||||
if (user.data.links.eka) {
|
||||
if ("eka" in user.data.links) {
|
||||
return `:icon${getUsernameForWebsite(user, "eka")}:`;
|
||||
}
|
||||
break;
|
||||
case "furaffinity":
|
||||
if (user.data.links.furaffinity) {
|
||||
if ("furaffinity" in user.data.links) {
|
||||
return `:icon${getUsernameForWebsite(user, "furaffinity")}:`;
|
||||
}
|
||||
break;
|
||||
case "weasyl":
|
||||
if (user.data.links.weasyl) {
|
||||
const weasylPreferredWebsites = ["furaffinity", "inkbunny", "sofurry"] as const;
|
||||
if ("weasyl" in user.data.links) {
|
||||
return `<!~${getUsernameForWebsite(user, "weasyl").replaceAll(" ", "")}>`;
|
||||
} else if (
|
||||
user.data.links.furaffinity &&
|
||||
!(["inkbunny", "sofurry"] satisfies Website[] as (Website | null)[]).includes(user.data.preferredLink)
|
||||
) {
|
||||
} else if (isPreferredWebsite(user, "furaffinity", weasylPreferredWebsites)) {
|
||||
return `<fa:${getUsernameForWebsite(user, "furaffinity")}>`;
|
||||
} else if (
|
||||
user.data.links.inkbunny &&
|
||||
!(["furaffinity", "sofurry"] satisfies Website[] as (Website | null)[]).includes(user.data.preferredLink)
|
||||
) {
|
||||
} else if (isPreferredWebsite(user, "inkbunny", weasylPreferredWebsites)) {
|
||||
return `<ib:${getUsernameForWebsite(user, "inkbunny")}>`;
|
||||
} else if (
|
||||
user.data.links.sofurry &&
|
||||
!(["furaffinity", "inkbunny"] satisfies Website[] as (Website | null)[]).includes(user.data.preferredLink)
|
||||
) {
|
||||
} else if (isPreferredWebsite(user, "sofurry", weasylPreferredWebsites)) {
|
||||
return `<sf:${getUsernameForWebsite(user, "sofurry")}>`;
|
||||
}
|
||||
break;
|
||||
case "inkbunny":
|
||||
if (user.data.links.inkbunny) {
|
||||
const inkbunnyPreferredWebsites = ["furaffinity", "sofurry", "weasyl"] as const;
|
||||
if ("inkbunny" in user.data.links) {
|
||||
return `[iconname]${getUsernameForWebsite(user, "inkbunny")}[/iconname]`;
|
||||
} else if (
|
||||
user.data.links.furaffinity &&
|
||||
!(["sofurry", "weasyl"] satisfies Website[] as (Website | null)[]).includes(user.data.preferredLink)
|
||||
) {
|
||||
} else if (isPreferredWebsite(user, "furaffinity", inkbunnyPreferredWebsites)) {
|
||||
return `[fa]${getUsernameForWebsite(user, "furaffinity")}[/fa]`;
|
||||
} else if (
|
||||
user.data.links.sofurry &&
|
||||
!(["furaffinity", "weasyl"] satisfies Website[] as (Website | null)[]).includes(user.data.preferredLink)
|
||||
) {
|
||||
} else if (isPreferredWebsite(user, "sofurry", inkbunnyPreferredWebsites)) {
|
||||
return `[sf]${getUsernameForWebsite(user, "sofurry")}[/sf]`;
|
||||
} else if (
|
||||
user.data.links.weasyl &&
|
||||
!(["furaffinity", "sofurry"] satisfies Website[] as (Website | null)[]).includes(user.data.preferredLink)
|
||||
) {
|
||||
} else if (isPreferredWebsite(user, "weasyl", inkbunnyPreferredWebsites)) {
|
||||
return `[weasyl]${getUsernameForWebsite(user, "weasyl")}[/weasyl]`;
|
||||
}
|
||||
break;
|
||||
case "sofurry":
|
||||
if (user.data.links.sofurry) {
|
||||
const sofurryPreferredWebsites = ["furaffinity", "inkbunny"] as const;
|
||||
if ("sofurry" in user.data.links) {
|
||||
return `:icon${getUsernameForWebsite(user, "sofurry")}:`;
|
||||
} else if (
|
||||
user.data.links.furaffinity &&
|
||||
!(["inkbunny"] satisfies Website[] as (Website | null)[]).includes(user.data.preferredLink)
|
||||
) {
|
||||
} else if (isPreferredWebsite(user, "furaffinity", sofurryPreferredWebsites)) {
|
||||
return `fa!${getUsernameForWebsite(user, "furaffinity")}`;
|
||||
} else if (
|
||||
user.data.links.inkbunny &&
|
||||
!(["furaffinity"] satisfies Website[] as (Website | null)[]).includes(user.data.preferredLink)
|
||||
) {
|
||||
} else if (isPreferredWebsite(user, "inkbunny", sofurryPreferredWebsites)) {
|
||||
return `ib!${getUsernameForWebsite(user, "inkbunny")}`;
|
||||
}
|
||||
break;
|
||||
|
|
@ -186,7 +183,7 @@ function getLinkForUser(user: CollectionEntry<"users">, website: ExportWebsite):
|
|||
throw new Error(`No preferredLink "${user.data.preferredLink}" for user ${user.id}`);
|
||||
}
|
||||
}
|
||||
throw new Error(`No "${website}"-supported link for user "${user.id}" without preferredLink`);
|
||||
throw new Error(`No "${website}" link for user "${user.id}" (consider setting preferredLink)`);
|
||||
}
|
||||
|
||||
type Props = {
|
||||
|
|
@ -268,12 +265,15 @@ export const GET: APIRoute<Props, Params> = async ({ props: { story }, params: {
|
|||
(_, group1, group2) => `[${group1}](${new URL(group2, new URL(`/stories/${story.slug}`, site)).toString()})`,
|
||||
);
|
||||
const headers = { "Content-Type": "text/markdown; charset=utf-8" };
|
||||
const bbcodeExports: ReadonlyArray<ExportWebsite> = ["eka", "furaffinity", "inkbunny", "sofurry"] as const;
|
||||
const markdownExport: ReadonlyArray<ExportWebsite> = ["weasyl"] as const;
|
||||
// BBCode exports
|
||||
if ((["eka", "furaffinity", "inkbunny", "sofurry"] satisfies ExportWebsite[] as ExportWebsite[]).includes(website)) {
|
||||
if (bbcodeExports.includes(website)) {
|
||||
storyDescription = he.decode(await marked.use({ renderer: bbcodeRenderer }).parse(storyDescription));
|
||||
headers["Content-Type"] = "text/plain; charset=utf-8";
|
||||
// Markdown exports (no-op)
|
||||
} else if (!(["weasyl"] satisfies ExportWebsite[] as ExportWebsite[]).includes(website)) {
|
||||
} else if (!markdownExport.includes(website)) {
|
||||
console.log(`Unrecognized ExportWebsite "${website}"`);
|
||||
return new Response(null, { status: 404 });
|
||||
}
|
||||
return new Response(`${storyDescription.replaceAll(/\n\n\n+/g, "\n\n").trim()}\n`, { headers });
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue