2022-01-16 15:47:13 +00:00
|
|
|
<script lang="ts">
|
2022-04-11 21:31:32 +00:00
|
|
|
import { hasContext, onDestroy } from "svelte";
|
2022-06-10 03:44:35 +00:00
|
|
|
import { slide } from "svelte/transition";
|
|
|
|
|
2022-04-11 21:31:32 +00:00
|
|
|
import Dialog from "./Dialog.svelte";
|
2022-01-16 15:47:13 +00:00
|
|
|
|
2022-04-11 21:31:32 +00:00
|
|
|
import Tag from "./Tag.svelte";
|
|
|
|
import type { Booru } from "../thirdeye";
|
|
|
|
import Tabs from "./Tabs.svelte";
|
|
|
|
import TabList from "./TabList.svelte";
|
|
|
|
import Tab from "./Tab.svelte";
|
|
|
|
import TabPanel from "./TabPanel.svelte";
|
2022-01-16 15:47:13 +00:00
|
|
|
|
2022-04-14 19:52:21 +00:00
|
|
|
import { settings, appState } from "../stores";
|
2022-04-11 21:31:32 +00:00
|
|
|
import { filehosts } from "../filehosts";
|
2022-04-14 19:52:21 +00:00
|
|
|
import HydrusSearch from "./HydrusSearch.svelte";
|
2022-07-18 13:57:11 +00:00
|
|
|
import { request, ifetch } from "../platform";
|
2022-06-08 22:35:05 +00:00
|
|
|
import { writable } from "svelte/store";
|
2022-01-16 15:47:13 +00:00
|
|
|
|
2022-04-11 21:31:32 +00:00
|
|
|
let newbooru: Partial<Omit<Booru, "quirks"> & { view: string }> = {};
|
|
|
|
let dial: Dialog;
|
2022-07-09 10:26:18 +00:00
|
|
|
export let rev: number;
|
|
|
|
|
|
|
|
let news: {
|
|
|
|
title: string;
|
|
|
|
content: string;
|
|
|
|
}[] = [];
|
|
|
|
|
|
|
|
const updateNews = async () => {
|
|
|
|
const res = await fetch("https://shoujo.coom.tech/news");
|
|
|
|
news = await res.json();
|
|
|
|
};
|
2022-01-16 15:47:13 +00:00
|
|
|
|
|
|
|
function appendBooru() {
|
2022-07-18 13:57:11 +00:00
|
|
|
if (execution_mode != "userscript") {
|
|
|
|
request(newbooru.domain!);
|
|
|
|
}
|
|
|
|
|
2022-04-11 21:31:32 +00:00
|
|
|
$settings.rsources = [...$settings.rsources, newbooru as any];
|
|
|
|
dial.toggle();
|
|
|
|
newbooru = {};
|
2022-01-16 15:47:13 +00:00
|
|
|
}
|
|
|
|
|
2022-04-11 21:31:32 +00:00
|
|
|
let visible = false;
|
2022-01-16 15:47:13 +00:00
|
|
|
let penisEvent = () => {
|
2022-04-11 21:31:32 +00:00
|
|
|
visible = !visible;
|
|
|
|
};
|
|
|
|
document.addEventListener("penis", penisEvent);
|
|
|
|
console.log("app loaded");
|
2022-01-16 15:47:13 +00:00
|
|
|
|
|
|
|
function removeTag(t: string) {
|
2022-04-11 21:31:32 +00:00
|
|
|
$settings.blacklist = $settings.blacklist.filter((e: any) => e != t);
|
2022-01-16 15:47:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function removeBooru(t: string) {
|
2022-04-11 21:31:32 +00:00
|
|
|
const idx = $settings.rsources.findIndex((e) => e.domain == t);
|
|
|
|
const rep = prompt("You DO know what you're doing, right? (type 'y')");
|
|
|
|
if (!rep || rep != "y") return;
|
|
|
|
if (idx >= 0) $settings.rsources.splice(idx, 1);
|
|
|
|
$settings.rsources = $settings.rsources;
|
|
|
|
}
|
|
|
|
|
2022-07-24 18:15:00 +00:00
|
|
|
const setFromClip = async () => {
|
|
|
|
try {
|
|
|
|
const content = await navigator.clipboard.readText();
|
|
|
|
$settings.rsources = JSON.parse(content);
|
|
|
|
} catch {
|
2022-09-01 08:40:14 +00:00
|
|
|
try {
|
2022-09-01 21:33:40 +00:00
|
|
|
const content = prompt("Paste it in here") || "";
|
|
|
|
let v = JSON.parse(content);
|
|
|
|
if (execution_mode == "ff_api") v = cloneInto(v, window);
|
|
|
|
$settings.rsources = v;
|
|
|
|
} catch (e) {
|
|
|
|
console.log(e);
|
2022-09-01 08:40:14 +00:00
|
|
|
alert("How can you fail so badly? pathetic...");
|
|
|
|
}
|
2022-07-24 18:15:00 +00:00
|
|
|
}
|
2022-09-01 08:40:14 +00:00
|
|
|
};
|
2022-07-24 18:15:00 +00:00
|
|
|
|
2022-04-11 21:31:32 +00:00
|
|
|
const boardname = location.pathname.match(/\/([^/]*)\//)![1];
|
|
|
|
let updating = false;
|
2022-06-10 03:44:35 +00:00
|
|
|
let threads: {
|
|
|
|
id: number;
|
|
|
|
cnt: number;
|
|
|
|
pees: number;
|
|
|
|
eyes: number;
|
|
|
|
other: number;
|
|
|
|
}[] = [];
|
2022-09-14 15:59:00 +00:00
|
|
|
|
2022-04-11 21:31:32 +00:00
|
|
|
async function updateThreads() {
|
|
|
|
updating = true;
|
|
|
|
let params = "";
|
|
|
|
if ($settings.phash) {
|
2022-04-11 22:13:31 +00:00
|
|
|
params = "?mdist=" + $settings.mdist;
|
2022-04-11 21:31:32 +00:00
|
|
|
}
|
2022-05-02 19:07:24 +00:00
|
|
|
let res = await ifetch(
|
2022-04-11 21:31:32 +00:00
|
|
|
"https://shoujo.coom.tech/listing/" + boardname + params
|
|
|
|
);
|
|
|
|
threads = await res.json();
|
|
|
|
updating = false;
|
2022-01-16 15:47:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function toggleBooru(t: string) {
|
2022-04-11 21:31:32 +00:00
|
|
|
const elem = $settings.rsources.find((e) => e.domain == t);
|
|
|
|
if (elem) elem.disabled = !elem.disabled;
|
|
|
|
$settings.rsources = $settings.rsources;
|
2022-01-16 15:47:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
onDestroy(() => {
|
2022-04-11 21:31:32 +00:00
|
|
|
document.removeEventListener("penis", penisEvent);
|
|
|
|
});
|
2022-06-08 22:35:05 +00:00
|
|
|
|
|
|
|
let cached = writable<boolean>(false);
|
|
|
|
|
|
|
|
settings.subscribe((val) => {
|
|
|
|
cached.set(
|
|
|
|
typeof val.cache == "boolean" ? val.cache : location.host.includes("b4k")
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
cached.subscribe((v) => {
|
|
|
|
$settings.cache = v;
|
|
|
|
});
|
2022-01-16 15:47:13 +00:00
|
|
|
</script>
|
|
|
|
|
2022-08-08 11:53:50 +00:00
|
|
|
{#if $appState.processing != $appState.processed}
|
|
|
|
<div class="loading">
|
|
|
|
PEE Loading... ({$appState.processed} / {$appState.processing})
|
|
|
|
</div>
|
|
|
|
{/if}
|
|
|
|
|
2022-06-10 03:44:35 +00:00
|
|
|
{#if visible}
|
|
|
|
<div class="backpanel" transition:slide>
|
|
|
|
<div class="content">
|
2022-07-09 10:26:18 +00:00
|
|
|
<h1>PEE Settings 0.{rev}</h1>
|
2022-09-01 08:40:14 +00:00
|
|
|
<h4>
|
2022-12-23 01:41:34 +00:00
|
|
|
<a href="https://2chen.moe/tech/">Join us on 2chen!</a>
|
2022-09-01 08:40:14 +00:00
|
|
|
</h4>
|
2022-06-10 03:44:35 +00:00
|
|
|
<hr />
|
|
|
|
<Tabs>
|
|
|
|
<TabList>
|
|
|
|
<Tab>General</Tab>
|
|
|
|
<Tab>External</Tab>
|
|
|
|
<Tab>File Host</Tab>
|
|
|
|
<Tab on:select={() => updateThreads()}>Thread Watcher</Tab>
|
2022-07-09 10:26:18 +00:00
|
|
|
<Tab on:select={() => updateNews()}>Reminder</Tab>
|
2022-07-24 17:18:02 +00:00
|
|
|
<Tab>Advanced</Tab>
|
2022-06-10 03:44:35 +00:00
|
|
|
{#if $appState.akValid}
|
|
|
|
<Tab>Hydrus</Tab>
|
|
|
|
{/if}
|
|
|
|
</TabList>
|
|
|
|
<TabPanel>
|
2022-07-19 15:29:49 +00:00
|
|
|
<label>
|
2022-07-23 13:30:46 +00:00
|
|
|
<input type="checkbox" bind:checked={$settings.notcata} />
|
|
|
|
Disable loading on catalog
|
2022-07-19 15:29:49 +00:00
|
|
|
</label>
|
2022-06-10 03:44:35 +00:00
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$cached} />
|
|
|
|
Try to load embeds from server cache
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.dvc} />
|
|
|
|
Display view counts
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.vercheck} />
|
|
|
|
Check for new versions at startup.
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.xpi} />
|
|
|
|
Autoexpand Images on opening.
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.xpv} />
|
|
|
|
Autoexpand Videos on opening.
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.loop} />
|
|
|
|
Loop media content.
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.dh} />
|
|
|
|
Disable hover preview.
|
|
|
|
</label>
|
2022-01-16 15:47:13 +00:00
|
|
|
|
|
|
|
<label>
|
2022-06-10 03:44:35 +00:00
|
|
|
<input type="checkbox" bind:checked={$settings.eye} />
|
|
|
|
Hide embedded content behind an eye.
|
2022-01-16 15:47:13 +00:00
|
|
|
</label>
|
2022-06-10 03:44:35 +00:00
|
|
|
{#if $settings.eye}
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.ho} />
|
|
|
|
Hide original content when hidden content is visible.
|
|
|
|
</label>
|
2022-04-14 19:52:21 +00:00
|
|
|
{/if}
|
|
|
|
<label>
|
2022-06-10 03:44:35 +00:00
|
|
|
<input type="checkbox" bind:checked={$settings.pre} />
|
|
|
|
Preload external files.
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.prev} />
|
|
|
|
Preload external files when they are in view.
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.hotlink} />
|
|
|
|
Hotlink content.
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.ca} />
|
|
|
|
Control audio on videos with mouse wheel.
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.sh} />
|
|
|
|
Show Minimap
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.ep} />
|
2022-04-14 19:52:21 +00:00
|
|
|
<!-- svelte-ignore a11y-missing-attribute -->
|
2022-06-10 03:44:35 +00:00
|
|
|
Disable embedded file preloading<a
|
|
|
|
title="You might still want to enable 'preload external files'"
|
2022-04-14 19:52:21 +00:00
|
|
|
>?</a
|
|
|
|
>
|
|
|
|
</label>
|
2022-01-26 20:45:15 +00:00
|
|
|
<label>
|
2022-06-10 03:44:35 +00:00
|
|
|
<input type="checkbox" bind:checked={$settings.hyd} />
|
|
|
|
<!-- svelte-ignore a11y-missing-attribute -->
|
|
|
|
Enable Hydrus Integration
|
2022-01-26 20:45:15 +00:00
|
|
|
</label>
|
2022-06-10 03:44:35 +00:00
|
|
|
{#if $settings.hyd}
|
|
|
|
{#if $appState.herror}
|
|
|
|
<span class="error">{$appState.herror}</span>
|
|
|
|
{/if}
|
2022-01-26 20:45:15 +00:00
|
|
|
<label>
|
2022-06-10 03:44:35 +00:00
|
|
|
Hydrus Access Key
|
2022-01-26 20:45:15 +00:00
|
|
|
<!-- svelte-ignore a11y-missing-attribute -->
|
|
|
|
<a
|
2022-06-10 03:44:35 +00:00
|
|
|
title="Only requires Search Files permission. See Hydrus docs on where to set this up."
|
2022-01-26 20:45:15 +00:00
|
|
|
>?</a
|
|
|
|
>
|
2022-06-10 03:44:35 +00:00
|
|
|
<input type="text" bind:value={$settings.ak} />
|
2022-01-26 20:45:15 +00:00
|
|
|
</label>
|
2022-06-10 03:44:35 +00:00
|
|
|
{#if $appState.akValid}
|
2022-01-16 15:47:13 +00:00
|
|
|
<label>
|
2022-06-10 03:44:35 +00:00
|
|
|
Auto-embed <input
|
|
|
|
style="width: 5ch;"
|
|
|
|
type="number"
|
|
|
|
bind:value={$settings.auto_embed}
|
2022-01-16 15:47:13 +00:00
|
|
|
/>
|
2022-06-10 03:44:35 +00:00
|
|
|
random files
|
|
|
|
<!-- svelte-ignore a11y-missing-attribute -->
|
2022-01-16 15:47:13 +00:00
|
|
|
</label>
|
|
|
|
<label>
|
2022-06-10 03:44:35 +00:00
|
|
|
<!-- svelte-ignore a11y-missing-attribute -->
|
2022-01-16 15:47:13 +00:00
|
|
|
<input
|
2022-06-10 03:44:35 +00:00
|
|
|
placeholder="Restrict to these tags (space to separate tags, _ to separate words)"
|
2022-01-16 15:47:13 +00:00
|
|
|
type="text"
|
2022-06-10 03:44:35 +00:00
|
|
|
bind:value={$settings.auto_tags}
|
2022-01-16 15:47:13 +00:00
|
|
|
/>
|
|
|
|
</label>
|
2022-06-10 03:44:35 +00:00
|
|
|
{/if}
|
|
|
|
{/if}
|
|
|
|
</TabPanel>
|
|
|
|
<TabPanel>
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.te} />
|
|
|
|
Disable third-eye.
|
|
|
|
</label>
|
|
|
|
{#if !$settings.te}
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.phash} />
|
|
|
|
Enable perceptual hash-based filtering
|
|
|
|
</label>
|
|
|
|
{#if $settings.phash}
|
2022-01-16 15:47:13 +00:00
|
|
|
<label>
|
2022-06-10 03:44:35 +00:00
|
|
|
<input type="number" bind:value={$settings.mdist} />
|
|
|
|
Minimum distance required (5 recommended)
|
|
|
|
<!-- svelte-ignore a11y-missing-attribute -->
|
|
|
|
<a
|
|
|
|
title="Higher will filter more potentially different images, lower will let more identical images through"
|
|
|
|
>?</a
|
|
|
|
>
|
2022-01-16 15:47:13 +00:00
|
|
|
</label>
|
2022-06-10 03:44:35 +00:00
|
|
|
{/if}
|
|
|
|
<h3>Booru sources</h3>
|
2022-07-18 13:57:11 +00:00
|
|
|
{#if $settings.rsources.length == 0}
|
|
|
|
<p>Don't know what to put here? Ask some anons ;)</p>
|
|
|
|
{/if}
|
2022-06-10 03:44:35 +00:00
|
|
|
<div class="tagcont">
|
|
|
|
{#each $settings.rsources as source, i}
|
|
|
|
<Tag
|
|
|
|
tag={source.name}
|
|
|
|
on:remove={() => removeBooru(source.domain)}
|
|
|
|
on:toggle={() => toggleBooru(source.domain)}
|
|
|
|
toggleable={true}
|
|
|
|
toggled={!$settings.rsources.find(
|
|
|
|
(e) => e.domain == source.domain
|
|
|
|
)?.disabled}
|
2022-01-16 15:47:13 +00:00
|
|
|
/>
|
2022-06-10 03:44:35 +00:00
|
|
|
{/each}
|
2022-01-16 15:47:13 +00:00
|
|
|
</div>
|
2022-06-10 03:44:35 +00:00
|
|
|
<button
|
|
|
|
on:click={(ev) => {
|
|
|
|
dial.setPos([ev.clientX, ev.clientY]);
|
|
|
|
dial.toggle();
|
|
|
|
}}>Add a source</button
|
|
|
|
>
|
2022-07-24 18:15:00 +00:00
|
|
|
{#if $settings.rsources.length == 0}
|
2022-09-01 08:40:14 +00:00
|
|
|
<button on:click={setFromClip}>Import Bulk from clipboard</button>
|
2022-07-24 18:15:00 +00:00
|
|
|
{/if}
|
2022-06-10 03:44:35 +00:00
|
|
|
<Dialog bind:this={dial}>
|
|
|
|
<div class="form">
|
|
|
|
<label>
|
|
|
|
Name
|
|
|
|
<input
|
|
|
|
type="text"
|
2022-07-18 13:57:11 +00:00
|
|
|
placeholder="Safebooru"
|
2022-06-10 03:44:35 +00:00
|
|
|
bind:value={newbooru.name}
|
|
|
|
/>
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
Domain
|
|
|
|
<input
|
|
|
|
type="text"
|
2022-07-18 13:57:11 +00:00
|
|
|
placeholder="safebooru.com"
|
2022-06-10 03:44:35 +00:00
|
|
|
bind:value={newbooru.domain}
|
|
|
|
/>
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
API Endpoint
|
|
|
|
<input
|
|
|
|
type="text"
|
|
|
|
placeholder="/post.json?tags=md5:"
|
|
|
|
bind:value={newbooru.endpoint}
|
|
|
|
/>
|
|
|
|
</label>
|
|
|
|
<label>
|
|
|
|
Post page prefix (for sources)
|
|
|
|
<input
|
|
|
|
type="text"
|
2022-07-18 13:57:11 +00:00
|
|
|
placeholder="https://safebooru.com/post/show/"
|
2022-06-10 03:44:35 +00:00
|
|
|
bind:value={newbooru.view}
|
|
|
|
/>
|
|
|
|
</label>
|
|
|
|
<button on:click={appendBooru}>Add</button>
|
|
|
|
</div>
|
|
|
|
</Dialog>
|
2022-01-16 15:47:13 +00:00
|
|
|
|
2022-06-10 03:44:35 +00:00
|
|
|
<hr />
|
|
|
|
<h3>Blacklisted tags</h3>
|
|
|
|
<div class="tagcont">
|
|
|
|
{#each $settings.blacklist as tag, i}
|
|
|
|
<Tag {tag} on:toggle={() => removeTag(tag)} />
|
|
|
|
{/each}
|
|
|
|
</div>
|
|
|
|
<input
|
|
|
|
placeholder="Press enter after typing your tag"
|
|
|
|
on:keydown={(ev) => {
|
|
|
|
if (ev.key == "Enter") {
|
|
|
|
$settings.blacklist = [
|
|
|
|
...$settings.blacklist,
|
|
|
|
ev.currentTarget.value,
|
|
|
|
];
|
|
|
|
ev.currentTarget.value = "";
|
|
|
|
}
|
|
|
|
}}
|
|
|
|
/>
|
|
|
|
{/if}
|
|
|
|
</TabPanel>
|
|
|
|
<TabPanel>
|
|
|
|
<p>Host to use when uploading files (Only permanent hosts)</p>
|
|
|
|
<select bind:value={$settings.fhost}>
|
|
|
|
{#each filehosts as fh, i}
|
|
|
|
<option value={i}>{fh.domain}</option>
|
2022-01-16 15:47:13 +00:00
|
|
|
{/each}
|
2022-06-10 03:44:35 +00:00
|
|
|
</select>
|
|
|
|
<label>
|
|
|
|
Maximum number of embedded links to display
|
|
|
|
<input type="number" bind:value={$settings.maxe} />
|
|
|
|
</label>
|
|
|
|
</TabPanel>
|
|
|
|
<TabPanel>
|
|
|
|
<label>
|
|
|
|
<input type="checkbox" bind:checked={$settings.tm} />
|
|
|
|
<!-- svelte-ignore a11y-missing-attribute -->
|
|
|
|
Contribute to help keep this list up to date. [<a
|
|
|
|
title="This will make PEE automatically send the
|
2022-04-11 21:31:32 +00:00
|
|
|
post number of posts you find with embedded content">?</a
|
2022-06-10 03:44:35 +00:00
|
|
|
>]
|
|
|
|
</label>
|
2022-04-11 21:31:32 +00:00
|
|
|
|
2022-06-10 03:44:35 +00:00
|
|
|
{#if !updating}
|
|
|
|
<div class="bepis">
|
|
|
|
<p>Format is (embedded links / link in filename)</p>
|
|
|
|
{#each threads as thread}
|
|
|
|
<div class="mbepis">
|
|
|
|
<a
|
|
|
|
href={"https://boards.4chan.org/" +
|
|
|
|
boardname +
|
|
|
|
"/thread/" +
|
|
|
|
thread.id}>>>{thread.id}</a
|
|
|
|
>
|
|
|
|
({thread.pees} / {thread.eyes + thread.other})
|
|
|
|
</div>
|
|
|
|
{/each}
|
|
|
|
</div>
|
|
|
|
{:else}
|
|
|
|
<p>Loading...</p>
|
|
|
|
{/if}
|
2022-04-14 19:52:21 +00:00
|
|
|
</TabPanel>
|
2022-07-09 10:26:18 +00:00
|
|
|
<TabPanel>
|
|
|
|
<p>
|
|
|
|
Reminder to report issues to <a
|
|
|
|
href="https://git.coom.tech/coomdev/PEE">the main repo</a
|
|
|
|
>
|
|
|
|
</p>
|
|
|
|
<div class="newsbox">
|
|
|
|
{#if news.length == 0}
|
|
|
|
<p>There are no news yet.</p>
|
|
|
|
{:else}
|
|
|
|
{#each news as anew}
|
|
|
|
<h3>{anew.title}</h3>
|
|
|
|
<p>{anew.content}</p>
|
|
|
|
{/each}
|
|
|
|
{/if}
|
|
|
|
</div>
|
|
|
|
</TabPanel>
|
2022-07-24 17:18:02 +00:00
|
|
|
<TabPanel>
|
|
|
|
<label>
|
|
|
|
PNG Embedding method
|
|
|
|
<select bind:value={$settings.pmeth}>
|
2022-07-29 01:06:03 +00:00
|
|
|
{#each [0, 1, 2, 3, 4, 5] as m}
|
2022-09-01 08:40:14 +00:00
|
|
|
<option value={m}>Method {m}</option>
|
2022-07-24 17:18:02 +00:00
|
|
|
{/each}
|
|
|
|
</select>
|
|
|
|
</label>
|
|
|
|
</TabPanel>
|
2022-07-14 12:51:51 +00:00
|
|
|
{#if $appState.akValid}
|
|
|
|
<TabPanel>
|
|
|
|
<HydrusSearch />
|
|
|
|
</TabPanel>
|
|
|
|
{/if}
|
2022-06-10 03:44:35 +00:00
|
|
|
</Tabs>
|
|
|
|
</div>
|
2022-01-16 15:47:13 +00:00
|
|
|
</div>
|
2022-06-10 03:44:35 +00:00
|
|
|
{/if}
|
2022-01-16 15:47:13 +00:00
|
|
|
|
|
|
|
<style scoped>
|
2022-04-11 21:31:32 +00:00
|
|
|
.bepis {
|
|
|
|
max-height: 260px;
|
|
|
|
overflow-y: auto;
|
|
|
|
}
|
|
|
|
|
2022-01-16 15:47:13 +00:00
|
|
|
.tagcont {
|
|
|
|
display: flex;
|
|
|
|
gap: 5px;
|
|
|
|
margin-bottom: 10px;
|
|
|
|
flex-wrap: wrap;
|
|
|
|
}
|
|
|
|
|
2022-04-14 19:52:21 +00:00
|
|
|
label > input[type="text"],
|
|
|
|
label > input[type="number"] {
|
|
|
|
width: 95%;
|
|
|
|
}
|
|
|
|
|
2022-01-16 15:47:13 +00:00
|
|
|
.content {
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
}
|
|
|
|
|
2022-04-14 19:52:21 +00:00
|
|
|
.error {
|
|
|
|
color: red;
|
|
|
|
}
|
|
|
|
|
2022-01-16 15:47:13 +00:00
|
|
|
hr {
|
|
|
|
width: 100%;
|
|
|
|
}
|
|
|
|
|
|
|
|
h1 {
|
|
|
|
text-align: center;
|
2022-07-22 18:47:39 +00:00
|
|
|
margin-bottom: 0;
|
2022-01-16 15:47:13 +00:00
|
|
|
}
|
2022-07-22 18:47:39 +00:00
|
|
|
|
|
|
|
h4 {
|
2022-07-23 13:30:46 +00:00
|
|
|
text-align: center;
|
2022-07-22 18:47:39 +00:00
|
|
|
margin: 0;
|
|
|
|
}
|
2022-07-24 17:18:02 +00:00
|
|
|
|
2022-01-16 15:47:13 +00:00
|
|
|
.form {
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
gap: 20px;
|
|
|
|
position: absolute;
|
|
|
|
padding: 15px;
|
|
|
|
border: 1px solid white;
|
2022-07-18 13:57:11 +00:00
|
|
|
background-color: black;
|
2022-01-16 15:47:13 +00:00
|
|
|
border-radius: 10px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.form > label {
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
gap: 10px;
|
|
|
|
}
|
|
|
|
|
2022-07-09 10:26:18 +00:00
|
|
|
.newsbox {
|
|
|
|
max-height: 300px;
|
|
|
|
overflow-y: scroll;
|
|
|
|
}
|
|
|
|
|
2022-01-16 15:47:13 +00:00
|
|
|
.backpanel {
|
|
|
|
position: absolute;
|
|
|
|
right: 32px;
|
|
|
|
padding: 10px;
|
|
|
|
width: 15%;
|
|
|
|
top: 32px;
|
|
|
|
border: 1px solid;
|
|
|
|
border-radius: 5px;
|
2022-06-10 03:44:35 +00:00
|
|
|
background-color: rgba(0, 0, 0, 0.8);
|
2022-01-16 15:47:13 +00:00
|
|
|
pointer-events: all;
|
|
|
|
backdrop-filter: blur(9px);
|
|
|
|
max-height: 80vh;
|
|
|
|
min-width: 321px;
|
|
|
|
}
|
2022-08-08 11:53:50 +00:00
|
|
|
|
|
|
|
.loading {
|
|
|
|
position: absolute;
|
|
|
|
right: 32px;
|
|
|
|
padding: 10px;
|
|
|
|
bottom: 32px;
|
|
|
|
border: 1px solid;
|
|
|
|
border-radius: 10px;
|
|
|
|
background-color: rgba(0, 0, 0, 0.8);
|
|
|
|
pointer-events: all;
|
|
|
|
backdrop-filter: blur(9px);
|
|
|
|
}
|
2022-01-16 15:47:13 +00:00
|
|
|
</style>
|