From 0c2de3f191cb9cfd10c4186cd16db7db2f8545bf Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Sat, 12 Sep 2026 17:56:21 +0500 Subject: [PATCH] fix: disable download button while running jobs, auto run generator jobs --- docs/backlog.md | 25 +++++++++---- web/src/lib/components/SchemaActions.svelte | 35 +++++-------------- web/src/lib/components/SchemaPreview.svelte | 27 ++++++-------- web/src/lib/components/SchemaToolView.svelte | 6 ++-- .../lib/components/ui/DownloadButton.svelte | 5 +-- 5 files changed, 44 insertions(+), 54 deletions(-) diff --git a/docs/backlog.md b/docs/backlog.md index 8604dc1..a63c4fd 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -16,7 +16,13 @@ ## Мелочи всякие -- [ ] сгенерировать или найти файлы для ручной проверки `A. Краевые PNG-файлы` +- [x] сгенерировать или найти файлы для ручной проверки `A. Краевые PNG-файлы` +- [ ] обдумать объединение пар `inputMode + source` и `resultKind + result` в + единую структуру, позволит упростить некоторые вещи - например + `sourceValue` \ `resultValue` в `SchemaPreview.svelte` +- [ ] Рассмотреть необходимость всех этих пропсов в `SchemaPreview.svelte` они + дублируют друг друга `ontextsource`, `onrendertext`, `oncopytext`, + `ondownloadtxt`, `ondownload`, - [ ] Переделать внешний вид инструментов без настроек, например Remove alpha channel PNG "remove-alpha-channel-png". Сейчас выглядит слишком пустым. - [ ] Убрать описание формата в отображении исходник\результат - это должно быть @@ -31,14 +37,14 @@ паспортом, семейства с кириллицей) - [ ] Посмотреть темную тему - слишком темная и слишком много оттенка (убавить c в hct?) -- [ ] на картинке результате при работе дергается высота надписи (высота иконки) +- [x] на картинке результате при работе дергается высота надписи (высота иконки) - [x] Глянуть что за ошибка (воспроизвелось на blur-png, в том числе и повторно) [баг в хроме](https://issues.chromium.org/issues/556160936) `Uncaught TypeError: Cannot read properties of undefined (reading 'startTime')` `at et.reportAllChanges (anonymous:2:19429)` - [ ] сделать загрузку картинки исходника по ctrl+v и drag-and-drop (dropzone) - [x] не работают генераторы картинок (create-empty-png) -- [ ] генераторы работают не автоматически - требуется нажать кнопку generate +- [x] генераторы работают не автоматически - требуется нажать кнопку generate (create-empty-png) - [ ] square-mask-png - проверить работу - параметры неверно считаются. width - 100, height - 100, x - 100, y - 100, обрезает 50% на 50% картинку @@ -56,9 +62,9 @@ - [ ] придумать процесс редактирования и настройки pipeline - drag-n-drop, удаление, добавление инструментов. переход один инструмент - pipeline без перезагрузки -- [ ] Слаги инструментов (`*-png`) — надо обдумать, возможно что ссылки\маршруты - должны быть с png, а названия инструментов - без. Это упростит названия - инструментов и сделает их более понятными +- [ ] Слаги инструментов (`*-png`) — надо переименовть, они работают с любыми + изображениями. Надо сделать отдельный интерфейс маппинга инструмент -> + ссылка ## Переезд @@ -184,7 +190,12 @@ 9. **`png-info` (детальная информация о PNG)** — оценка M/L. Отложен из миграции. Отдельный райз: exif-теги, редактирование, структурированный вывод; - нужен свой отдельный случай в UI, не «ещё один text/verdict». + нужен свой отдельный случай в UI, не «ещё один text/verdict». возможно нужна + вообще отдельная страница, несовместимая с другими инструментами: 1) она + работает не с изображением, а с мета данными из файла, 2) она не может быть + частью цепочки, т.к. результат не является изображением, 3) если надо + изменить теги, никакого форматирования и изменения в изображение вносить не + надо, только в мета информацияю 10. **Region-инструменты** (censor/erase/pixelate-area/blur-area/sharpen-area/ reverse-area) — ждут UI выделения области на превью. Из diff --git a/web/src/lib/components/SchemaActions.svelte b/web/src/lib/components/SchemaActions.svelte index ddd3bf7..55c392d 100644 --- a/web/src/lib/components/SchemaActions.svelte +++ b/web/src/lib/components/SchemaActions.svelte @@ -1,32 +1,20 @@
- {#if inputMode === "none"} - - {:else if inputMode === "image"} + {#if inputMode === "image"}
@@ -62,15 +54,6 @@ color: var(--color-text-muted); cursor: pointer; } - .generate { - background: var(--color-main); - border-color: var(--color-main); - color: var(--color-background); - } - .generate:disabled { - opacity: 0.6; - cursor: default; - } .upload input { display: none; } diff --git a/web/src/lib/components/SchemaPreview.svelte b/web/src/lib/components/SchemaPreview.svelte index 1c5f4ee..8740c92 100644 --- a/web/src/lib/components/SchemaPreview.svelte +++ b/web/src/lib/components/SchemaPreview.svelte @@ -17,7 +17,6 @@ running?: boolean; error?: string; onupload: (file: File) => void; - ongenerate?: () => void; ontextsource?: (text: string) => void; onrendertext?: () => void; oncopytext?: () => void; @@ -35,7 +34,6 @@ running = false, error = "", onupload, - ongenerate, ontextsource, onrendertext, oncopytext, @@ -43,16 +41,16 @@ ondownload, }: Props = $props(); - const isGenerator = $derived(inputMode === "none"); - const sourceValue = $derived( - isGenerator - ? "—" - : inputMode === "text" - ? "text" - : source - ? `${source.width} × ${source.height} px` - : "—", - ); + const sourceValue = $derived.by(() => { + switch (inputMode) { + case "none": + return "—"; + case "text": + return "text"; + case "image": + return source ? `${source.width} × ${source.height} px` : "—"; + } + }); const resultValue = $derived( resultKind === "image" ? result @@ -77,15 +75,12 @@
- {isGenerator ? "GENERATOR / RESULT" : "SOURCE / RESULT"} + PREVIEW PANEL {})} {ondownload} />
diff --git a/web/src/lib/components/SchemaToolView.svelte b/web/src/lib/components/SchemaToolView.svelte index 0191e2b..615a63e 100644 --- a/web/src/lib/components/SchemaToolView.svelte +++ b/web/src/lib/components/SchemaToolView.svelte @@ -8,12 +8,12 @@ import { execute } from "$lib/executor"; import { t } from "$lib/i18n/t"; import type { FileResult, ToolEntry } from "$lib/registry"; - import { downloadZip } from "$lib/zip"; import { defaultSchemaParams, sanitizeSchemaParams, type ToolSchema, } from "$lib/registry-schema"; + import { downloadZip } from "$lib/zip"; interface Props { tool: ToolEntry; @@ -142,7 +142,8 @@ }); $effect(() => { - if (inputMode !== "image" || !source || !started) return; + // TODO: can any edge case start infinite loop? + if (!started) return; void values; debouncedRun(); return () => debouncedRun.cancel(); @@ -187,7 +188,6 @@ {running} {error} onupload={handleFile} - ongenerate={run} ontextsource={(textValue) => { textSource = textValue; }} diff --git a/web/src/lib/components/ui/DownloadButton.svelte b/web/src/lib/components/ui/DownloadButton.svelte index 63d5195..024a79b 100644 --- a/web/src/lib/components/ui/DownloadButton.svelte +++ b/web/src/lib/components/ui/DownloadButton.svelte @@ -5,8 +5,9 @@ interface Props { label: string; onclick?: () => void; + disabled?: boolean; } - let { label, onclick }: Props = $props(); + let { label, onclick, disabled = false }: Props = $props(); -