From 8123a6fe99e01e93b480f036dfee262139e33ae8 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 28 Apr 2024 23:43:57 -0700 Subject: feat(badges): allow awc badges hiding --- src/lib/Database/userPreferences.ts | 14 +++++- src/lib/Locale/english.ts | 3 ++ src/lib/Locale/japanese.ts | 3 ++ src/lib/Locale/layout.ts | 3 ++ src/routes/api/preferences/+server.ts | 10 ++++- src/routes/user/[user]/+page.svelte | 14 ++++++ src/routes/user/[user]/badges/+page.svelte | 68 +++++++++++++++--------------- 7 files changed, 80 insertions(+), 35 deletions(-) (limited to 'src') diff --git a/src/lib/Database/userPreferences.ts b/src/lib/Database/userPreferences.ts index a98d13ec..4b0e224f 100644 --- a/src/lib/Database/userPreferences.ts +++ b/src/lib/Database/userPreferences.ts @@ -8,6 +8,7 @@ export interface UserPreferences { hide_missing_badges: boolean; biography: string | null; badge_wall_css: string; + hide_awc_badges: boolean; } interface NewUserPreferences { @@ -16,6 +17,7 @@ interface NewUserPreferences { hide_missing_badges?: boolean; badge_wall_css?: string; biography?: string; + hide_awc_badges?: boolean; } export const getUserPreferences = async (userId: number) => { @@ -40,7 +42,8 @@ export const setUserPreferences = async (userId: number, preferences: NewUserPre hide_missing_badges: preferences.hide_missing_badges || false, biography: preferences.biography || (userPreferences ? userPreferences.biography : null), badge_wall_css: - preferences.badge_wall_css || (userPreferences ? userPreferences.badge_wall_css : '') + preferences.badge_wall_css || (userPreferences ? userPreferences.badge_wall_css : ''), + hide_awc_badges: preferences.hide_awc_badges || false }, { onConflict: 'user_id' } ) @@ -79,6 +82,15 @@ export const toggleHideMissingBadges = async (userId: number) => { }); }; +export const toggleHideAWCBadges = async (userId: number) => { + const userPreferences = await getUserPreferences(userId); + + return await setUserPreferences(userId, { + updated_at: new Date().toISOString(), + hide_awc_badges: userPreferences ? !userPreferences.hide_awc_badges : false + }); +}; + export const setCSS = async (userId: number, css: string) => { const userPreferences = await getUserPreferences(userId); diff --git a/src/lib/Locale/english.ts b/src/lib/Locale/english.ts index 794a97d5..f68db610 100644 --- a/src/lib/Locale/english.ts +++ b/src/lib/Locale/english.ts @@ -210,6 +210,9 @@ const English: Locale = { hideMissingBadges: { title: 'Hide missing badges from Badge Wall', hint: "Hide any 404'd badges from appearing on your Badge Wall, excluding during edit mode" + }, + hideAWCBadges: { + title: 'Hide AWC badges from Badge Wall' } } }, diff --git a/src/lib/Locale/japanese.ts b/src/lib/Locale/japanese.ts index 5986395b..089946ef 100644 --- a/src/lib/Locale/japanese.ts +++ b/src/lib/Locale/japanese.ts @@ -212,6 +212,9 @@ const Japanese: Locale = { hideMissingBadges: { title: 'Badge Wallから不足しているバッジを隠す', hint: '画像がエラー404を返すバッジをBadge Wallに表示しないようにします。編集モード中を除く' + }, + hideAWCBadges: { + title: 'Badge WallからAWCバッジを隠す' } } }, diff --git a/src/lib/Locale/layout.ts b/src/lib/Locale/layout.ts index 0e1bdecc..4fea935a 100644 --- a/src/lib/Locale/layout.ts +++ b/src/lib/Locale/layout.ts @@ -212,6 +212,9 @@ export interface Locale { title: LocaleValue; hint: LocaleValue; }; + hideAWCBadges: { + title: LocaleValue; + }; }; }; lists: { diff --git a/src/routes/api/preferences/+server.ts b/src/routes/api/preferences/+server.ts index 151af298..379f33c5 100644 --- a/src/routes/api/preferences/+server.ts +++ b/src/routes/api/preferences/+server.ts @@ -3,7 +3,8 @@ import { getUserPreferences, toggleHideMissingBadges, setCSS, - setBiography + setBiography, + toggleHideAWCBadges } from '$lib/Database/userPreferences'; const unauthorised = new Response('Unauthorised', { status: 401 }); @@ -40,6 +41,13 @@ export const PUT = async ({ url, cookies, request }) => { } }); + if (url.searchParams.get('toggleHideAWCBadges') !== null) + return Response.json(await toggleHideAWCBadges(userId), { + headers: { + 'Access-Control-Allow-Origin': 'https://due.moe' + } + }); + if (url.searchParams.get('badgeWallCSS') !== null) return Response.json(await setCSS(userId, await request.text()), { headers: { diff --git a/src/routes/user/[user]/+page.svelte b/src/routes/user/[user]/+page.svelte index 222e044f..7049cbfd 100644 --- a/src/routes/user/[user]/+page.svelte +++ b/src/routes/user/[user]/+page.svelte @@ -225,6 +225,20 @@

+ { + if (userData) + fetch(root(`/api/preferences?id=${userData.id}&toggleHideAWCBadges`), { + method: 'PUT' + }); + }} + checked={preferences.hide_awc_badges} + /> + {$locale().user.preferences.hideAWCBadges.title} + +

+ Biography