Skip to content

Commit 6c61e36

Browse files
webui: address review feedback from allozaur
1 parent 511cabf commit 6c61e36

File tree

3 files changed

+39
-11
lines changed

3 files changed

+39
-11
lines changed

tools/server/webui/src/lib/components/app/misc/CodePreviewDialog.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
import { Dialog as DialogPrimitive } from 'bits-ui';
33
import XIcon from '@lucide/svelte/icons/x';
44
5+
import type { PreviewLanguage } from '$lib/enums/files';
6+
57
interface Props {
68
open: boolean;
79
code: string;
8-
language: string;
10+
language: PreviewLanguage;
911
onOpenChange?: (open: boolean) => void;
1012
}
1113

tools/server/webui/src/lib/components/app/misc/MarkdownContent.svelte

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import githubDarkCss from 'highlight.js/styles/github-dark.css?inline';
1515
import githubLightCss from 'highlight.js/styles/github.css?inline';
1616
import { mode } from 'mode-watcher';
17+
import { PREVIEW_DIALOG_DEFAULTS, PreviewLanguage } from '$lib/enums/files';
1718
import { remarkLiteralHtml } from '$lib/markdown/literal-html';
1819
import CodePreviewDialog from './CodePreviewDialog.svelte';
1920
@@ -26,11 +27,10 @@
2627
2728
let containerRef = $state<HTMLDivElement>();
2829
let processedHtml = $state('');
29-
let previewDialogOpen = $state(false);
30-
let previewCode = $state('');
31-
let previewLanguage = $state('text');
3230
33-
const previewableLanguages = new Set(['html', 'htm', 'javascript', 'js']);
31+
let previewDialogOpen = $state<boolean>(PREVIEW_DIALOG_DEFAULTS.dialogOpen);
32+
let previewCode = $state<string>(PREVIEW_DIALOG_DEFAULTS.code);
33+
let previewLanguage = $state<PreviewLanguage>(PREVIEW_DIALOG_DEFAULTS.language);
3434
3535
function loadHighlightTheme(isDark: boolean) {
3636
if (!browser) return;
@@ -124,10 +124,17 @@
124124
const rawCode = codeElement.textContent || '';
125125
const codeId = `code-${Date.now()}-${index}`;
126126
const normalizedLanguage = language.toLowerCase();
127+
let previewLanguage: PreviewLanguage = PREVIEW_DIALOG_DEFAULTS.language;
128+
129+
if (normalizedLanguage === PreviewLanguage.HTML) {
130+
previewLanguage = PreviewLanguage.HTML;
131+
} else if (normalizedLanguage === PreviewLanguage.JAVASCRIPT) {
132+
previewLanguage = PreviewLanguage.JAVASCRIPT;
133+
}
127134
128135
codeElement.setAttribute('data-code-id', codeId);
129136
codeElement.setAttribute('data-raw-code', rawCode);
130-
codeElement.setAttribute('data-language', normalizedLanguage);
137+
codeElement.setAttribute('data-language', previewLanguage);
131138
132139
const wrapper = document.createElement('div');
133140
wrapper.className = 'code-block-wrapper';
@@ -154,7 +161,7 @@
154161
155162
actions.appendChild(copyButton);
156163
157-
if (previewableLanguages.has(normalizedLanguage)) {
164+
if (previewLanguage !== PREVIEW_DIALOG_DEFAULTS.language) {
158165
const previewButton = document.createElement('button');
159166
previewButton.className = 'preview-code-btn';
160167
previewButton.setAttribute('data-code-id', codeId);
@@ -207,7 +214,12 @@
207214
}
208215
}
209216
210-
function getCodeInfoFromTarget(target: HTMLElement) {
217+
type CodeInfo = {
218+
rawCode: string;
219+
language: PreviewLanguage;
220+
};
221+
222+
function getCodeInfoFromTarget(target: HTMLElement): CodeInfo | null {
211223
const wrapper = target.closest('.code-block-wrapper');
212224
213225
if (!wrapper) {
@@ -229,7 +241,8 @@
229241
return null;
230242
}
231243
232-
const language = codeElement.getAttribute('data-language') || 'text';
244+
const languageAttribute = codeElement.getAttribute('data-language') as PreviewLanguage | null;
245+
const language = languageAttribute ?? PREVIEW_DIALOG_DEFAULTS.language;
233246
234247
return { rawCode, language };
235248
}
@@ -303,8 +316,8 @@
303316
previewDialogOpen = open;
304317
305318
if (!open) {
306-
previewCode = '';
307-
previewLanguage = 'text';
319+
previewCode = PREVIEW_DIALOG_DEFAULTS.code;
320+
previewLanguage = PREVIEW_DIALOG_DEFAULTS.language;
308321
}
309322
}
310323

tools/server/webui/src/lib/enums/files.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,3 +182,16 @@ export enum MimeTypeText {
182182
LATEX = 'text/x-tex',
183183
BIBTEX = 'text/x-bibtex'
184184
}
185+
186+
// Preview dialog enums and helpers
187+
export enum PreviewLanguage {
188+
TEXT = 'text',
189+
HTML = 'html',
190+
JAVASCRIPT = 'javascript'
191+
}
192+
193+
export const PREVIEW_DIALOG_DEFAULTS = {
194+
dialogOpen: false,
195+
code: '',
196+
language: PreviewLanguage.TEXT
197+
} as const;

0 commit comments

Comments
 (0)