v0.2.0 1301099

+page.server.ts RawHistoryFolder

1import type { PageServerLoad } from './$types';
2import { validateSessionToken } from '$lib/api/session.server';
3import db from '$lib/db/db.server';
4import { userTextPreferences, users, messages } from '$lib/db/schema';
5import { eq, desc } from 'drizzle-orm';
6import { DEFAULT_TEXT_STYLE, type TextStyle } from '$lib/types/text-formatting';
7
8export const load: PageServerLoad = async ({ cookies }) => {
9    const token = cookies.get('session');
10    
11    if (!token) {
12        return {
13            user: null,
14            lastTextStyle: DEFAULT_TEXT_STYLE
15        };
16    }
17
18    try {
19        const { user } = await validateSessionToken(token);
20        
21        if (!user) {
22            return {
23                user: null,
24                lastTextStyle: DEFAULT_TEXT_STYLE
25            };
26        }
27
28        // Get user's last used text styling from their most recent message
29        const lastMessage = await db.query.messages.findFirst({
30            where: eq(messages.senderId, user.id),
31            orderBy: [desc(messages.timestamp)],
32            columns: {
33                styleData: true
34            }
35        });
36
37        let lastTextStyle: TextStyle = DEFAULT_TEXT_STYLE;
38
39        if (lastMessage?.styleData) {
40            try {
41                const parsedStyle = JSON.parse(lastMessage.styleData);
42                // Merge with default style to ensure all required properties
43                lastTextStyle = {
44                    ...DEFAULT_TEXT_STYLE,
45                    ...parsedStyle
46                };
47            } catch (error) {
48                console.warn('Failed to parse last text style:', error);
49            }
50        }
51
52        return {
53            user,
54            lastTextStyle
55        };
56    } catch (error) {
57        console.error('Error loading page data:', error);
58        return {
59            user: null,
60            lastTextStyle: DEFAULT_TEXT_STYLE
61        };
62    }
63};

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