diff options
| author | Fuwn <[email protected]> | 2024-10-09 00:41:20 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-10-09 00:41:43 -0700 |
| commit | 998b63a35256ac985a5a2714dd1ca451af4dfd8a (patch) | |
| tree | 50796121a9d5ab0330fdc5d7e098bda2860d9726 /src/lib/Settings | |
| parent | feat(graphql): add badgeCount field (diff) | |
| download | due.moe-998b63a35256ac985a5a2714dd1ca451af4dfd8a.tar.xz due.moe-998b63a35256ac985a5a2714dd1ca451af4dfd8a.zip | |
chore(prettier): use spaces instead of tabs
Diffstat (limited to 'src/lib/Settings')
| -rw-r--r-- | src/lib/Settings/Categories/Attributions.svelte | 92 | ||||
| -rw-r--r-- | src/lib/Settings/Categories/Cache.svelte | 54 | ||||
| -rw-r--r-- | src/lib/Settings/Categories/Calculation.svelte | 106 | ||||
| -rw-r--r-- | src/lib/Settings/Categories/Debug.svelte | 74 | ||||
| -rw-r--r-- | src/lib/Settings/Categories/Display.svelte | 540 | ||||
| -rw-r--r-- | src/lib/Settings/Categories/RSSFeeds.svelte | 64 | ||||
| -rw-r--r-- | src/lib/Settings/Categories/SettingSync.svelte | 204 | ||||
| -rw-r--r-- | src/lib/Settings/Category.svelte | 18 | ||||
| -rw-r--r-- | src/lib/Settings/SettingCheckboxToggle.svelte | 132 | ||||
| -rw-r--r-- | src/lib/Settings/SettingHint.svelte | 6 | ||||
| -rw-r--r-- | src/lib/Settings/SettingToggle.svelte | 46 | ||||
| -rw-r--r-- | src/lib/Settings/Verbiage.svelte | 56 |
12 files changed, 696 insertions, 696 deletions
diff --git a/src/lib/Settings/Categories/Attributions.svelte b/src/lib/Settings/Categories/Attributions.svelte index 5ce7f05d..250b08c3 100644 --- a/src/lib/Settings/Categories/Attributions.svelte +++ b/src/lib/Settings/Categories/Attributions.svelte @@ -1,35 +1,35 @@ <script> - import root from '$lib/Utility/root'; + import root from '$lib/Utility/root'; </script> <ul> - <li> - <a href="https://anilist.co/" target="_blank">AniList</a>: Most data not explicity attributed - otherwise, excluding primary chapter and volume data, character birthday data, and subtitled - anime release data - </li> - <li><span id="mangadex">MangaDex</span>: <b>Only</b> non-native chapter and volume count data</li> - <li> - <a href="https://seiga.nicovideo.jp/manga/" target="_blank">ニコニコ漫画</a>: Native chapter and - volume count data - </li> - <li><a href="https://x.com/YDPFALION" target="_blank">YDPFa</a>: Girls Band Cry Icon Set</li> - <!-- <li> + <li> + <a href="https://anilist.co/" target="_blank">AniList</a>: Most data not explicity attributed + otherwise, excluding primary chapter and volume data, character birthday data, and subtitled + anime release data + </li> + <li><span id="mangadex">MangaDex</span>: <b>Only</b> non-native chapter and volume count data</li> + <li> + <a href="https://seiga.nicovideo.jp/manga/" target="_blank">ニコニコ漫画</a>: Native chapter and + volume count data + </li> + <li><a href="https://x.com/YDPFALION" target="_blank">YDPFa</a>: Girls Band Cry Icon Set</li> + <!-- <li> <a href="https://www.animecharactersdatabase.com/index.php" target="_blank"> Anime Characters Database </a>: primary character birthday data </li> --> - <!-- <li> + <!-- <li> <a href="https://www.anisearch.com/" target="_blank">aniSearch</a>: secondary character birthday data </li> --> - <!-- <li> + <!-- <li> <a href="https://www.mangaupdates.com/" target="">Baka-Updates Magna</a>: manga release data </li> --> - <!-- <li> + <!-- <li> <a href="https://www.wlnupdates.com/">WLN Updates</a>: web & light novel release data </li> --> - <!-- <li> + <!-- <li> <a href="https://subsplease.org/">SubsPlease</a>: subtitle release data </li> --> </ul> @@ -37,38 +37,38 @@ <p /> <details open class="card-clear"> - <summary>Outbound Link Disclaimer</summary> - <ol> - <li> - <a href={root('/')}>due.moe</a> - does not host or directly link to any less-than-legal anime or manga material and/or distribution - platforms. - </li> - <li> - <a href={root('/')}>due.moe</a> - is not affiliated with any of the above or below sites and services. - </li> - <li> - At the moment, <a href={root('/')}>due.moe</a> only ever contains outbound links to the - following sites and services: + <summary>Outbound Link Disclaimer</summary> + <ol> + <li> + <a href={root('/')}>due.moe</a> + does not host or directly link to any less-than-legal anime or manga material and/or distribution + platforms. + </li> + <li> + <a href={root('/')}>due.moe</a> + is not affiliated with any of the above or below sites and services. + </li> + <li> + At the moment, <a href={root('/')}>due.moe</a> only ever contains outbound links to the + following sites and services: - <ul> - <li><a href="https://anilist.co/">AniList.co</a></li> - <li><a href="https://myanimelist.net/">MyAnimeList</a> (if selected)</li> - <li><a href="https://animeschedule.net/">AnimeSchedule.net</a> (if selected)</li> - <li><a href="https://www.livechart.me/">LiveChart.me</a> (if selected)</li> - </ul> - </li> - </ol> + <ul> + <li><a href="https://anilist.co/">AniList.co</a></li> + <li><a href="https://myanimelist.net/">MyAnimeList</a> (if selected)</li> + <li><a href="https://animeschedule.net/">AnimeSchedule.net</a> (if selected)</li> + <li><a href="https://www.livechart.me/">LiveChart.me</a> (if selected)</li> + </ul> + </li> + </ol> </details> <style> - #mangadex { - filter: blur(2.5px); - transition: filter 0.25s; - } + #mangadex { + filter: blur(2.5px); + transition: filter 0.25s; + } - #mangadex:hover { - filter: none; - } + #mangadex:hover { + filter: none; + } </style> diff --git a/src/lib/Settings/Categories/Cache.svelte b/src/lib/Settings/Categories/Cache.svelte index c59897e1..e65b8081 100644 --- a/src/lib/Settings/Categories/Cache.svelte +++ b/src/lib/Settings/Categories/Cache.svelte @@ -1,30 +1,30 @@ <script> - import tooltip from '$lib/Tooltip/tooltip'; - import settings from '$stores/settings'; + import tooltip from '$lib/Tooltip/tooltip'; + import settings from '$stores/settings'; </script> <small class="opaque"> - All caches are stored in your browser's <code - title="Local browser key/value pair store" - use:tooltip>localStorage</code - >. Clearing - <a href="https://due.moe">due.moe</a>'s site data will clear these caches too. + All caches are stored in your browser's <code + title="Local browser key/value pair store" + use:tooltip>localStorage</code + >. Clearing + <a href="https://due.moe">due.moe</a>'s site data will clear these caches too. </small> <p /> Re-cache AniList media lists every <input - type="number" - class="no-shadow" - bind:value={$settings.cacheMinutes} - min="1" - max="60" - placeholder="30" - size="1" - on:change={() => - ($settings.cacheMinutes < 1 && ($settings.cacheMinutes = 1)) || - ($settings.cacheMinutes > 60 && ($settings.cacheMinutes = 60))} + type="number" + class="no-shadow" + bind:value={$settings.cacheMinutes} + min="1" + max="60" + placeholder="30" + size="1" + on:change={() => + ($settings.cacheMinutes < 1 && ($settings.cacheMinutes = 1)) || + ($settings.cacheMinutes > 60 && ($settings.cacheMinutes = 60))} /> minutes @@ -32,15 +32,15 @@ minutes Re-cache manga data every <input - type="number" - class="no-shadow" - bind:value={$settings.cacheMangaMinutes} - min="5" - max="1440" - placeholder="120" - size="2" - on:change={() => - ($settings.cacheMangaMinutes < 5 && ($settings.cacheMangaMinutes = 5)) || - ($settings.cacheMangaMinutes > 1440 && ($settings.cacheMangaMinutes = 1440))} + type="number" + class="no-shadow" + bind:value={$settings.cacheMangaMinutes} + min="5" + max="1440" + placeholder="120" + size="2" + on:change={() => + ($settings.cacheMangaMinutes < 5 && ($settings.cacheMangaMinutes = 5)) || + ($settings.cacheMangaMinutes > 1440 && ($settings.cacheMangaMinutes = 1440))} /> minutes diff --git a/src/lib/Settings/Categories/Calculation.svelte b/src/lib/Settings/Categories/Calculation.svelte index bd361fa2..4a202fff 100644 --- a/src/lib/Settings/Categories/Calculation.svelte +++ b/src/lib/Settings/Categories/Calculation.svelte @@ -1,90 +1,90 @@ <script lang="ts"> - import { pruneAllManga } from '$lib/Media/Manga/cache'; - import locale from '$stores/locale'; - import settings from '$stores/settings'; - import SettingCheckboxToggle from '../SettingCheckboxToggle.svelte'; - import SettingHint from '../SettingHint.svelte'; + import { pruneAllManga } from '$lib/Media/Manga/cache'; + import locale from '$stores/locale'; + import settings from '$stores/settings'; + import SettingCheckboxToggle from '../SettingCheckboxToggle.svelte'; + import SettingHint from '../SettingHint.svelte'; </script> <SettingCheckboxToggle - setting="calculatePreferNativeChapterCount" - text={$locale().settings.calculation.fields.preferNativeChapterCount.title} - onChange={pruneAllManga} + setting="calculatePreferNativeChapterCount" + text={$locale().settings.calculation.fields.preferNativeChapterCount.title} + onChange={pruneAllManga} > - <SettingHint lineBreak> - {$locale().settings.calculation.fields.preferNativeChapterCount.hint} - </SettingHint> + <SettingHint lineBreak> + {$locale().settings.calculation.fields.preferNativeChapterCount.hint} + </SettingHint> </SettingCheckboxToggle> <br /> <SettingCheckboxToggle - setting="calculateChaptersRoundedDown" - text={$locale().settings.calculation.fields.roundDownChapters.title} + setting="calculateChaptersRoundedDown" + text={$locale().settings.calculation.fields.roundDownChapters.title} > - <SettingHint lineBreak> - {$locale().settings.calculation.fields.roundDownChapters.hint} - </SettingHint> + <SettingHint lineBreak> + {$locale().settings.calculation.fields.roundDownChapters.hint} + </SettingHint> </SettingCheckboxToggle> <br /> <SettingCheckboxToggle - setting="displayNotStarted" - text={$locale().settings.calculation.fields.showMediaWithZeroProgress.title} + setting="displayNotStarted" + text={$locale().settings.calculation.fields.showMediaWithZeroProgress.title} > - <SettingHint lineBreak> - {$locale().settings.calculation.fields.showMediaWithZeroProgress.hint} - </SettingHint> + <SettingHint lineBreak> + {$locale().settings.calculation.fields.showMediaWithZeroProgress.hint} + </SettingHint> </SettingCheckboxToggle> <br /> <SettingCheckboxToggle - setting="calculateDisableOutOfDateVolumeWarning" - text={$locale().settings.calculation.fields.hideOutOfDateVolumeWarning.title} + setting="calculateDisableOutOfDateVolumeWarning" + text={$locale().settings.calculation.fields.hideOutOfDateVolumeWarning.title} > - <SettingHint lineBreak> - Out-of-date volume warnings display an alert when there is a mismatch between the chapter - progress and number of volumes you have logged for a given title. - <br /> - For example, an alert would be shown if you have tracked a manga up to Ch. 50 (Vol. 5), but have - less than 4 volumes logged. + <SettingHint lineBreak> + Out-of-date volume warnings display an alert when there is a mismatch between the chapter + progress and number of volumes you have logged for a given title. + <br /> + For example, an alert would be shown if you have tracked a manga up to Ch. 50 (Vol. 5), but have + less than 4 volumes logged. - <br /> + <br /> - Disabling this option speeds up refresh times for manga lists. - </SettingHint> + Disabling this option speeds up refresh times for manga lists. + </SettingHint> </SettingCheckboxToggle> <br /> <SettingCheckboxToggle - setting="calculateGuessingDisabled" - text={$locale().settings.calculation.fields.smartChapterCountEstimation.title} - invert + setting="calculateGuessingDisabled" + text={$locale().settings.calculation.fields.smartChapterCountEstimation.title} + invert > - <SettingHint lineBreak> - Smart chapter count calculation uses statistical methods to estimate the number of chapters - available for a given title based on user submitted progress.<br />Disabling this setting will - disable light novel chapter count reporting and will disable smart chapter count calculation for - titles which you have higher progress than officially reported. - </SettingHint> + <SettingHint lineBreak> + Smart chapter count calculation uses statistical methods to estimate the number of chapters + available for a given title based on user submitted progress.<br />Disabling this setting will + disable light novel chapter count reporting and will disable smart chapter count calculation for + titles which you have higher progress than officially reported. + </SettingHint> </SettingCheckboxToggle> {#if !$settings.calculateGuessingDisabled} - <br /> + <br /> - <select bind:value={$settings.calculateGuessMethod} on:change={pruneAllManga}> - <option value="mode">Mode (fast, moderate to low accuracy)</option> - <option value="median">Median (moderate speed, high accuracy, recommended)</option> - <option value="iqr_median">Interquartile Range with Median (slower, high accuracy)</option> - <option value="iqr_mode">Interquartile Range with Mode (slower, high accuracy)</option> - </select> - Smart chapter count calculation method + <select bind:value={$settings.calculateGuessMethod} on:change={pruneAllManga}> + <option value="mode">Mode (fast, moderate to low accuracy)</option> + <option value="median">Median (moderate speed, high accuracy, recommended)</option> + <option value="iqr_median">Interquartile Range with Median (slower, high accuracy)</option> + <option value="iqr_mode">Interquartile Range with Mode (slower, high accuracy)</option> + </select> + Smart chapter count calculation method - <SettingHint lineBreak> - No chapter count estimation method will be 100% accurate. Since estimated media requires scores - derived from user submitted progress, high (or low) false-reports skew the data. - </SettingHint> + <SettingHint lineBreak> + No chapter count estimation method will be 100% accurate. Since estimated media requires scores + derived from user submitted progress, high (or low) false-reports skew the data. + </SettingHint> {/if} diff --git a/src/lib/Settings/Categories/Debug.svelte b/src/lib/Settings/Categories/Debug.svelte index 620c226a..79e18c03 100644 --- a/src/lib/Settings/Categories/Debug.svelte +++ b/src/lib/Settings/Categories/Debug.svelte @@ -1,60 +1,60 @@ <script lang="ts"> - import settings from '$stores/settings'; - import { getNotificationsContext } from 'svelte-notifications'; - import SettingHint from '../SettingHint.svelte'; - import { options } from '$lib/Notification/options'; - import locale from '$stores/locale'; - import SettingCheckboxToggle from '../SettingCheckboxToggle.svelte'; + import settings from '$stores/settings'; + import { getNotificationsContext } from 'svelte-notifications'; + import SettingHint from '../SettingHint.svelte'; + import { options } from '$lib/Notification/options'; + import locale from '$stores/locale'; + import SettingCheckboxToggle from '../SettingCheckboxToggle.svelte'; - const { addNotification } = getNotificationsContext(); + const { addNotification } = getNotificationsContext(); </script> <SettingCheckboxToggle setting="debugDummyLists" text={$locale().debug.dummyLists} /> <button - on:click={() => { - localStorage.removeItem('anime'); - localStorage.removeItem('manga'); - addNotification( - options({ - heading: 'Anime and manga list caches successfully cleared' - }) - ); - }}>{$locale().debug.clearCaches}</button + on:click={() => { + localStorage.removeItem('anime'); + localStorage.removeItem('manga'); + addNotification( + options({ + heading: 'Anime and manga list caches successfully cleared' + }) + ); + }}>{$locale().debug.clearCaches}</button > <p /> <button - on:click={() => { - settings.reset(); - addNotification( - options({ - heading: 'All settings successfully reset' - }) - ); - }} + on:click={() => { + settings.reset(); + addNotification( + options({ + heading: 'All settings successfully reset' + }) + ); + }} > - {$locale().debug.resetAllSettings.title} + {$locale().debug.resetAllSettings.title} </button> <SettingHint lineBreak> - {$locale().debug.resetAllSettings.hint} + {$locale().debug.resetAllSettings.hint} </SettingHint> <p /> <button - on:click={() => { - localStorage.clear(); - addNotification( - options({ - heading: '<code>localStorage</code> successfully cleared' - }) - ); - }}>{$locale().debug.clearLocalStorage.title} <code>localStorage</code></button + on:click={() => { + localStorage.clear(); + addNotification( + options({ + heading: '<code>localStorage</code> successfully cleared' + }) + ); + }}>{$locale().debug.clearLocalStorage.title} <code>localStorage</code></button > <SettingHint lineBreak> - {$locale().debug.clearLocalStorage.hint1} - <br /> - {$locale().debug.clearLocalStorage.hint2} + {$locale().debug.clearLocalStorage.hint1} + <br /> + {$locale().debug.clearLocalStorage.hint2} </SettingHint> diff --git a/src/lib/Settings/Categories/Display.svelte b/src/lib/Settings/Categories/Display.svelte index 85a3c922..9f72f1e1 100644 --- a/src/lib/Settings/Categories/Display.svelte +++ b/src/lib/Settings/Categories/Display.svelte @@ -1,177 +1,177 @@ <script lang="ts"> - import settings from '$stores/settings'; - import SettingCheckboxToggle from '../SettingCheckboxToggle.svelte'; - import SettingHint from '../SettingHint.svelte'; - import root from '$lib/Utility/root'; - import locale from '$stores/locale'; - import { requestNotifications } from '$lib/Utility/notifications'; - import { getFingerprint } from '$lib/Utility/fingerprint'; - - const onHelperChange = () => { - const mai = document.getElementById('mai') as HTMLImageElement; - - if (!mai) return; - - mai.style.display = 'block'; - - switch ($settings.displayAoButa) { - case 'random': - case 'mai_2': - { - mai.src = '/aobuta/mai.png'; - } - break; - case 'mai': - { - mai.src = '/aobuta/mai_2.webp'; - } - break; - case 'nodoka': - { - mai.src = '/aobuta/nodoka.webp'; - } - break; - case 'kaede': - { - mai.src = '/aobuta/kaede.png'; - } - break; - case 'rio': - { - mai.src = '/aobuta/rio.webp'; - } - break; - case 'sakuta': - { - mai.src = '/aobuta/sakuta.webp'; - } - break; - case 'shouko': - { - mai.src = '/aobuta/shouko.webp'; - } - break; - case 'tomoe': - { - mai.src = '/aobuta/tomoe.webp'; - } - break; - case 'none': { - { - mai.style.display = 'none'; - } - break; - } - } - }; + import settings from '$stores/settings'; + import SettingCheckboxToggle from '../SettingCheckboxToggle.svelte'; + import SettingHint from '../SettingHint.svelte'; + import root from '$lib/Utility/root'; + import locale from '$stores/locale'; + import { requestNotifications } from '$lib/Utility/notifications'; + import { getFingerprint } from '$lib/Utility/fingerprint'; + + const onHelperChange = () => { + const mai = document.getElementById('mai') as HTMLImageElement; + + if (!mai) return; + + mai.style.display = 'block'; + + switch ($settings.displayAoButa) { + case 'random': + case 'mai_2': + { + mai.src = '/aobuta/mai.png'; + } + break; + case 'mai': + { + mai.src = '/aobuta/mai_2.webp'; + } + break; + case 'nodoka': + { + mai.src = '/aobuta/nodoka.webp'; + } + break; + case 'kaede': + { + mai.src = '/aobuta/kaede.png'; + } + break; + case 'rio': + { + mai.src = '/aobuta/rio.webp'; + } + break; + case 'sakuta': + { + mai.src = '/aobuta/sakuta.webp'; + } + break; + case 'shouko': + { + mai.src = '/aobuta/shouko.webp'; + } + break; + case 'tomoe': + { + mai.src = '/aobuta/tomoe.webp'; + } + break; + case 'none': { + { + mai.style.display = 'none'; + } + break; + } + } + }; </script> <b>{$locale().settings.display.categories.includeAdditionalMedia}</b><br /> <SettingCheckboxToggle - setting="displayPausedMedia" - text={$locale().settings.media.pausedMedia} - lineBreak={false} + setting="displayPausedMedia" + text={$locale().settings.media.pausedMedia} + lineBreak={false} /> <SettingCheckboxToggle - setting="displayUnresolved" - text={$locale().settings.media.unresolvedMedia} - lineBreak={false} + setting="displayUnresolved" + text={$locale().settings.media.unresolvedMedia} + lineBreak={false} /> <SettingCheckboxToggle - setting="displayPlannedAnime" - text={$locale().settings.media.plannedAnime} - lineBreak={false} + setting="displayPlannedAnime" + text={$locale().settings.media.plannedAnime} + lineBreak={false} /> <SettingHint lineBreak> - Media where either the next episode's release date is unknown or the chapter count could not be - resolved is considered unresolved. - <p /> - <span> - Additionally, you hard exclude specific media from <a href={root('/')}>due.moe</a> on AniList. - To exclude any media from being included in <b>any</b> <a href={root('/')}>due.moe</a> - calculation, create an anime or manga list with the tag - <code>#DueIgnore</code> in the list's title and add the media you want to exclude to the list. - </span> - - <br /> - - <span> - Inversely, you can selectively include media by creating an anime or manga list with the tag <code - >#DueInclude</code - > - in the list's title, which will include - <b>only</b> - media in the list in any <a href={root('/')}>due.moe</a> calculation. - <code>#DueInclude</code> - will override <code>#DueIgnore</code>. - </span> + Media where either the next episode's release date is unknown or the chapter count could not be + resolved is considered unresolved. + <p /> + <span> + Additionally, you hard exclude specific media from <a href={root('/')}>due.moe</a> on AniList. + To exclude any media from being included in <b>any</b> <a href={root('/')}>due.moe</a> + calculation, create an anime or manga list with the tag + <code>#DueIgnore</code> in the list's title and add the media you want to exclude to the list. + </span> + + <br /> + + <span> + Inversely, you can selectively include media by creating an anime or manga list with the tag <code + >#DueInclude</code + > + in the list's title, which will include + <b>only</b> + media in the list in any <a href={root('/')}>due.moe</a> calculation. + <code>#DueInclude</code> + will override <code>#DueIgnore</code>. + </span> </SettingHint> <p /> <b>{$locale().settings.display.categories.hidePanels}</b><br /> <SettingCheckboxToggle - setting="disableUpcomingAnime" - text={$locale().settings.media.upcomingAnime} - lineBreak={false} - onChange={() => { - if ($settings.disableAnime && $settings.disableManga) $settings.disableUpcomingAnime = false; - }} + setting="disableUpcomingAnime" + text={$locale().settings.media.upcomingAnime} + lineBreak={false} + onChange={() => { + if ($settings.disableAnime && $settings.disableManga) $settings.disableUpcomingAnime = false; + }} /> <SettingCheckboxToggle - setting="disableAnime" - text={$locale().settings.media.anime} - lineBreak={false} - onChange={() => { - if ($settings.disableUpcomingAnime && $settings.disableManga) $settings.disableAnime = false; - - if ( - $settings.disableAnime && - $settings.disableManga && - $settings.displayFiltersIncludeCompleted - ) - $settings.displayFiltersIncludeCompleted = false; - }} + setting="disableAnime" + text={$locale().settings.media.anime} + lineBreak={false} + onChange={() => { + if ($settings.disableUpcomingAnime && $settings.disableManga) $settings.disableAnime = false; + + if ( + $settings.disableAnime && + $settings.disableManga && + $settings.displayFiltersIncludeCompleted + ) + $settings.displayFiltersIncludeCompleted = false; + }} /> <SettingCheckboxToggle - setting="disableManga" - text={$locale().settings.media.manga} - onChange={() => { - if ($settings.disableAnime && $settings.disableUpcomingAnime) $settings.disableManga = false; - - if ( - $settings.disableAnime && - $settings.disableManga && - $settings.displayFiltersIncludeCompleted - ) - $settings.displayFiltersIncludeCompleted = false; - }} + setting="disableManga" + text={$locale().settings.media.manga} + onChange={() => { + if ($settings.disableAnime && $settings.disableUpcomingAnime) $settings.disableManga = false; + + if ( + $settings.disableAnime && + $settings.disableManga && + $settings.displayFiltersIncludeCompleted + ) + $settings.displayFiltersIncludeCompleted = false; + }} /> <SettingCheckboxToggle - setting="displayFiltersIncludeCompleted" - text={$locale().settings.display.categories.filtersIncludeCompleted} - onChange={() => { - if ( - $settings.displayFiltersIncludeCompleted && - $settings.disableAnime && - $settings.disableManga - ) - $settings.disableAnime = false; - }} + setting="displayFiltersIncludeCompleted" + text={$locale().settings.display.categories.filtersIncludeCompleted} + onChange={() => { + if ( + $settings.displayFiltersIncludeCompleted && + $settings.disableAnime && + $settings.disableManga + ) + $settings.disableAnime = false; + }} /> <p /> <b>{$locale().settings.display.categories.collapsePanelsByDefault}</b><br /> <SettingCheckboxToggle - setting="displayUpcomingAnimeCollapsed" - text={$locale().settings.media.upcomingAnime} - lineBreak={false} + setting="displayUpcomingAnimeCollapsed" + text={$locale().settings.media.upcomingAnime} + lineBreak={false} /> <SettingCheckboxToggle - setting="displayAnimeCollapsed" - text={$locale().settings.media.anime} - lineBreak={false} + setting="displayAnimeCollapsed" + text={$locale().settings.media.anime} + lineBreak={false} /> <SettingCheckboxToggle setting="displayMangaCollapsed" text={$locale().settings.media.manga} /> @@ -179,102 +179,102 @@ <b>{$locale().settings.display.categories.motionAndAccessibility.title}</b><br /> <SettingCheckboxToggle - setting="displayDisableAnimations" - text={$locale().settings.display.categories.motionAndAccessibility.fields - .disablePageTransitionAnimations} + setting="displayDisableAnimations" + text={$locale().settings.display.categories.motionAndAccessibility.fields + .disablePageTransitionAnimations} /> <SettingCheckboxToggle - setting="displayDisableNotifications" - text={$locale().settings.display.categories.motionAndAccessibility.fields.disableNotifications} + setting="displayDisableNotifications" + text={$locale().settings.display.categories.motionAndAccessibility.fields.disableNotifications} /> <SettingCheckboxToggle - setting="displayLimitListHeight" - text={$locale().settings.display.categories.motionAndAccessibility.fields - .limitPanelAreaToScreenHeight} + setting="displayLimitListHeight" + text={$locale().settings.display.categories.motionAndAccessibility.fields + .limitPanelAreaToScreenHeight} /> <SettingCheckboxToggle - setting="displayDataSaver" - text={$locale().settings.display.categories.dataSaver} + setting="displayDataSaver" + text={$locale().settings.display.categories.dataSaver} /> <select bind:value={$settings.displayLanguage} class="no-shadow"> - <option value="en"> - {$locale({ - locale: 'en' - }).settings.languages.english} - </option> - <option value="ja"> - {$locale({ - locale: 'ja' - }).settings.languages.japanese} - </option> + <option value="en"> + {$locale({ + locale: 'en' + }).settings.languages.english} + </option> + <option value="ja"> + {$locale({ + locale: 'ja' + }).settings.languages.japanese} + </option> </select> {$locale().settings.display.categories.motionAndAccessibility.fields.interfaceLanguage} {#if $settings.displayLanguage !== 'en'} - <button class="unclickable-button button-badge badge-info"> - {$locale().settings.display.tooltips.beta} - </button> + <button class="unclickable-button button-badge badge-info"> + {$locale().settings.display.tooltips.beta} + </button> {/if} <p /> <SettingCheckboxToggle - setting="displayAniListNotifications" - text={$locale().settings.display.categories.motionAndAccessibility.fields - .enableAniListNotifications} - onChange={() => { - if ($settings.displayAniListNotifications) - requestNotifications().then(() => { - return; - }); - else - fetch(`/api/notifications/unsubscribe?p=${getFingerprint()}`, { - method: 'POST' - }).then(() => { - return; - }); - }} + setting="displayAniListNotifications" + text={$locale().settings.display.categories.motionAndAccessibility.fields + .enableAniListNotifications} + onChange={() => { + if ($settings.displayAniListNotifications) + requestNotifications().then(() => { + return; + }); + else + fetch(`/api/notifications/unsubscribe?p=${getFingerprint()}`, { + method: 'POST' + }).then(() => { + return; + }); + }} > - <SettingHint lineBreak> - Periodically check for and send recent AniList notifications as native platform notifications - <br /> - This may be useful for users who have installed due.moe as a PWA or are using due.moe on a mobile - device, as AniList has no official mobile app, and the AniList website does not send push notifications. - </SettingHint> + <SettingHint lineBreak> + Periodically check for and send recent AniList notifications as native platform notifications + <br /> + This may be useful for users who have installed due.moe as a PWA or are using due.moe on a mobile + device, as AniList has no official mobile app, and the AniList website does not send push notifications. + </SettingHint> </SettingCheckboxToggle> <p /> <b>{$locale().settings.display.categories.dateAndTime.title}</b><br /> <SettingCheckboxToggle - setting="displayCountdownRightAligned" - text={$locale().settings.display.categories.dateAndTime.fields.rightAlignCountdown} + setting="displayCountdownRightAligned" + text={$locale().settings.display.categories.dateAndTime.fields.rightAlignCountdown} /> <SettingCheckboxToggle - setting="display24HourTime" - text={$locale().settings.display.categories.dateAndTime.fields.use24HourTime} + setting="display24HourTime" + text={$locale().settings.display.categories.dateAndTime.fields.use24HourTime} /> <SettingCheckboxToggle - setting="displayNativeCountdown" - text={$locale().settings.display.categories.dateAndTime.fields.nativeEpisodeCountdown} + setting="displayNativeCountdown" + text={$locale().settings.display.categories.dateAndTime.fields.nativeEpisodeCountdown} /> <SettingCheckboxToggle - setting="displayShortCountdown" - text={$locale().settings.display.categories.dateAndTime.fields.abbreviateCountdown} + setting="displayShortCountdown" + text={$locale().settings.display.categories.dateAndTime.fields.abbreviateCountdown} /> <p /> <SettingCheckboxToggle - setting="displayDisableLastActivityWarning" - text={$locale().settings.display.categories.dateAndTime.fields.disableLastActivityWarning} + setting="displayDisableLastActivityWarning" + text={$locale().settings.display.categories.dateAndTime.fields.disableLastActivityWarning} > - <SettingHint lineBreak> - A warning will appear at the top of <a href={root('/')}>Home</a> and - <a href={root('/completed')}>Completed</a> if you have not filled in today's activity history - grid point yet. - <br /> - This option is useful to those that like maintaining a consistent activity history grid. - </SettingHint> + <SettingHint lineBreak> + A warning will appear at the top of <a href={root('/')}>Home</a> and + <a href={root('/completed')}>Completed</a> if you have not filled in today's activity history + grid point yet. + <br /> + This option is useful to those that like maintaining a consistent activity history grid. + </SettingHint> </SettingCheckboxToggle> <p /> @@ -283,86 +283,86 @@ <SettingCheckboxToggle setting="displayCoverModeAnime" text="Anime" lineBreak={false} /> <SettingCheckboxToggle setting="displayCoverModeManga" text="Manga" lineBreak={false} /> <SettingCheckboxToggle - setting="displayScheduleListMode" - text="Subtitle Schedule" - lineBreak={false} - invert + setting="displayScheduleListMode" + text="Subtitle Schedule" + lineBreak={false} + invert /> {#if $settings.displayCoverModeAnime || $settings.displayCoverModeManga || !$settings.displayScheduleListMode} - <br /> - <input - type="number" - class="no-shadow" - bind:value={$settings.displayCoverWidth} - min="50" - placeholder="116.609" - size="3" - on:change={() => { - if ($settings.displayCoverWidth === null) { - $settings.displayCoverWidth = 116.609; - - return; - } - - $settings.displayCoverWidth < 50 && ($settings.displayCoverWidth = 50); - }} - /> - Cover width (px) - <br /> + <br /> + <input + type="number" + class="no-shadow" + bind:value={$settings.displayCoverWidth} + min="50" + placeholder="116.609" + size="3" + on:change={() => { + if ($settings.displayCoverWidth === null) { + $settings.displayCoverWidth = 116.609; + + return; + } + + $settings.displayCoverWidth < 50 && ($settings.displayCoverWidth = 50); + }} + /> + Cover width (px) + <br /> {:else} - <br /> + <br /> {/if} <p /> <b>{$locale().settings.display.categories.media.title}</b><br /> <SettingCheckboxToggle - setting="displayHoverCover" - text="Show media cover when hovering on supported media titles" + setting="displayHoverCover" + text="Show media cover when hovering on supported media titles" /> <SettingCheckboxToggle setting="displaySocialButton" text="Show social tab shortcut for media" /> <SettingCheckboxToggle setting="displayBlurAdultContent" text="Blur NSFW media covers" /> <SettingCheckboxToggle - setting="displayCopyMediaTitleNotLink" - text="Copy media title instead of linking" + setting="displayCopyMediaTitleNotLink" + text="Copy media title instead of linking" /> <SettingCheckboxToggle - setting="displayTotalDueEpisodes" - text="Display total number of due episodes instead of due media count" + setting="displayTotalDueEpisodes" + text="Display total number of due episodes instead of due media count" /> <select bind:value={$settings.displayTitleFormat}> - <option value="english"> - {$locale().settings.display.categories.media.fields.mediaTitleFormat.options.english} - </option> - <option value="romaji"> - {$locale().settings.display.categories.media.fields.mediaTitleFormat.options.romaji} - </option> - <option value="native"> - {$locale().settings.display.categories.media.fields.mediaTitleFormat.options.native} - </option> + <option value="english"> + {$locale().settings.display.categories.media.fields.mediaTitleFormat.options.english} + </option> + <option value="romaji"> + {$locale().settings.display.categories.media.fields.mediaTitleFormat.options.romaji} + </option> + <option value="native"> + {$locale().settings.display.categories.media.fields.mediaTitleFormat.options.native} + </option> </select> {$locale().settings.display.categories.media.fields.mediaTitleFormat.title} {#if $settings.displayTitleFormat === 'native'} - - <SettingCheckboxToggle - setting="displayFurigana" - text={$locale().settings.display.categories.media.fields.mediaTitleFormat.fields.showFurigana} - /> + + <SettingCheckboxToggle + setting="displayFurigana" + text={$locale().settings.display.categories.media.fields.mediaTitleFormat.fields.showFurigana} + /> {:else} - <br /> + <br /> {/if} <p /> <select bind:value={$settings.displayOutboundLinksTo}> - <option value="anilist">AniList</option> - <option value="livechartme">LiveChart.me</option> - <option value="animeschedule">AnimeSchedule</option> - <option value="myanimelist">MyAnimeList</option> + <option value="anilist">AniList</option> + <option value="livechartme">LiveChart.me</option> + <option value="animeschedule">AnimeSchedule</option> + <option value="myanimelist">MyAnimeList</option> </select> {$locale().settings.display.categories.media.fields.outboundLinks.title} <SettingHint lineBreak> - {$locale().settings.display.categories.media.fields.outboundLinks.hint} + {$locale().settings.display.categories.media.fields.outboundLinks.hint} </SettingHint><br /> <!-- <SettingCheckboxToggle setting="displayHoverNavigation" text="Use hovering navigation bar"> @@ -375,27 +375,27 @@ <br /> <SettingCheckboxToggle - setting="displaySortedByDifference" - text={$locale().settings.display.categories.media.fields.sortBy.title} + setting="displaySortedByDifference" + text={$locale().settings.display.categories.media.fields.sortBy.title} > - <SettingHint lineBreak> - {$locale().settings.display.categories.media.fields.sortBy.hint} - </SettingHint> + <SettingHint lineBreak> + {$locale().settings.display.categories.media.fields.sortBy.hint} + </SettingHint> </SettingCheckboxToggle> <br /> <select bind:value={$settings.displayAoButa} on:change={onHelperChange}> - <option value="mai">{$locale().settings.display.categories.helper.options.mai}</option> - <option value="mai_2">{$locale().settings.display.categories.helper.options.mai} #2</option> - <option value="nodoka">{$locale().settings.display.categories.helper.options.nodoka}</option> - <option value="kaede">{$locale().settings.display.categories.helper.options.kaede}</option> - <option value="rio">{$locale().settings.display.categories.helper.options.rio}</option> - <option value="sakuta">{$locale().settings.display.categories.helper.options.sakuta}</option> - <option value="shouko">{$locale().settings.display.categories.helper.options.shouko}</option> - <option value="tomoe">{$locale().settings.display.categories.helper.options.tomoe}</option> - <option value="random">{$locale().settings.display.categories.helper.options.random}</option> - <option value="none">{$locale().settings.display.categories.helper.options.none}</option> + <option value="mai">{$locale().settings.display.categories.helper.options.mai}</option> + <option value="mai_2">{$locale().settings.display.categories.helper.options.mai} #2</option> + <option value="nodoka">{$locale().settings.display.categories.helper.options.nodoka}</option> + <option value="kaede">{$locale().settings.display.categories.helper.options.kaede}</option> + <option value="rio">{$locale().settings.display.categories.helper.options.rio}</option> + <option value="sakuta">{$locale().settings.display.categories.helper.options.sakuta}</option> + <option value="shouko">{$locale().settings.display.categories.helper.options.shouko}</option> + <option value="tomoe">{$locale().settings.display.categories.helper.options.tomoe}</option> + <option value="random">{$locale().settings.display.categories.helper.options.random}</option> + <option value="none">{$locale().settings.display.categories.helper.options.none}</option> </select> {$locale().settings.display.categories.helper.title} <SettingHint lineBreak>{$locale().settings.display.categories.helper.hint}</SettingHint> diff --git a/src/lib/Settings/Categories/RSSFeeds.svelte b/src/lib/Settings/Categories/RSSFeeds.svelte index 7217324c..a225b137 100644 --- a/src/lib/Settings/Categories/RSSFeeds.svelte +++ b/src/lib/Settings/Categories/RSSFeeds.svelte @@ -1,43 +1,43 @@ <script lang="ts"> - import { options } from '$lib/Notification/options'; - import { getNotificationsContext } from 'svelte-notifications'; - import { env } from '$env/dynamic/public'; - import locale from '$stores/locale'; - import SettingHint from '../SettingHint.svelte'; - import tooltip from '$lib/Tooltip/tooltip'; + import { options } from '$lib/Notification/options'; + import { getNotificationsContext } from 'svelte-notifications'; + import { env } from '$env/dynamic/public'; + import locale from '$stores/locale'; + import SettingHint from '../SettingHint.svelte'; + import tooltip from '$lib/Tooltip/tooltip'; - export let user: any; + export let user: any; - const { addNotification } = getNotificationsContext(); + const { addNotification } = getNotificationsContext(); </script> <button - on:click={() => { - addNotification( - options({ - heading: 'RSS feed URL copied to clipboard' - }) - ); - navigator.clipboard.writeText( - `https://${ - env.PUBLIC_ANILIST_REDIRECT_URI?.includes('192.168') ? '192.168.1.60:5173' : 'due.moe' - }/feeds/activity-notifications?token=${user.accessToken}&refresh=${user.refreshToken}` - ); - }} + on:click={() => { + addNotification( + options({ + heading: 'RSS feed URL copied to clipboard' + }) + ); + navigator.clipboard.writeText( + `https://${ + env.PUBLIC_ANILIST_REDIRECT_URI?.includes('192.168') ? '192.168.1.60:5173' : 'due.moe' + }/feeds/activity-notifications?token=${user.accessToken}&refresh=${user.refreshToken}` + ); + }} > - {$locale().settings.rssFeeds.buttons.copyToClipboard} + {$locale().settings.rssFeeds.buttons.copyToClipboard} </button> Your AniList notifications RSS feed URL <SettingHint lineBreak> - This <a - href={'#'} - on:click={(e) => e.preventDefault()} - target="_blank" - title={$locale().settings.rssFeeds.tooltips.rss} - use:tooltip - data-tooltip-above>RSS</a - > - feed will return the currently logged in AniList user's notification feed for external consumption. - <br /> - Do not share this link with <b>anyone</b>! + This <a + href={'#'} + on:click={(e) => e.preventDefault()} + target="_blank" + title={$locale().settings.rssFeeds.tooltips.rss} + use:tooltip + data-tooltip-above>RSS</a + > + feed will return the currently logged in AniList user's notification feed for external consumption. + <br /> + Do not share this link with <b>anyone</b>! </SettingHint> diff --git a/src/lib/Settings/Categories/SettingSync.svelte b/src/lib/Settings/Categories/SettingSync.svelte index 6a7de8d1..39e62954 100644 --- a/src/lib/Settings/Categories/SettingSync.svelte +++ b/src/lib/Settings/Categories/SettingSync.svelte @@ -1,116 +1,116 @@ <script lang="ts"> - import { options } from '$lib/Notification/options'; - import root from '$lib/Utility/root'; - import identity from '$stores/identity'; - import settings from '$stores/settings'; - import { getNotificationsContext } from 'svelte-notifications'; - import SettingHint from '../SettingHint.svelte'; - import locale from '$stores/locale'; - import settingsSyncTimes from '$stores/settingsSyncTimes'; + import { options } from '$lib/Notification/options'; + import root from '$lib/Utility/root'; + import identity from '$stores/identity'; + import settings from '$stores/settings'; + import { getNotificationsContext } from 'svelte-notifications'; + import SettingHint from '../SettingHint.svelte'; + import locale from '$stores/locale'; + import settingsSyncTimes from '$stores/settingsSyncTimes'; - const { addNotification } = getNotificationsContext(); + const { addNotification } = getNotificationsContext(); </script> {#if !$settings.settingsSync} - <button - on:click={() => { - $settings.settingsSync = true; + <button + on:click={() => { + $settings.settingsSync = true; - fetch(root(`/api/configuration?id=${$identity.id}`)).then((response) => { - if (response.ok) { - response.json().then((data) => { - if (data && data.configuration) { - $settings = data.configuration; + fetch(root(`/api/configuration?id=${$identity.id}`)).then((response) => { + if (response.ok) { + response.json().then((data) => { + if (data && data.configuration) { + $settings = data.configuration; - addNotification( - options({ - heading: 'Pulled remote configuration' - }) - ); - } else { - fetch(root(`/api/configuration`), { - method: 'PUT', - body: JSON.stringify($settings) - }).then((response) => { - if (response.ok) - addNotification( - options({ - heading: 'Created remote configuration' - }) - ); - }); - } - }); - } - }); - }} - > - {$locale().settings.settingsSync.buttons.pull.title} - </button> - <SettingHint lineBreak> - {$locale().settings.settingsSync.buttons.pull.hint} - </SettingHint> - <p /> - <button - on:click={() => { - $settings.settingsSync = true; + addNotification( + options({ + heading: 'Pulled remote configuration' + }) + ); + } else { + fetch(root(`/api/configuration`), { + method: 'PUT', + body: JSON.stringify($settings) + }).then((response) => { + if (response.ok) + addNotification( + options({ + heading: 'Created remote configuration' + }) + ); + }); + } + }); + } + }); + }} + > + {$locale().settings.settingsSync.buttons.pull.title} + </button> + <SettingHint lineBreak> + {$locale().settings.settingsSync.buttons.pull.hint} + </SettingHint> + <p /> + <button + on:click={() => { + $settings.settingsSync = true; - fetch(root(`/api/configuration`), { - method: 'PUT', - body: JSON.stringify($settings) - }).then((response) => { - if (response.ok) - addNotification( - options({ - heading: 'Settings Sync', - description: 'Pushed local configuration to remote' - }) - ); - }); - }} - > - {$locale().settings.settingsSync.buttons.push.title} - </button> - <SettingHint lineBreak> - {$locale().settings.settingsSync.buttons.push.hint} - </SettingHint> + fetch(root(`/api/configuration`), { + method: 'PUT', + body: JSON.stringify($settings) + }).then((response) => { + if (response.ok) + addNotification( + options({ + heading: 'Settings Sync', + description: 'Pushed local configuration to remote' + }) + ); + }); + }} + > + {$locale().settings.settingsSync.buttons.push.title} + </button> + <SettingHint lineBreak> + {$locale().settings.settingsSync.buttons.push.hint} + </SettingHint> {:else} - <button - on:click={() => { - $settings.settingsSync = false; + <button + on:click={() => { + $settings.settingsSync = false; - addNotification( - options({ - heading: 'Settings sync disabled' - }) - ); - }} - > - {$locale().settings.settingsSync.buttons.disable} - </button> - <button - on:click={() => { - fetch(root(`/api/configuration?id=${$identity.id}`), { - method: 'DELETE' - }).then((response) => { - if (response.ok) { - $settings.settingsSync = false; + addNotification( + options({ + heading: 'Settings sync disabled' + }) + ); + }} + > + {$locale().settings.settingsSync.buttons.disable} + </button> + <button + on:click={() => { + fetch(root(`/api/configuration?id=${$identity.id}`), { + method: 'DELETE' + }).then((response) => { + if (response.ok) { + $settings.settingsSync = false; - addNotification( - options({ - heading: 'Remote configuration deleted and settings sync disabled' - }) - ); - } - }); - }} - > - {$locale().settings.settingsSync.buttons.delete} - </button> + addNotification( + options({ + heading: 'Remote configuration deleted and settings sync disabled' + }) + ); + } + }); + }} + > + {$locale().settings.settingsSync.buttons.delete} + </button> - <p /> + <p /> - <b>Last Push</b>: {$locale().dateFormatter($settingsSyncTimes.lastPush)} - <br /> - <b>Last Pull</b>: {$locale().dateFormatter($settingsSyncTimes.lastPull)} + <b>Last Push</b>: {$locale().dateFormatter($settingsSyncTimes.lastPush)} + <br /> + <b>Last Pull</b>: {$locale().dateFormatter($settingsSyncTimes.lastPull)} {/if} diff --git a/src/lib/Settings/Category.svelte b/src/lib/Settings/Category.svelte index ad3ff6d2..a5b3e211 100644 --- a/src/lib/Settings/Category.svelte +++ b/src/lib/Settings/Category.svelte @@ -1,18 +1,18 @@ <script lang="ts"> - export let title = ''; - export let id = title.toLowerCase(); - export let open = true; - export let newLine = true; + export let title = ''; + export let id = title.toLowerCase(); + export let open = true; + export let newLine = true; </script> <details {open} {id}> - {#if title} - <summary>{title}</summary> - {/if} + {#if title} + <summary>{title}</summary> + {/if} - <slot /> + <slot /> </details> {#if newLine} - <p /> + <p /> {/if} diff --git a/src/lib/Settings/SettingCheckboxToggle.svelte b/src/lib/Settings/SettingCheckboxToggle.svelte index 43e9accf..bb4e8893 100644 --- a/src/lib/Settings/SettingCheckboxToggle.svelte +++ b/src/lib/Settings/SettingCheckboxToggle.svelte @@ -1,82 +1,82 @@ <script lang="ts"> - import settings, { type Settings } from '$stores/settings'; - - type BooleanSettingsKeys<T> = { - [K in keyof T]: T[K] extends boolean ? K : never; - }; - type SettingsBooleanKeys = BooleanSettingsKeys<Settings>; - - export let sectionBreak = false; - export let disabled = false; - export let text: string | (() => string); - export let setting: SettingsBooleanKeys[keyof SettingsBooleanKeys]; - export let lineBreak = true; - export let onChange: () => void = () => { - return; - }; - export let invert = false; - - $: checked = setting ? (invert ? !$settings[setting] : $settings[setting]) : false; - $: field = text instanceof Function ? text() : text; - - // const toggler = (key: keyof Settings) => [ - // () => - // settings.update((s) => { - // (s[key] as boolean) = true; - - // $settings = s; - - // return s; - // }), - // () => - // settings.update((s) => { - // (s[key] as boolean) = false; - - // $settings = s; - - // return s; - // }) - // ]; - - const check = (e: Event & { currentTarget: EventTarget & HTMLInputElement }): void => { - const checked = (e.target as HTMLInputElement).checked; - - if (setting) { - settings.setKey(setting, invert ? !checked : checked); - onChange(); - } - }; - - const flip = () => { - if (setting) $settings[setting] = !$settings[setting]; - }; + import settings, { type Settings } from '$stores/settings'; + + type BooleanSettingsKeys<T> = { + [K in keyof T]: T[K] extends boolean ? K : never; + }; + type SettingsBooleanKeys = BooleanSettingsKeys<Settings>; + + export let sectionBreak = false; + export let disabled = false; + export let text: string | (() => string); + export let setting: SettingsBooleanKeys[keyof SettingsBooleanKeys]; + export let lineBreak = true; + export let onChange: () => void = () => { + return; + }; + export let invert = false; + + $: checked = setting ? (invert ? !$settings[setting] : $settings[setting]) : false; + $: field = text instanceof Function ? text() : text; + + // const toggler = (key: keyof Settings) => [ + // () => + // settings.update((s) => { + // (s[key] as boolean) = true; + + // $settings = s; + + // return s; + // }), + // () => + // settings.update((s) => { + // (s[key] as boolean) = false; + + // $settings = s; + + // return s; + // }) + // ]; + + const check = (e: Event & { currentTarget: EventTarget & HTMLInputElement }): void => { + const checked = (e.target as HTMLInputElement).checked; + + if (setting) { + settings.setKey(setting, invert ? !checked : checked); + onChange(); + } + }; + + const flip = () => { + if (setting) $settings[setting] = !$settings[setting]; + }; </script> <input type="checkbox" on:change={check} bind:checked /> <span - on:click={flip} - on:keydown={() => { - return; - }} - role="button" - tabindex="0" + on:click={flip} + on:keydown={() => { + return; + }} + role="button" + tabindex="0" > - {#if disabled} - <strike> - {field} - </strike> - {:else} - {field} - {/if} + {#if disabled} + <strike> + {field} + </strike> + {:else} + {field} + {/if} </span> <slot /> {#if lineBreak} - <br /> + <br /> {/if} {#if sectionBreak} - <p /> + <p /> {/if} diff --git a/src/lib/Settings/SettingHint.svelte b/src/lib/Settings/SettingHint.svelte index f9f4a1f6..f82f061c 100644 --- a/src/lib/Settings/SettingHint.svelte +++ b/src/lib/Settings/SettingHint.svelte @@ -1,11 +1,11 @@ <script lang="ts"> - export let lineBreak = false; + export let lineBreak = false; </script> {#if lineBreak} - <br /> + <br /> {/if} <small style="opacity: 80%;"> - <slot /> + <slot /> </small> diff --git a/src/lib/Settings/SettingToggle.svelte b/src/lib/Settings/SettingToggle.svelte index f1fc4cb6..0d177b50 100644 --- a/src/lib/Settings/SettingToggle.svelte +++ b/src/lib/Settings/SettingToggle.svelte @@ -1,35 +1,35 @@ <script lang="ts"> - import settings, { type Settings } from '$stores/settings'; + import settings, { type Settings } from '$stores/settings'; - export let setting: keyof Settings; - export let on = ''; - export let off = ''; - export let sectionBreak = false; - export let disabled = false; + export let setting: keyof Settings; + export let on = ''; + export let off = ''; + export let sectionBreak = false; + export let disabled = false; </script> <a - href={'#'} - on:click={() => - disabled - ? {} - : $settings[setting] - ? settings.setKey(setting, false) - : settings.setKey(setting, true)} + href={'#'} + on:click={() => + disabled + ? {} + : $settings[setting] + ? settings.setKey(setting, false) + : settings.setKey(setting, true)} > - {#if disabled} - <strike> - {$settings[setting] ? on : off} - <slot /> - </strike> - {:else} - {$settings[setting] ? on : off} - <slot /> - {/if} + {#if disabled} + <strike> + {$settings[setting] ? on : off} + <slot /> + </strike> + {:else} + {$settings[setting] ? on : off} + <slot /> + {/if} </a> <br /> {#if sectionBreak} - <p /> + <p /> {/if} diff --git a/src/lib/Settings/Verbiage.svelte b/src/lib/Settings/Verbiage.svelte index c355a692..76193c3b 100644 --- a/src/lib/Settings/Verbiage.svelte +++ b/src/lib/Settings/Verbiage.svelte @@ -1,34 +1,34 @@ <script> - import root from '$lib/Utility/root'; + import root from '$lib/Utility/root'; </script> <details open={false}> - <summary>Verbiage</summary> + <summary>Verbiage</summary> - <ul> - <li> - <a href={root('/')}>Home</a>, Upcoming Episodes: Anime which you have seen all episodes of - thus far, and have a scheduled next episode(s) release date - </li> - <li> - <a href={root('/')}>Home</a>, Not Yet Released: Anime which have not yet aired their first - episode, and have a scheduled next episode(s) release date - </li> - <li> - <a href={root('/')}>Home</a>, Anime: Anime which you have not seen all episodes of thus far, - and have a scheduled next episode release date - </li> - <li> - <a href={root('/')}>Home</a>, Manga: Manga which you have not read all chapters of thus far, - and have an available next chapter(s) - </li> - <li> - <a href={root('/completed')}>Completed</a>, Anime: Anime which you have not seen all episodes - of thus far, and have concluded airing - </li> - <li> - <a href={root('/completed')}>Completed</a>, Manga: Manga which you have not read all chapters - of thus far, and have concluded publishing - </li> - </ul> + <ul> + <li> + <a href={root('/')}>Home</a>, Upcoming Episodes: Anime which you have seen all episodes of + thus far, and have a scheduled next episode(s) release date + </li> + <li> + <a href={root('/')}>Home</a>, Not Yet Released: Anime which have not yet aired their first + episode, and have a scheduled next episode(s) release date + </li> + <li> + <a href={root('/')}>Home</a>, Anime: Anime which you have not seen all episodes of thus far, + and have a scheduled next episode release date + </li> + <li> + <a href={root('/')}>Home</a>, Manga: Manga which you have not read all chapters of thus far, + and have an available next chapter(s) + </li> + <li> + <a href={root('/completed')}>Completed</a>, Anime: Anime which you have not seen all episodes + of thus far, and have concluded airing + </li> + <li> + <a href={root('/completed')}>Completed</a>, Manga: Manga which you have not read all chapters + of thus far, and have concluded publishing + </li> + </ul> </details> |