Compare commits
2 commits
724eb17391
...
e8a4e382ba
Author | SHA1 | Date | |
---|---|---|---|
|
e8a4e382ba | ||
|
bf7e694e00 |
2 changed files with 36 additions and 14 deletions
|
@ -1,8 +1,9 @@
|
||||||
import type { mastodon } from "masto";
|
import type { mastodon } from "masto";
|
||||||
import { type Component, For, createSignal } from "solid-js";
|
import { type Component, For, createSignal, onMount } from "solid-js";
|
||||||
import { css } from "solid-styled";
|
import { css } from "solid-styled";
|
||||||
import tootStyle from "./toot.module.css";
|
import tootStyle from "./toot.module.css";
|
||||||
import MediaViewer from "./MediaViewer";
|
import MediaViewer from "./MediaViewer";
|
||||||
|
import { render } from "solid-js/web";
|
||||||
|
|
||||||
const MediaAttachmentGrid: Component<{
|
const MediaAttachmentGrid: Component<{
|
||||||
attachments: mastodon.v1.MediaAttachment[];
|
attachments: mastodon.v1.MediaAttachment[];
|
||||||
|
@ -13,16 +14,35 @@ const MediaAttachmentGrid: Component<{
|
||||||
const gridTemplateColumns = () => {
|
const gridTemplateColumns = () => {
|
||||||
const l = props.attachments.length;
|
const l = props.attachments.length;
|
||||||
if (l < 2) {
|
if (l < 2) {
|
||||||
return "1fr";
|
return "minmax(40px, auto)";
|
||||||
}
|
}
|
||||||
if (l < 4) {
|
if (l < 4) {
|
||||||
return "repeat(2, 1fr)";
|
return "repeat(2, minmax(40px, auto))";
|
||||||
}
|
}
|
||||||
return "repeat(3, 1fr)";
|
return "repeat(3, minmax(40px, auto))";
|
||||||
};
|
};
|
||||||
|
|
||||||
const openViewerFor = (index: number) => {
|
const openViewerFor = (index: number) => {
|
||||||
setViewerIndex(index);
|
setViewerIndex(index);
|
||||||
|
const container = document.createElement("div");
|
||||||
|
container.setAttribute("role", "presentation");
|
||||||
|
document.body.appendChild(container);
|
||||||
|
let dispose: () => void
|
||||||
|
dispose = render(() => {
|
||||||
|
return (
|
||||||
|
<MediaViewer
|
||||||
|
show={viewerOpened()}
|
||||||
|
index={viewerIndex() || 0}
|
||||||
|
onIndexUpdated={setViewerIndex}
|
||||||
|
media={props.attachments}
|
||||||
|
onClose={() => {
|
||||||
|
setViewerIndex(undefined);
|
||||||
|
dispose();
|
||||||
|
document.body.removeChild(container)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}, container);
|
||||||
};
|
};
|
||||||
|
|
||||||
css`
|
css`
|
||||||
|
@ -56,13 +76,6 @@ const MediaAttachmentGrid: Component<{
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
</For>
|
</For>
|
||||||
<MediaViewer
|
|
||||||
show={viewerOpened()}
|
|
||||||
index={viewerIndex() || 0}
|
|
||||||
onIndexUpdated={setViewerIndex}
|
|
||||||
media={props.attachments}
|
|
||||||
onClose={() => setViewerIndex(undefined)}
|
|
||||||
/>
|
|
||||||
</section>
|
</section>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -228,10 +228,19 @@
|
||||||
> :where(img) {
|
> :where(img) {
|
||||||
max-height: 35vh;
|
max-height: 35vh;
|
||||||
min-height: 40px;
|
min-height: 40px;
|
||||||
object-fit: none;
|
object-fit: contain;
|
||||||
width: 100%;
|
max-width: 100%;
|
||||||
background-color: var(--tutu-color-surface-d);
|
background-color: var(--tutu-color-surface-d);
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
transition: border-color 220ms var(--tutu-anim-curve-std),
|
||||||
|
box-shadow 220ms var(--tutu-anim-curve-std);
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus-visible {
|
||||||
|
border: 1px solid var(--tutu-color-surface-dd);
|
||||||
|
box-shadow: var(--tutu-shadow-e1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue