diff --git a/src/data/Amy.ts b/src/data/Amy.ts
index dd633f09..c8cac203 100644
--- a/src/data/Amy.ts
+++ b/src/data/Amy.ts
@@ -4400,6 +4400,7 @@ export const Amy: ProfileSpec = {
'2021': 'Informatics program chair; COVID-19; gender transition',
'2022': 'Informatics program chair; gender transition; sabbatical (Summer/Fall)',
'2023': 'Sabbatical (Winter/Spring/Summer)',
+ '2024': 'Informatics program chair; Associate Dean for Academics',
},
};
diff --git a/src/lib/components/Header.svelte b/src/lib/components/Header.svelte
index df31ae53..f55eae26 100644
--- a/src/lib/components/Header.svelte
+++ b/src/lib/components/Header.svelte
@@ -96,7 +96,9 @@
{header}{header.substring(0, 32) +
+ (header.length > 32 ? '…' : '')}
{/each}
diff --git a/src/lib/components/Page.svelte b/src/lib/components/Page.svelte
index 9b34c481..7e9ef5de 100644
--- a/src/lib/components/Page.svelte
+++ b/src/lib/components/Page.svelte
@@ -8,17 +8,16 @@
let closestID: string | undefined = undefined;
let scrollY: number;
- $: if (browser && typeof document !== undefined && $navigating === null) {
- headers = Array.from(document.getElementsByTagName('h2'))
- .map((a) =>
- a instanceof HTMLElement
- ? [a.innerText.replaceAll('🔗', '').trim(), a.id]
- : undefined
- )
- .filter((a): a is [string, string] => a !== undefined);
- }
-
$: if (scrollY >= 0) {
+ if (browser && typeof document !== undefined && $navigating === null) {
+ headers = Array.from(document.getElementsByTagName('h2'))
+ .map((a) =>
+ a instanceof HTMLElement
+ ? [a.innerText.replaceAll('🔗', '').trim(), a.id]
+ : undefined
+ )
+ .filter((a): a is [string, string] => a !== undefined);
+ }
closestID = Array.from(document.getElementsByTagName('h2')).sort(
(h1, h2) =>
Math.abs(h1.offsetTop - scrollY) -
diff --git a/src/routes/(app)/essays/+page.svelte b/src/routes/(app)/essays/+page.svelte
index 51c3c535..fd01dd6f 100644
--- a/src/routes/(app)/essays/+page.svelte
+++ b/src/routes/(app)/essays/+page.svelte
@@ -6,9 +6,19 @@
import Image from '$lib/components/Thumbnail.svelte';
import type { PostTagType } from '../../../lib/models/Post';
import Title from '$lib/components/Title.svelte';
+ import Linkable from '$lib/components/Linkable.svelte';
let filter: Record = {};
+ $: posts = $profile.getPosts(
+ (post) => !('topic' in filter) || post.tags.includes(filter.topic),
+ (post) =>
+ -(
+ $profile.getPostMonthYear(post).year * 12 +
+ $profile.getPostMonthYear(post).month
+ )
+ );
+
function setFilter(tag: Record) {
filter = tag;
}
@@ -35,8 +45,11 @@
-{#each $profile.getPosts( (post) => !('topic' in filter) || post.tags.includes(filter.topic), (post) => -($profile.getPostMonthYear(post).year * 12 + $profile.getPostMonthYear(post).month) ) as post}
+{#each posts as post, index}
{@const date = $profile.getPostMonthYear(post)}
+ {#if index === 0 || date.year !== $profile.getPostMonthYear(posts[index - 1]).year}
+ {date.year}
+ {/if}
{#if post.img}
diff --git a/src/routes/(app)/publications/+page.svelte b/src/routes/(app)/publications/+page.svelte
index e92108e1..087d349d 100644
--- a/src/routes/(app)/publications/+page.svelte
+++ b/src/routes/(app)/publications/+page.svelte
@@ -9,6 +9,7 @@
import { scrollToHash } from '$lib/models/utilities';
import Alert from '../../../lib/components/Alert.svelte';
import Title from '$lib/components/Title.svelte';
+ import Linkable from '$lib/components/Linkable.svelte';
let selection: Record = {};
@@ -84,11 +85,11 @@
{#each pubs as pub, index}
{#if index === 0 || pubs[index - 1].year !== pub.year}
- {pub.year}{#if $profile.getYearContexts()[pub.year]}
- — {$profile.getYearContexts()[pub.year]}
+ {pub.year}{#if $profile.getYearContexts()[pub.year]}
+ – {$profile.getYearContexts()[pub.year]}{/if}
{/if}
{/if}
diff --git a/src/routes/(app)/talks/+page.svelte b/src/routes/(app)/talks/+page.svelte
index 6284e417..53a51914 100644
--- a/src/routes/(app)/talks/+page.svelte
+++ b/src/routes/(app)/talks/+page.svelte
@@ -6,6 +6,12 @@
import Image from '$lib/components/Thumbnail.svelte';
import Link from '$lib/components/Link.svelte';
import Title from '$lib/components/Title.svelte';
+ import Linkable from '$lib/components/Linkable.svelte';
+
+ $: talks = $profile.getTalks(
+ undefined,
+ (talk) => -parseDate(talk.date).getTime()
+ );
const months = [
'Jan',
@@ -27,8 +33,14 @@
These are my upcoming and past keynotes and invited talks.
-{#each $profile.getTalks(undefined, (talk) => -parseDate(talk.date).getTime()) as talk}
+{#each talks as talk, index}
{@const date = parseDate(talk.date)}
+ {#if index === 0 || date.getFullYear() !== parseDate(talks[index - 1].date).getFullYear()}
+
+ {date.getFullYear()}
+ {/if}
+