detached 85bf2ff

fix(ui): hide buddy list separator when everyone is offline

commit
85bf2ffa8b42f972ede1e3b3bd9a8e9d9426dea0
author
bnema · · 2025-12-15 22:04 UTC
committer
bnema · · 2025-12-15 22:05 UTC
parent
4065baa
signature
GPG Unverified2B82207D370127A0 The key is unknown
2 files · +4 -17
M src/lib/components/chat-room.svelte +3 -1
@@ -816,7 +816,9 @@
816816
817817 <!-- Offline users section -->
818818 {#if usersOffline.length > 0}
819- <div class="section-separator"></div>
819+ {#if usersOnline.length > 0}
820+ <div class="section-separator"></div>
821+ {/if}
820822 <p class="section-header offline-header">Hors ligne ({usersOffline.length})</p>
821823 {#each usersOffline as user (user.id)}
822824 <div class="user offline">
@@ -816,7 +816,9 @@
816 816
817 <!-- Offline users section -->817 <!-- Offline users section -->
818 {#if usersOffline.length > 0}818 {#if usersOffline.length > 0}
819- <div class="section-separator"></div>819+ {#if usersOnline.length > 0}
820+ <div class="section-separator"></div>
821+ {/if}
820 <p class="section-header offline-header">Hors ligne ({usersOffline.length})</p>822 <p class="section-header offline-header">Hors ligne ({usersOffline.length})</p>
821 {#each usersOffline as user (user.id)}823 {#each usersOffline as user (user.id)}
822 <div class="user offline">824 <div class="user offline">
M src/lib/components/formatted-message.svelte +1 -16
@@ -1,7 +1,7 @@
11 <script lang="ts">
22 import type { EnrichedMessage } from '../types/chat';
33 import type { TextStyle } from '../types/text-formatting';
4- import { formatText, createGradientText } from '../utils/text-formatter';
4+ import { formatText, createGradientText, escapeHtml } from '../utils/text-formatter';
55 import { DEFAULT_TEXT_STYLE } from '../types/text-formatting';
66
77 // Props
@@ -31,7 +31,6 @@
3131 if (message.styleData) {
3232 try {
3333 style = JSON.parse(message.styleData);
34- console.debug('Parsed message style:', style, 'for message:', message.content);
3534 } catch (parseError) {
3635 console.warn('Failed to parse message style data:', parseError);
3736 }
@@ -40,19 +39,12 @@
4039 // Check if this is a gradient message
4140 if (style.gradient && Array.isArray(style.gradient) && style.gradient.length > 1) {
4241 // Use character-by-character gradient for better compatibility
43- console.debug(
44- 'Creating gradient text with colors:',
45- style.gradient,
46- 'for text:',
47- message.content
48- );
4942 formattedContent = createGradientText(
5043 message.content,
5144 style.gradient,
5245 'gradient-text-static',
5346 style
5447 );
55- console.debug('Generated gradient HTML:', formattedContent);
5648 return;
5749 }
5850
@@ -73,13 +65,6 @@
7365 processMessage();
7466 });
7567
76- // Utility function to escape HTML
77- function escapeHtml(text: string): string {
78- const div = document.createElement('div');
79- div.textContent = text;
80- return div.innerHTML;
81- }
82-
8368 // Generate inline styles for the message
8469 function getMessageStyles(): string {
8570 if (!message.hasFormatting || !message.styleData) {
@@ -1,7 +1,7 @@
1 <script lang="ts">1 <script lang="ts">
2 import type { EnrichedMessage } from '../types/chat';2 import type { EnrichedMessage } from '../types/chat';
3 import type { TextStyle } from '../types/text-formatting';3 import type { TextStyle } from '../types/text-formatting';
4- import { formatText, createGradientText } from '../utils/text-formatter';4+ import { formatText, createGradientText, escapeHtml } from '../utils/text-formatter';
5 import { DEFAULT_TEXT_STYLE } from '../types/text-formatting';5 import { DEFAULT_TEXT_STYLE } from '../types/text-formatting';
6 6
7 // Props7 // Props
@@ -31,7 +31,6 @@
31 if (message.styleData) {31 if (message.styleData) {
32 try {32 try {
33 style = JSON.parse(message.styleData);33 style = JSON.parse(message.styleData);
34- console.debug('Parsed message style:', style, 'for message:', message.content);
35 } catch (parseError) {34 } catch (parseError) {
36 console.warn('Failed to parse message style data:', parseError);35 console.warn('Failed to parse message style data:', parseError);
37 }36 }
@@ -40,19 +39,12 @@
40 // Check if this is a gradient message39 // Check if this is a gradient message
41 if (style.gradient && Array.isArray(style.gradient) && style.gradient.length > 1) {40 if (style.gradient && Array.isArray(style.gradient) && style.gradient.length > 1) {
42 // Use character-by-character gradient for better compatibility41 // Use character-by-character gradient for better compatibility
43- console.debug(
44- 'Creating gradient text with colors:',
45- style.gradient,
46- 'for text:',
47- message.content
48- );
49 formattedContent = createGradientText(42 formattedContent = createGradientText(
50 message.content,43 message.content,
51 style.gradient,44 style.gradient,
52 'gradient-text-static',45 'gradient-text-static',
53 style46 style
54 );47 );
55- console.debug('Generated gradient HTML:', formattedContent);
56 return;48 return;
57 }49 }
58 50
@@ -73,13 +65,6 @@
73 processMessage();65 processMessage();
74 });66 });
75 67
76- // Utility function to escape HTML
77- function escapeHtml(text: string): string {
78- const div = document.createElement('div');
79- div.textContent = text;
80- return div.innerHTML;
81- }
82-
83 // Generate inline styles for the message68 // Generate inline styles for the message
84 function getMessageStyles(): string {69 function getMessageStyles(): string {
85 if (!message.hasFormatting || !message.styleData) {70 if (!message.hasFormatting || !message.styleData) {

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 3

Tags 8

↑↓ moveenter openesc close