|
14 | 14 | import githubDarkCss from 'highlight.js/styles/github-dark.css?inline'; |
15 | 15 | import githubLightCss from 'highlight.js/styles/github.css?inline'; |
16 | 16 | import { mode } from 'mode-watcher'; |
| 17 | + import { PREVIEW_DIALOG_DEFAULTS, PreviewLanguage } from '$lib/enums/files'; |
17 | 18 | import { remarkLiteralHtml } from '$lib/markdown/literal-html'; |
18 | 19 | import CodePreviewDialog from './CodePreviewDialog.svelte'; |
19 | 20 |
|
|
26 | 27 |
|
27 | 28 | let containerRef = $state<HTMLDivElement>(); |
28 | 29 | let processedHtml = $state(''); |
29 | | - let previewDialogOpen = $state(false); |
30 | | - let previewCode = $state(''); |
31 | | - let previewLanguage = $state('text'); |
32 | 30 |
|
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); |
34 | 34 |
|
35 | 35 | function loadHighlightTheme(isDark: boolean) { |
36 | 36 | if (!browser) return; |
|
124 | 124 | const rawCode = codeElement.textContent || ''; |
125 | 125 | const codeId = `code-${Date.now()}-${index}`; |
126 | 126 | 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 | + } |
127 | 134 |
|
128 | 135 | codeElement.setAttribute('data-code-id', codeId); |
129 | 136 | codeElement.setAttribute('data-raw-code', rawCode); |
130 | | - codeElement.setAttribute('data-language', normalizedLanguage); |
| 137 | + codeElement.setAttribute('data-language', previewLanguage); |
131 | 138 |
|
132 | 139 | const wrapper = document.createElement('div'); |
133 | 140 | wrapper.className = 'code-block-wrapper'; |
|
154 | 161 |
|
155 | 162 | actions.appendChild(copyButton); |
156 | 163 |
|
157 | | - if (previewableLanguages.has(normalizedLanguage)) { |
| 164 | + if (previewLanguage !== PREVIEW_DIALOG_DEFAULTS.language) { |
158 | 165 | const previewButton = document.createElement('button'); |
159 | 166 | previewButton.className = 'preview-code-btn'; |
160 | 167 | previewButton.setAttribute('data-code-id', codeId); |
|
207 | 214 | } |
208 | 215 | } |
209 | 216 |
|
210 | | - function getCodeInfoFromTarget(target: HTMLElement) { |
| 217 | + type CodeInfo = { |
| 218 | + rawCode: string; |
| 219 | + language: PreviewLanguage; |
| 220 | + }; |
| 221 | +
|
| 222 | + function getCodeInfoFromTarget(target: HTMLElement): CodeInfo | null { |
211 | 223 | const wrapper = target.closest('.code-block-wrapper'); |
212 | 224 |
|
213 | 225 | if (!wrapper) { |
|
229 | 241 | return null; |
230 | 242 | } |
231 | 243 |
|
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; |
233 | 246 |
|
234 | 247 | return { rawCode, language }; |
235 | 248 | } |
|
303 | 316 | previewDialogOpen = open; |
304 | 317 |
|
305 | 318 | if (!open) { |
306 | | - previewCode = ''; |
307 | | - previewLanguage = 'text'; |
| 319 | + previewCode = PREVIEW_DIALOG_DEFAULTS.code; |
| 320 | + previewLanguage = PREVIEW_DIALOG_DEFAULTS.language; |
308 | 321 | } |
309 | 322 | } |
310 | 323 |
|
|
0 commit comments