2023-09-28 23:50:27 +02:00
|
|
|
<script lang="ts">
|
|
|
|
/**
|
|
|
|
* Shows an 'upload'-button which will start the upload for this feature
|
|
|
|
*/
|
2023-09-25 02:13:24 +02:00
|
|
|
|
2023-09-28 23:50:27 +02:00
|
|
|
import type { SpecialVisualizationState } from "../SpecialVisualization"
|
|
|
|
import { Store } from "../../Logic/UIEventSource"
|
|
|
|
import type { OsmTags } from "../../Models/OsmFeature"
|
|
|
|
import LoginToggle from "../Base/LoginToggle.svelte"
|
|
|
|
import Translations from "../i18n/Translations"
|
|
|
|
import Tr from "../Base/Tr.svelte"
|
|
|
|
import UploadingImageCounter from "./UploadingImageCounter.svelte"
|
|
|
|
import FileSelector from "../Base/FileSelector.svelte"
|
|
|
|
import ToSvelte from "../Base/ToSvelte.svelte"
|
|
|
|
import Svg from "../../Svg"
|
2023-09-25 02:13:24 +02:00
|
|
|
|
2023-09-28 23:50:27 +02:00
|
|
|
export let state: SpecialVisualizationState
|
2023-09-25 02:13:24 +02:00
|
|
|
|
2023-09-28 23:50:27 +02:00
|
|
|
export let tags: Store<OsmTags>
|
2023-10-22 00:51:43 +02:00
|
|
|
export let targetKey: string = undefined
|
2023-09-28 23:50:27 +02:00
|
|
|
/**
|
|
|
|
* Image to show in the button
|
|
|
|
* NOT the image to upload!
|
|
|
|
*/
|
|
|
|
export let image: string = undefined
|
|
|
|
if (image === "") {
|
|
|
|
image = undefined
|
|
|
|
}
|
|
|
|
export let labelText: string = undefined
|
|
|
|
const t = Translations.t.image
|
2023-09-25 02:13:24 +02:00
|
|
|
|
2023-09-28 23:50:27 +02:00
|
|
|
let licenseStore = state.userRelatedState.imageLicense
|
2023-09-25 02:13:24 +02:00
|
|
|
|
2023-09-28 23:50:27 +02:00
|
|
|
function handleFiles(files: FileList) {
|
|
|
|
for (let i = 0; i < files.length; i++) {
|
|
|
|
const file = files.item(i)
|
|
|
|
console.log("Got file", file.name)
|
|
|
|
try {
|
2023-10-22 00:51:43 +02:00
|
|
|
state.imageUploadManager.uploadImageAndApply(file, tags, targetKey)
|
2023-09-28 23:50:27 +02:00
|
|
|
} catch (e) {
|
|
|
|
alert(e)
|
|
|
|
}
|
2023-09-25 02:13:24 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<LoginToggle {state}>
|
|
|
|
<Tr slot="not-logged-in" t={t.pleaseLogin} />
|
|
|
|
<div class="flex flex-col">
|
|
|
|
<UploadingImageCounter {state} {tags} />
|
2023-09-28 23:50:27 +02:00
|
|
|
<FileSelector
|
|
|
|
accept="image/*"
|
|
|
|
cls="button border-2 text-2xl"
|
|
|
|
multiple={true}
|
|
|
|
on:submit={(e) => handleFiles(e.detail)}
|
|
|
|
>
|
2023-09-25 02:13:24 +02:00
|
|
|
<div class="flex items-center">
|
|
|
|
{#if image !== undefined}
|
|
|
|
<img src={image} />
|
|
|
|
{:else}
|
2023-09-28 23:50:27 +02:00
|
|
|
<ToSvelte construct={Svg.camera_plus_svg().SetClass("block w-12 h-12 p-1 text-4xl ")} />
|
2023-09-25 02:13:24 +02:00
|
|
|
{/if}
|
|
|
|
{#if labelText}
|
|
|
|
{labelText}
|
|
|
|
{:else}
|
|
|
|
<Tr t={t.addPicture} />
|
|
|
|
{/if}
|
|
|
|
</div>
|
|
|
|
</FileSelector>
|
|
|
|
<div class="text-sm">
|
|
|
|
<Tr t={t.respectPrivacy} />
|
2023-09-28 23:50:27 +02:00
|
|
|
<a
|
|
|
|
class="cursor-pointer"
|
|
|
|
on:click={() => {
|
|
|
|
state.guistate.openUsersettings("picture-license")
|
|
|
|
}}
|
|
|
|
>
|
|
|
|
<Tr t={t.currentLicense.Subs({ license: $licenseStore })} />
|
2023-09-25 02:13:24 +02:00
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</LoginToggle>
|