From 74842707b314c77ef007c070dbb82ee591059518 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sun, 22 Dec 2024 00:50:07 +0200 Subject: [PATCH] web/timeline: use css grid for url previews and improve inline style --- web/src/index.css | 2 ++ web/src/ui/timeline/URLPreviews.css | 54 +++++++++++++++++++---------- web/src/ui/timeline/URLPreviews.tsx | 46 +++++++++++------------- 3 files changed, 57 insertions(+), 45 deletions(-) diff --git a/web/src/index.css b/web/src/index.css index 9d7f938..2c3a0cc 100644 --- a/web/src/index.css +++ b/web/src/index.css @@ -22,6 +22,7 @@ --border-color: #ccc; --pill-background-color: #ccc; + --url-preview-background-color: #ddd; --highlight-pill-background-color: #c00; --highlight-pill-text-color: #fff; --button-hover-color: rgba(0, 0, 0, .2); @@ -109,6 +110,7 @@ --border-color: #222; --pill-background-color: #222; + --url-preview-background-color: #222; --button-hover-color: rgba(255, 255, 255, .2); --light-hover-color: rgba(255, 255, 255, .1); diff --git a/web/src/ui/timeline/URLPreviews.css b/web/src/ui/timeline/URLPreviews.css index aee9709..feba09d 100644 --- a/web/src/ui/timeline/URLPreviews.css +++ b/web/src/ui/timeline/URLPreviews.css @@ -7,41 +7,57 @@ div.url-previews { > div.url-preview { margin: 0.5rem 0; border-radius: 0.5rem; - background-color: var(--pill-background-color); - border: 1px solid var(--border-color); + background-color: var(--url-preview-background-color); + border: 1px solid var(--url-preview-background-color); + display: grid; + + grid-template: + "title" auto + "description" auto + "media" auto + / 1fr; div.title { - margin: 0.5rem 0.5rem 0 0.5rem; - display: -webkit-box; - -webkit-line-clamp: 1; - line-clamp: 1; - -webkit-box-orient: vertical; + grid-area: title; + margin: 0.5rem 0.5rem 0; overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + font-weight: bold; } div.description { - margin: 0 0.5rem 0.5rem 0.5rem; + grid-area: description; + margin: 0 0.5rem 0.5rem; display: -webkit-box; - -webkit-line-clamp: 3; - line-clamp: 3; - -webkit-box-orient: vertical; overflow: hidden; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; color: var(--semisecondary-text-color); } > div.media-container { - border-radius: 0 0 0.5rem 0.5rem; + grid-area: media; + border-radius: 0 0 .5rem .5rem; + background-color: var(--background-color); } &.inline { - display: flex; - flex-direction: row; - min-width: 320px; - max-width: 320px; + grid-template: + "media title" auto + "media description" auto + / auto auto; + width: 100%; + max-width: 20rem; - > div.media-container { - border-radius: none; - margin: 0.5rem; + > div.inline-media-wrapper { + grid-area: media; + display: flex; + justify-content: center; + align-items: center; + background-color: var(--background-color); + border-radius: .5rem 0 0 .5rem; + padding: .5rem; } } } diff --git a/web/src/ui/timeline/URLPreviews.tsx b/web/src/ui/timeline/URLPreviews.tsx index 32b0cb2..032b18c 100644 --- a/web/src/ui/timeline/URLPreviews.tsx +++ b/web/src/ui/timeline/URLPreviews.tsx @@ -46,39 +46,33 @@ const URLPreviews = ({ event, room }: { let containerSize: ImageContainerSize | undefined let inline = false if (aspectRatio < 1.2) { - containerSize = { width: 70, height: 70 } + containerSize = { width: 80, height: 80 } inline = true } const style = calculateMediaSize(p["og:image:width"], p["og:image:height"], containerSize) - const title = p["og:title"] ?? p["og:url"] ?? p.matched_url + const url = p["og:url"] ?? p.matched_url + const title = p["og:title"] ?? p["og:url"] ?? url + const mediaContainer =
+ +
return
- {mediaURL && inline &&
- {p["og:title"]} -
} -
-
- {title} -
-
{p["og:description"]}
+ style={inline ? {} : { width: style.container.width }} + > +
+ {title}
- {mediaURL && !inline &&
- {p["og:title"]} -
} +
{p["og:description"]}
+ {mediaURL && (inline + ?
{mediaContainer}
+ : mediaContainer)}
})}