forked from MapComplete/MapComplete
		
	Refactoring: remove last of old SVG-bundling
This commit is contained in:
		
							parent
							
								
									195e9b140f
								
							
						
					
					
						commit
						3bb73425e3
					
				
					 8 changed files with 38 additions and 153 deletions
				
			
		| 
						 | 
				
			
			@ -1,118 +1,9 @@
 | 
			
		|||
import * as fs from "fs"
 | 
			
		||||
import Script from "./Script"
 | 
			
		||||
 | 
			
		||||
function genImages(dryrun = false) {
 | 
			
		||||
    console.log("Generating images")
 | 
			
		||||
    // These images are not referenced via 'Svg.ts' anymore and can be ignored
 | 
			
		||||
    const blacklist: string[] = [
 | 
			
		||||
        "add",
 | 
			
		||||
        "addSmall",
 | 
			
		||||
        "back",
 | 
			
		||||
        "circle",
 | 
			
		||||
        "blocked",
 | 
			
		||||
        "brick_wall",
 | 
			
		||||
        "brick_wall_raw",
 | 
			
		||||
        "brick_wall_round",
 | 
			
		||||
        "brick_wall_square",
 | 
			
		||||
        "bug",
 | 
			
		||||
        "center",
 | 
			
		||||
        "checkmark",
 | 
			
		||||
        "clock",
 | 
			
		||||
        "close",
 | 
			
		||||
        "community",
 | 
			
		||||
        "compass",
 | 
			
		||||
        "compass_arrow",
 | 
			
		||||
        "confirm",
 | 
			
		||||
        "copyright",
 | 
			
		||||
        "cross",
 | 
			
		||||
        "cross_bottom_right",
 | 
			
		||||
        "crosshair",
 | 
			
		||||
        "crosshair_locked",
 | 
			
		||||
        "crosshair-locked",
 | 
			
		||||
        "delete_not_allowed",
 | 
			
		||||
        "direction_gradient",
 | 
			
		||||
        "direction_stroke",
 | 
			
		||||
        "duplicate",
 | 
			
		||||
        "elevator",
 | 
			
		||||
        "elevator_wheelchair",
 | 
			
		||||
        "envelope",
 | 
			
		||||
        "eye",
 | 
			
		||||
        "filter",
 | 
			
		||||
        "filter_disable",
 | 
			
		||||
        "floppy",
 | 
			
		||||
        "gear",
 | 
			
		||||
        "gender_bi",
 | 
			
		||||
        "gender_inter",
 | 
			
		||||
        "gender_female",
 | 
			
		||||
        "gender_male",
 | 
			
		||||
        "gender_trans",
 | 
			
		||||
        "gender_queer",
 | 
			
		||||
        "generic_map",
 | 
			
		||||
        "gps_arrow",
 | 
			
		||||
        "hand",
 | 
			
		||||
        "help",
 | 
			
		||||
        "home",
 | 
			
		||||
        "length_crosshair",
 | 
			
		||||
        "length-crosshair",
 | 
			
		||||
        "liberapay",
 | 
			
		||||
        "location",
 | 
			
		||||
        "location_empty",
 | 
			
		||||
        "location_locked",
 | 
			
		||||
        "location_refused",
 | 
			
		||||
        "location-refused",
 | 
			
		||||
        "location_unlocked",
 | 
			
		||||
        "logo",
 | 
			
		||||
        "logout",
 | 
			
		||||
        "mapcomplete_logo",
 | 
			
		||||
        "mapillary",
 | 
			
		||||
        "mapillary_black",
 | 
			
		||||
        "mastodon",
 | 
			
		||||
        "min",
 | 
			
		||||
        "move",
 | 
			
		||||
        "move-arrows",
 | 
			
		||||
        "move_confirm",
 | 
			
		||||
        "move_not_allowed",
 | 
			
		||||
        "not_found",
 | 
			
		||||
        "osm_logo_us",
 | 
			
		||||
        "osm-logo-us",
 | 
			
		||||
        "party",
 | 
			
		||||
        "pencil",
 | 
			
		||||
        "person",
 | 
			
		||||
        "pin",
 | 
			
		||||
        "plantnet_logo",
 | 
			
		||||
        "plus",
 | 
			
		||||
        "reload",
 | 
			
		||||
        "resolved",
 | 
			
		||||
        "ring",
 | 
			
		||||
        "robot",
 | 
			
		||||
        "scissors",
 | 
			
		||||
        "search",
 | 
			
		||||
        "search_disable",
 | 
			
		||||
        "share",
 | 
			
		||||
        "SocialImageForeground",
 | 
			
		||||
        "speech_bubble",
 | 
			
		||||
        "speech_bubble_black_outline",
 | 
			
		||||
        "square",
 | 
			
		||||
        "square_rounded",
 | 
			
		||||
        "star",
 | 
			
		||||
        "star_half",
 | 
			
		||||
        "star_outline",
 | 
			
		||||
        "teardrop",
 | 
			
		||||
        "teardrop_with_hole_green",
 | 
			
		||||
        "statistics",
 | 
			
		||||
        "translate",
 | 
			
		||||
        "triangle",
 | 
			
		||||
        "up",
 | 
			
		||||
        "Upload",
 | 
			
		||||
        "wikidata",
 | 
			
		||||
        "wikimedia-commons-white",
 | 
			
		||||
        "wikimedia_commons_white",
 | 
			
		||||
        "wikipedia",
 | 
			
		||||
        "github",
 | 
			
		||||
    ].map((s) => s.toLowerCase())
 | 
			
		||||
    const dir = fs.readdirSync("./assets/svg")
 | 
			
		||||
 | 
			
		||||
    let module =
 | 
			
		||||
        'import Img from "./UI/Base/Img";\n\n/* @deprecated */\nexport default class Svg {\n\n\n'
 | 
			
		||||
    for (const path of dir) {
 | 
			
		||||
        if (path.endsWith("license_info.json")) {
 | 
			
		||||
            continue
 | 
			
		||||
| 
						 | 
				
			
			@ -133,7 +24,7 @@ function genImages(dryrun = false) {
 | 
			
		|||
            .replace(/\n/g, " ")
 | 
			
		||||
            .replace(/\r/g, "")
 | 
			
		||||
            .replace(/\\/g, "\\")
 | 
			
		||||
            .replace(/"/g, '\\"')
 | 
			
		||||
            .replace(/"/g, "\\\"")
 | 
			
		||||
            .replaceAll(" ", " ")
 | 
			
		||||
 | 
			
		||||
        let hasNonAsciiChars = Array.from(svg)
 | 
			
		||||
| 
						 | 
				
			
			@ -147,35 +38,29 @@ function genImages(dryrun = false) {
 | 
			
		|||
 | 
			
		||||
        const nameUC = name.toUpperCase().at(0) + name.substring(1)
 | 
			
		||||
        const svelteCode =
 | 
			
		||||
            '<script>\nexport let color = "#000000"\n</script>\n' +
 | 
			
		||||
            "<script>\nexport let color = \"#000000\"\n</script>\n" +
 | 
			
		||||
            svg
 | 
			
		||||
                .replace(
 | 
			
		||||
                    "<svg ",
 | 
			
		||||
                    "<svg {...$$$$restProps} on:click on:mouseover on:mouseenter on:mouseleave on:keydown "
 | 
			
		||||
                    "<svg {...$$$$restProps} on:click on:mouseover on:mouseenter on:mouseleave on:keydown ",
 | 
			
		||||
                )
 | 
			
		||||
                .replace(/\\"/g, '"')
 | 
			
		||||
                .replace(/\\"/g, "\"")
 | 
			
		||||
                .replace(/(rgb\(0%,0%,0%\)|#000000|#000)/g, "{color}")
 | 
			
		||||
        fs.writeFileSync("./src/assets/svg/" + nameUC + ".svelte", svelteCode, "utf8")
 | 
			
		||||
 | 
			
		||||
        if (blacklist.some((item) => path.toLowerCase().endsWith(item + ".svg"))) {
 | 
			
		||||
            continue
 | 
			
		||||
    }
 | 
			
		||||
        if (dryrun) {
 | 
			
		||||
            svg = "<omitting svg - dryrun>"
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let rawName = name
 | 
			
		||||
 | 
			
		||||
        module += `    public static ${name} = "${svg}"\n`
 | 
			
		||||
        if (!dryrun) {
 | 
			
		||||
            module += `    public static ${name}_svg() { return new Img(Svg.${rawName}, true);}\n`
 | 
			
		||||
        } else {
 | 
			
		||||
            module += `    public static ${name}_svg() { return new Img("", true);}\n`
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    module += "}\n"
 | 
			
		||||
    fs.writeFileSync("src/Svg.ts", module)
 | 
			
		||||
    console.log("Done")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
genImages()
 | 
			
		||||
 | 
			
		||||
class GenerateIncludedImages extends Script {
 | 
			
		||||
    constructor() {
 | 
			
		||||
        super("Converts all images from assets/svg into svelte-classes.")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async main(args: string[]): Promise<void> {
 | 
			
		||||
        genImages()
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
new GenerateIncludedImages().run()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,14 @@
 | 
			
		|||
import Combine from "./Combine"
 | 
			
		||||
import Svg from "../../Svg"
 | 
			
		||||
import Translations from "../i18n/Translations"
 | 
			
		||||
import BaseUIElement from "../BaseUIElement"
 | 
			
		||||
 | 
			
		||||
import SvelteUIElement from "./SvelteUIElement"
 | 
			
		||||
import {default as LoadingSvg} from "../../assets/svg/Loading.svelte"
 | 
			
		||||
export default class Loading extends Combine {
 | 
			
		||||
    constructor(msg?: BaseUIElement | string) {
 | 
			
		||||
        const t = Translations.W(msg) ?? Translations.t.general.loading
 | 
			
		||||
        t.SetClass("pl-2")
 | 
			
		||||
        super([
 | 
			
		||||
            Svg.loading_svg()
 | 
			
		||||
            new SvelteUIElement(LoadingSvg)
 | 
			
		||||
                .SetClass("animate-spin self-center")
 | 
			
		||||
                .SetStyle("width: 1.5rem; height: 1.5rem; min-width: 1.5rem;"),
 | 
			
		||||
            t,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,12 +2,13 @@ import { Store } from "../../Logic/UIEventSource"
 | 
			
		|||
import Translations from "../i18n/Translations"
 | 
			
		||||
import Toggle, { ClickableToggle } from "../Input/Toggle"
 | 
			
		||||
import Combine from "../Base/Combine"
 | 
			
		||||
import Svg from "../../Svg"
 | 
			
		||||
import { Tag } from "../../Logic/Tags/Tag"
 | 
			
		||||
import ChangeTagAction from "../../Logic/Osm/Actions/ChangeTagAction"
 | 
			
		||||
import { Changes } from "../../Logic/Osm/Changes"
 | 
			
		||||
import { OsmConnection } from "../../Logic/Osm/OsmConnection"
 | 
			
		||||
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"
 | 
			
		||||
import SvelteUIElement from "../Base/SvelteUIElement"
 | 
			
		||||
import Delete_icon from "../../assets/svg/Delete_icon.svelte"
 | 
			
		||||
 | 
			
		||||
export default class DeleteImage extends Toggle {
 | 
			
		||||
    constructor(
 | 
			
		||||
| 
						 | 
				
			
			@ -48,7 +49,7 @@ export default class DeleteImage extends Toggle {
 | 
			
		|||
            .Clone()
 | 
			
		||||
            .SetClass("bg-white pl-4 pr-4")
 | 
			
		||||
            .SetStyle("border-bottom-left-radius:30rem; border-bottom-right-radius: 30rem;")
 | 
			
		||||
        const openDelete = Svg.delete_icon_svg().SetStyle("width: 2em; height: 2em; display:block;")
 | 
			
		||||
        const openDelete = new SvelteUIElement(Delete_icon).SetStyle("width: 2em; height: 2em; display:block;")
 | 
			
		||||
        const deleteDialog = new ClickableToggle(
 | 
			
		||||
            new Combine([deleteButton, cancelButton]).SetClass("flex flex-col background-black"),
 | 
			
		||||
            openDelete
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,12 +1,13 @@
 | 
			
		|||
/**
 | 
			
		||||
 * A single opening hours range, shown on top of the OH-picker table
 | 
			
		||||
 */
 | 
			
		||||
import Svg from "../../Svg"
 | 
			
		||||
import { Utils } from "../../Utils"
 | 
			
		||||
import Combine from "../Base/Combine"
 | 
			
		||||
import { OH, OpeningHour } from "./OpeningHours"
 | 
			
		||||
import BaseUIElement from "../BaseUIElement"
 | 
			
		||||
import { FixedUiElement } from "../Base/FixedUiElement"
 | 
			
		||||
import SvelteUIElement from "../Base/SvelteUIElement"
 | 
			
		||||
import Delete_icon from "../../assets/svg/Delete_icon.svelte"
 | 
			
		||||
 | 
			
		||||
export default class OpeningHoursRange extends BaseUIElement {
 | 
			
		||||
    private _oh: OpeningHour
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +31,7 @@ export default class OpeningHoursRange extends BaseUIElement {
 | 
			
		|||
            Utils.TwoDigits(oh.endHour) + ":" + Utils.TwoDigits(oh.endMinutes)
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        const deleteRange = Svg.delete_icon_svg()
 | 
			
		||||
        const deleteRange = new SvelteUIElement(Delete_icon)
 | 
			
		||||
            .SetClass("rounded-full w-6 h-6 block bg-black pointer-events-auto  ")
 | 
			
		||||
            .onClick(() => {
 | 
			
		||||
                this._onDelete()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,11 +16,10 @@
 | 
			
		|||
  import TagHint from "../TagHint.svelte"
 | 
			
		||||
  import { TagsFilter } from "../../../Logic/Tags/TagsFilter"
 | 
			
		||||
  import { Store } from "../../../Logic/UIEventSource"
 | 
			
		||||
  import Svg from "../../../Svg"
 | 
			
		||||
  import ToSvelte from "../../Base/ToSvelte.svelte"
 | 
			
		||||
  import { EyeIcon, EyeOffIcon } from "@rgossiaux/svelte-heroicons/solid"
 | 
			
		||||
  import FilteredLayer from "../../../Models/FilteredLayer"
 | 
			
		||||
  import Confirm from "../../../assets/svg/Confirm.svelte"
 | 
			
		||||
  import Layers from "../../../assets/svg/Layers.svelte"
 | 
			
		||||
 | 
			
		||||
  export let importFlow: ImportFlow<ImportFlowArguments>
 | 
			
		||||
  let state = importFlow.state
 | 
			
		||||
| 
						 | 
				
			
			@ -77,7 +76,7 @@
 | 
			
		|||
          state.guistate.openFilterView(filteredLayer.layerDef)
 | 
			
		||||
        }}
 | 
			
		||||
      >
 | 
			
		||||
        <ToSvelte construct={Svg.layers_svg().SetClass("w-12")} />
 | 
			
		||||
        <Layers class="w-12"/>
 | 
			
		||||
        <Tr t={Translations.t.general.add.openLayerControl} />
 | 
			
		||||
      </button>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -120,7 +119,7 @@
 | 
			
		|||
          state.guistate.openFilterView(filteredLayer.layerDef)
 | 
			
		||||
        }}
 | 
			
		||||
      >
 | 
			
		||||
        <ToSvelte construct={Svg.layers_svg().SetClass("w-12")} />
 | 
			
		||||
        <Layers class="w-12"/>
 | 
			
		||||
        <Tr t={Translations.t.general.add.openLayerControl} />
 | 
			
		||||
      </button>
 | 
			
		||||
    </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
import { SubtleButton } from "../Base/SubtleButton"
 | 
			
		||||
import BaseUIElement from "../BaseUIElement"
 | 
			
		||||
import Svg from "../../Svg"
 | 
			
		||||
import { OsmConnection, OsmServiceState } from "../../Logic/Osm/OsmConnection"
 | 
			
		||||
import { VariableUiElement } from "../Base/VariableUIElement"
 | 
			
		||||
import Loading from "../Base/Loading"
 | 
			
		||||
| 
						 | 
				
			
			@ -8,6 +7,9 @@ import Translations from "../i18n/Translations"
 | 
			
		|||
import { ImmutableStore, Store } from "../../Logic/UIEventSource"
 | 
			
		||||
import Combine from "../Base/Combine"
 | 
			
		||||
import { Translation } from "../i18n/Translation"
 | 
			
		||||
import SvelteUIElement from "../Base/SvelteUIElement"
 | 
			
		||||
import Login from "../../assets/svg/Login.svelte"
 | 
			
		||||
import Invalid from "../../assets/svg/Invalid.svelte"
 | 
			
		||||
 | 
			
		||||
class LoginButton extends SubtleButton {
 | 
			
		||||
    constructor(
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +19,7 @@ class LoginButton extends SubtleButton {
 | 
			
		|||
        },
 | 
			
		||||
        icon?: BaseUIElement | string
 | 
			
		||||
    ) {
 | 
			
		||||
        super(icon ?? Svg.login_svg(), text)
 | 
			
		||||
        super(icon ?? new SvelteUIElement(Login), text)
 | 
			
		||||
        this.onClick(() => {
 | 
			
		||||
            state.osmConnection?.AttemptLogin()
 | 
			
		||||
        })
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +67,7 @@ export class LoginToggle extends VariableUiElement {
 | 
			
		|||
                    const apiTranslation = offlineModes[apiState]
 | 
			
		||||
                    if (apiTranslation !== undefined) {
 | 
			
		||||
                        return new Combine([
 | 
			
		||||
                            Svg.invalid_svg().SetClass("w-8 h-8 m-2 shrink-0"),
 | 
			
		||||
                            new SvelteUIElement(Invalid).SetClass("w-8 h-8 m-2 shrink-0"),
 | 
			
		||||
                            apiTranslation,
 | 
			
		||||
                        ]).SetClass("flex items-center alert max-w-64")
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +86,7 @@ export class LoginToggle extends VariableUiElement {
 | 
			
		|||
                    return new LoginButton(
 | 
			
		||||
                        Translations.t.general.loginFailed,
 | 
			
		||||
                        state,
 | 
			
		||||
                        Svg.invalid_svg()
 | 
			
		||||
                        new SvelteUIElement(Invalid)
 | 
			
		||||
                    )
 | 
			
		||||
                },
 | 
			
		||||
                [state.featureSwitchUserbadge, state.osmConnection?.apiIsOnline]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,13 +13,12 @@
 | 
			
		|||
  import LoginToggle from "../../Base/LoginToggle.svelte"
 | 
			
		||||
  import FilteredLayer from "../../../Models/FilteredLayer"
 | 
			
		||||
  import NewPointLocationInput from "../../BigComponents/NewPointLocationInput.svelte"
 | 
			
		||||
  import ToSvelte from "../../Base/ToSvelte.svelte"
 | 
			
		||||
  import Svg from "../../../Svg"
 | 
			
		||||
  import Layers from "../../../assets/svg/Layers.svelte"
 | 
			
		||||
  import AddSmall from "../../../assets/svg/AddSmall.svelte"
 | 
			
		||||
  import type { OsmTags } from "../../../Models/OsmFeature"
 | 
			
		||||
  import Loading from "../../Base/Loading.svelte"
 | 
			
		||||
  import NextButton from "../../Base/NextButton.svelte"
 | 
			
		||||
  import Note from "../../../assets/svg/Note.svelte"
 | 
			
		||||
 | 
			
		||||
  export let coordinate: UIEventSource<{ lon: number; lat: number }>
 | 
			
		||||
  export let state: SpecialVisualizationState
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +123,7 @@
 | 
			
		|||
        <div class="h-56 w-full">
 | 
			
		||||
          <NewPointLocationInput value={coordinate} {state}>
 | 
			
		||||
            <div class="h-20 w-full pb-10" slot="image">
 | 
			
		||||
              <ToSvelte construct={Svg.note_svg().SetClass("h-10 w-full")} />
 | 
			
		||||
              <Note class="h-10 w-full"/>
 | 
			
		||||
            </div>
 | 
			
		||||
          </NewPointLocationInput>
 | 
			
		||||
        </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,5 @@
 | 
			
		|||
<script lang="ts">
 | 
			
		||||
  import type { OsmTags } from "../../Models/OsmFeature"
 | 
			
		||||
  import Svg from "../../Svg"
 | 
			
		||||
  import ToSvelte from "../Base/ToSvelte.svelte"
 | 
			
		||||
  import { Utils } from "../../Utils"
 | 
			
		||||
  import { Store } from "../../Logic/UIEventSource"
 | 
			
		||||
  import Envelope from "../../assets/svg/Envelope.svelte"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue