@@ -2,12 +2,14 @@ import * as Base64 from "./base64.js";
2
2
import { chroma } from "./chroma.js" ;
3
3
4
4
document . addEventListener ( "DOMContentLoaded" , function ( ) {
5
- var darkMode = ( window . matchMedia && window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ) ;
6
- var style = document . createElement ( 'style' ) ;
7
- var ref = document . querySelector ( 'script' ) ;
5
+ var darkMode =
6
+ window . matchMedia &&
7
+ window . matchMedia ( "(prefers-color-scheme: dark)" ) . matches ;
8
+ var style = document . createElement ( "style" ) ;
9
+ var ref = document . querySelector ( "script" ) ;
8
10
ref . parentNode . insertBefore ( style , ref ) ;
9
11
10
- var form = document . getElementById ( ' chroma' ) ;
12
+ var form = document . getElementById ( " chroma" ) ;
11
13
var textArea = form . elements [ "text" ] ;
12
14
var styleSelect = form . elements [ "style" ] ;
13
15
var languageSelect = form . elements [ "language" ] ;
@@ -16,49 +18,62 @@ document.addEventListener("DOMContentLoaded", function () {
16
18
var output = document . getElementById ( "output" ) ;
17
19
var htmlCheckbox = document . getElementById ( "html" ) ;
18
20
19
- ( document . querySelectorAll ( ' .notification .delete' ) || [ ] ) . forEach ( ( el ) => {
21
+ ( document . querySelectorAll ( " .notification .delete" ) || [ ] ) . forEach ( ( el ) => {
20
22
const notification = el . parentNode ;
21
- el . addEventListener ( ' click' , ( ) => {
23
+ el . addEventListener ( " click" , ( ) => {
22
24
notification . parentNode . removeChild ( notification ) ;
23
25
} ) ;
24
26
} ) ;
25
27
26
28
async function renderServer ( formData ) {
27
- return ( await fetch ( "api/render" , {
28
- method : 'POST' ,
29
- mode : 'cors' ,
30
- cache : 'no-cache' ,
31
- credentials : 'same-origin' ,
32
- headers : {
33
- 'X-CSRF-Token' : csrfToken ,
34
- 'Content-Type' : 'application/json' ,
35
- } ,
36
- redirect : 'follow' ,
37
- referrer : 'no-referrer' ,
38
- body : JSON . stringify ( formData ) ,
39
- } ) ) . json ( ) ;
29
+ return (
30
+ await fetch ( "api/render" , {
31
+ method : "POST" ,
32
+ mode : "cors" ,
33
+ cache : "no-cache" ,
34
+ credentials : "same-origin" ,
35
+ headers : {
36
+ "X-CSRF-Token" : csrfToken ,
37
+ "Content-Type" : "application/json" ,
38
+ } ,
39
+ redirect : "follow" ,
40
+ referrer : "no-referrer" ,
41
+ body : JSON . stringify ( formData ) ,
42
+ } )
43
+ ) . json ( ) ;
40
44
}
41
45
42
46
async function renderWasm ( formData ) {
43
- return await chroma . highlight (
44
- formData . text ,
45
- formData . language ,
46
- formData . style ,
47
- formData . classes ,
48
- ) ;
47
+ return await chroma . highlight (
48
+ formData . text ,
49
+ formData . language ,
50
+ formData . style ,
51
+ formData . classes ,
52
+ ) ;
49
53
}
50
54
51
55
async function render ( formData ) {
52
- return chroma !== null
53
- ? renderWasm ( formData )
54
- : renderServer ( formData ) ;
56
+ return chroma !== null ? renderWasm ( formData ) : renderServer ( formData ) ;
55
57
}
56
58
57
-
58
59
// https://stackoverflow.com/a/37697925/7980
59
60
function handleTab ( e ) {
60
- var after , before , end , lastNewLine , changeLength , re , replace , selection , start , val ;
61
- if ( ( e . charCode === 9 || e . keyCode === 9 ) && ! e . altKey && ! e . ctrlKey && ! e . metaKey ) {
61
+ var after ,
62
+ before ,
63
+ end ,
64
+ lastNewLine ,
65
+ changeLength ,
66
+ re ,
67
+ replace ,
68
+ selection ,
69
+ start ,
70
+ val ;
71
+ if (
72
+ ( e . charCode === 9 || e . keyCode === 9 ) &&
73
+ ! e . altKey &&
74
+ ! e . ctrlKey &&
75
+ ! e . metaKey
76
+ ) {
62
77
e . preventDefault ( ) ;
63
78
start = this . selectionStart ;
64
79
end = this . selectionEnd ;
@@ -68,14 +83,14 @@ document.addEventListener("DOMContentLoaded", function () {
68
83
replace = true ;
69
84
if ( start !== end ) {
70
85
selection = val . substring ( start , end ) ;
71
- if ( ~ selection . indexOf ( '\n' ) ) {
86
+ if ( ~ selection . indexOf ( "\n" ) ) {
72
87
replace = false ;
73
88
changeLength = 0 ;
74
- lastNewLine = before . lastIndexOf ( '\n' ) ;
89
+ lastNewLine = before . lastIndexOf ( "\n" ) ;
75
90
if ( ! ~ lastNewLine ) {
76
91
selection = before + selection ;
77
92
changeLength = before . length ;
78
- before = '' ;
93
+ before = "" ;
79
94
} else {
80
95
selection = before . substring ( lastNewLine ) + selection ;
81
96
changeLength = before . length - lastNewLine ;
@@ -87,9 +102,9 @@ document.addEventListener("DOMContentLoaded", function () {
87
102
start -- ;
88
103
changeLength -- ;
89
104
}
90
- selection = selection . replace ( re , '$1' ) ;
105
+ selection = selection . replace ( re , "$1" ) ;
91
106
} else {
92
- selection = selection . replace ( / ( \n | ^ ) / g, ' $1\t' ) ;
107
+ selection = selection . replace ( / ( \n | ^ ) / g, " $1\t" ) ;
93
108
start ++ ;
94
109
changeLength ++ ;
95
110
}
@@ -99,7 +114,7 @@ document.addEventListener("DOMContentLoaded", function () {
99
114
}
100
115
}
101
116
if ( replace && ! e . shiftKey ) {
102
- this . value = before + '\t' + after ;
117
+ this . value = before + "\t" + after ;
103
118
this . selectionStart = this . selectionEnd = start + 1 ;
104
119
}
105
120
}
@@ -109,7 +124,8 @@ document.addEventListener("DOMContentLoaded", function () {
109
124
function debounce ( func , wait , immediate ) {
110
125
var timeout ;
111
126
return function ( ) {
112
- var context = this , args = arguments ;
127
+ var context = this ;
128
+ var args = arguments ;
113
129
var later = function ( ) {
114
130
timeout = null ;
115
131
if ( ! immediate ) func . apply ( context , args ) ;
@@ -123,11 +139,11 @@ document.addEventListener("DOMContentLoaded", function () {
123
139
124
140
function getFormJSON ( ) {
125
141
return {
126
- " language" : languageSelect . value ,
127
- " style" : styleSelect . value ,
128
- " text" : textArea . value ,
129
- " classes" : htmlCheckbox . checked ,
130
- }
142
+ language : languageSelect . value ,
143
+ style : styleSelect . value ,
144
+ text : textArea . value ,
145
+ classes : htmlCheckbox . checked ,
146
+ } ;
131
147
}
132
148
133
149
async function update ( event ) {
@@ -145,12 +161,12 @@ document.addEventListener("DOMContentLoaded", function () {
145
161
output . innerHTML = value . html ;
146
162
}
147
163
} catch ( error ) {
148
- console . error ( ' Error highlighting code:' , error ) ;
164
+ console . error ( " Error highlighting code:" , error ) ;
149
165
// Fallback: display plain text
150
166
if ( htmlCheckbox . checked ) {
151
167
output . innerText = textArea . value ;
152
168
} else {
153
- output . innerHTML = ' <pre>' + textArea . value + ' </pre>' ;
169
+ output . innerHTML = " <pre>" + textArea . value + " </pre>" ;
154
170
}
155
171
}
156
172
@@ -160,7 +176,7 @@ document.addEventListener("DOMContentLoaded", function () {
160
176
}
161
177
162
178
function share ( event ) {
163
- let data = JSON . stringify ( getFormJSON ( ) )
179
+ let data = JSON . stringify ( getFormJSON ( ) ) ;
164
180
data = Base64 . encodeURI ( data ) ;
165
181
location . hash = "#" + data ;
166
182
try {
@@ -172,26 +188,29 @@ document.addEventListener("DOMContentLoaded", function () {
172
188
}
173
189
174
190
if ( location . hash ) {
175
- let json = Base64 . decode ( location . hash . substring ( 1 ) )
191
+ let json = Base64 . decode ( location . hash . substring ( 1 ) ) ;
176
192
json = JSON . parse ( json ) ;
177
193
textArea . value = json . text ;
178
194
languageSelect . value = json . language ;
179
195
styleSelect . value = json . style ;
180
196
htmlCheckbox . checked = json . classes ;
181
- update ( new Event ( ' change' ) ) ;
182
- } else if ( darkMode ) {
183
- styleSelect . value = "monokai" ;
184
- update ( new Event ( "change" ) ) ;
197
+ update ( new Event ( " change" ) ) ;
198
+ } else if ( darkMode ) {
199
+ styleSelect . value = "monokai" ;
200
+ update ( new Event ( "change" ) ) ;
185
201
}
186
202
187
203
var eventHandler = ( event ) => update ( event ) ;
188
- var debouncedEventHandler = debounce ( eventHandler , chroma === null ? 250 : 100 ) ;
189
-
190
- languageSelect . addEventListener ( 'change' , eventHandler ) ;
191
- styleSelect . addEventListener ( 'change' , eventHandler ) ;
192
- htmlCheckbox . addEventListener ( 'change' , eventHandler ) ;
193
- copyButton . addEventListener ( 'click' , share ) ;
194
-
195
- textArea . addEventListener ( 'keydown' , handleTab ) ;
196
- textArea . addEventListener ( 'change' , debouncedEventHandler ) ;
204
+ var debouncedEventHandler = debounce (
205
+ eventHandler ,
206
+ chroma === null ? 250 : 100 ,
207
+ ) ;
208
+
209
+ languageSelect . addEventListener ( "change" , eventHandler ) ;
210
+ styleSelect . addEventListener ( "change" , eventHandler ) ;
211
+ htmlCheckbox . addEventListener ( "change" , eventHandler ) ;
212
+ copyButton . addEventListener ( "click" , share ) ;
213
+
214
+ textArea . addEventListener ( "keydown" , handleTab ) ;
215
+ textArea . addEventListener ( "change" , debouncedEventHandler ) ;
197
216
} ) ;
0 commit comments