webcomponent datetime format helpers

This commit is contained in:
lesion
2022-09-05 12:32:27 +02:00
parent 3c176ff7af
commit e8ed2ec4b0
7 changed files with 1685 additions and 3425 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,8 @@
<svelte:options tag="gancio-event" />
<script> <script>
import { onMount } from 'svelte' import { onMount } from 'svelte'
import { when } from './helpers'
export let baseurl = 'https://demo.gancio.org' export let baseurl = 'https://demo.gancio.org'
export let id export let id
@@ -9,8 +12,8 @@
function update(id, baseurl) { function update(id, baseurl) {
if (mounted) { if (mounted) {
fetch(`${baseurl}/api/event/${id}`) fetch(`${baseurl}/api/event/${id}`)
.then(res => res.json()) .then((res) => res.json())
.then(e => event = e) .then((e) => (event = e))
} }
} }
@@ -20,18 +23,6 @@
}) })
$: update(id, baseurl) $: update(id, baseurl)
function when (event) {
return new Date(event.start_datetime*1000)
.toLocaleDateString(undefined,
{
weekday: 'long',
month: 'short',
day: 'numeric',
hour: '2-digit',
minute: '2-digit'
})
}
function thumbnail(event) { function thumbnail(event) {
return `${baseurl}/media/thumb/${event.media[0].url}` return `${baseurl}/media/thumb/${event.media[0].url}`
} }
@@ -43,25 +34,34 @@
} }
return 'center center' return 'center center'
} }
</script> </script>
<svelte:options tag="gancio-event"/>
{#if event} {#if event}
<a href='{baseurl}/event/{event.slug || event.id}' class='card' target='_blank'> <a
href="{baseurl}/event/{event.slug || event.id}"
class="card"
target="_blank"
>
{#if event.media.length} {#if event.media.length}
<img src="{thumbnail(event)}" alt="{event.media[0].name}" style="object-position: {position(event)}; aspect-ratio=1.7778;"> <img
src={thumbnail(event)}
alt={event.media[0].name}
style="object-position: {position(event)}; aspect-ratio=1.7778;"
/>
{/if} {/if}
<div class="container"> <div class="container">
<strong>{event.title}</strong> <strong>{event.title}</strong>
<div>{when(event)}</div> <div>{when(event)}</div>
<div class='place'>@{event.place.name}</div> <div class="place">@{event.place.name}</div>
</div> </div>
</a> </a>
{/if} {/if}
<style> <style>
.card { .card {
display: block; display: block;
font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif; font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS',
sans-serif;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
transition: 0.3s; transition: 0.3s;
border-radius: 5px; /* 5px rounded corners */ border-radius: 5px; /* 5px rounded corners */
@@ -93,7 +93,7 @@ img {
/* Add some padding inside the card container */ /* Add some padding inside the card container */
.container { .container {
transition: padding-left .2s; transition: padding-left 0.2s;
padding: 16px; padding: 16px;
} }

View File

@@ -2,6 +2,7 @@
<script> <script>
import { onMount } from 'svelte' import { onMount } from 'svelte'
import { when } from './helpers'
export let baseurl = '' export let baseurl = ''
export let title = '' export let title = ''
export let maxlength = false export let maxlength = false
@@ -51,31 +52,6 @@
return 'center center' return 'center center'
} }
function _when(unix_timestamp, type = 'long') {
const options =
type === 'long'
? {
weekday: 'long',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
}
: { hour: '2-digit', minute: '2-digit' }
const d = new Date(unix_timestamp * 1000).toLocaleString(undefined, options)
return d
}
function when(event) {
if (event.multidate) {
return _when(event.start_datetime) + ' - ' + _when(event.end_datetime)
}
return (
_when(event.start_datetime) +
(event.end_datetime ? '-' + _when(event.end_datetime, 'short') : '')
)
}
onMount(() => { onMount(() => {
mounted = true mounted = true
update() update()

View File

@@ -0,0 +1,24 @@
function formatDatetime(timestamp, type = 'long') {
const options =
type === 'long'
? {
weekday: 'long',
month: 'long',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
}
: { hour: '2-digit', minute: '2-digit' }
return new Date(timestamp * 1000).toLocaleString(undefined, options)
}
export function when(event) {
if (event.multidate) {
return formatDatetime(event.start_datetime) + ' - ' + formatDatetime(event.end_datetime)
}
return (
formatDatetime(event.start_datetime) +
(event.end_datetime ? '-' + formatDatetime(event.end_datetime, 'short') : '')
)
}

File diff suppressed because it is too large Load Diff