2021-11-23 23:45:42 +01:00
|
|
|
<script>
|
|
|
|
import { createEventDispatcher } from "svelte";
|
|
|
|
let dispatch = createEventDispatcher()
|
|
|
|
|
|
|
|
export let list = {
|
|
|
|
id: "",
|
|
|
|
title: "",
|
|
|
|
files: [],
|
|
|
|
download_href: "",
|
|
|
|
info_href: "",
|
|
|
|
can_edit: false,
|
|
|
|
}
|
|
|
|
|
|
|
|
const click_file = index => {
|
|
|
|
dispatch("set_file", index)
|
|
|
|
}
|
|
|
|
|
|
|
|
const delete_file = async index => {
|
|
|
|
dispatch("loading", true)
|
|
|
|
|
|
|
|
let listjson = {
|
|
|
|
title: list.title,
|
|
|
|
files: [],
|
|
|
|
}
|
|
|
|
list.files.forEach((f, idx) => {
|
|
|
|
if (idx !== index) {
|
|
|
|
listjson.files.push({
|
|
|
|
id: f.id,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
try {
|
|
|
|
const resp = await fetch(
|
|
|
|
list.info_href,
|
|
|
|
{ method: "PUT", body: JSON.stringify(listjson) },
|
|
|
|
);
|
|
|
|
if (resp.status >= 400) {
|
|
|
|
throw (await resp.json()).message
|
|
|
|
}
|
|
|
|
} catch (err) {
|
|
|
|
alert("Failed to update album: "+err)
|
|
|
|
} finally {
|
|
|
|
dispatch("reload")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<div class="gallery">
|
|
|
|
{#each list.files as file, index}
|
|
|
|
<div class="file" on:click={() => {click_file(index)}}>
|
|
|
|
<div
|
|
|
|
class="icon_container"
|
|
|
|
class:editing={list.can_edit}
|
|
|
|
style="background-image: url('{file.icon_href}?width=256&height=256');">
|
|
|
|
{#if list.can_edit}
|
|
|
|
<!-- <i class="icon" style="cursor: grab;">drag_indicator</i>
|
|
|
|
<i class="icon">chevron_left</i>
|
|
|
|
<i class="icon">chevron_right</i> -->
|
|
|
|
<i class="icon" on:click|stopPropagation={() => {delete_file(index)}}>delete</i>
|
|
|
|
{/if}
|
|
|
|
</div>
|
|
|
|
{file.name}
|
|
|
|
</div>
|
|
|
|
{/each}
|
|
|
|
|
|
|
|
<!-- {#if list.can_edit}
|
|
|
|
<div class="file" style="font-size: 1.5em; padding-top: 2.5em; cursor: pointer;">
|
|
|
|
<i class="icon">add</i>
|
|
|
|
<br/>
|
|
|
|
Add files
|
|
|
|
</div>
|
|
|
|
{/if} -->
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<style>
|
|
|
|
.gallery{
|
|
|
|
padding: 16px;
|
|
|
|
box-sizing: border-box;
|
2021-11-24 11:51:39 +01:00
|
|
|
width: 100%;
|
|
|
|
height: 100%;
|
|
|
|
overflow: auto;
|
2021-11-23 23:45:42 +01:00
|
|
|
}
|
|
|
|
.file{
|
|
|
|
position: relative;
|
|
|
|
box-sizing: border-box;
|
|
|
|
width: 200px;
|
|
|
|
max-width: 90%;
|
|
|
|
height: 200px;
|
|
|
|
margin: 8px;
|
|
|
|
padding: 0;
|
|
|
|
overflow: hidden;
|
|
|
|
border-radius: 8px;
|
|
|
|
box-shadow: 2px 2px 8px 0 var(--shadow_color);
|
|
|
|
background-color: var(--layer_3_color);
|
|
|
|
word-break: break-all;
|
|
|
|
text-align: center;
|
|
|
|
line-height: 1.2em;
|
|
|
|
display: inline-block;
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
text-decoration: none;
|
|
|
|
vertical-align: top;
|
|
|
|
}
|
|
|
|
.file:hover {
|
|
|
|
box-shadow: 0 0 2px 2px var(--highlight_color);
|
|
|
|
text-decoration: none;
|
|
|
|
}
|
|
|
|
.icon_container {
|
|
|
|
width: 100%;
|
|
|
|
height: 136px;
|
|
|
|
background-position: center;
|
|
|
|
background-size: cover;
|
|
|
|
font-size: 20px;
|
|
|
|
text-align: left;
|
|
|
|
}
|
|
|
|
.icon_container.editing {
|
|
|
|
box-shadow: inset 0 60px 40px -40px #000000;
|
|
|
|
}
|
|
|
|
.icon_container > i:hover {
|
|
|
|
color: var(--highlight_color);
|
|
|
|
cursor: pointer;
|
|
|
|
}
|
|
|
|
</style>
|