You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

230 lines
5.0 KiB
Svelte

<script>
import { onMount } from "svelte";
import html2canvas from "html2canvas";
import Organized from "$lib/form/Organized.svelte";
import Colabs from "./Colabs.svelte";
import {
title,
heading,
subtitle,
content,
date,
time,
weekday,
address,
city,
canvas,
} from "$lib/stores/store";
/** @type {HTMLDivElement} */ let editor;
const handleSubmit = async () => {
console.log("submit");
};
const getContent = () => {
if (!editor) {
console.log("no hay editor");
return;
}
if (editor && editor.firstChild !== null) {
// @ts-ignore
$content = editor.firstChild.innerHTML;
}
};
const saveCanvas = async () => {
if ($canvas !== undefined) {
const img = await html2canvas($canvas, { scale: 2 });
const image = img.toDataURL("image/png");
const data = new FormData();
data.append("image", image);
data.append(
"content",
JSON.stringify({
title: $title,
heading: $heading,
subtitle: $subtitle,
content: $content,
date: $date,
time: $time,
weekday: $weekday,
address: $address,
city: $city,
})
);
const req = await fetch("/admin", {
method: "POST",
body: data,
});
console.log(req);
}
};
const downloadCanvas = async () => {
if ($canvas !== undefined) {
const res = await html2canvas($canvas, { scale: 2 });
const image = res.toDataURL("image/png");
const link = document.createElement("a");
link.download = `${$date.split("-")[0]}-${$date.split("-")[1]}-${
$date.split("-")[2].split("T")[0]
}-${$city.replace(" ", "_")}-cartel.png`;
link.href = image;
link.click();
}
};
const quillOptions = {
modules: {
toolbar: [["bold", "italic"]],
},
theme: "snow",
};
onMount(async () => {
const { default: Quill } = await import("quill");
let quill = new Quill(editor, {
modules: {
toolbar: quillOptions,
},
theme: "snow",
placeholder:
"Participan:\nFernando Marín (DMD)\nPresenta:\nFernanda del Castillo (DMD Asturias)",
});
});
</script>
<form on:submit|preventDefault={handleSubmit}>
<div class="form-group">
<label for="heading">Tipo de actividad</label>
<input
bind:value={$heading}
type="text"
name="heading"
placeholder="Ej: Taller, charla, coloquio, debate, curso"
/>
</div>
<div clasS="form-group">
<label for="title">Título</label>
<input bind:value={$title} type="text" name="title" placeholder="Título" />
</div>
<div class="form-group">
<label for="subtitle">Subtítulo</label>
<input
bind:value={$subtitle}
type="text"
name="subtitle"
placeholder="Subtítulo"
/>
</div>
<div class="form-group">
<label for="content">Contenido</label>
<div id="editor" on:click={getContent}>
<div on:click={getContent} on:keyup={getContent} bind:this={editor} />
</div>
</div>
<div class="form-group when">
<div class="daymonth">
<label for="date">Fecha</label>
<input bind:value={$date} type="date" name="date" />
</div>
<div class="time">
<label for="time">Hora</label>
<input bind:value={$time} type="time" name="time" />
</div>
<div class="dayname">
<label for="weekday">Día de la semana</label>
<input
bind:value={$weekday}
type="text"
name="weekday"
placeholder="Ej. Lunes"
/>
</div>
</div>
<div class="form-group">
<label for="address">Dirección</label>
<textarea
bind:value={$address}
name="address"
placeholder="Ej. Calle del Abeto, 4"
/>
<label for="city">Ciudad</label>
<input bind:value={$city} type="text" name="" placeholder="Ej. Cádiz" />
</div>
<div class="form-group ">
<label for="organizedBy">Organiza:</label>
<Organized />
<label for="colabs">Colabora:</label>
<Colabs />
</div>
</form>
<button on:click|preventDefault={downloadCanvas}>Descargar</button>
<button on:click|preventDefault={saveCanvas}>Guardar</button>
<style>
.form-group {
margin: 1rem 0;
}
form {
margin: 1rem;
display: block;
}
.form-group {
display: block;
}
input {
display: block;
width: 100%;
font-size: 0.8rem;
font-family: sans-serif;
padding: 0.5rem;
}
textarea {
display: block;
width: 100%;
font-size: 0.8rem;
font-family: sans-serif;
padding: 0.5rem;
min-height: 3rem;
line-height: 1.3rem;
resize: vertical;
}
label {
display: block;
font-size: 0.8rem;
font-family: monospace;
margin: 0.25rem 0;
}
#editor {
background-color: white;
}
button {
margin: 1rem;
padding: 0.5rem;
font-size: 1.1rem;
cursor: pointer;
}
.form-group.when {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 0.25rem;
}
</style>