Thread viewer for Bluesky

a bunch of style/layout fixes after visual review

+34 -21
+2 -2
src/components/BiohazardDialog.svelte
··· 48 width: 400px; 49 } 50 51 - p.submit { 52 margin-top: 40px; 53 margin-bottom: 20px; 54 } 55 56 - input[type="submit"] { 57 width: 180px; 58 margin-left: 5px; 59 margin-right: 5px;
··· 48 width: 400px; 49 } 50 51 + :global(.dialog) p.submit { 52 margin-top: 40px; 53 margin-bottom: 20px; 54 } 55 56 + :global(.dialog) input[type="submit"] { 57 width: 180px; 58 margin-left: 5px; 59 margin-right: 5px;
+1 -2
src/components/RichTextFromFacets.svelte
··· 19 {@const lines = segment.text.split("\n")} 20 21 {#each lines as line, i} 22 - {#if i > 0}<br>{/if} 23 - {line} 24 {/each} 25 {/if} 26 {/each}
··· 19 {@const lines = segment.text.split("\n")} 20 21 {#each lines as line, i} 22 + {#if i > 0}<br>{/if}{line} 23 {/each} 24 {/if} 25 {/each}
+9 -6
src/components/embeds/EmbedComponent.svelte
··· 86 margin-top: 8px; 87 margin-bottom: 4px; 88 line-height: 135%; 89 } 90 91 a.link-card.record > div:has(.avatar) { ··· 98 99 a.link-card.record .handle { 100 color: #666; 101 - margin-left: 5px; 102 } 103 104 a.link-card.record .avatar { ··· 114 a.link-card.record .stats { 115 margin-top: 9px; 116 margin-bottom: 1px; 117 } 118 119 - a.link-card.record .stats i.fa-heart:hover { 120 color: #aaa; 121 } 122 } ··· 151 152 a.link-card.record .avatar { 153 border-color: #888; 154 - } 155 - 156 - a.link-card.record .stats i.fa-heart:hover { 157 - color: #eee; 158 } 159 } 160 }
··· 86 margin-top: 8px; 87 margin-bottom: 4px; 88 line-height: 135%; 89 + white-space: pre-line; 90 } 91 92 a.link-card.record > div:has(.avatar) { ··· 99 100 a.link-card.record .handle { 101 color: #666; 102 + margin-left: 1px; 103 + font-weight: normal; 104 + font-size: 11pt; 105 + vertical-align: text-top; 106 } 107 108 a.link-card.record .avatar { ··· 118 a.link-card.record .stats { 119 margin-top: 9px; 120 margin-bottom: 1px; 121 + font-size: 10pt; 122 + color: #666; 123 } 124 125 + a.link-card.record .stats i.fa-heart { 126 + font-size: 9pt; 127 color: #aaa; 128 } 129 } ··· 158 159 a.link-card.record .avatar { 160 border-color: #888; 161 } 162 } 163 }
+1 -1
src/components/posts/PostComponent.svelte
··· 187 </div> 188 189 <style> 190 - .post { 191 position: relative; 192 padding-left: 21px; 193 margin-top: 30px;
··· 187 </div> 188 189 <style> 190 + :global(.post) { 191 position: relative; 192 padding-left: 21px; 193 margin-top: 30px;
+1 -1
src/components/posts/PostFooter.svelte
··· 134 } 135 136 span { 137 - margin-right: 10px; 138 } 139 140 .blocked-info {
··· 134 } 135 136 span { 137 + margin-right: 7px; 138 } 139 140 .blocked-info {
+2 -2
src/components/posts/PostHeader.svelte
··· 65 border-radius: 16px; 66 vertical-align: middle; 67 margin-bottom: 3px; 68 - margin-right: 8px; 69 } 70 71 .no-avatar, .muted-avatar { ··· 73 background-color: #eee; 74 border-radius: 16px; 75 vertical-align: middle; 76 - margin-right: 8px; 77 } 78 79 .muted-avatar {
··· 65 border-radius: 16px; 66 vertical-align: middle; 67 margin-bottom: 3px; 68 + margin-right: 4px; 69 } 70 71 .no-avatar, .muted-avatar { ··· 73 background-color: #eee; 74 border-radius: 16px; 75 vertical-align: middle; 76 + margin-right: 4px; 77 } 78 79 .muted-avatar {
+3 -2
src/components/posts/ReferencedPostAuthorLink.svelte
··· 5 let { post, status = undefined }: { post: AnyPost, status?: string | undefined } = $props(); 6 7 let handle: string | undefined = $state(); 8 9 $effect(() => { 10 let did = atURI(post.uri).repo; ··· 16 </script> 17 18 {#if status} 19 - (<a href="{post.didLinkToAuthor}" target="_blank">{handle ?? 'see author'}</a>, {status}) 20 {:else} 21 - (<a href="{post.didLinkToAuthor}" target="_blank">{handle ?? 'see author'}</a>) 22 {/if}
··· 5 let { post, status = undefined }: { post: AnyPost, status?: string | undefined } = $props(); 6 7 let handle: string | undefined = $state(); 8 + let handleText = $derived(handle ? `@${handle}` : 'see author'); 9 10 $effect(() => { 11 let did = atURI(post.uri).repo; ··· 17 </script> 18 19 {#if status} 20 + (<a href="{post.didLinkToAuthor}" target="_blank">{handleText}</a>, {status}) 21 {:else} 22 + (<a href="{post.didLinkToAuthor}" target="_blank">{handleText}</a>) 23 {/if}
+1 -1
src/models/posts.js
··· 343 /** @returns {string} */ 344 get authorDisplayName() { 345 if (this.author.displayName) { 346 - return this.author.displayName; 347 } else if (this.author.handle.endsWith('.bsky.social')) { 348 return this.author.handle.replace(/\.bsky\.social$/, ''); 349 } else {
··· 343 /** @returns {string} */ 344 get authorDisplayName() { 345 if (this.author.displayName) { 346 + return this.author.displayName.trim(); 347 } else if (this.author.handle.endsWith('.bsky.social')) { 348 return this.author.handle.replace(/\.bsky\.social$/, ''); 349 } else {
+1 -1
src/pages/HashtagPage.svelte
··· 66 {/if} 67 68 <style> 69 - .hashtag :global(.post) { 70 padding-bottom: 10px; 71 border-bottom: 1px solid #ddd; 72 }
··· 66 {/if} 67 68 <style> 69 + .hashtag > :global(.post) { 70 padding-bottom: 10px; 71 border-bottom: 1px solid #ddd; 72 }
+2
src/pages/LikeStatsPage.svelte
··· 36 } 37 </script> 38 39 <h2>Like statistics</h2> 40 41 <form onsubmit={startScan}> ··· 57 <LikeStatsTable cssClass="given-likes" header="❤️ Likes from you:" users={givenLikesUsers} /> 58 <LikeStatsTable cssClass="received-likes" header="💛 Likes on your posts:" users={receivedLikesUsers} /> 59 {/if} 60 61 <style> 62 input[type="range"] {
··· 36 } 37 </script> 38 39 + <main> 40 <h2>Like statistics</h2> 41 42 <form onsubmit={startScan}> ··· 58 <LikeStatsTable cssClass="given-likes" header="❤️ Likes from you:" users={givenLikesUsers} /> 59 <LikeStatsTable cssClass="received-likes" header="💛 Likes on your posts:" users={receivedLikesUsers} /> 60 {/if} 61 + </main> 62 63 <style> 64 input[type="range"] {
+1
src/pages/LycanSearchPage.svelte
··· 240 <style> 241 .search-collections label { 242 vertical-align: middle; 243 } 244 245 .lycan-import {
··· 240 <style> 241 .search-collections label { 242 vertical-align: middle; 243 + margin-right: 5px; 244 } 245 246 .lycan-import {
+3
src/pages/PostingStatsPage.svelte
··· 109 } 110 </script> 111 112 <h2>Bluesky posting statistics</h2> 113 114 <form {onsubmit}> ··· 157 {#if results} 158 <PostingStatsTable {...tableOptions} {...results} /> 159 {/if} 160 161 <style> 162 input[type="radio"] { ··· 168 input[type="radio"] + label { 169 user-select: none; 170 -webkit-user-select: none; 171 } 172 173 input[type="range"] {
··· 109 } 110 </script> 111 112 + <main> 113 <h2>Bluesky posting statistics</h2> 114 115 <form {onsubmit}> ··· 158 {#if results} 159 <PostingStatsTable {...tableOptions} {...results} /> 160 {/if} 161 + </main> 162 163 <style> 164 input[type="radio"] { ··· 170 input[type="radio"] + label { 171 user-select: none; 172 -webkit-user-select: none; 173 + margin-right: 4px; 174 } 175 176 input[type="range"] {
+4
src/pages/QuotesPage.svelte
··· 75 {/if} 76 77 <style> 78 .quotes :global(.post) { 79 padding-bottom: 5px; 80 }
··· 75 {/if} 76 77 <style> 78 + .quotes :global(p.back) { 79 + padding-left: 10px; 80 + } 81 + 82 .quotes :global(.post) { 83 padding-bottom: 5px; 84 }
+2 -2
src/pages/SearchPage.svelte
··· 2 let { children } = $props(); 3 </script> 4 5 - <div class="search-page"> 6 {@render children()} 7 - </div> 8 9 <style> 10 .search-page :global {
··· 2 let { children } = $props(); 3 </script> 4 5 + <main class="search-page"> 6 {@render children()} 7 + </main> 8 9 <style> 10 .search-page :global {
+1 -1
style.css
··· 56 p.back i { 57 font-size: 10pt; 58 color: #888; 59 - margin-right: 5px; 60 } 61 62 @media (prefers-color-scheme: dark) {
··· 56 p.back i { 57 font-size: 10pt; 58 color: #888; 59 + margin-right: 3px; 60 } 61 62 @media (prefers-color-scheme: dark) {