@@ -219,204 +219,7 @@ <h1>cooklang-rs playground</h1>
219
219
</ div >
220
220
</ main >
221
221
222
- < script type ="module ">
223
- import init , { State , version } from "@cooklang/cooklang-ts" ;
224
-
225
- async function run ( ) {
226
- await init ( ) ;
227
-
228
- const editor = ace . edit ( "editor" , {
229
- wrap : true ,
230
- printMargin : false ,
231
- fontSize : 16 ,
232
- fontFamily : "Jetbrains Mono" ,
233
- placeholder : "Write your recipe here" ,
234
- } ) ;
235
- const input = window . sessionStorage . getItem ( "input" ) ?? "Write your @recipe here!" ;
236
- editor . setValue ( input ) ;
237
- const output = document . getElementById ( "output" ) ;
238
- const errors = document . getElementById ( "errors" ) ;
239
- const errorsDetails = document . getElementById ( "errors-details" ) ;
240
- const elapsed = document . getElementById ( "elapsed" ) ;
241
- const parserSelect = document . getElementById ( "parserSelect" ) ;
242
- const jsonCheckbox = document . getElementById ( "json" ) ;
243
- const servings = document . getElementById ( "servings" ) ;
244
- const loadUnits = document . getElementById ( "loadUnits" ) ;
245
- document . getElementById ( "version" ) . textContent = version ( ) ;
246
-
247
- const state = new State ( ) ;
248
-
249
- const search = new URLSearchParams ( window . location . search ) ;
250
- if ( search . has ( "json" ) ) {
251
- jsonCheckbox . checked = search . get ( "json" ) === "true" ;
252
- }
253
- if ( search . has ( "loadUnits" ) ) {
254
- const load = search . get ( "loadUnits" ) === "true"
255
- state . load_units = load ;
256
- }
257
- loadUnits . checked = state . load_units ;
258
- if ( search . has ( "extensions" ) ) {
259
- state . extensions = Number ( search . get ( "extensions" ) ) ;
260
- }
261
- let mode = search . get ( "mode" ) || localStorage . getItem ( "mode" ) ;
262
- if ( mode !== null ) {
263
- parserSelect . value = mode ;
264
- setMode ( mode ) ;
265
- }
266
-
267
- function parse ( ) {
268
- const input = editor . getValue ( ) ;
269
- window . sessionStorage . setItem ( "input" , input ) ;
270
- switch ( parserSelect . value ) {
271
- case "full" : {
272
- const { value, error } = state . parse_full ( input , jsonCheckbox . checked ) ;
273
- output . textContent = value ;
274
- errors . innerHTML = error ;
275
- break ;
276
- }
277
- case "events" : {
278
- const events = state . parse_events ( input ) ;
279
- output . textContent = events ;
280
- errors . innerHTML = "" ;
281
- break ;
282
- }
283
- case "ast" : {
284
- const { value, error } = state . parse_ast ( input , jsonCheckbox . checked ) ;
285
- output . textContent = value ;
286
- errors . innerHTML = error ;
287
- break ;
288
- }
289
- case "render" : {
290
- const { value, error } = state . parse_render ( input , servings . value . length === 0 ? null : servings . valueAsNumber ) ;
291
- output . innerHTML = value ;
292
- errors . innerHTML = error ;
293
- break ;
294
- }
295
- case "stdmeta" : {
296
- const { value, error } = state . std_metadata ( input ) ;
297
- output . innerHTML = value ;
298
- errors . innerHTML = error ;
299
- break ;
300
- }
301
- }
302
- errorsDetails . open = errors . childElementCount !== 0
303
- }
304
-
305
- editor . on ( "change" , debounce ( parse , 100 ) ) ;
306
- parserSelect . addEventListener ( "change" , ( ev ) => setMode ( ev . target . value ) ) ;
307
- jsonCheckbox . addEventListener ( "change" , ( ev ) => {
308
- const params = new URLSearchParams ( window . location . search ) ;
309
- if ( ev . target . checked ) {
310
- params . set ( "json" , "true" ) ;
311
- } else {
312
- params . delete ( "json" )
313
- }
314
- window . history . replaceState (
315
- null ,
316
- "" ,
317
- window . location . pathname + "?" + params . toString ( )
318
- ) ;
319
- parse ( )
320
- } ) ;
321
- loadUnits . addEventListener ( "change" , ( ev ) => {
322
- const params = new URLSearchParams ( window . location . search ) ;
323
- state . load_units = ! ! ev . target . checked ;
324
- if ( ev . target . checked ) {
325
- params . delete ( "loadUnits" )
326
- } else {
327
- params . set ( "loadUnits" , "false" ) ;
328
- }
329
- window . history . replaceState (
330
- null ,
331
- "" ,
332
- window . location . pathname + "?" + params . toString ( )
333
- ) ;
334
- parse ( )
335
- } ) ;
336
- servings . addEventListener ( "change" , ( ) => parse ( ) ) ;
337
-
338
- const extensionsContainer = document . getElementById ( "extensions-container" ) ;
339
-
340
- const extensions = [
341
- [ "COMPONENT_MODIFIERS" , 1 << 1 ] ,
342
- [ "COMPONENT_ALIAS" , 1 << 3 ] ,
343
- [ "ADVANCED_UNITS" , 1 << 5 ] ,
344
- [ "MODES" , 1 << 6 ] ,
345
- [ "INLINE_QUANTITIES" , 1 << 7 ] ,
346
- [ "RANGE_VALUES" , 1 << 9 ] ,
347
- [ "TIMER_REQUIRES_TIME" , 1 << 10 ] ,
348
- [ "INTERMEDIATE_PREPARATIONS" , 1 << 11 | 1 << 1 ]
349
- ] ;
350
-
351
- extensions . forEach ( ( [ e , bits ] ) => {
352
- const elem = document . createElement ( "input" ) ;
353
- elem . setAttribute ( "type" , "checkbox" ) ;
354
- elem . setAttribute ( "id" , e ) ;
355
- elem . setAttribute ( "data-ext-bits" , bits ) ;
356
- elem . checked = ( state . extensions & bits ) === bits ;
357
- const label = document . createElement ( "label" ) ;
358
- label . setAttribute ( "for" , e ) ;
359
- label . textContent = e ;
360
- const container = document . createElement ( "div" ) ;
361
- container . appendChild ( elem ) ;
362
- container . appendChild ( label ) ;
363
- extensionsContainer . appendChild ( container ) ;
364
-
365
- elem . addEventListener ( "change" , updateExtensions ) ;
366
- } ) ;
367
- function updateExtensions ( ) {
368
- let e = 0 ;
369
- document . querySelectorAll ( "[data-ext-bits]:checked" ) . forEach ( elem => {
370
- const bits = Number ( elem . getAttribute ( "data-ext-bits" ) ) ;
371
- e |= bits ;
372
- } ) ;
373
- console . log ( e ) ;
374
- state . extensions = e ;
375
-
376
- const params = new URLSearchParams ( window . location . search ) ;
377
- params . set ( "extensions" , e ) ;
378
- window . history . replaceState (
379
- null ,
380
- "" ,
381
- window . location . pathname + "?" + params . toString ( )
382
- ) ;
383
- parse ( ) ;
384
- }
385
-
386
- function setMode ( mode ) {
387
- const params = new URLSearchParams ( window . location . search ) ;
388
- params . set ( "mode" , mode ) ;
389
- window . history . replaceState (
390
- null ,
391
- "" ,
392
- window . location . pathname + "?" + params . toString ( )
393
- ) ;
394
- document . getElementById ( "jsoncontainer" ) . hidden = mode === "render" || mode === "events" ;
395
- document . getElementById ( "servingscontainer" ) . hidden = mode !== "render" ;
396
- localStorage . setItem ( "mode" , mode ) ;
397
- parse ( ) ;
398
- }
399
-
400
- editor . focus ( ) ;
401
- parse ( ) ;
402
- }
403
-
404
- function debounce ( fn , delay ) {
405
- let timer = null ;
406
- let first = true ;
407
- return ( ) => {
408
- if ( first ) {
409
- fn ( ) ;
410
- first = false ;
411
- } else {
412
- clearTimeout ( timer ) ;
413
- timer = setTimeout ( fn , delay ) ;
414
- }
415
- } ;
416
- }
417
-
418
- run ( ) ;
419
- </ script >
222
+ < script type ="module " src ="./main.ts "> </ script >
420
223
</ body >
421
224
422
225
</ html >
0 commit comments