aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-01-22 01:17:37 -0800
committerFuwn <[email protected]>2024-01-22 01:17:37 -0800
commit737e2a494bc3422dc520e674329a76a074a75bea (patch)
treea85e4e23eeedec81bd6becd4607f43e0c0ca9056 /src
parentfix(locale): add recommended to japanese roundDownChapters (diff)
downloaddue.moe-737e2a494bc3422dc520e674329a76a074a75bea.tar.xz
due.moe-737e2a494bc3422dc520e674329a76a074a75bea.zip
feat(badges): auto-suggest category
Diffstat (limited to 'src')
-rw-r--r--src/routes/user/[user]/badges/+page.svelte208
1 files changed, 113 insertions, 95 deletions
diff --git a/src/routes/user/[user]/badges/+page.svelte b/src/routes/user/[user]/badges/+page.svelte
index 9d0063be..22b003d3 100644
--- a/src/routes/user/[user]/badges/+page.svelte
+++ b/src/routes/user/[user]/badges/+page.svelte
@@ -286,101 +286,6 @@
{:then identity}
{@const isOwner = identity && identity.name === data.username}
- {#if isOwner}
- <div class="card">
- <a href={root(`/user/${data.username}`)}>Back to Profile</a>
- •
- <button
- on:click={() => {
- if (editMode) selectedBadge = undefined;
-
- editMode = !editMode;
- }}
- >
- {editMode ? 'Disable' : 'Enable'} Edit Mode
- </button>
- •
- <button
- disabled={downloadDisabled}
- on:click={() => (downloadDisabled ? undefined : screenshot())}>Download</button
- >
- •
- <input disabled={downloadDisabled} type="checkbox" bind:checked={dark} /> Dark Mode
- <input disabled={downloadDisabled} type="checkbox" bind:checked={transparent} /> Transparent
- Background
-
- {#if editMode && isOwner}
- <p />
-
- {#if error}
- <p style="color: red;">{error}</p>
- {/if}
-
- <input
- type="text"
- placeholder="Image URL"
- name="image_url"
- minlength="1"
- maxlength="1000"
- size="11"
- value={selectedBadge ? selectedBadge.image : ''}
- />
- <input
- type="text"
- placeholder="Activity URL"
- name="activity_url"
- minlength="1"
- maxlength="1000"
- size="11"
- value={selectedBadge ? (selectedBadge.post === '#' ? '' : selectedBadge.post) : ''}
- />
- <input
- type="text"
- placeholder="Description (Optional)"
- name="description"
- minlength="1"
- maxlength="1000"
- size="11"
- value={selectedBadge ? selectedBadge.description : ''}
- />
- <input
- type="text"
- placeholder="Category (Optional)"
- name="category"
- minlength="1"
- maxlength="1000"
- size="11"
- value={selectedBadge
- ? selectedBadge.category === 'Uncategorised'
- ? ''
- : selectedBadge.category
- : ''}
- />
- <button class="button-lined" on:click={submitBadge}
- >{selectedBadge ? 'Update' : 'Add'}</button
- >
- {#if selectedBadge}
- or
- <button
- class="button-lined"
- on:click={() => {
- if (selectedBadge) removeBadge(selectedBadge);
- }}>Delete (click twice)</button
- >
- {/if}
- <span style="float: right;">
- <input
- type="datetime-local"
- value={selectedBadge && selectedBadge.time ? selectedBadge.time : ''}
- />
- <small>Must be full date and time, defaults to now if any fields empty</small>
- </span>
- {/if}
- </div>
- {/if}
-
- <p />
-
{#await badgesPromise}
<Loading type="user identity" percent={60} />
{:then badgesResponse}
@@ -392,6 +297,7 @@
{#await awcPromise then badges}
{#await badges.text() then text}
{@const parsedBadges = awcBadgesGrouped(text)}
+
{#if parsedBadges.length > 0}
{#each parsedBadges as group}
<details open>
@@ -431,6 +337,118 @@
{:else}
{@const groupedBadges = Object.entries(groupBadges(ungroupedBadges))}
+ {#if isOwner}
+ <div class="card">
+ <a href={root(`/user/${data.username}`)}>Back to Profile</a>
+ •
+ <button
+ on:click={() => {
+ if (editMode) selectedBadge = undefined;
+
+ editMode = !editMode;
+ }}
+ >
+ {editMode ? 'Disable' : 'Enable'} Edit Mode
+ </button>
+ •
+ <button
+ disabled={downloadDisabled}
+ on:click={() => (downloadDisabled ? undefined : screenshot())}>Download</button
+ >
+ •
+ <input disabled={downloadDisabled} type="checkbox" bind:checked={dark} /> Dark
+ Mode
+ <input disabled={downloadDisabled} type="checkbox" bind:checked={transparent} />
+ Transparent Background
+
+ {#if editMode && isOwner}
+ {@const groups = groupedBadges
+ .map((group) => group[0])
+ .filter((group) => group !== 'Uncategorised')}
+
+ <p />
+
+ {#if error}
+ <p style="color: red;">{error}</p>
+ {/if}
+
+ <input
+ type="text"
+ placeholder="Image URL"
+ name="image_url"
+ minlength="1"
+ maxlength="1000"
+ size="11"
+ value={selectedBadge ? selectedBadge.image : ''}
+ />
+ <input
+ type="text"
+ placeholder="Activity URL"
+ name="activity_url"
+ minlength="1"
+ maxlength="1000"
+ size="11"
+ value={selectedBadge
+ ? selectedBadge.post === '#'
+ ? ''
+ : selectedBadge.post
+ : ''}
+ />
+ <input
+ type="text"
+ placeholder="Description (Optional)"
+ name="description"
+ minlength="1"
+ maxlength="1000"
+ size="11"
+ value={selectedBadge ? selectedBadge.description : ''}
+ />
+ <input
+ type="text"
+ placeholder="Category (Optional)"
+ name="category"
+ minlength="1"
+ maxlength="1000"
+ size="11"
+ value={selectedBadge
+ ? selectedBadge.category === 'Uncategorised'
+ ? ''
+ : selectedBadge.category
+ : ''}
+ list="categories"
+ />
+ {#if groups.length > 0}
+ <datalist id="categories">
+ {#each groups as group}
+ <option value={group} />
+ {/each}
+ </datalist>
+ {/if}
+ <button class="button-lined" on:click={submitBadge}
+ >{selectedBadge ? 'Update' : 'Add'}</button
+ >
+ {#if selectedBadge}
+ or
+ <button
+ class="button-lined"
+ on:click={() => {
+ if (selectedBadge) removeBadge(selectedBadge);
+ }}>Delete (click twice)</button
+ >
+ {/if}
+ <span style="float: right;">
+ <input
+ type="datetime-local"
+ value={selectedBadge && selectedBadge.time ? selectedBadge.time : ''}
+ />
+ <small>Must be full date and time, defaults to now if any fields empty</small>
+ </span>
+ {/if}
+ </div>
+ {/if}
+
+ <p />
+
{#each groupedBadges as [category, badges]}
<details open>
<summary>{category}</summary>