atmo.rsvp
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

conf fixes

Florian e8c00693 99b43739

+15 -11
+1 -1
src/lib/contrail.ts
··· 10 10 import type { ActorIdentifier } from '@atcute/lexicons'; 11 11 import { isResourceUri } from '@atcute/lexicons'; 12 12 13 - export const CONTRAIL_URL = 'https://contrail.atmo.rsvp'; 13 + export const CONTRAIL_URL = 'http://localhost:8787'; 14 14 export const RSVP_HYDRATE_LIMIT = 20; 15 15 export const RSVP_GOING = 'community.lexicon.calendar.rsvp#going'; 16 16 export const RSVP_INTERESTED = 'community.lexicon.calendar.rsvp#interested';
+7 -7
src/routes/p/atmosphereconf.org/ScheduleEventCell.svelte
··· 2 2 import { 3 3 type GridEvent, 4 4 linkableTypes, 5 - isLightning, 5 + isCompact, 6 6 getEventColor, 7 7 durationMinutes, 8 8 formatTime ··· 37 37 event.type 38 38 )} {event.type === 'info' 39 39 ? 'flex flex-col items-center justify-center px-2 py-1.5 text-center text-xs' 40 - : ''} {isLightning(event.type) ? 'px-1.5 py-0 text-[0.6rem]' : 'px-2 py-1.5 text-xs'}" 40 + : ''} {isCompact(event.type, event.start, event.end) ? 'px-1.5 py-0 text-[0.6rem]' : 'px-2 py-1.5 text-xs'}" 41 41 > 42 42 <p class="font-semibold {durationMinutes(event.start, event.end) <= 30 ? 'line-clamp-1' : ''}"> 43 43 {event.title} 44 44 </p> 45 - {#if event.speakers?.length && !isLightning(event.type)} 46 - <p class="mt-0.5 opacity-75">{event.speakers.map((s) => s.name).join(', ')}</p> 45 + {#if event.speakers?.length && !isCompact(event.type, event.start, event.end)} 46 + <p class="mt-0.5 opacity-75 {durationMinutes(event.start, event.end) < 60 ? 'line-clamp-1' : ''}">{event.speakers.map((s) => s.name).join(', ')}</p> 47 47 {/if} 48 48 {#if initialRsvpStatus === 'going'} 49 49 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="absolute right-1 bottom-1 size-3 opacity-60"> ··· 57 57 </button> 58 58 59 59 <Modal bind:open={modalOpen}> 60 - <div> 61 - <h2 class="text-base-900 dark:text-base-50 text-lg font-semibold">{event.title}</h2> 60 + <div class="overflow-hidden"> 61 + <h2 class="text-base-900 dark:text-base-50 text-lg font-semibold break-words">{event.title}</h2> 62 62 63 63 {#if event.start} 64 64 <p class="text-base-500 dark:text-base-400 mt-1 text-sm"> ··· 97 97 ? durationMinutes(event.start, event.end) <= 30 98 98 ? 'flex items-center justify-center gap-2 px-2 py-0.5 text-center text-xs' 99 99 : 'flex flex-col items-center justify-center px-2 py-1.5 text-center text-xs' 100 - : ''} {isLightning(event.type) ? 'px-1.5 py-0 text-[0.6rem]' : 'px-2 py-1.5 text-xs'}" 100 + : ''} {isCompact(event.type, event.start, event.end) ? 'px-1.5 py-0 text-[0.6rem]' : 'px-2 py-1.5 text-xs'}" 101 101 > 102 102 <p class="font-semibold {durationMinutes(event.start, event.end) <= 30 ? 'line-clamp-1' : ''}"> 103 103 {event.title}
+7 -3
src/routes/p/atmosphereconf.org/schedule-utils.ts
··· 32 32 } 33 33 34 34 const TZ = 'America/Vancouver'; 35 - export const SLOT = 10; 36 - export const SLOT_HEIGHT = '1rem'; 35 + export const SLOT = 5; 36 + export const SLOT_HEIGHT = '0.6rem'; 37 37 38 38 export const linkableTypes = new Set(['workshop', 'presentation', 'lightning-talk', 'panel']); 39 39 40 40 export function isLightning(type: string): boolean { 41 41 return type === 'lightning-talk'; 42 + } 43 + 44 + export function isCompact(type: string, start: string, end?: string): boolean { 45 + return type === 'lightning-talk' || durationMinutes(start, end) <= 15; 42 46 } 43 47 44 48 export function toVancouverDate(iso: string): Date { ··· 197 201 spanRows: Math.max(1, Math.round((e.endMin - e.startMin) / SLOT)), 198 202 colStart: fullWidth ? 1 : rooms.indexOf(e.room!) + 1, 199 203 colSpan: fullWidth ? rooms.length : 1, 200 - zIndex: e.startMin 204 + zIndex: fullWidth ? 0 : e.startMin 201 205 }; 202 206 }); 203 207