diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/Database/userPreferences.ts | 14 | ||||
| -rw-r--r-- | src/lib/Locale/english.ts | 3 | ||||
| -rw-r--r-- | src/lib/Locale/japanese.ts | 3 | ||||
| -rw-r--r-- | src/lib/Locale/layout.ts | 3 | ||||
| -rw-r--r-- | src/routes/api/preferences/+server.ts | 10 | ||||
| -rw-r--r-- | src/routes/user/[user]/+page.svelte | 14 | ||||
| -rw-r--r-- | src/routes/user/[user]/badges/+page.svelte | 68 |
7 files changed, 80 insertions, 35 deletions
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 @@ <p /> + <input + type="checkbox" + on:change={() => { + if (userData) + fetch(root(`/api/preferences?id=${userData.id}&toggleHideAWCBadges`), { + method: 'PUT' + }); + }} + checked={preferences.hide_awc_badges} + /> + {$locale().user.preferences.hideAWCBadges.title} + + <p /> + Biography <button diff --git a/src/routes/user/[user]/badges/+page.svelte b/src/routes/user/[user]/badges/+page.svelte index caf2019d..2b7dd65f 100644 --- a/src/routes/user/[user]/badges/+page.svelte +++ b/src/routes/user/[user]/badges/+page.svelte @@ -520,42 +520,44 @@ !editMode} <div id="badges"> - {#await awcPromise then badges} - {#await badges.clone().text() then text} - {@const parsedBadges = awcBadgesGrouped(text)} - - {#if parsedBadges.length > 0} - {#each parsedBadges as group} - <details open={categoryFilter || isOwner ? false : true}> - <summary> - Anime Watching Club <span class="opaque">|</span> - {group.group} - </summary> + {#if !preferences.hide_awc_badges} + {#await awcPromise then badges} + {#await badges.clone().text() then text} + {@const parsedBadges = awcBadgesGrouped(text)} + + {#if parsedBadges.length > 0} + {#each parsedBadges as group} + <details open={categoryFilter || isOwner ? false : true}> + <summary> + Anime Watching Club <span class="opaque">|</span> + {group.group} + </summary> + + <p /> + + <div class="badges"> + {#each group.badges as badge, index} + <div id={`badge-${index}`}> + <FallbackBadge + {badge} + source={cdn(thumbnail(badge.image))} + alternative={badge.description} + fallback={thumbnail(badge.image)} + hideOnError={preferences.hide_missing_badges} + awc + {index} + /> + </div> + {/each} + </div> + </details> <p /> - - <div class="badges"> - {#each group.badges as badge, index} - <div id={`badge-${index}`}> - <FallbackBadge - {badge} - source={cdn(thumbnail(badge.image))} - alternative={badge.description} - fallback={thumbnail(badge.image)} - hideOnError={preferences.hide_missing_badges} - awc - {index} - /> - </div> - {/each} - </div> - </details> - - <p /> - {/each} - {/if} + {/each} + {/if} + {/await} {/await} - {/await} + {/if} {#if ungroupedBadges === null} <Message message="Loading badges ..." /> |