forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			96 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
| <script lang="ts">
 | |
|   import Loading from "../Base/Loading.svelte"
 | |
|   import Translations from "../i18n/Translations"
 | |
|   import Tr from "../Base/Tr.svelte"
 | |
|   import DownloadHelper from "./DownloadHelper"
 | |
|   import DownloadButton from "./DownloadButton.svelte"
 | |
|   import { GeoOperations } from "../../Logic/GeoOperations"
 | |
|   import { SvgToPdf } from "../../Utils/svgToPdf"
 | |
|   import ThemeViewState from "../../Models/ThemeViewState"
 | |
|   import DownloadPdf from "./DownloadPdf.svelte"
 | |
| 
 | |
|   export let state: ThemeViewState
 | |
|   let isLoading = state.dataIsLoading
 | |
| 
 | |
|   const t = Translations.t.general.download
 | |
| 
 | |
|   const downloadHelper = new DownloadHelper(state)
 | |
| 
 | |
|   let metaIsIncluded = false
 | |
|   const name = state.layout.id
 | |
| 
 | |
|   function offerSvg(): string {
 | |
|     const maindiv = document.getElementById("maindiv")
 | |
|     const layers = state.layout.layers.filter((l) => l.source !== null)
 | |
|     return downloadHelper.asSvg({
 | |
|       layers,
 | |
|       mapExtent: state.mapProperties.bounds.data,
 | |
|       width: maindiv.offsetWidth,
 | |
|       height: maindiv.offsetHeight,
 | |
|     })
 | |
|   }
 | |
| </script>
 | |
| 
 | |
| {#if $isLoading}
 | |
|   <Loading />
 | |
| {:else}
 | |
|   <div class="flex w-full flex-col" />
 | |
|   <h3>
 | |
|     <Tr t={t.title} />
 | |
|   </h3>
 | |
| 
 | |
|   <DownloadButton
 | |
|     {state}
 | |
|     extension="geojson"
 | |
|     mimetype="application/vnd.geo+json"
 | |
|     construct={(geojson) => JSON.stringify(geojson)}
 | |
|     mainText={t.downloadGeojson}
 | |
|     helperText={t.downloadGeoJsonHelper}
 | |
|     {metaIsIncluded}
 | |
|   />
 | |
| 
 | |
|   <DownloadButton
 | |
|     {state}
 | |
|     extension="csv"
 | |
|     mimetype="text/csv"
 | |
|     construct={(geojson) => GeoOperations.toCSV(geojson)}
 | |
|     mainText={t.downloadCSV}
 | |
|     helperText={t.downloadCSVHelper}
 | |
|     {metaIsIncluded}
 | |
|   />
 | |
| 
 | |
|   <label class="mb-8 mt-2">
 | |
|     <input type="checkbox" bind:value={metaIsIncluded} />
 | |
|     <Tr t={t.includeMetaData} />
 | |
|   </label>
 | |
| 
 | |
|   <DownloadButton
 | |
|     {state}
 | |
|     {metaIsIncluded}
 | |
|     extension="svg"
 | |
|     mimetype="image/svg+xml"
 | |
|     mainText={t.downloadAsSvg}
 | |
|     helperText={t.downloadAsSvgHelper}
 | |
|     construct={offerSvg}
 | |
|   />
 | |
| 
 | |
|   <DownloadButton
 | |
|     {state}
 | |
|     {metaIsIncluded}
 | |
|     extension="png"
 | |
|     mimetype="image/png"
 | |
|     mainText={t.downloadAsPng}
 | |
|     helperText={t.downloadAsPngHelper}
 | |
|     construct={(_) => state.mapProperties.exportAsPng(4)}
 | |
|   />
 | |
| 
 | |
|   <div class="flex flex-col">
 | |
|     {#each Object.keys(SvgToPdf.templates) as key}
 | |
|       {#if SvgToPdf.templates[key].isPublic}
 | |
|         <DownloadPdf {state} templateName={key} />
 | |
|       {/if}
 | |
|     {/each}
 | |
|   </div>
 | |
| 
 | |
|   <Tr cls="link-underline" t={t.licenseInfo} />
 | |
| {/if}
 |