aboutsummaryrefslogtreecommitdiff
path: root/src/routes
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes')
-rw-r--r--src/routes/api/badges/+server.ts7
-rw-r--r--src/routes/user/[user]/badges/+page.svelte50
2 files changed, 51 insertions, 6 deletions
diff --git a/src/routes/api/badges/+server.ts b/src/routes/api/badges/+server.ts
index 20777845..2dc1d7b3 100644
--- a/src/routes/api/badges/+server.ts
+++ b/src/routes/api/badges/+server.ts
@@ -78,7 +78,8 @@ export const PUT = async ({ cookies, url, request }) => {
image: url.searchParams.get('image') || undefined,
description: url.searchParams.get('description') || undefined,
time: url.searchParams.get('time') || undefined,
- category: url.searchParams.get('category') || undefined
+ category: url.searchParams.get('category') || undefined,
+ hidden: url.searchParams.get('hidden') || undefined
};
if (
@@ -86,9 +87,9 @@ export const PUT = async ({ cookies, url, request }) => {
(badge) => Number(badge.id) === Number(url.searchParams.get('update'))
)
) {
- await updateUserBadge(identity.id, Number(url.searchParams.get('update')), badge);
+ await updateUserBadge(identity.id, Number(url.searchParams.get('update')), badge as Badge);
} else {
- await addUserBadge(identity.id, badge);
+ await addUserBadge(identity.id, badge as Badge);
}
return await badges(identity.id);
diff --git a/src/routes/user/[user]/badges/+page.svelte b/src/routes/user/[user]/badges/+page.svelte
index 1d0896fc..18f014be 100644
--- a/src/routes/user/[user]/badges/+page.svelte
+++ b/src/routes/user/[user]/badges/+page.svelte
@@ -206,6 +206,7 @@
const description = document.querySelector('input[name="description"]') as HTMLInputElement;
const time = document.querySelector('input[type="datetime-local"]') as HTMLInputElement;
const category = document.querySelector('input[name="category"]') as HTMLInputElement;
+ const hidden = document.querySelector('input[name="hidden"]') as HTMLInputElement;
if (!imageURL.value) {
error = 'Image URL cannot be empty.';
@@ -233,7 +234,7 @@
: ''
}${
selectedBadge && selectedBadge.id ? `&update=${encodeURIComponent(selectedBadge.id)}` : ''
- }`,
+ }&hidden=${hidden.value === 'Hidden'}`,
{
method: 'PUT'
}
@@ -244,6 +245,7 @@
activityURL.value = '';
description.value = '';
category.value = '';
+ hidden.value = 'Shown';
selectedBadge = undefined;
};
@@ -441,6 +443,9 @@
downloadAnchor.remove();
URL.revokeObjectURL(url);
};
+
+ const removeHiddenBadges = (badges: Badge[]) =>
+ editMode ? badges : badges.filter((b) => !b.hidden);
</script>
<HeadTitle route={`${data.username}'s Badge Wall`} path={`/user/${data.username}`} />
@@ -519,7 +524,9 @@
<Skeleton grid={true} count={10} width="150px" height="170px" />
{:else}
- {@const groupedBadges = Object.entries(groupBadges(ungroupedBadges))}
+ {@const groupedBadges = Object.entries(
+ groupBadges(removeHiddenBadges(ungroupedBadges))
+ )}
{#if isOwner}
<div class="card">
@@ -631,6 +638,36 @@
/>
</span>
</Dropdown>
+ <Dropdown
+ items={[false, true].map((hidden) => ({
+ name: hidden ? 'Hidden' : 'Shown',
+ url: '#',
+ onClick: () => {
+ const hiddenInput = document.querySelector('input[name="hidden"]');
+
+ if (hiddenInput instanceof HTMLInputElement)
+ hiddenInput.value = hidden ? 'Hidden' : 'Shown';
+ }
+ }))}
+ header={false}
+ center={false}
+ >
+ <span slot="title">
+ <input
+ type="text"
+ placeholder="Shown"
+ name="hidden"
+ minlength="1"
+ maxlength="1000"
+ size="15"
+ value={selectedBadge
+ ? selectedBadge.hidden
+ ? 'Hidden'
+ : 'Shown'
+ : 'Shown'}
+ />
+ </span>
+ </Dropdown>
<button class="button-lined" on:click={submitBadge}
>{selectedBadge
? $locale().user.badges.editMode.update
@@ -682,7 +719,14 @@
{#if editMode}
<a
href={`#`}
- on:click={() => (selectedBadge = badge)}
+ on:click={() => {
+ selectedBadge = badge;
+
+ const hiddenInput = document.querySelector('input[name="hidden"]');
+
+ if (hiddenInput instanceof HTMLInputElement)
+ hiddenInput.value = badge.hidden ? 'Hidden' : 'Shown';
+ }}
id={`badge-${badge.id}`}
title={`${
badge.time