diff --git a/src/components/pages/Extensions.svelte b/src/components/pages/Extensions.svelte index d57e009..4159cef 100644 --- a/src/components/pages/Extensions.svelte +++ b/src/components/pages/Extensions.svelte @@ -1 +1,354 @@ -
Extensions.svelte
+ + +
+
+

Extensions

+
+ + + +
+
+ + {#if panel === "apk"} +
+
+ Install from APK URL + +
+
+ installError = null} + on:keydown={(e) => e.key === "Enter" && !installing && installExternal()} + use:focusEl /> + +
+ {#if installError}
{installError}
{/if} +
+ {/if} + + {#if panel === "repos"} +
+
+ Extension Repositories + +
+ {#if reposLoading} +
+ {:else} + {#if repos.length === 0} +
No repos configured.
+ {:else} +
+ {#each repos as url} +
+ {url} + +
+ {/each} +
+ {/if} +
+ repoError = null} + on:keydown={(e) => e.key === "Enter" && !savingRepos && addRepo()} /> + +
+ {#if repoError}
{repoError}
{/if} + {/if} +
+ {/if} + +
+
+ {#each FILTERS as f} + + {/each} +
+
+ + +
+
+ + {#if loading} +
+ {:else if groups.length === 0} +
No extensions found.
+ {:else} +
+ {#each groups as { base, primary, variants }} + {@const isExpanded = expanded.has(base)} + {@const hasVariants = variants.length > 0} +
+
+ {primary.name} (e.target as HTMLImageElement).style.display = "none"} /> +
+ {base} + {primary.lang.toUpperCase()} v{primary.versionName} +
+ {#if primary.hasUpdate}Update{/if} + {#if working.has(primary.pkgName)} + + {:else if primary.hasUpdate} +
+ + +
+ {:else if primary.isInstalled} + + {:else} + + {/if} + {#if hasVariants} + + {/if} +
+ {#if isExpanded && hasVariants} +
+ {#each variants as v} +
+ {v.lang.toUpperCase()} + {v.name} + v{v.versionName} + {#if v.hasUpdate}{/if} +
+ {#if working.has(v.pkgName)} + + {:else if v.hasUpdate} + + {:else if v.isInstalled} + + {:else} + + {/if} +
+
+ {/each} +
+ {/if} +
+ {/each} +
+ {/if} +
+ + + + diff --git a/src/components/pages/GenreDrillPage.svelte b/src/components/pages/GenreDrillPage.svelte new file mode 100644 index 0000000..666ac8e --- /dev/null +++ b/src/components/pages/GenreDrillPage.svelte @@ -0,0 +1,241 @@ + + +
+
+ + {label} + {#if !loadingInitial || filtered.length > 0} + {visibleItems.length}{filtered.length > visibleCount ? "+" : ""} of {filtered.length} + {/if} + {#if !loadingInitial && hasMoreNetwork} + More loading… + {/if} +
+ + {#if loadingInitial && filtered.length === 0} +
+ {#each Array(50) as _} +
+
+
+
+ {/each} +
+ {:else if filtered.length === 0} +
No manga found for "{label}".
+ {:else} +
+ {#each visibleItems as m (m.id)} + + {/each} + {#if hasMore} +
+ +
+ {/if} +
+ {/if} +
+ +{#if ctx} + ctx = null} /> +{/if} + + diff --git a/src/components/settings/Settings.svelte b/src/components/settings/Settings.svelte index 6947208..7e53761 100644 --- a/src/components/settings/Settings.svelte +++ b/src/components/settings/Settings.svelte @@ -1,3 +1,704 @@ -
Settings stub
+ +
{ if (e.target === e.currentTarget) close(); }}> + +
+ + + + diff --git a/src/components/shared/MangaPreview.svelte b/src/components/shared/MangaPreview.svelte new file mode 100644 index 0000000..50c8afc --- /dev/null +++ b/src/components/shared/MangaPreview.svelte @@ -0,0 +1,401 @@ + + +{#if $previewManga} +
{ if (e.target === e.currentTarget) close(); }}> + +
+{/if} + + + + diff --git a/src/components/sources/SourceBrowse.svelte b/src/components/sources/SourceBrowse.svelte new file mode 100644 index 0000000..582da34 --- /dev/null +++ b/src/components/sources/SourceBrowse.svelte @@ -0,0 +1,161 @@ + + +{#if $activeSource} +
+
+ + {$activeSource.displayName} +
+ +
+
+ {#each (["POPULAR", "LATEST"] as BrowseType[]) as mode} + + {/each} + {#if search}{/if} +
+
+ + e.key === "Enter" && submitSearch()} /> +
+
+ + {#if loading} +
+ {#each Array(18) as _} +
+ {/each} +
+ {:else if mangas.length === 0} +
No results.
+ {:else} +
+ {#each mangas as m (m.id)} + + {/each} +
+ {/if} + + {#if !loading && (page > 1 || hasNextPage)} + + {/if} +
+{/if} + +{#if ctx} + ctx = null} /> +{/if} + + diff --git a/src/components/sources/SourceList.svelte b/src/components/sources/SourceList.svelte new file mode 100644 index 0000000..6b45c23 --- /dev/null +++ b/src/components/sources/SourceList.svelte @@ -0,0 +1,124 @@ + + +
+
+

Sources

+
+ + +
+
+ +
+ {#each langs as l} + + {/each} +
+ + {#if loading} +
+ {:else if groups.length === 0} +
No sources found.
+ {:else} +
+ {#each groups as g} + {@const single = g.sources.length === 1} + {@const open = expanded.has(g.name)} +
+ + {#if !single && open} + {#each g.sources as src} + + {/each} + {/if} +
+ {/each} +
+ {/if} +
+ +