|
1 | 1 | <script> |
2 | 2 | import { onMount, createEventDispatcher } from "svelte"; |
3 | 3 | import CodeMirror from "svelte-codemirror-editor"; |
4 | | - import { keymap } from "@codemirror/view"; |
| 4 | + import { keymap, lineNumbers } from "@codemirror/view"; |
5 | 5 | import { indentUnit, indentOnInput, indentService } from "@codemirror/language"; |
6 | 6 | import { defaultKeymap, history, indentWithTab, historyKeymap } from "@codemirror/commands"; |
7 | 7 | import { EditorState } from "@codemirror/state"; |
|
20 | 20 | /** @type {string} */ |
21 | 21 | export let containerClasses = ''; |
22 | 22 |
|
| 23 | + /** @type {boolean} */ |
| 24 | + export let useDarkTheme = true; |
| 25 | +
|
| 26 | + /** @type {boolean} */ |
| 27 | + export let hideLineNumber = false; |
| 28 | +
|
| 29 | + /** @type {boolean} */ |
| 30 | + export let editable = true; |
| 31 | +
|
23 | 32 |
|
24 | 33 | /** @type {import("@codemirror/state").Extension[]} */ |
25 | 34 | const baseExtensions = [ |
26 | 35 | indentUnit.of(" "), |
27 | 36 | EditorState.tabSize.of(4), |
28 | 37 | indentOnInput(), |
29 | 38 | history(), |
30 | | - keymap.of([...defaultKeymap, ...historyKeymap, indentWithTab]) |
| 39 | + keymap.of([...defaultKeymap, ...historyKeymap, indentWithTab]), |
31 | 40 | ]; |
32 | 41 |
|
33 | 42 | /** @type {import("@codemirror/state").Extension[]} */ |
|
59 | 68 | javascript(), |
60 | 69 | ...baseExtensions |
61 | 70 | ]; |
| 71 | + } else { |
| 72 | + extensions = [ |
| 73 | + ...baseExtensions |
| 74 | + ]; |
| 75 | + } |
| 76 | +
|
| 77 | + if (hideLineNumber) { |
| 78 | + extensions = [ |
| 79 | + lineNumbers({ formatNumber: () => "" }), |
| 80 | + ...extensions |
| 81 | + ]; |
62 | 82 | } |
63 | 83 | }); |
64 | 84 |
|
|
73 | 93 |
|
74 | 94 | <CodeMirror |
75 | 95 | class={`code-script-container ${containerClasses}`} |
76 | | - theme={oneDark} |
77 | 96 | lineWrapping |
| 97 | + theme={useDarkTheme ? oneDark : null} |
| 98 | + editable={editable} |
78 | 99 | extensions={extensions} |
79 | 100 | value={scriptText} |
80 | 101 | on:change={e => handleChange(e)} |
|
0 commit comments