tangled
alpha
login
or
join now
mackuba.eu
/
skythread
14
fork
atom
Thread viewer for Bluesky
14
fork
atom
overview
issues
pulls
pipelines
fixed some svelte warnings
mackuba.eu
3 months ago
c4e240d2
e5fa4902
+10
-9
5 changed files
expand all
collapse all
unified
split
src
components
embeds
GIFPlayer.svelte
LinkComponent.svelte
posts
PostBody.svelte
PostHeader.svelte
pages
ThreadPage.svelte
+2
-1
src/components/embeds/GIFPlayer.svelte
···
1
1
<script lang="ts">
2
2
-
let { gifURL, staticURL }: { gifURL: string, staticURL: string } = $props();
2
2
+
let { gifURL, staticURL, alt }: { gifURL: string, staticURL: string, alt: string | undefined } = $props();
3
3
4
4
let loaded = $state(false);
5
5
let paused = $state(false);
···
26
26
<div class="gif">
27
27
<img src={paused ? staticURL : gifURL}
28
28
class={paused ? 'static' : ''}
29
29
+
alt={alt ? `Gif: ${alt}` : `Gif animation`}
29
30
{onload}
30
31
{onclick}
31
32
style:opacity={loaded ? 1 : 0}
+1
-1
src/components/embeds/LinkComponent.svelte
···
29
29
</script>
30
30
31
31
{#if showingGIF}
32
32
-
<GIFPlayer gifURL={embed.url} staticURL={thumbnailURL()} />
32
32
+
<GIFPlayer gifURL={embed.url} staticURL={thumbnailURL()} alt={embed.title} />
33
33
{:else}
34
34
{#if isValidURL(embed.url)}
35
35
<a class="link-card" href={embed.url} target="_blank" {onclick}>
+2
-2
src/components/posts/PostBody.svelte
···
7
7
let { post }: { post: Post } = getContext('post');
8
8
let { highlightedMatches = undefined }: { highlightedMatches?: string[] } = $props();
9
9
10
10
-
let bodyElement: HTMLElement;
10
10
+
let bodyElement: HTMLElement | undefined = $state();
11
11
12
12
function highlightSearchResults(terms: string[]) {
13
13
let regexp = new RegExp(`\\b(${terms.join('|')})\\b`, 'gi');
14
14
-
let walker = document.createTreeWalker(bodyElement, NodeFilter.SHOW_TEXT);
14
14
+
let walker = document.createTreeWalker(bodyElement!, NodeFilter.SHOW_TEXT);
15
15
let ranges: Range[] = [];
16
16
17
17
while (walker.nextNode()) {
+1
-1
src/components/posts/PostHeader.svelte
···
7
7
let { post, context }: { post: Post, context: PostContext } = getContext('post');
8
8
let presenter = new PostPresenter(post, context);
9
9
10
10
-
let avatar: HTMLImageElement;
10
10
+
let avatar: HTMLImageElement | undefined = $state();
11
11
12
12
$effect(() => {
13
13
if (avatar) {
+4
-4
src/pages/ThreadPage.svelte
···
12
12
let post: AnyPost | undefined = $state();
13
13
let loadingFailed = $state(false);
14
14
15
15
-
let rootComponent: PostComponent;
15
15
+
let rootComponent: PostComponent | undefined = $state();
16
16
let response: Promise<json>;
17
17
18
18
if ('url' in props) {
···
34
34
window.root = root;
35
35
window.subtreeRoot = root;
36
36
37
37
+
post = root;
38
38
+
37
39
if (root instanceof Post) {
38
40
root.data.quoteCount = undefined;
39
41
40
42
blueAPI.getQuoteCount(root.uri).then(count => {
41
41
-
rootComponent.setQuoteCount(count);
43
43
+
rootComponent?.setQuoteCount(count);
42
44
}).catch(error => {
43
45
console.warn("Couldn't load quote count: " + error);
44
46
});
45
47
}
46
46
-
47
47
-
post = root;
48
48
}).catch((error) => {
49
49
showError(error);
50
50
loadingFailed = true;