From b398f0d8bb652e852a75d1125cf586da14071215 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 19 Jun 2025 02:20:23 +0200 Subject: [PATCH] Refactoring: port 'MultiApply' to svelte, remove SubtleButton.ts as no longer needed --- src/UI/Base/SubtleButton.ts | 43 ----------------------- src/UI/Popup/MultiApply.ts | 52 +--------------------------- src/UI/Popup/MultiApplyButton.svelte | 43 +++++++++++++++++++++++ src/UI/Popup/MultiApplyViz.ts | 9 +++-- 4 files changed, 50 insertions(+), 97 deletions(-) delete mode 100644 src/UI/Base/SubtleButton.ts create mode 100644 src/UI/Popup/MultiApplyButton.svelte diff --git a/src/UI/Base/SubtleButton.ts b/src/UI/Base/SubtleButton.ts deleted file mode 100644 index 25d1092f4..000000000 --- a/src/UI/Base/SubtleButton.ts +++ /dev/null @@ -1,43 +0,0 @@ -import BaseUIElement from "../BaseUIElement" -import { UIElement } from "../UIElement" -import Translations from "../i18n/Translations" -import Combine from "./Combine" -import Img from "./Img" - -/** - * @deprecated - */ -export class SubtleButton extends UIElement { - private readonly imageUrl: string | BaseUIElement - private readonly message: string | BaseUIElement - - constructor( - imageUrl: string | BaseUIElement, - message: string | BaseUIElement - ) { - super() - this.imageUrl = imageUrl - this.message = message - } - - protected InnerRender(): string | BaseUIElement { - const classes = "button" - const message = Translations.W(this.message)?.SetClass( - "block overflow-ellipsis no-images flex-shrink" - ) - let img - const imgClasses = - "block justify-center flex-none mr-4 h-11 w-11" - if ((this.imageUrl ?? "") === "") { - img = undefined - } else if (typeof this.imageUrl === "string") { - img = new Img(this.imageUrl)?.SetClass(imgClasses) - } else { - img = this.imageUrl?.SetClass(imgClasses) - } - const button = new Combine([img, message]).SetClass("flex items-center group w-full") - - this.SetClass(classes) - return button - } -} diff --git a/src/UI/Popup/MultiApply.ts b/src/UI/Popup/MultiApply.ts index 054d23a59..f7dd6f6c9 100644 --- a/src/UI/Popup/MultiApply.ts +++ b/src/UI/Popup/MultiApply.ts @@ -1,14 +1,7 @@ import { Store } from "../../Logic/UIEventSource" -import BaseUIElement from "../BaseUIElement" -import Combine from "../Base/Combine" -import { SubtleButton } from "../Base/SubtleButton" -import { FixedUiElement } from "../Base/FixedUiElement" -import Translations from "../i18n/Translations" -import { VariableUiElement } from "../Base/VariableUIElement" import ChangeTagAction from "../../Logic/Osm/Actions/ChangeTagAction" import { Tag } from "../../Logic/Tags/Tag" import { And } from "../../Logic/Tags/And" -import Toggle from "../Input/Toggle" import { SpecialVisualizationState } from "../SpecialVisualization" export interface MultiApplyParams { @@ -21,7 +14,7 @@ export interface MultiApplyParams { state: SpecialVisualizationState } -class MultiApplyExecutor { +export class MultiApplyExecutor { private static executorCache = new Map() private readonly originalValues = new Map() private readonly params: MultiApplyParams @@ -105,46 +98,3 @@ class MultiApplyExecutor { } } -export default class MultiApply extends Toggle { - constructor(params: MultiApplyParams) { - const p = params - const t = Translations.t.multi_apply - - const featureId = p.tagsSource.data.id - - if (featureId === undefined) { - throw "MultiApply needs a feature id" - } - - const applicator = MultiApplyExecutor.GetApplicator(featureId, params) - - const elems: (string | BaseUIElement)[] = [] - if (p.autoapply) { - elems.push(new FixedUiElement(p.text).SetClass("block")) - elems.push( - new VariableUiElement( - p.featureIds.map((featureIds) => - t.autoApply.Subs({ - attr_names: p.keysToApply.join(", "), - count: "" + featureIds.length, - }) - ) - ).SetClass("block subtle text-sm") - ) - } else { - elems.push( - new SubtleButton(undefined, p.text).onClick(() => - applicator.applyTaggingOnOtherFeatures() - ) - ) - } - - const isShown: Store = p.state.osmConnection.isLoggedIn.map( - (loggedIn) => { - return loggedIn && p.featureIds.data.length > 0 - }, - [p.featureIds] - ) - super(new Combine(elems), undefined, isShown) - } -} diff --git a/src/UI/Popup/MultiApplyButton.svelte b/src/UI/Popup/MultiApplyButton.svelte new file mode 100644 index 000000000..f2dda3f69 --- /dev/null +++ b/src/UI/Popup/MultiApplyButton.svelte @@ -0,0 +1,43 @@ + + + + + {#if $featuresToApplyOn.length > 0} + {#if p.autoapply} +
+
+ + +
{p.text}
+
+
+ +
+
+ {:else} + + {/if} + {/if} +
+ + + diff --git a/src/UI/Popup/MultiApplyViz.ts b/src/UI/Popup/MultiApplyViz.ts index cb2513aac..d9e3f5e7a 100644 --- a/src/UI/Popup/MultiApplyViz.ts +++ b/src/UI/Popup/MultiApplyViz.ts @@ -1,6 +1,8 @@ import { Store, UIEventSource } from "../../Logic/UIEventSource" -import MultiApply from "./MultiApply" +import { MultiApplyParams } from "./MultiApply" import { SpecialVisualization, SpecialVisualizationState } from "../SpecialVisualization" +import SvelteUIElement from "../Base/SvelteUIElement" +import MultiApplyButton from "./MultiApplyButton.svelte" export class MultiApplyViz implements SpecialVisualization { funcName = "multi_apply" @@ -61,7 +63,7 @@ export class MultiApplyViz implements SpecialVisualization { return [] } }) - return new MultiApply({ + const params : MultiApplyParams= { featureIds, keysToApply, text, @@ -69,6 +71,7 @@ export class MultiApplyViz implements SpecialVisualization { overwrite, tagsSource, state, - }) + } + return new SvelteUIElement(MultiApplyButton, { params }) } }