cryptgeon/frontend/src/lib/ui/ShowNote.svelte

71 lines
1.5 KiB
Svelte
Raw Normal View History

2021-12-21 00:15:04 +01:00
<script lang="ts">
import type { FileDTO, NotePublic } from '$lib/api'
import { Files } from '$lib/files'
import copy from 'copy-to-clipboard'
import { saveAs } from 'file-saver'
import prettyBytes from 'pretty-bytes'
2022-01-16 14:02:53 +01:00
import { t } from 'svelte-intl-precompile'
2021-12-21 00:15:04 +01:00
import Button from './Button.svelte'
export let note: NotePublic
let files: FileDTO[] = []
$: if (note.meta.type === 'file') {
files = JSON.parse(note.contents) as FileDTO[]
}
$: download = () => {
for (const file of files) {
downloadFile(file)
}
}
async function downloadFile(file: FileDTO) {
const f = new File([await Files.fromString(file.contents)], file.name, {
type: file.type,
})
saveAs(f)
}
</script>
2022-01-16 14:02:53 +01:00
<p class="error-text">{@html $t('show.warning_will_not_see_again')}</p>
2021-12-21 00:15:04 +01:00
{#if note.meta.type === 'text'}
2022-01-16 14:02:53 +01:00
<div class="note">
2021-12-21 00:15:04 +01:00
{note.contents}
</div>
2022-01-16 14:02:53 +01:00
<Button on:click={() => copy(note.contents)}>{$t('common.copy_clipboard')}</Button>
2021-12-21 00:15:04 +01:00
{:else}
{#each files as file}
2022-01-16 14:02:53 +01:00
<div class="note file">
2021-12-21 00:15:04 +01:00
<b on:click={() => downloadFile(file)}> {file.name}</b>
<small> {file.type} {prettyBytes(file.size)}</small>
</div>
{/each}
2022-01-16 14:02:53 +01:00
<Button on:click={download}>{$t('show.download_all')}</Button>
2021-12-21 00:15:04 +01:00
{/if}
<style>
.note {
width: 100%;
margin: 0;
padding: 0;
border: 2px solid var(--ui-bg-1);
outline: none;
padding: 0.5rem;
white-space: pre;
overflow: auto;
margin-bottom: 0.5rem;
}
.note b {
cursor: pointer;
}
.note.file {
display: flex;
justify-content: space-between;
align-items: center;
}
</style>