ya carga imágenes, les pone caption y las pasa al preview correctamente, al menos para colabora
parent
76464a61ea
commit
33077a1148
@ -1,107 +0,0 @@
|
||||
<script>
|
||||
import { spring } from 'svelte/motion';
|
||||
|
||||
let count = 0;
|
||||
|
||||
const displayed_count = spring();
|
||||
$: displayed_count.set(count);
|
||||
$: offset = modulo($displayed_count, 1);
|
||||
|
||||
/**
|
||||
* @param {number} n
|
||||
* @param {number} m
|
||||
*/
|
||||
function modulo(n, m) {
|
||||
// handle negative numbers
|
||||
return ((n % m) + m) % m;
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="counter">
|
||||
<button on:click={() => (count -= 1)} aria-label="Decrease the counter by one">
|
||||
<svg aria-hidden="true" viewBox="0 0 1 1">
|
||||
<path d="M0,0.5 L1,0.5" />
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<div class="counter-viewport">
|
||||
<div class="counter-digits" style="transform: translate(0, {100 * offset}%)">
|
||||
<strong class="hidden" aria-hidden="true">{Math.floor($displayed_count + 1)}</strong>
|
||||
<strong>{Math.floor($displayed_count)}</strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button on:click={() => (count += 1)} aria-label="Increase the counter by one">
|
||||
<svg aria-hidden="true" viewBox="0 0 1 1">
|
||||
<path d="M0,0.5 L1,0.5 M0.5,0 L0.5,1" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.counter {
|
||||
display: flex;
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.1);
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
.counter button {
|
||||
width: 2em;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
touch-action: manipulation;
|
||||
color: var(--text-color);
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.counter button:hover {
|
||||
background-color: var(--secondary-color);
|
||||
}
|
||||
|
||||
svg {
|
||||
width: 25%;
|
||||
height: 25%;
|
||||
}
|
||||
|
||||
path {
|
||||
vector-effect: non-scaling-stroke;
|
||||
stroke-width: 2px;
|
||||
stroke: var(--text-color);
|
||||
}
|
||||
|
||||
.counter-viewport {
|
||||
width: 8em;
|
||||
height: 4em;
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.counter-viewport strong {
|
||||
position: absolute;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-weight: 400;
|
||||
color: var(--accent-color);
|
||||
font-size: 4rem;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.counter-digits {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
top: -100%;
|
||||
user-select: none;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,104 @@
|
||||
<script>
|
||||
import {
|
||||
title,
|
||||
heading,
|
||||
subtitle,
|
||||
content,
|
||||
date,
|
||||
address,
|
||||
organizedBy,
|
||||
collabs,
|
||||
canvas
|
||||
} from '$lib/stores/store';
|
||||
|
||||
let fileinput, avatar;
|
||||
|
||||
const onFileSelected = (e) => {
|
||||
let image = e.target.files[0];
|
||||
let reader = new FileReader();
|
||||
reader.readAsDataURL(image);
|
||||
reader.onload = (e) => {
|
||||
$organizedBy = [...$organizedBy, { image: e.target.result, text: '' }];
|
||||
};
|
||||
};
|
||||
|
||||
const removeOrganizer = (index) => {
|
||||
if (index > -1) {
|
||||
$organizedBy.splice(index, 1);
|
||||
$organizedBy = $organizedBy;
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<div class="organized-by">
|
||||
{#if $organizedBy[0]}
|
||||
{#each $organizedBy as organization, i}
|
||||
<div class="organization">
|
||||
<div
|
||||
class="remove"
|
||||
on:click|preventDefault={() => {
|
||||
removeOrganizer(i);
|
||||
}}
|
||||
>
|
||||
X
|
||||
</div>
|
||||
<img class="organized-logo" src={organization.image} alt={organization.text} />
|
||||
<input class="logo-title" type="text" bind:value={organization.text} />
|
||||
</div>
|
||||
{/each}
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<button
|
||||
on:click|preventDefault={() => {
|
||||
fileinput.click();
|
||||
}}>Añadir logo</button
|
||||
>
|
||||
<input
|
||||
style="display:none;"
|
||||
type="file"
|
||||
accept=".jpg, .jpeg, .png"
|
||||
on:change={(e) => onFileSelected(e)}
|
||||
bind:this={fileinput}
|
||||
/>
|
||||
|
||||
<style>
|
||||
.organized-by {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.organization {
|
||||
position: relative;
|
||||
display: grid;
|
||||
grid-template-rows: min-content min-content;
|
||||
grid-gap: 0.5rem;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 1rem;
|
||||
}
|
||||
.organized-logo {
|
||||
max-height: 64px;
|
||||
max-width: 100px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.remove {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
color: red;
|
||||
cursor: pointer;
|
||||
}
|
||||
input {
|
||||
display: block;
|
||||
max-width: 100px;
|
||||
}
|
||||
button {
|
||||
display: block;
|
||||
padding: 0.5rem;
|
||||
cursor: pointer;
|
||||
margin: 1rem;
|
||||
}
|
||||
</style>
|
Loading…
Reference in New Issue