@lokascript/language-server 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{dist-B64L7SG5.js → dist-V7SKUZF5.js} +552 -46
- package/dist/server.js +1307 -15
- package/package.json +4 -2
package/dist/server.js
CHANGED
|
@@ -322,6 +322,1226 @@ function formatHyperscript(code, indentStr = " ") {
|
|
|
322
322
|
return formattedLines.join("\n");
|
|
323
323
|
}
|
|
324
324
|
|
|
325
|
+
// src/chevrotain-parser.ts
|
|
326
|
+
import { CstParser } from "chevrotain";
|
|
327
|
+
|
|
328
|
+
// src/generated/chevrotain-vocabulary.ts
|
|
329
|
+
import { createToken, Lexer } from "chevrotain";
|
|
330
|
+
var Identifier = createToken({ name: "Identifier", pattern: /[a-zA-Z\u00C0-\u024F\u0400-\u04FF\u0600-\u06FF\u0900-\u09FF\u0E00-\u0E7F\u3040-\u9FFF\uAC00-\uD7AF][\w\u00C0-\u024F\u0400-\u04FF\u0600-\u06FF\u0900-\u09FF\u0E00-\u0E7F\u3040-\u9FFF\uAC00-\uD7AF'-]*/ });
|
|
331
|
+
var WhiteSpace = createToken({ name: "WhiteSpace", pattern: /\s+/ });
|
|
332
|
+
var StringLiteral = createToken({ name: "StringLiteral", pattern: /'[^']*'|"[^"]*"/ });
|
|
333
|
+
var NumberLiteral = createToken({ name: "NumberLiteral", pattern: /\d+(\.\d+)?/ });
|
|
334
|
+
var URLLiteral = createToken({ name: "URLLiteral", pattern: /\/[a-zA-Z0-9_\-.\/]+/ });
|
|
335
|
+
var CSSSelector = createToken({ name: "CSSSelector", pattern: /[#.][a-zA-Z_][\w-]*/ });
|
|
336
|
+
var AttributeSelector = createToken({ name: "AttributeSelector", pattern: /@[a-zA-Z_][\w-]*/ });
|
|
337
|
+
var HTMLSelector = createToken({ name: "HTMLSelector", pattern: /<[a-zA-Z][\w.-]*\/>/ });
|
|
338
|
+
var LocalVariable = createToken({ name: "LocalVariable", pattern: /:[a-zA-Z_][\w]*/ });
|
|
339
|
+
var GlobalVariable = createToken({ name: "GlobalVariable", pattern: /\$[a-zA-Z_][\w]*/ });
|
|
340
|
+
var LParen = createToken({ name: "LParen", pattern: /\(/ });
|
|
341
|
+
var RParen = createToken({ name: "RParen", pattern: /\)/ });
|
|
342
|
+
var Comma = createToken({ name: "Comma", pattern: /,/ });
|
|
343
|
+
var Dot = createToken({ name: "Dot", pattern: /\./ });
|
|
344
|
+
var Kw_previous = createToken({ name: "Kw_previous", pattern: /previous/, longer_alt: Identifier });
|
|
345
|
+
var Kw_closest = createToken({ name: "Kw_closest", pattern: /closest/, longer_alt: Identifier });
|
|
346
|
+
var Kw_while = createToken({ name: "Kw_while", pattern: /while/, longer_alt: Identifier });
|
|
347
|
+
var Kw_until = createToken({ name: "Kw_until", pattern: /until/, longer_alt: Identifier });
|
|
348
|
+
var Kw_times = createToken({ name: "Kw_times", pattern: /times/, longer_alt: Identifier });
|
|
349
|
+
var Kw_first = createToken({ name: "Kw_first", pattern: /first/, longer_alt: Identifier });
|
|
350
|
+
var Kw_false = createToken({ name: "Kw_false", pattern: /false/, longer_alt: Identifier });
|
|
351
|
+
var Kw_then = createToken({ name: "Kw_then", pattern: /then/, longer_alt: Identifier });
|
|
352
|
+
var Kw_else = createToken({ name: "Kw_else", pattern: /else/, longer_alt: Identifier });
|
|
353
|
+
var Kw_from = createToken({ name: "Kw_from", pattern: /from/, longer_alt: Identifier });
|
|
354
|
+
var Kw_into = createToken({ name: "Kw_into", pattern: /into/, longer_alt: Identifier });
|
|
355
|
+
var Kw_with = createToken({ name: "Kw_with", pattern: /with/, longer_alt: Identifier });
|
|
356
|
+
var Kw_have = createToken({ name: "Kw_have", pattern: /have/, longer_alt: Identifier });
|
|
357
|
+
var Kw_last = createToken({ name: "Kw_last", pattern: /last/, longer_alt: Identifier });
|
|
358
|
+
var Kw_next = createToken({ name: "Kw_next", pattern: /next/, longer_alt: Identifier });
|
|
359
|
+
var Kw_true = createToken({ name: "Kw_true", pattern: /true/, longer_alt: Identifier });
|
|
360
|
+
var Kw_null = createToken({ name: "Kw_null", pattern: /null/, longer_alt: Identifier });
|
|
361
|
+
var Kw_end = createToken({ name: "Kw_end", pattern: /end/, longer_alt: Identifier });
|
|
362
|
+
var Kw_for = createToken({ name: "Kw_for", pattern: /for/, longer_alt: Identifier });
|
|
363
|
+
var Kw_and = createToken({ name: "Kw_and", pattern: /and/, longer_alt: Identifier });
|
|
364
|
+
var Kw_not = createToken({ name: "Kw_not", pattern: /not/, longer_alt: Identifier });
|
|
365
|
+
var Kw_has = createToken({ name: "Kw_has", pattern: /has/, longer_alt: Identifier });
|
|
366
|
+
var Kw_you = createToken({ name: "Kw_you", pattern: /you/, longer_alt: Identifier });
|
|
367
|
+
var Kw_its = createToken({ name: "Kw_its", pattern: /its/, longer_alt: Identifier });
|
|
368
|
+
var Kw_the = createToken({ name: "Kw_the", pattern: /the/, longer_alt: Identifier });
|
|
369
|
+
var Kw_on = createToken({ name: "Kw_on", pattern: /on/, longer_alt: Identifier });
|
|
370
|
+
var Kw_if = createToken({ name: "Kw_if", pattern: /if/, longer_alt: Identifier });
|
|
371
|
+
var Kw_to = createToken({ name: "Kw_to", pattern: /to/, longer_alt: Identifier });
|
|
372
|
+
var Kw_in = createToken({ name: "Kw_in", pattern: /in/, longer_alt: Identifier });
|
|
373
|
+
var Kw_of = createToken({ name: "Kw_of", pattern: /of/, longer_alt: Identifier });
|
|
374
|
+
var Kw_as = createToken({ name: "Kw_as", pattern: /as/, longer_alt: Identifier });
|
|
375
|
+
var Kw_at = createToken({ name: "Kw_at", pattern: /at/, longer_alt: Identifier });
|
|
376
|
+
var Kw_by = createToken({ name: "Kw_by", pattern: /by/, longer_alt: Identifier });
|
|
377
|
+
var Kw_or = createToken({ name: "Kw_or", pattern: /or/, longer_alt: Identifier });
|
|
378
|
+
var Kw_is = createToken({ name: "Kw_is", pattern: /is/, longer_alt: Identifier });
|
|
379
|
+
var Kw_me = createToken({ name: "Kw_me", pattern: /me/, longer_alt: Identifier });
|
|
380
|
+
var Kw_it = createToken({ name: "Kw_it", pattern: /it/, longer_alt: Identifier });
|
|
381
|
+
var Kw_my = createToken({ name: "Kw_my", pattern: /my/, longer_alt: Identifier });
|
|
382
|
+
var Kw_no = createToken({ name: "Kw_no", pattern: /no/, longer_alt: Identifier });
|
|
383
|
+
var Cmd_transition = createToken({ name: "Cmd_transition", pattern: /transition/, longer_alt: Identifier });
|
|
384
|
+
var Cmd_show = createToken({ name: "Cmd_show", pattern: /show/, longer_alt: Identifier });
|
|
385
|
+
var Cmd_hide = createToken({ name: "Cmd_hide", pattern: /hide/, longer_alt: Identifier });
|
|
386
|
+
var Cmd_increment = createToken({ name: "Cmd_increment", pattern: /increment/, longer_alt: Identifier });
|
|
387
|
+
var Cmd_decrement = createToken({ name: "Cmd_decrement", pattern: /decrement/, longer_alt: Identifier });
|
|
388
|
+
var Cmd_default = createToken({ name: "Cmd_default", pattern: /default/, longer_alt: Identifier });
|
|
389
|
+
var Cmd_beep = createToken({ name: "Cmd_beep", pattern: /beep/, longer_alt: Identifier });
|
|
390
|
+
var Cmd_pick = createToken({ name: "Cmd_pick", pattern: /pick/, longer_alt: Identifier });
|
|
391
|
+
var Cmd_set = createToken({ name: "Cmd_set", pattern: /set/, longer_alt: Identifier });
|
|
392
|
+
var Cmd_log = createToken({ name: "Cmd_log", pattern: /log/, longer_alt: Identifier });
|
|
393
|
+
var Cmd_get = createToken({ name: "Cmd_get", pattern: /get/, longer_alt: Identifier });
|
|
394
|
+
var Cmd_continue = createToken({ name: "Cmd_continue", pattern: /continue/, longer_alt: Identifier });
|
|
395
|
+
var Cmd_behavior = createToken({ name: "Cmd_behavior", pattern: /behavior/, longer_alt: Identifier });
|
|
396
|
+
var Cmd_compound = createToken({ name: "Cmd_compound", pattern: /compound/, longer_alt: Identifier });
|
|
397
|
+
var Cmd_install = createToken({ name: "Cmd_install", pattern: /install/, longer_alt: Identifier });
|
|
398
|
+
var Cmd_unless = createToken({ name: "Cmd_unless", pattern: /unless/, longer_alt: Identifier });
|
|
399
|
+
var Cmd_repeat = createToken({ name: "Cmd_repeat", pattern: /repeat/, longer_alt: Identifier });
|
|
400
|
+
var Cmd_return = createToken({ name: "Cmd_return", pattern: /return/, longer_alt: Identifier });
|
|
401
|
+
var Cmd_throw = createToken({ name: "Cmd_throw", pattern: /throw/, longer_alt: Identifier });
|
|
402
|
+
var Cmd_break = createToken({ name: "Cmd_break", pattern: /break/, longer_alt: Identifier });
|
|
403
|
+
var Cmd_halt = createToken({ name: "Cmd_halt", pattern: /halt/, longer_alt: Identifier });
|
|
404
|
+
var Cmd_call = createToken({ name: "Cmd_call", pattern: /call/, longer_alt: Identifier });
|
|
405
|
+
var Cmd_tell = createToken({ name: "Cmd_tell", pattern: /tell/, longer_alt: Identifier });
|
|
406
|
+
var Cmd_init = createToken({ name: "Cmd_init", pattern: /init/, longer_alt: Identifier });
|
|
407
|
+
var Cmd_exit = createToken({ name: "Cmd_exit", pattern: /exit/, longer_alt: Identifier });
|
|
408
|
+
var Cmd_js = createToken({ name: "Cmd_js", pattern: /js/, longer_alt: Identifier });
|
|
409
|
+
var Cmd_trigger = createToken({ name: "Cmd_trigger", pattern: /trigger/, longer_alt: Identifier });
|
|
410
|
+
var Cmd_send = createToken({ name: "Cmd_send", pattern: /send/, longer_alt: Identifier });
|
|
411
|
+
var Cmd_prepend = createToken({ name: "Cmd_prepend", pattern: /prepend/, longer_alt: Identifier });
|
|
412
|
+
var Cmd_measure = createToken({ name: "Cmd_measure", pattern: /measure/, longer_alt: Identifier });
|
|
413
|
+
var Cmd_append = createToken({ name: "Cmd_append", pattern: /append/, longer_alt: Identifier });
|
|
414
|
+
var Cmd_render = createToken({ name: "Cmd_render", pattern: /render/, longer_alt: Identifier });
|
|
415
|
+
var Cmd_clone = createToken({ name: "Cmd_clone", pattern: /clone/, longer_alt: Identifier });
|
|
416
|
+
var Cmd_focus = createToken({ name: "Cmd_focus", pattern: /focus/, longer_alt: Identifier });
|
|
417
|
+
var Cmd_morph = createToken({ name: "Cmd_morph", pattern: /morph/, longer_alt: Identifier });
|
|
418
|
+
var Cmd_take = createToken({ name: "Cmd_take", pattern: /take/, longer_alt: Identifier });
|
|
419
|
+
var Cmd_make = createToken({ name: "Cmd_make", pattern: /make/, longer_alt: Identifier });
|
|
420
|
+
var Cmd_blur = createToken({ name: "Cmd_blur", pattern: /blur/, longer_alt: Identifier });
|
|
421
|
+
var Cmd_swap = createToken({ name: "Cmd_swap", pattern: /swap/, longer_alt: Identifier });
|
|
422
|
+
var Cmd_copy = createToken({ name: "Cmd_copy", pattern: /copy/, longer_alt: Identifier });
|
|
423
|
+
var Cmd_put = createToken({ name: "Cmd_put", pattern: /put/, longer_alt: Identifier });
|
|
424
|
+
var Cmd_toggle = createToken({ name: "Cmd_toggle", pattern: /toggle/, longer_alt: Identifier });
|
|
425
|
+
var Cmd_remove = createToken({ name: "Cmd_remove", pattern: /remove/, longer_alt: Identifier });
|
|
426
|
+
var Cmd_add = createToken({ name: "Cmd_add", pattern: /add/, longer_alt: Identifier });
|
|
427
|
+
var Cmd_settle = createToken({ name: "Cmd_settle", pattern: /settle/, longer_alt: Identifier });
|
|
428
|
+
var Cmd_fetch = createToken({ name: "Cmd_fetch", pattern: /fetch/, longer_alt: Identifier });
|
|
429
|
+
var Cmd_async = createToken({ name: "Cmd_async", pattern: /async/, longer_alt: Identifier });
|
|
430
|
+
var Cmd_wait = createToken({ name: "Cmd_wait", pattern: /wait/, longer_alt: Identifier });
|
|
431
|
+
var Cmd_go = createToken({ name: "Cmd_go", pattern: /go/, longer_alt: Identifier });
|
|
432
|
+
var Event_intersection = createToken({ name: "Event_intersection", pattern: /intersection/, longer_alt: Identifier });
|
|
433
|
+
var Event_mouseenter = createToken({ name: "Event_mouseenter", pattern: /mouseenter/, longer_alt: Identifier });
|
|
434
|
+
var Event_mouseleave = createToken({ name: "Event_mouseleave", pattern: /mouseleave/, longer_alt: Identifier });
|
|
435
|
+
var Event_mousedown = createToken({ name: "Event_mousedown", pattern: /mousedown/, longer_alt: Identifier });
|
|
436
|
+
var Event_mousemove = createToken({ name: "Event_mousemove", pattern: /mousemove/, longer_alt: Identifier });
|
|
437
|
+
var Event_dblclick = createToken({ name: "Event_dblclick", pattern: /dblclick/, longer_alt: Identifier });
|
|
438
|
+
var Event_keypress = createToken({ name: "Event_keypress", pattern: /keypress/, longer_alt: Identifier });
|
|
439
|
+
var Event_mutation = createToken({ name: "Event_mutation", pattern: /mutation/, longer_alt: Identifier });
|
|
440
|
+
var Event_mouseup = createToken({ name: "Event_mouseup", pattern: /mouseup/, longer_alt: Identifier });
|
|
441
|
+
var Event_keydown = createToken({ name: "Event_keydown", pattern: /keydown/, longer_alt: Identifier });
|
|
442
|
+
var Event_change = createToken({ name: "Event_change", pattern: /change/, longer_alt: Identifier });
|
|
443
|
+
var Event_submit = createToken({ name: "Event_submit", pattern: /submit/, longer_alt: Identifier });
|
|
444
|
+
var Event_scroll = createToken({ name: "Event_scroll", pattern: /scroll/, longer_alt: Identifier });
|
|
445
|
+
var Event_resize = createToken({ name: "Event_resize", pattern: /resize/, longer_alt: Identifier });
|
|
446
|
+
var Event_click = createToken({ name: "Event_click", pattern: /click/, longer_alt: Identifier });
|
|
447
|
+
var Event_keyup = createToken({ name: "Event_keyup", pattern: /keyup/, longer_alt: Identifier });
|
|
448
|
+
var Event_input = createToken({ name: "Event_input", pattern: /input/, longer_alt: Identifier });
|
|
449
|
+
var Event_every = createToken({ name: "Event_every", pattern: /every/, longer_alt: Identifier });
|
|
450
|
+
var Event_load = createToken({ name: "Event_load", pattern: /load/, longer_alt: Identifier });
|
|
451
|
+
var allTokens = [
|
|
452
|
+
// Whitespace
|
|
453
|
+
WhiteSpace,
|
|
454
|
+
// Literals
|
|
455
|
+
StringLiteral,
|
|
456
|
+
NumberLiteral,
|
|
457
|
+
URLLiteral,
|
|
458
|
+
// Selectors
|
|
459
|
+
CSSSelector,
|
|
460
|
+
AttributeSelector,
|
|
461
|
+
HTMLSelector,
|
|
462
|
+
// Variables
|
|
463
|
+
LocalVariable,
|
|
464
|
+
GlobalVariable,
|
|
465
|
+
// Punctuation
|
|
466
|
+
LParen,
|
|
467
|
+
RParen,
|
|
468
|
+
Comma,
|
|
469
|
+
Dot,
|
|
470
|
+
// Event names
|
|
471
|
+
Event_intersection,
|
|
472
|
+
Event_mouseenter,
|
|
473
|
+
Event_mouseleave,
|
|
474
|
+
Event_mousedown,
|
|
475
|
+
Event_mousemove,
|
|
476
|
+
Event_dblclick,
|
|
477
|
+
Event_keypress,
|
|
478
|
+
Event_mutation,
|
|
479
|
+
Event_mouseup,
|
|
480
|
+
Event_keydown,
|
|
481
|
+
Event_change,
|
|
482
|
+
Event_submit,
|
|
483
|
+
Event_scroll,
|
|
484
|
+
Event_resize,
|
|
485
|
+
Event_click,
|
|
486
|
+
Event_keyup,
|
|
487
|
+
Event_input,
|
|
488
|
+
Event_every,
|
|
489
|
+
Event_load,
|
|
490
|
+
// Command keywords
|
|
491
|
+
Cmd_transition,
|
|
492
|
+
Cmd_increment,
|
|
493
|
+
Cmd_decrement,
|
|
494
|
+
Cmd_continue,
|
|
495
|
+
Cmd_behavior,
|
|
496
|
+
Cmd_compound,
|
|
497
|
+
Cmd_trigger,
|
|
498
|
+
Cmd_prepend,
|
|
499
|
+
Cmd_default,
|
|
500
|
+
Cmd_install,
|
|
501
|
+
Cmd_measure,
|
|
502
|
+
Cmd_toggle,
|
|
503
|
+
Cmd_remove,
|
|
504
|
+
Cmd_append,
|
|
505
|
+
Cmd_settle,
|
|
506
|
+
Cmd_unless,
|
|
507
|
+
Cmd_repeat,
|
|
508
|
+
Cmd_return,
|
|
509
|
+
Cmd_render,
|
|
510
|
+
Cmd_fetch,
|
|
511
|
+
Cmd_throw,
|
|
512
|
+
Cmd_clone,
|
|
513
|
+
Cmd_focus,
|
|
514
|
+
Cmd_async,
|
|
515
|
+
Cmd_morph,
|
|
516
|
+
Cmd_break,
|
|
517
|
+
Cmd_show,
|
|
518
|
+
Cmd_hide,
|
|
519
|
+
Cmd_wait,
|
|
520
|
+
Cmd_take,
|
|
521
|
+
Cmd_make,
|
|
522
|
+
Cmd_halt,
|
|
523
|
+
Cmd_send,
|
|
524
|
+
Cmd_blur,
|
|
525
|
+
Cmd_call,
|
|
526
|
+
Cmd_tell,
|
|
527
|
+
Cmd_init,
|
|
528
|
+
Cmd_swap,
|
|
529
|
+
Cmd_beep,
|
|
530
|
+
Cmd_copy,
|
|
531
|
+
Cmd_exit,
|
|
532
|
+
Cmd_pick,
|
|
533
|
+
Cmd_add,
|
|
534
|
+
Cmd_put,
|
|
535
|
+
Cmd_set,
|
|
536
|
+
Cmd_log,
|
|
537
|
+
Cmd_get,
|
|
538
|
+
Cmd_go,
|
|
539
|
+
Cmd_js,
|
|
540
|
+
// Structural keywords
|
|
541
|
+
Kw_previous,
|
|
542
|
+
Kw_closest,
|
|
543
|
+
Kw_while,
|
|
544
|
+
Kw_until,
|
|
545
|
+
Kw_times,
|
|
546
|
+
Kw_first,
|
|
547
|
+
Kw_false,
|
|
548
|
+
Kw_then,
|
|
549
|
+
Kw_else,
|
|
550
|
+
Kw_from,
|
|
551
|
+
Kw_into,
|
|
552
|
+
Kw_with,
|
|
553
|
+
Kw_have,
|
|
554
|
+
Kw_last,
|
|
555
|
+
Kw_next,
|
|
556
|
+
Kw_true,
|
|
557
|
+
Kw_null,
|
|
558
|
+
Kw_end,
|
|
559
|
+
Kw_for,
|
|
560
|
+
Kw_and,
|
|
561
|
+
Kw_not,
|
|
562
|
+
Kw_has,
|
|
563
|
+
Kw_you,
|
|
564
|
+
Kw_its,
|
|
565
|
+
Kw_the,
|
|
566
|
+
Kw_on,
|
|
567
|
+
Kw_if,
|
|
568
|
+
Kw_to,
|
|
569
|
+
Kw_in,
|
|
570
|
+
Kw_of,
|
|
571
|
+
Kw_as,
|
|
572
|
+
Kw_at,
|
|
573
|
+
Kw_by,
|
|
574
|
+
Kw_or,
|
|
575
|
+
Kw_is,
|
|
576
|
+
Kw_me,
|
|
577
|
+
Kw_it,
|
|
578
|
+
Kw_my,
|
|
579
|
+
Kw_no,
|
|
580
|
+
// Identifier (catch-all)
|
|
581
|
+
Identifier
|
|
582
|
+
];
|
|
583
|
+
var hyperscriptLexer = new Lexer(allTokens, {
|
|
584
|
+
positionTracking: "full",
|
|
585
|
+
ensureOptimizations: true
|
|
586
|
+
});
|
|
587
|
+
var COMMAND_SCHEMAS = [
|
|
588
|
+
{ action: "toggle", category: "dom-class", roles: [{ role: "patient", required: true, expectedTypes: ["selector"] }, { role: "destination", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "patient" },
|
|
589
|
+
{ action: "add", category: "dom-class", roles: [{ role: "patient", required: true, expectedTypes: ["selector"] }, { role: "destination", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "patient" },
|
|
590
|
+
{ action: "remove", category: "dom-class", roles: [{ role: "patient", required: true, expectedTypes: ["selector"] }, { role: "source", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "patient" },
|
|
591
|
+
{ action: "put", category: "dom-content", roles: [{ role: "patient", required: true, expectedTypes: ["literal", "selector", "reference", "expression"] }, { role: "destination", required: true, expectedTypes: ["selector", "reference"] }], primaryRole: "patient" },
|
|
592
|
+
{ action: "set", category: "variable", roles: [{ role: "destination", required: true, expectedTypes: ["selector", "reference", "expression"] }, { role: "patient", required: true, expectedTypes: ["literal", "expression", "reference"] }], primaryRole: "destination" },
|
|
593
|
+
{ action: "show", category: "dom-visibility", roles: [{ role: "patient", required: true, expectedTypes: ["selector", "reference"] }, { role: "style", required: false, expectedTypes: ["literal"] }], primaryRole: "patient" },
|
|
594
|
+
{ action: "hide", category: "dom-visibility", roles: [{ role: "patient", required: true, expectedTypes: ["selector", "reference"] }, { role: "style", required: false, expectedTypes: ["literal"] }], primaryRole: "patient" },
|
|
595
|
+
{ action: "on", category: "event", roles: [{ role: "event", required: true, expectedTypes: ["literal"] }, { role: "source", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "event" },
|
|
596
|
+
{ action: "trigger", category: "event", roles: [{ role: "event", required: true, expectedTypes: ["literal", "expression"] }, { role: "destination", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "event" },
|
|
597
|
+
{ action: "wait", category: "async", roles: [{ role: "patient", required: true, expectedTypes: ["literal", "expression"] }], primaryRole: "patient" },
|
|
598
|
+
{ action: "fetch", category: "async", roles: [{ role: "source", required: true, expectedTypes: ["literal", "expression"] }, { role: "responseType", required: false, expectedTypes: ["literal", "expression"] }, { role: "method", required: false, expectedTypes: ["literal"] }, { role: "destination", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "source" },
|
|
599
|
+
{ action: "increment", category: "variable", roles: [{ role: "patient", required: true, expectedTypes: ["selector", "reference", "expression"] }, { role: "quantity", required: false, expectedTypes: ["literal"] }], primaryRole: "patient" },
|
|
600
|
+
{ action: "decrement", category: "variable", roles: [{ role: "patient", required: true, expectedTypes: ["selector", "reference", "expression"] }, { role: "quantity", required: false, expectedTypes: ["literal"] }], primaryRole: "patient" },
|
|
601
|
+
{ action: "append", category: "dom-content", roles: [{ role: "patient", required: true, expectedTypes: ["literal", "selector", "expression"] }, { role: "destination", required: true, expectedTypes: ["selector", "reference"] }], primaryRole: "patient" },
|
|
602
|
+
{ action: "prepend", category: "dom-content", roles: [{ role: "patient", required: true, expectedTypes: ["literal", "selector", "expression"] }, { role: "destination", required: true, expectedTypes: ["selector", "reference"] }], primaryRole: "patient" },
|
|
603
|
+
{ action: "log", category: "variable", roles: [{ role: "patient", required: true, expectedTypes: ["literal", "selector", "reference", "expression"] }], primaryRole: "patient" },
|
|
604
|
+
{ action: "get", category: "variable", roles: [{ role: "source", required: true, expectedTypes: ["selector", "reference", "expression"] }, { role: "destination", required: false, expectedTypes: ["reference"] }], primaryRole: "source" },
|
|
605
|
+
{ action: "take", category: "dom-content", roles: [{ role: "patient", required: true, expectedTypes: ["selector"] }, { role: "source", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "patient" },
|
|
606
|
+
{ action: "make", category: "dom-content", roles: [{ role: "patient", required: true, expectedTypes: ["literal", "selector"] }], primaryRole: "patient" },
|
|
607
|
+
{ action: "halt", category: "control-flow", roles: [{ role: "patient", required: false, expectedTypes: ["literal", "reference", "expression"] }], primaryRole: "patient" },
|
|
608
|
+
{ action: "settle", category: "async", roles: [{ role: "patient", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "patient" },
|
|
609
|
+
{ action: "throw", category: "control-flow", roles: [{ role: "patient", required: true, expectedTypes: ["literal", "expression"] }], primaryRole: "patient" },
|
|
610
|
+
{ action: "send", category: "event", roles: [{ role: "event", required: true, expectedTypes: ["literal", "expression"] }, { role: "destination", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "event" },
|
|
611
|
+
{ action: "if", category: "control-flow", roles: [{ role: "condition", required: true, expectedTypes: ["expression"] }], primaryRole: "condition" },
|
|
612
|
+
{ action: "unless", category: "control-flow", roles: [{ role: "condition", required: true, expectedTypes: ["expression"] }], primaryRole: "condition" },
|
|
613
|
+
{ action: "else", category: "control-flow", roles: [], primaryRole: "patient" },
|
|
614
|
+
{ action: "repeat", category: "control-flow", roles: [{ role: "loopType", required: true, expectedTypes: ["literal"] }, { role: "quantity", required: false, expectedTypes: ["literal", "expression"] }, { role: "event", required: false, expectedTypes: ["literal", "expression"] }, { role: "source", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "loopType" },
|
|
615
|
+
{ action: "for", category: "control-flow", roles: [{ role: "patient", required: true, expectedTypes: ["reference"] }, { role: "source", required: true, expectedTypes: ["selector", "reference", "expression"] }], primaryRole: "patient" },
|
|
616
|
+
{ action: "while", category: "control-flow", roles: [{ role: "condition", required: true, expectedTypes: ["expression"] }], primaryRole: "condition" },
|
|
617
|
+
{ action: "continue", category: "control-flow", roles: [], primaryRole: "patient" },
|
|
618
|
+
{ action: "go", category: "navigation", roles: [{ role: "destination", required: true, expectedTypes: ["literal", "expression"] }], primaryRole: "destination" },
|
|
619
|
+
{ action: "transition", category: "dom-visibility", roles: [{ role: "patient", required: true, expectedTypes: ["literal"] }, { role: "goal", required: true, expectedTypes: ["literal", "expression"] }, { role: "destination", required: false, expectedTypes: ["selector", "reference"] }, { role: "duration", required: false, expectedTypes: ["literal"] }, { role: "style", required: false, expectedTypes: ["literal"] }], primaryRole: "patient" },
|
|
620
|
+
{ action: "clone", category: "dom-content", roles: [{ role: "patient", required: true, expectedTypes: ["selector", "reference"] }, { role: "destination", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "patient" },
|
|
621
|
+
{ action: "focus", category: "dom-content", roles: [{ role: "patient", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "patient" },
|
|
622
|
+
{ action: "blur", category: "dom-content", roles: [{ role: "patient", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "patient" },
|
|
623
|
+
{ action: "call", category: "control-flow", roles: [{ role: "patient", required: true, expectedTypes: ["expression", "reference"] }], primaryRole: "patient" },
|
|
624
|
+
{ action: "return", category: "control-flow", roles: [{ role: "patient", required: false, expectedTypes: ["literal", "expression", "reference"] }], primaryRole: "patient" },
|
|
625
|
+
{ action: "js", category: "control-flow", roles: [{ role: "patient", required: false, expectedTypes: ["expression"] }], primaryRole: "patient" },
|
|
626
|
+
{ action: "async", category: "async", roles: [], primaryRole: "patient" },
|
|
627
|
+
{ action: "tell", category: "control-flow", roles: [{ role: "destination", required: true, expectedTypes: ["selector", "reference"] }], primaryRole: "destination" },
|
|
628
|
+
{ action: "default", category: "variable", roles: [{ role: "destination", required: true, expectedTypes: ["reference"] }, { role: "patient", required: true, expectedTypes: ["literal", "expression"] }], primaryRole: "destination" },
|
|
629
|
+
{ action: "init", category: "control-flow", roles: [], primaryRole: "patient" },
|
|
630
|
+
{ action: "behavior", category: "control-flow", roles: [{ role: "patient", required: true, expectedTypes: ["literal", "reference", "expression"] }], primaryRole: "patient" },
|
|
631
|
+
{ action: "install", category: "control-flow", roles: [{ role: "patient", required: true, expectedTypes: ["literal", "reference", "expression"] }, { role: "destination", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "patient" },
|
|
632
|
+
{ action: "measure", category: "dom-content", roles: [{ role: "patient", required: false, expectedTypes: ["literal", "expression"] }, { role: "source", required: false, expectedTypes: ["selector", "reference"] }], primaryRole: "patient" },
|
|
633
|
+
{ action: "swap", category: "dom-content", roles: [{ role: "method", required: false, expectedTypes: ["literal"] }, { role: "destination", required: true, expectedTypes: ["selector", "reference"] }, { role: "patient", required: false, expectedTypes: ["literal", "expression", "selector"] }], primaryRole: "destination" },
|
|
634
|
+
{ action: "morph", category: "dom-content", roles: [{ role: "destination", required: true, expectedTypes: ["selector", "reference"] }, { role: "patient", required: true, expectedTypes: ["literal", "expression", "selector"] }], primaryRole: "destination" },
|
|
635
|
+
{ action: "beep", category: "variable", roles: [{ role: "patient", required: false, expectedTypes: ["literal", "selector", "reference", "expression"] }], primaryRole: "patient" },
|
|
636
|
+
{ action: "break", category: "control-flow", roles: [], primaryRole: "patient" },
|
|
637
|
+
{ action: "copy", category: "dom-content", roles: [{ role: "patient", required: true, expectedTypes: ["literal", "selector", "reference", "expression"] }], primaryRole: "patient" },
|
|
638
|
+
{ action: "exit", category: "control-flow", roles: [], primaryRole: "patient" },
|
|
639
|
+
{ action: "pick", category: "variable", roles: [{ role: "patient", required: true, expectedTypes: ["literal", "expression", "reference"] }, { role: "source", required: false, expectedTypes: ["reference", "expression"] }], primaryRole: "patient" },
|
|
640
|
+
{ action: "render", category: "dom-content", roles: [{ role: "patient", required: true, expectedTypes: ["selector", "reference", "expression"] }, { role: "style", required: false, expectedTypes: ["expression", "reference"] }], primaryRole: "patient" },
|
|
641
|
+
{ action: "compound", category: "control-flow", roles: [], primaryRole: "patient" }
|
|
642
|
+
];
|
|
643
|
+
|
|
644
|
+
// src/chevrotain-parser.ts
|
|
645
|
+
var HyperscriptParser = class extends CstParser {
|
|
646
|
+
constructor() {
|
|
647
|
+
super(allTokens, {
|
|
648
|
+
recoveryEnabled: true,
|
|
649
|
+
maxLookahead: 3
|
|
650
|
+
});
|
|
651
|
+
this.performSelfAnalysis();
|
|
652
|
+
}
|
|
653
|
+
// -------------------------------------------------------------------------
|
|
654
|
+
// Top-level rules
|
|
655
|
+
// -------------------------------------------------------------------------
|
|
656
|
+
program = this.RULE("program", () => {
|
|
657
|
+
this.MANY(() => {
|
|
658
|
+
this.SUBRULE(this.statement);
|
|
659
|
+
});
|
|
660
|
+
});
|
|
661
|
+
statement = this.RULE("statement", () => {
|
|
662
|
+
this.OR([
|
|
663
|
+
{ ALT: () => this.SUBRULE(this.eventHandler) },
|
|
664
|
+
{ ALT: () => this.SUBRULE(this.commandChain) },
|
|
665
|
+
{ ALT: () => this.SUBRULE(this.behaviorDef) }
|
|
666
|
+
]);
|
|
667
|
+
});
|
|
668
|
+
// -------------------------------------------------------------------------
|
|
669
|
+
// Event handlers
|
|
670
|
+
// -------------------------------------------------------------------------
|
|
671
|
+
eventHandler = this.RULE("eventHandler", () => {
|
|
672
|
+
this.CONSUME(Kw_on);
|
|
673
|
+
this.SUBRULE(this.eventName);
|
|
674
|
+
this.OPTION(() => {
|
|
675
|
+
this.SUBRULE(this.eventModifiers);
|
|
676
|
+
});
|
|
677
|
+
this.OPTION2(() => {
|
|
678
|
+
this.SUBRULE(this.commandChain);
|
|
679
|
+
});
|
|
680
|
+
this.OPTION3(() => {
|
|
681
|
+
this.CONSUME(Kw_end);
|
|
682
|
+
});
|
|
683
|
+
});
|
|
684
|
+
eventName = this.RULE("eventName", () => {
|
|
685
|
+
this.OR([
|
|
686
|
+
{ ALT: () => this.CONSUME(Event_click) },
|
|
687
|
+
{ ALT: () => this.CONSUME(Event_dblclick) },
|
|
688
|
+
{ ALT: () => this.CONSUME(Event_mousedown) },
|
|
689
|
+
{ ALT: () => this.CONSUME(Event_mouseup) },
|
|
690
|
+
{ ALT: () => this.CONSUME(Event_mousemove) },
|
|
691
|
+
{ ALT: () => this.CONSUME(Event_mouseenter) },
|
|
692
|
+
{ ALT: () => this.CONSUME(Event_mouseleave) },
|
|
693
|
+
{ ALT: () => this.CONSUME(Event_keydown) },
|
|
694
|
+
{ ALT: () => this.CONSUME(Event_keyup) },
|
|
695
|
+
{ ALT: () => this.CONSUME(Event_input) },
|
|
696
|
+
{ ALT: () => this.CONSUME(Event_change) },
|
|
697
|
+
{ ALT: () => this.CONSUME(Event_submit) },
|
|
698
|
+
{ ALT: () => this.CONSUME(Event_load) },
|
|
699
|
+
{ ALT: () => this.CONSUME(Event_scroll) },
|
|
700
|
+
{ ALT: () => this.CONSUME(Event_resize) },
|
|
701
|
+
{ ALT: () => this.CONSUME(Event_mutation) },
|
|
702
|
+
{ ALT: () => this.CONSUME(Event_intersection) },
|
|
703
|
+
{ ALT: () => this.CONSUME(Event_every) },
|
|
704
|
+
{ ALT: () => this.CONSUME(Identifier) }
|
|
705
|
+
// Custom event name
|
|
706
|
+
]);
|
|
707
|
+
});
|
|
708
|
+
eventModifiers = this.RULE("eventModifiers", () => {
|
|
709
|
+
this.MANY(() => {
|
|
710
|
+
this.CONSUME(Dot);
|
|
711
|
+
this.CONSUME(Identifier);
|
|
712
|
+
this.OPTION(() => {
|
|
713
|
+
this.CONSUME(LParen);
|
|
714
|
+
this.SUBRULE(this.expression);
|
|
715
|
+
this.CONSUME(RParen);
|
|
716
|
+
});
|
|
717
|
+
});
|
|
718
|
+
});
|
|
719
|
+
// -------------------------------------------------------------------------
|
|
720
|
+
// Command chain (commands connected by 'then')
|
|
721
|
+
// -------------------------------------------------------------------------
|
|
722
|
+
commandChain = this.RULE("commandChain", () => {
|
|
723
|
+
this.SUBRULE(this.command);
|
|
724
|
+
this.MANY(() => {
|
|
725
|
+
this.CONSUME(Kw_then);
|
|
726
|
+
this.SUBRULE2(this.command);
|
|
727
|
+
});
|
|
728
|
+
});
|
|
729
|
+
// -------------------------------------------------------------------------
|
|
730
|
+
// Commands (grouped by category for error messages)
|
|
731
|
+
// -------------------------------------------------------------------------
|
|
732
|
+
command = this.RULE("command", () => {
|
|
733
|
+
this.OR([
|
|
734
|
+
// DOM class/attribute
|
|
735
|
+
{ ALT: () => this.SUBRULE(this.toggleCommand) },
|
|
736
|
+
{ ALT: () => this.SUBRULE(this.addCommand) },
|
|
737
|
+
{ ALT: () => this.SUBRULE(this.removeCommand) },
|
|
738
|
+
// DOM content
|
|
739
|
+
{ ALT: () => this.SUBRULE(this.putCommand) },
|
|
740
|
+
{ ALT: () => this.SUBRULE(this.setCommand) },
|
|
741
|
+
{ ALT: () => this.SUBRULE(this.appendCommand) },
|
|
742
|
+
{ ALT: () => this.SUBRULE(this.prependCommand) },
|
|
743
|
+
// DOM visibility
|
|
744
|
+
{ ALT: () => this.SUBRULE(this.showCommand) },
|
|
745
|
+
{ ALT: () => this.SUBRULE(this.hideCommand) },
|
|
746
|
+
{ ALT: () => this.SUBRULE(this.transitionCommand) },
|
|
747
|
+
// Variable
|
|
748
|
+
{ ALT: () => this.SUBRULE(this.logCommand) },
|
|
749
|
+
{ ALT: () => this.SUBRULE(this.incrementCommand) },
|
|
750
|
+
{ ALT: () => this.SUBRULE(this.decrementCommand) },
|
|
751
|
+
// Async
|
|
752
|
+
{ ALT: () => this.SUBRULE(this.fetchCommand) },
|
|
753
|
+
{ ALT: () => this.SUBRULE(this.waitCommand) },
|
|
754
|
+
// Event
|
|
755
|
+
{ ALT: () => this.SUBRULE(this.sendCommand) },
|
|
756
|
+
{ ALT: () => this.SUBRULE(this.triggerCommand) },
|
|
757
|
+
// Navigation
|
|
758
|
+
{ ALT: () => this.SUBRULE(this.goCommand) },
|
|
759
|
+
// Control flow
|
|
760
|
+
{ ALT: () => this.SUBRULE(this.ifCommand) },
|
|
761
|
+
{ ALT: () => this.SUBRULE(this.repeatCommand) },
|
|
762
|
+
// Execution
|
|
763
|
+
{ ALT: () => this.SUBRULE(this.callCommand) },
|
|
764
|
+
{ ALT: () => this.SUBRULE(this.jsCommand) },
|
|
765
|
+
{ ALT: () => this.SUBRULE(this.returnCommand) },
|
|
766
|
+
{ ALT: () => this.SUBRULE(this.throwCommand) },
|
|
767
|
+
{ ALT: () => this.SUBRULE(this.haltCommand) }
|
|
768
|
+
]);
|
|
769
|
+
});
|
|
770
|
+
// --- DOM class/attribute ---
|
|
771
|
+
toggleCommand = this.RULE("toggleCommand", () => {
|
|
772
|
+
this.CONSUME(Cmd_toggle);
|
|
773
|
+
this.SUBRULE(this.selectorOrExpression);
|
|
774
|
+
this.OPTION(() => {
|
|
775
|
+
this.CONSUME(Kw_on);
|
|
776
|
+
this.SUBRULE2(this.selectorOrExpression);
|
|
777
|
+
});
|
|
778
|
+
});
|
|
779
|
+
addCommand = this.RULE("addCommand", () => {
|
|
780
|
+
this.CONSUME(Cmd_add);
|
|
781
|
+
this.SUBRULE(this.selectorOrExpression);
|
|
782
|
+
this.OPTION(() => {
|
|
783
|
+
this.CONSUME(Kw_to);
|
|
784
|
+
this.SUBRULE2(this.selectorOrExpression);
|
|
785
|
+
});
|
|
786
|
+
});
|
|
787
|
+
removeCommand = this.RULE("removeCommand", () => {
|
|
788
|
+
this.CONSUME(Cmd_remove);
|
|
789
|
+
this.SUBRULE(this.selectorOrExpression);
|
|
790
|
+
this.OPTION(() => {
|
|
791
|
+
this.CONSUME(Kw_from);
|
|
792
|
+
this.SUBRULE2(this.selectorOrExpression);
|
|
793
|
+
});
|
|
794
|
+
});
|
|
795
|
+
// --- DOM content ---
|
|
796
|
+
putCommand = this.RULE("putCommand", () => {
|
|
797
|
+
this.CONSUME(Cmd_put);
|
|
798
|
+
this.SUBRULE(this.expression);
|
|
799
|
+
this.OPTION(() => {
|
|
800
|
+
this.OR([
|
|
801
|
+
{ ALT: () => this.CONSUME(Kw_into) },
|
|
802
|
+
{ ALT: () => this.CONSUME(Identifier, { LABEL: "putMarker" }) }
|
|
803
|
+
// before/after
|
|
804
|
+
]);
|
|
805
|
+
this.SUBRULE2(this.selectorOrExpression);
|
|
806
|
+
});
|
|
807
|
+
});
|
|
808
|
+
setCommand = this.RULE("setCommand", () => {
|
|
809
|
+
this.CONSUME(Cmd_set);
|
|
810
|
+
this.SUBRULE(this.selectorOrExpression);
|
|
811
|
+
this.CONSUME(Kw_to);
|
|
812
|
+
this.SUBRULE2(this.expression);
|
|
813
|
+
});
|
|
814
|
+
appendCommand = this.RULE("appendCommand", () => {
|
|
815
|
+
this.CONSUME(Cmd_append);
|
|
816
|
+
this.SUBRULE(this.expression);
|
|
817
|
+
this.CONSUME(Kw_to);
|
|
818
|
+
this.SUBRULE2(this.selectorOrExpression);
|
|
819
|
+
});
|
|
820
|
+
prependCommand = this.RULE("prependCommand", () => {
|
|
821
|
+
this.CONSUME(Cmd_prepend);
|
|
822
|
+
this.SUBRULE(this.expression);
|
|
823
|
+
this.CONSUME(Kw_to);
|
|
824
|
+
this.SUBRULE2(this.selectorOrExpression);
|
|
825
|
+
});
|
|
826
|
+
// --- DOM visibility ---
|
|
827
|
+
showCommand = this.RULE("showCommand", () => {
|
|
828
|
+
this.CONSUME(Cmd_show);
|
|
829
|
+
this.OPTION(() => this.SUBRULE(this.selectorOrExpression));
|
|
830
|
+
});
|
|
831
|
+
hideCommand = this.RULE("hideCommand", () => {
|
|
832
|
+
this.CONSUME(Cmd_hide);
|
|
833
|
+
this.OPTION(() => this.SUBRULE(this.selectorOrExpression));
|
|
834
|
+
});
|
|
835
|
+
transitionCommand = this.RULE("transitionCommand", () => {
|
|
836
|
+
this.CONSUME(Cmd_transition);
|
|
837
|
+
this.SUBRULE(this.selectorOrExpression);
|
|
838
|
+
});
|
|
839
|
+
// --- Variable ---
|
|
840
|
+
logCommand = this.RULE("logCommand", () => {
|
|
841
|
+
this.CONSUME(Cmd_log);
|
|
842
|
+
this.SUBRULE(this.expression);
|
|
843
|
+
});
|
|
844
|
+
incrementCommand = this.RULE("incrementCommand", () => {
|
|
845
|
+
this.CONSUME(Cmd_increment);
|
|
846
|
+
this.SUBRULE(this.selectorOrExpression);
|
|
847
|
+
this.OPTION(() => {
|
|
848
|
+
this.CONSUME(Kw_by);
|
|
849
|
+
this.SUBRULE2(this.expression);
|
|
850
|
+
});
|
|
851
|
+
});
|
|
852
|
+
decrementCommand = this.RULE("decrementCommand", () => {
|
|
853
|
+
this.CONSUME(Cmd_decrement);
|
|
854
|
+
this.SUBRULE(this.selectorOrExpression);
|
|
855
|
+
this.OPTION(() => {
|
|
856
|
+
this.CONSUME(Kw_by);
|
|
857
|
+
this.SUBRULE2(this.expression);
|
|
858
|
+
});
|
|
859
|
+
});
|
|
860
|
+
// --- Async ---
|
|
861
|
+
fetchCommand = this.RULE("fetchCommand", () => {
|
|
862
|
+
this.CONSUME(Cmd_fetch);
|
|
863
|
+
this.SUBRULE(this.expression);
|
|
864
|
+
this.OPTION(() => {
|
|
865
|
+
this.CONSUME(Kw_as);
|
|
866
|
+
this.CONSUME(Identifier, { LABEL: "responseType" });
|
|
867
|
+
});
|
|
868
|
+
});
|
|
869
|
+
waitCommand = this.RULE("waitCommand", () => {
|
|
870
|
+
this.CONSUME(Cmd_wait);
|
|
871
|
+
this.OPTION(() => this.SUBRULE(this.expression));
|
|
872
|
+
});
|
|
873
|
+
// --- Event ---
|
|
874
|
+
sendCommand = this.RULE("sendCommand", () => {
|
|
875
|
+
this.CONSUME(Cmd_send);
|
|
876
|
+
this.CONSUME(Identifier, { LABEL: "eventName" });
|
|
877
|
+
this.OPTION(() => {
|
|
878
|
+
this.CONSUME(Kw_to);
|
|
879
|
+
this.SUBRULE(this.selectorOrExpression);
|
|
880
|
+
});
|
|
881
|
+
});
|
|
882
|
+
triggerCommand = this.RULE("triggerCommand", () => {
|
|
883
|
+
this.CONSUME(Cmd_trigger);
|
|
884
|
+
this.CONSUME(Identifier, { LABEL: "eventName" });
|
|
885
|
+
this.OPTION(() => {
|
|
886
|
+
this.CONSUME(Kw_on);
|
|
887
|
+
this.SUBRULE(this.selectorOrExpression);
|
|
888
|
+
});
|
|
889
|
+
});
|
|
890
|
+
// --- Navigation ---
|
|
891
|
+
goCommand = this.RULE("goCommand", () => {
|
|
892
|
+
this.CONSUME(Cmd_go);
|
|
893
|
+
this.OPTION(() => this.CONSUME(Kw_to));
|
|
894
|
+
this.SUBRULE(this.expression);
|
|
895
|
+
});
|
|
896
|
+
// --- Control flow ---
|
|
897
|
+
ifCommand = this.RULE("ifCommand", () => {
|
|
898
|
+
this.CONSUME(Kw_if);
|
|
899
|
+
this.SUBRULE(this.expression);
|
|
900
|
+
this.OPTION(() => this.SUBRULE(this.commandChain));
|
|
901
|
+
this.OPTION2(() => {
|
|
902
|
+
this.CONSUME(Kw_else);
|
|
903
|
+
this.OPTION3(() => this.SUBRULE2(this.commandChain));
|
|
904
|
+
});
|
|
905
|
+
this.OPTION4(() => this.CONSUME(Kw_end));
|
|
906
|
+
});
|
|
907
|
+
repeatCommand = this.RULE("repeatCommand", () => {
|
|
908
|
+
this.CONSUME(Cmd_repeat);
|
|
909
|
+
this.OR([
|
|
910
|
+
{
|
|
911
|
+
ALT: () => {
|
|
912
|
+
this.SUBRULE(this.expression);
|
|
913
|
+
this.CONSUME(Kw_times);
|
|
914
|
+
}
|
|
915
|
+
},
|
|
916
|
+
{
|
|
917
|
+
ALT: () => {
|
|
918
|
+
this.CONSUME(Kw_for);
|
|
919
|
+
this.CONSUME(Identifier, { LABEL: "loopVar" });
|
|
920
|
+
this.CONSUME(Kw_in);
|
|
921
|
+
this.SUBRULE2(this.expression);
|
|
922
|
+
}
|
|
923
|
+
},
|
|
924
|
+
{
|
|
925
|
+
ALT: () => {
|
|
926
|
+
this.CONSUME(Kw_while);
|
|
927
|
+
this.SUBRULE3(this.expression);
|
|
928
|
+
}
|
|
929
|
+
},
|
|
930
|
+
{
|
|
931
|
+
ALT: () => {
|
|
932
|
+
this.CONSUME(Kw_until);
|
|
933
|
+
this.SUBRULE4(this.expression);
|
|
934
|
+
}
|
|
935
|
+
},
|
|
936
|
+
{
|
|
937
|
+
ALT: () => {
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
]);
|
|
941
|
+
this.OPTION(() => this.SUBRULE(this.commandChain));
|
|
942
|
+
this.OPTION2(() => this.CONSUME(Kw_end));
|
|
943
|
+
});
|
|
944
|
+
// --- Execution ---
|
|
945
|
+
callCommand = this.RULE("callCommand", () => {
|
|
946
|
+
this.CONSUME(Cmd_call);
|
|
947
|
+
this.SUBRULE(this.expression);
|
|
948
|
+
});
|
|
949
|
+
jsCommand = this.RULE("jsCommand", () => {
|
|
950
|
+
this.CONSUME(Cmd_js);
|
|
951
|
+
this.MANY(() => {
|
|
952
|
+
this.OR([
|
|
953
|
+
{ ALT: () => this.CONSUME(Identifier) },
|
|
954
|
+
{ ALT: () => this.CONSUME(StringLiteral) },
|
|
955
|
+
{ ALT: () => this.CONSUME(NumberLiteral) },
|
|
956
|
+
{ ALT: () => this.CONSUME(CSSSelector) },
|
|
957
|
+
{ ALT: () => this.CONSUME(LocalVariable) },
|
|
958
|
+
{ ALT: () => this.CONSUME(LParen) },
|
|
959
|
+
{ ALT: () => this.CONSUME(RParen) },
|
|
960
|
+
{ ALT: () => this.CONSUME(Comma) },
|
|
961
|
+
{ ALT: () => this.CONSUME(Dot) }
|
|
962
|
+
]);
|
|
963
|
+
});
|
|
964
|
+
this.CONSUME(Kw_end);
|
|
965
|
+
});
|
|
966
|
+
returnCommand = this.RULE("returnCommand", () => {
|
|
967
|
+
this.CONSUME(Cmd_return);
|
|
968
|
+
this.OPTION(() => this.SUBRULE(this.expression));
|
|
969
|
+
});
|
|
970
|
+
throwCommand = this.RULE("throwCommand", () => {
|
|
971
|
+
this.CONSUME(Cmd_throw);
|
|
972
|
+
this.SUBRULE(this.expression);
|
|
973
|
+
});
|
|
974
|
+
haltCommand = this.RULE("haltCommand", () => {
|
|
975
|
+
this.CONSUME(Cmd_halt);
|
|
976
|
+
});
|
|
977
|
+
// -------------------------------------------------------------------------
|
|
978
|
+
// Behavior definitions
|
|
979
|
+
// -------------------------------------------------------------------------
|
|
980
|
+
behaviorDef = this.RULE("behaviorDef", () => {
|
|
981
|
+
this.CONSUME(Cmd_behavior);
|
|
982
|
+
this.CONSUME(Identifier, { LABEL: "behaviorName" });
|
|
983
|
+
this.OPTION(() => {
|
|
984
|
+
this.CONSUME(LParen);
|
|
985
|
+
this.AT_LEAST_ONE_SEP({
|
|
986
|
+
SEP: Comma,
|
|
987
|
+
DEF: () => this.CONSUME2(Identifier, { LABEL: "param" })
|
|
988
|
+
});
|
|
989
|
+
this.CONSUME(RParen);
|
|
990
|
+
});
|
|
991
|
+
this.MANY(() => this.SUBRULE(this.statement));
|
|
992
|
+
this.CONSUME(Kw_end);
|
|
993
|
+
});
|
|
994
|
+
// -------------------------------------------------------------------------
|
|
995
|
+
// Expressions (simplified for LSP — full expression parsing is in core)
|
|
996
|
+
// -------------------------------------------------------------------------
|
|
997
|
+
expression = this.RULE("expression", () => {
|
|
998
|
+
this.SUBRULE(this.primaryExpression);
|
|
999
|
+
this.MANY(() => {
|
|
1000
|
+
this.OR([
|
|
1001
|
+
{
|
|
1002
|
+
ALT: () => {
|
|
1003
|
+
this.OR2([
|
|
1004
|
+
{ ALT: () => this.CONSUME(Kw_is) },
|
|
1005
|
+
{ ALT: () => this.CONSUME(Kw_and) },
|
|
1006
|
+
{ ALT: () => this.CONSUME(Kw_or) }
|
|
1007
|
+
]);
|
|
1008
|
+
this.SUBRULE2(this.primaryExpression);
|
|
1009
|
+
}
|
|
1010
|
+
},
|
|
1011
|
+
{
|
|
1012
|
+
ALT: () => {
|
|
1013
|
+
this.CONSUME(Dot);
|
|
1014
|
+
this.CONSUME(Identifier);
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
]);
|
|
1018
|
+
});
|
|
1019
|
+
});
|
|
1020
|
+
primaryExpression = this.RULE("primaryExpression", () => {
|
|
1021
|
+
this.OPTION(() => {
|
|
1022
|
+
this.OR([
|
|
1023
|
+
{ ALT: () => this.CONSUME(Kw_not) },
|
|
1024
|
+
{ ALT: () => this.CONSUME(Kw_the) },
|
|
1025
|
+
{ ALT: () => this.CONSUME(Kw_no) }
|
|
1026
|
+
]);
|
|
1027
|
+
});
|
|
1028
|
+
this.OR2([
|
|
1029
|
+
{ ALT: () => this.CONSUME(StringLiteral) },
|
|
1030
|
+
{ ALT: () => this.CONSUME(NumberLiteral) },
|
|
1031
|
+
{ ALT: () => this.CONSUME(CSSSelector) },
|
|
1032
|
+
{ ALT: () => this.CONSUME(AttributeSelector) },
|
|
1033
|
+
{ ALT: () => this.CONSUME(HTMLSelector) },
|
|
1034
|
+
{ ALT: () => this.CONSUME(LocalVariable) },
|
|
1035
|
+
{ ALT: () => this.CONSUME(GlobalVariable) },
|
|
1036
|
+
{ ALT: () => this.CONSUME(Kw_me) },
|
|
1037
|
+
{ ALT: () => this.CONSUME(Kw_it) },
|
|
1038
|
+
{ ALT: () => this.CONSUME(Kw_true) },
|
|
1039
|
+
{ ALT: () => this.CONSUME(Kw_false) },
|
|
1040
|
+
{ ALT: () => this.CONSUME(Identifier) },
|
|
1041
|
+
{
|
|
1042
|
+
ALT: () => {
|
|
1043
|
+
this.CONSUME(LParen);
|
|
1044
|
+
this.SUBRULE(this.expression);
|
|
1045
|
+
this.CONSUME(RParen);
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
]);
|
|
1049
|
+
});
|
|
1050
|
+
// -------------------------------------------------------------------------
|
|
1051
|
+
// Selectors or expressions
|
|
1052
|
+
// -------------------------------------------------------------------------
|
|
1053
|
+
selectorOrExpression = this.RULE("selectorOrExpression", () => {
|
|
1054
|
+
this.OR([
|
|
1055
|
+
{ ALT: () => this.CONSUME(CSSSelector) },
|
|
1056
|
+
{ ALT: () => this.CONSUME(AttributeSelector) },
|
|
1057
|
+
{ ALT: () => this.CONSUME(HTMLSelector) },
|
|
1058
|
+
{ ALT: () => this.CONSUME(Kw_me) },
|
|
1059
|
+
{ ALT: () => this.CONSUME(Kw_it) },
|
|
1060
|
+
{ ALT: () => this.CONSUME(LocalVariable) },
|
|
1061
|
+
{ ALT: () => this.CONSUME(GlobalVariable) },
|
|
1062
|
+
{ ALT: () => this.CONSUME(Identifier) }
|
|
1063
|
+
]);
|
|
1064
|
+
});
|
|
1065
|
+
};
|
|
1066
|
+
var parserInstance = new HyperscriptParser();
|
|
1067
|
+
function parseWithRecovery(code) {
|
|
1068
|
+
const lexResult = hyperscriptLexer.tokenize(code);
|
|
1069
|
+
const diagnostics = lexResult.errors.map((err) => ({
|
|
1070
|
+
message: err.message,
|
|
1071
|
+
severity: "error",
|
|
1072
|
+
startOffset: err.offset,
|
|
1073
|
+
endOffset: err.offset + (err.length || 1),
|
|
1074
|
+
startLine: err.line ?? 1,
|
|
1075
|
+
startColumn: err.column ?? 1,
|
|
1076
|
+
code: "lex-error"
|
|
1077
|
+
}));
|
|
1078
|
+
const nonWS = lexResult.tokens.filter((t) => t.tokenType !== WhiteSpace);
|
|
1079
|
+
parserInstance.input = nonWS;
|
|
1080
|
+
const cst = parserInstance.program();
|
|
1081
|
+
for (const err of parserInstance.errors) {
|
|
1082
|
+
diagnostics.push(recognitionExceptionToDiagnostic(err));
|
|
1083
|
+
}
|
|
1084
|
+
return {
|
|
1085
|
+
cst,
|
|
1086
|
+
diagnostics,
|
|
1087
|
+
tokens: lexResult.tokens
|
|
1088
|
+
};
|
|
1089
|
+
}
|
|
1090
|
+
function getContentAssist(code, offset) {
|
|
1091
|
+
const lexResult = hyperscriptLexer.tokenize(code);
|
|
1092
|
+
const nonWS = lexResult.tokens.filter((t) => t.tokenType !== WhiteSpace);
|
|
1093
|
+
const suggestions = [];
|
|
1094
|
+
const tokenBefore = findTokenBefore(nonWS, offset);
|
|
1095
|
+
const context = inferContextFromTokens(nonWS, tokenBefore);
|
|
1096
|
+
switch (context) {
|
|
1097
|
+
case "start":
|
|
1098
|
+
case "after-then":
|
|
1099
|
+
suggestions.push(...getCommandSuggestions());
|
|
1100
|
+
suggestions.push({
|
|
1101
|
+
label: "on",
|
|
1102
|
+
kind: "keyword",
|
|
1103
|
+
detail: "Event handler",
|
|
1104
|
+
insertText: "on "
|
|
1105
|
+
});
|
|
1106
|
+
break;
|
|
1107
|
+
case "after-on":
|
|
1108
|
+
suggestions.push(...getEventSuggestions());
|
|
1109
|
+
break;
|
|
1110
|
+
case "after-command":
|
|
1111
|
+
if (tokenBefore) {
|
|
1112
|
+
suggestions.push(...getRoleMarkerSuggestions(tokenBefore));
|
|
1113
|
+
}
|
|
1114
|
+
break;
|
|
1115
|
+
case "after-marker":
|
|
1116
|
+
suggestions.push(...getSelectorSuggestions());
|
|
1117
|
+
break;
|
|
1118
|
+
default:
|
|
1119
|
+
suggestions.push(...getCommandSuggestions());
|
|
1120
|
+
suggestions.push(...getSelectorSuggestions());
|
|
1121
|
+
break;
|
|
1122
|
+
}
|
|
1123
|
+
return suggestions;
|
|
1124
|
+
}
|
|
1125
|
+
function recognitionExceptionToDiagnostic(err) {
|
|
1126
|
+
const token = err.token;
|
|
1127
|
+
const startOffset = token.startOffset ?? 0;
|
|
1128
|
+
const endOffset = token.endOffset ?? startOffset + 1;
|
|
1129
|
+
let message = err.message;
|
|
1130
|
+
const match = message.match(/Expecting (.*?) but found/);
|
|
1131
|
+
if (match) {
|
|
1132
|
+
const expected = match[1].replace(/token of type --> /g, "").replace(/ <--/g, "").replace(/one of these possible Token Types:\s*/g, "").replace(/\[.*?\]/g, (m) => {
|
|
1133
|
+
const names = m.slice(1, -1).split(",").map((n) => n.trim());
|
|
1134
|
+
return names.slice(0, 5).join(", ") + (names.length > 5 ? "..." : "");
|
|
1135
|
+
});
|
|
1136
|
+
message = `Expected ${expected}`;
|
|
1137
|
+
if (token.image) {
|
|
1138
|
+
message += ` but found '${token.image}'`;
|
|
1139
|
+
}
|
|
1140
|
+
}
|
|
1141
|
+
return {
|
|
1142
|
+
message,
|
|
1143
|
+
severity: "error",
|
|
1144
|
+
startOffset,
|
|
1145
|
+
endOffset,
|
|
1146
|
+
startLine: token.startLine ?? 1,
|
|
1147
|
+
startColumn: token.startColumn ?? 1,
|
|
1148
|
+
code: "parse-error"
|
|
1149
|
+
};
|
|
1150
|
+
}
|
|
1151
|
+
function findTokenBefore(tokens, offset) {
|
|
1152
|
+
let best = null;
|
|
1153
|
+
for (const t of tokens) {
|
|
1154
|
+
if (t.startOffset <= offset) {
|
|
1155
|
+
best = t;
|
|
1156
|
+
} else {
|
|
1157
|
+
break;
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
return best;
|
|
1161
|
+
}
|
|
1162
|
+
function inferContextFromTokens(tokens, tokenBefore) {
|
|
1163
|
+
if (!tokenBefore || tokens.length === 0) return "start";
|
|
1164
|
+
const type = tokenBefore.tokenType;
|
|
1165
|
+
if (type === Kw_on) return "after-on";
|
|
1166
|
+
if (type === Kw_then) return "after-then";
|
|
1167
|
+
if (type.name.startsWith("Cmd_")) return "after-command";
|
|
1168
|
+
const markers = [Kw_to, Kw_from, Kw_into, Kw_in, Kw_of, Kw_on, Kw_as, Kw_with];
|
|
1169
|
+
if (markers.includes(type)) return "after-marker";
|
|
1170
|
+
return "general";
|
|
1171
|
+
}
|
|
1172
|
+
function getCommandSuggestions() {
|
|
1173
|
+
return COMMAND_SCHEMAS.map((schema) => ({
|
|
1174
|
+
label: schema.action,
|
|
1175
|
+
kind: "command",
|
|
1176
|
+
detail: getCategoryLabel(schema.category),
|
|
1177
|
+
insertText: schema.action + " ",
|
|
1178
|
+
category: schema.category
|
|
1179
|
+
}));
|
|
1180
|
+
}
|
|
1181
|
+
function getEventSuggestions() {
|
|
1182
|
+
const events = [
|
|
1183
|
+
"click",
|
|
1184
|
+
"dblclick",
|
|
1185
|
+
"mousedown",
|
|
1186
|
+
"mouseup",
|
|
1187
|
+
"mousemove",
|
|
1188
|
+
"mouseenter",
|
|
1189
|
+
"mouseleave",
|
|
1190
|
+
"keydown",
|
|
1191
|
+
"keyup",
|
|
1192
|
+
"keypress",
|
|
1193
|
+
"input",
|
|
1194
|
+
"change",
|
|
1195
|
+
"submit",
|
|
1196
|
+
"focus",
|
|
1197
|
+
"blur",
|
|
1198
|
+
"load",
|
|
1199
|
+
"scroll",
|
|
1200
|
+
"resize",
|
|
1201
|
+
"mutation",
|
|
1202
|
+
"intersection",
|
|
1203
|
+
"every"
|
|
1204
|
+
];
|
|
1205
|
+
return events.map((e) => ({
|
|
1206
|
+
label: e,
|
|
1207
|
+
kind: "event",
|
|
1208
|
+
detail: `${e} event`,
|
|
1209
|
+
insertText: e + " "
|
|
1210
|
+
}));
|
|
1211
|
+
}
|
|
1212
|
+
function getRoleMarkerSuggestions(commandToken) {
|
|
1213
|
+
const cmdName = commandToken.tokenType.name.replace("Cmd_", "");
|
|
1214
|
+
const schema = COMMAND_SCHEMAS.find((s) => s.action === cmdName);
|
|
1215
|
+
if (!schema) return [];
|
|
1216
|
+
const suggestions = [];
|
|
1217
|
+
for (const role of schema.roles) {
|
|
1218
|
+
if (role.role === schema.primaryRole) continue;
|
|
1219
|
+
const markers = getRoleMarkers(role.role);
|
|
1220
|
+
for (const marker of markers) {
|
|
1221
|
+
suggestions.push({
|
|
1222
|
+
label: marker,
|
|
1223
|
+
kind: "keyword",
|
|
1224
|
+
detail: `${role.role} marker`,
|
|
1225
|
+
insertText: marker + " "
|
|
1226
|
+
});
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
return suggestions;
|
|
1230
|
+
}
|
|
1231
|
+
function getSelectorSuggestions() {
|
|
1232
|
+
return [
|
|
1233
|
+
{ label: "me", kind: "keyword", detail: "Current element" },
|
|
1234
|
+
{ label: "it", kind: "keyword", detail: "Last result" },
|
|
1235
|
+
{ label: ".", kind: "selector", detail: "CSS class selector", insertText: "." },
|
|
1236
|
+
{ label: "#", kind: "selector", detail: "CSS ID selector", insertText: "#" },
|
|
1237
|
+
{ label: "@", kind: "selector", detail: "Attribute selector", insertText: "@" },
|
|
1238
|
+
{ label: ":", kind: "variable", detail: "Local variable", insertText: ":" },
|
|
1239
|
+
{ label: "$", kind: "variable", detail: "Global variable", insertText: "$" }
|
|
1240
|
+
];
|
|
1241
|
+
}
|
|
1242
|
+
function getRoleMarkers(role) {
|
|
1243
|
+
switch (role) {
|
|
1244
|
+
case "destination":
|
|
1245
|
+
return ["to", "into"];
|
|
1246
|
+
case "source":
|
|
1247
|
+
return ["from"];
|
|
1248
|
+
case "target":
|
|
1249
|
+
return ["on"];
|
|
1250
|
+
case "container":
|
|
1251
|
+
return ["in"];
|
|
1252
|
+
case "instrument":
|
|
1253
|
+
return ["with"];
|
|
1254
|
+
case "beneficiary":
|
|
1255
|
+
return ["for"];
|
|
1256
|
+
default:
|
|
1257
|
+
return [];
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
function getCategoryLabel(category) {
|
|
1261
|
+
const labels = {
|
|
1262
|
+
"dom-class": "DOM Class/Attribute",
|
|
1263
|
+
"dom-content": "DOM Content",
|
|
1264
|
+
"dom-visibility": "DOM Visibility",
|
|
1265
|
+
variable: "Variable",
|
|
1266
|
+
event: "Event",
|
|
1267
|
+
async: "Async",
|
|
1268
|
+
navigation: "Navigation",
|
|
1269
|
+
"control-flow": "Control Flow"
|
|
1270
|
+
};
|
|
1271
|
+
return labels[category] || category;
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1274
|
+
// src/localized-descriptions.ts
|
|
1275
|
+
var DESCRIPTIONS = {
|
|
1276
|
+
en: {
|
|
1277
|
+
toggle: {
|
|
1278
|
+
detail: "Toggle class/visibility",
|
|
1279
|
+
documentation: "Toggles a CSS class or attribute on an element. If the class exists, it is removed; otherwise, it is added."
|
|
1280
|
+
},
|
|
1281
|
+
add: {
|
|
1282
|
+
detail: "Add class/attribute",
|
|
1283
|
+
documentation: "Adds a CSS class or attribute to an element."
|
|
1284
|
+
},
|
|
1285
|
+
remove: {
|
|
1286
|
+
detail: "Remove class/element",
|
|
1287
|
+
documentation: "Removes a CSS class, attribute, or element from the DOM."
|
|
1288
|
+
},
|
|
1289
|
+
show: {
|
|
1290
|
+
detail: "Show element",
|
|
1291
|
+
documentation: "Makes an element visible by removing display:none."
|
|
1292
|
+
},
|
|
1293
|
+
hide: { detail: "Hide element", documentation: "Hides an element by setting display:none." },
|
|
1294
|
+
put: {
|
|
1295
|
+
detail: "Set content",
|
|
1296
|
+
documentation: "Sets the content of an element (innerHTML, textContent, or value)."
|
|
1297
|
+
},
|
|
1298
|
+
set: { detail: "Set variable", documentation: "Assigns a value to a variable or property." },
|
|
1299
|
+
get: {
|
|
1300
|
+
detail: "Get value",
|
|
1301
|
+
documentation: "Retrieves a value from an expression and stores it in the result variable."
|
|
1302
|
+
},
|
|
1303
|
+
fetch: {
|
|
1304
|
+
detail: "HTTP request",
|
|
1305
|
+
documentation: "Makes an HTTP request (GET, POST, etc.) and stores the response."
|
|
1306
|
+
},
|
|
1307
|
+
call: { detail: "Call function", documentation: "Calls a JavaScript function or method." },
|
|
1308
|
+
send: { detail: "Send event", documentation: "Dispatches a custom event on an element." },
|
|
1309
|
+
trigger: { detail: "Trigger event", documentation: "Triggers an event on an element." },
|
|
1310
|
+
wait: {
|
|
1311
|
+
detail: "Delay execution",
|
|
1312
|
+
documentation: "Pauses execution for a specified duration."
|
|
1313
|
+
},
|
|
1314
|
+
log: { detail: "Log to console", documentation: "Outputs a value to the browser console." },
|
|
1315
|
+
increment: {
|
|
1316
|
+
detail: "Increment value",
|
|
1317
|
+
documentation: "Increases a numeric value by 1 or a specified amount."
|
|
1318
|
+
},
|
|
1319
|
+
decrement: {
|
|
1320
|
+
detail: "Decrement value",
|
|
1321
|
+
documentation: "Decreases a numeric value by 1 or a specified amount."
|
|
1322
|
+
},
|
|
1323
|
+
append: { detail: "Append content", documentation: "Appends content to an element or array." },
|
|
1324
|
+
settle: {
|
|
1325
|
+
detail: "Wait for transitions",
|
|
1326
|
+
documentation: "Waits for CSS transitions/animations to complete."
|
|
1327
|
+
},
|
|
1328
|
+
go: { detail: "Navigate", documentation: "Navigates to a URL or page location." },
|
|
1329
|
+
throw: { detail: "Throw error", documentation: "Throws an error with a specified message." }
|
|
1330
|
+
},
|
|
1331
|
+
ja: {
|
|
1332
|
+
toggle: {
|
|
1333
|
+
detail: "\u30AF\u30E9\u30B9/\u8868\u793A\u5207\u66FF",
|
|
1334
|
+
documentation: "\u8981\u7D20\u306ECSS\u30AF\u30E9\u30B9\u307E\u305F\u306F\u5C5E\u6027\u3092\u5207\u308A\u66FF\u3048\u307E\u3059\u3002\u30AF\u30E9\u30B9\u304C\u5B58\u5728\u3059\u308B\u5834\u5408\u306F\u524A\u9664\u3057\u3001\u5B58\u5728\u3057\u306A\u3044\u5834\u5408\u306F\u8FFD\u52A0\u3057\u307E\u3059\u3002"
|
|
1335
|
+
},
|
|
1336
|
+
add: { detail: "\u30AF\u30E9\u30B9/\u5C5E\u6027\u8FFD\u52A0", documentation: "\u8981\u7D20\u306BCSS\u30AF\u30E9\u30B9\u307E\u305F\u306F\u5C5E\u6027\u3092\u8FFD\u52A0\u3057\u307E\u3059\u3002" },
|
|
1337
|
+
remove: {
|
|
1338
|
+
detail: "\u30AF\u30E9\u30B9/\u8981\u7D20\u524A\u9664",
|
|
1339
|
+
documentation: "CSS\u30AF\u30E9\u30B9\u3001\u5C5E\u6027\u3001\u307E\u305F\u306FDOM\u8981\u7D20\u3092\u524A\u9664\u3057\u307E\u3059\u3002"
|
|
1340
|
+
},
|
|
1341
|
+
show: { detail: "\u8981\u7D20\u8868\u793A", documentation: "display:none\u3092\u524A\u9664\u3057\u3066\u8981\u7D20\u3092\u8868\u793A\u3057\u307E\u3059\u3002" },
|
|
1342
|
+
hide: { detail: "\u8981\u7D20\u975E\u8868\u793A", documentation: "display:none\u3092\u8A2D\u5B9A\u3057\u3066\u8981\u7D20\u3092\u975E\u8868\u793A\u306B\u3057\u307E\u3059\u3002" },
|
|
1343
|
+
put: {
|
|
1344
|
+
detail: "\u30B3\u30F3\u30C6\u30F3\u30C4\u8A2D\u5B9A",
|
|
1345
|
+
documentation: "\u8981\u7D20\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\uFF08innerHTML\u3001textContent\u3001\u307E\u305F\u306Fvalue\uFF09\u3092\u8A2D\u5B9A\u3057\u307E\u3059\u3002"
|
|
1346
|
+
},
|
|
1347
|
+
set: { detail: "\u5909\u6570\u8A2D\u5B9A", documentation: "\u5909\u6570\u307E\u305F\u306F\u30D7\u30ED\u30D1\u30C6\u30A3\u306B\u5024\u3092\u4EE3\u5165\u3057\u307E\u3059\u3002" },
|
|
1348
|
+
get: { detail: "\u5024\u53D6\u5F97", documentation: "\u5F0F\u304B\u3089\u5024\u3092\u53D6\u5F97\u3057\u3001result\u5909\u6570\u306B\u683C\u7D0D\u3057\u307E\u3059\u3002" },
|
|
1349
|
+
fetch: {
|
|
1350
|
+
detail: "HTTP\u30EA\u30AF\u30A8\u30B9\u30C8",
|
|
1351
|
+
documentation: "HTTP\u30EA\u30AF\u30A8\u30B9\u30C8\uFF08GET\u3001POST\u306A\u3069\uFF09\u3092\u5B9F\u884C\u3057\u3001\u30EC\u30B9\u30DD\u30F3\u30B9\u3092\u683C\u7D0D\u3057\u307E\u3059\u3002"
|
|
1352
|
+
},
|
|
1353
|
+
call: { detail: "\u95A2\u6570\u547C\u3073\u51FA\u3057", documentation: "JavaScript\u95A2\u6570\u307E\u305F\u306F\u30E1\u30BD\u30C3\u30C9\u3092\u547C\u3073\u51FA\u3057\u307E\u3059\u3002" },
|
|
1354
|
+
send: { detail: "\u30A4\u30D9\u30F3\u30C8\u9001\u4FE1", documentation: "\u8981\u7D20\u306B\u30AB\u30B9\u30BF\u30E0\u30A4\u30D9\u30F3\u30C8\u3092\u30C7\u30A3\u30B9\u30D1\u30C3\u30C1\u3057\u307E\u3059\u3002" },
|
|
1355
|
+
trigger: { detail: "\u30A4\u30D9\u30F3\u30C8\u30C8\u30EA\u30AC\u30FC", documentation: "\u8981\u7D20\u3067\u30A4\u30D9\u30F3\u30C8\u3092\u30C8\u30EA\u30AC\u30FC\u3057\u307E\u3059\u3002" },
|
|
1356
|
+
wait: { detail: "\u5B9F\u884C\u9045\u5EF6", documentation: "\u6307\u5B9A\u3055\u308C\u305F\u6642\u9593\u3060\u3051\u5B9F\u884C\u3092\u4E00\u6642\u505C\u6B62\u3057\u307E\u3059\u3002" },
|
|
1357
|
+
log: { detail: "\u30B3\u30F3\u30BD\u30FC\u30EB\u51FA\u529B", documentation: "\u30D6\u30E9\u30A6\u30B6\u30B3\u30F3\u30BD\u30FC\u30EB\u306B\u5024\u3092\u51FA\u529B\u3057\u307E\u3059\u3002" },
|
|
1358
|
+
increment: { detail: "\u5024\u5897\u52A0", documentation: "\u6570\u5024\u30921\u307E\u305F\u306F\u6307\u5B9A\u91CF\u3060\u3051\u5897\u52A0\u3055\u305B\u307E\u3059\u3002" },
|
|
1359
|
+
decrement: { detail: "\u5024\u6E1B\u5C11", documentation: "\u6570\u5024\u30921\u307E\u305F\u306F\u6307\u5B9A\u91CF\u3060\u3051\u6E1B\u5C11\u3055\u305B\u307E\u3059\u3002" },
|
|
1360
|
+
append: { detail: "\u30B3\u30F3\u30C6\u30F3\u30C4\u8FFD\u52A0", documentation: "\u8981\u7D20\u307E\u305F\u306F\u914D\u5217\u306B\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8FFD\u52A0\u3057\u307E\u3059\u3002" },
|
|
1361
|
+
settle: {
|
|
1362
|
+
detail: "\u30C8\u30E9\u30F3\u30B8\u30B7\u30E7\u30F3\u5F85\u6A5F",
|
|
1363
|
+
documentation: "CSS\u30C8\u30E9\u30F3\u30B8\u30B7\u30E7\u30F3/\u30A2\u30CB\u30E1\u30FC\u30B7\u30E7\u30F3\u306E\u5B8C\u4E86\u3092\u5F85\u3061\u307E\u3059\u3002"
|
|
1364
|
+
},
|
|
1365
|
+
go: { detail: "\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3", documentation: "URL\u307E\u305F\u306F\u30DA\u30FC\u30B8\u4F4D\u7F6E\u306B\u79FB\u52D5\u3057\u307E\u3059\u3002" },
|
|
1366
|
+
throw: { detail: "\u30A8\u30E9\u30FC\u9001\u51FA", documentation: "\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30C3\u30BB\u30FC\u30B8\u3067\u30A8\u30E9\u30FC\u3092\u9001\u51FA\u3057\u307E\u3059\u3002" }
|
|
1367
|
+
},
|
|
1368
|
+
es: {
|
|
1369
|
+
toggle: {
|
|
1370
|
+
detail: "Alternar clase/visibilidad",
|
|
1371
|
+
documentation: "Alterna una clase CSS o atributo en un elemento. Si la clase existe, se elimina; de lo contrario, se agrega."
|
|
1372
|
+
},
|
|
1373
|
+
add: {
|
|
1374
|
+
detail: "Agregar clase/atributo",
|
|
1375
|
+
documentation: "Agrega una clase CSS o atributo a un elemento."
|
|
1376
|
+
},
|
|
1377
|
+
remove: {
|
|
1378
|
+
detail: "Eliminar clase/elemento",
|
|
1379
|
+
documentation: "Elimina una clase CSS, atributo o elemento del DOM."
|
|
1380
|
+
},
|
|
1381
|
+
show: {
|
|
1382
|
+
detail: "Mostrar elemento",
|
|
1383
|
+
documentation: "Hace visible un elemento eliminando display:none."
|
|
1384
|
+
},
|
|
1385
|
+
hide: {
|
|
1386
|
+
detail: "Ocultar elemento",
|
|
1387
|
+
documentation: "Oculta un elemento estableciendo display:none."
|
|
1388
|
+
},
|
|
1389
|
+
put: {
|
|
1390
|
+
detail: "Establecer contenido",
|
|
1391
|
+
documentation: "Establece el contenido de un elemento (innerHTML, textContent o value)."
|
|
1392
|
+
},
|
|
1393
|
+
set: {
|
|
1394
|
+
detail: "Establecer variable",
|
|
1395
|
+
documentation: "Asigna un valor a una variable o propiedad."
|
|
1396
|
+
},
|
|
1397
|
+
get: {
|
|
1398
|
+
detail: "Obtener valor",
|
|
1399
|
+
documentation: "Recupera un valor de una expresion y lo almacena en la variable result."
|
|
1400
|
+
},
|
|
1401
|
+
fetch: {
|
|
1402
|
+
detail: "Solicitud HTTP",
|
|
1403
|
+
documentation: "Realiza una solicitud HTTP (GET, POST, etc.) y almacena la respuesta."
|
|
1404
|
+
},
|
|
1405
|
+
call: {
|
|
1406
|
+
detail: "Llamar funcion",
|
|
1407
|
+
documentation: "Llama a una funcion o metodo de JavaScript."
|
|
1408
|
+
},
|
|
1409
|
+
send: {
|
|
1410
|
+
detail: "Enviar evento",
|
|
1411
|
+
documentation: "Despacha un evento personalizado en un elemento."
|
|
1412
|
+
},
|
|
1413
|
+
trigger: { detail: "Activar evento", documentation: "Activa un evento en un elemento." },
|
|
1414
|
+
wait: {
|
|
1415
|
+
detail: "Retrasar ejecucion",
|
|
1416
|
+
documentation: "Pausa la ejecucion durante un tiempo especificado."
|
|
1417
|
+
},
|
|
1418
|
+
log: {
|
|
1419
|
+
detail: "Registrar en consola",
|
|
1420
|
+
documentation: "Muestra un valor en la consola del navegador."
|
|
1421
|
+
},
|
|
1422
|
+
increment: {
|
|
1423
|
+
detail: "Incrementar valor",
|
|
1424
|
+
documentation: "Aumenta un valor numerico en 1 o una cantidad especificada."
|
|
1425
|
+
},
|
|
1426
|
+
decrement: {
|
|
1427
|
+
detail: "Decrementar valor",
|
|
1428
|
+
documentation: "Disminuye un valor numerico en 1 o una cantidad especificada."
|
|
1429
|
+
},
|
|
1430
|
+
append: {
|
|
1431
|
+
detail: "Agregar contenido",
|
|
1432
|
+
documentation: "Agrega contenido a un elemento o arreglo."
|
|
1433
|
+
},
|
|
1434
|
+
settle: {
|
|
1435
|
+
detail: "Esperar transiciones",
|
|
1436
|
+
documentation: "Espera a que las transiciones/animaciones CSS se completen."
|
|
1437
|
+
},
|
|
1438
|
+
go: { detail: "Navegar", documentation: "Navega a una URL o ubicacion de pagina." },
|
|
1439
|
+
throw: { detail: "Lanzar error", documentation: "Lanza un error con un mensaje especificado." }
|
|
1440
|
+
},
|
|
1441
|
+
zh: {
|
|
1442
|
+
toggle: {
|
|
1443
|
+
detail: "\u5207\u6362\u7C7B/\u53EF\u89C1\u6027",
|
|
1444
|
+
documentation: "\u5207\u6362\u5143\u7D20\u4E0A\u7684CSS\u7C7B\u6216\u5C5E\u6027\u3002\u5982\u679C\u7C7B\u5B58\u5728\u5219\u5220\u9664\uFF0C\u5426\u5219\u6DFB\u52A0\u3002"
|
|
1445
|
+
},
|
|
1446
|
+
add: { detail: "\u6DFB\u52A0\u7C7B/\u5C5E\u6027", documentation: "\u5411\u5143\u7D20\u6DFB\u52A0CSS\u7C7B\u6216\u5C5E\u6027\u3002" },
|
|
1447
|
+
remove: { detail: "\u5220\u9664\u7C7B/\u5143\u7D20", documentation: "\u4ECEDOM\u4E2D\u5220\u9664CSS\u7C7B\u3001\u5C5E\u6027\u6216\u5143\u7D20\u3002" },
|
|
1448
|
+
show: { detail: "\u663E\u793A\u5143\u7D20", documentation: "\u901A\u8FC7\u79FB\u9664display:none\u4F7F\u5143\u7D20\u53EF\u89C1\u3002" },
|
|
1449
|
+
hide: { detail: "\u9690\u85CF\u5143\u7D20", documentation: "\u901A\u8FC7\u8BBE\u7F6Edisplay:none\u9690\u85CF\u5143\u7D20\u3002" },
|
|
1450
|
+
put: { detail: "\u8BBE\u7F6E\u5185\u5BB9", documentation: "\u8BBE\u7F6E\u5143\u7D20\u7684\u5185\u5BB9\uFF08innerHTML\u3001textContent\u6216value\uFF09\u3002" },
|
|
1451
|
+
set: { detail: "\u8BBE\u7F6E\u53D8\u91CF", documentation: "\u5C06\u503C\u8D4B\u7ED9\u53D8\u91CF\u6216\u5C5E\u6027\u3002" },
|
|
1452
|
+
get: { detail: "\u83B7\u53D6\u503C", documentation: "\u4ECE\u8868\u8FBE\u5F0F\u83B7\u53D6\u503C\u5E76\u5B58\u50A8\u5728result\u53D8\u91CF\u4E2D\u3002" },
|
|
1453
|
+
fetch: { detail: "HTTP\u8BF7\u6C42", documentation: "\u53D1\u8D77HTTP\u8BF7\u6C42\uFF08GET\u3001POST\u7B49\uFF09\u5E76\u5B58\u50A8\u54CD\u5E94\u3002" },
|
|
1454
|
+
call: { detail: "\u8C03\u7528\u51FD\u6570", documentation: "\u8C03\u7528JavaScript\u51FD\u6570\u6216\u65B9\u6CD5\u3002" },
|
|
1455
|
+
send: { detail: "\u53D1\u9001\u4E8B\u4EF6", documentation: "\u5728\u5143\u7D20\u4E0A\u6D3E\u53D1\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u3002" },
|
|
1456
|
+
trigger: { detail: "\u89E6\u53D1\u4E8B\u4EF6", documentation: "\u5728\u5143\u7D20\u4E0A\u89E6\u53D1\u4E8B\u4EF6\u3002" },
|
|
1457
|
+
wait: { detail: "\u5EF6\u8FDF\u6267\u884C", documentation: "\u6682\u505C\u6267\u884C\u6307\u5B9A\u7684\u65F6\u95F4\u3002" },
|
|
1458
|
+
log: { detail: "\u63A7\u5236\u53F0\u8F93\u51FA", documentation: "\u5C06\u503C\u8F93\u51FA\u5230\u6D4F\u89C8\u5668\u63A7\u5236\u53F0\u3002" },
|
|
1459
|
+
increment: { detail: "\u9012\u589E\u503C", documentation: "\u5C06\u6570\u503C\u589E\u52A01\u6216\u6307\u5B9A\u91CF\u3002" },
|
|
1460
|
+
decrement: { detail: "\u9012\u51CF\u503C", documentation: "\u5C06\u6570\u503C\u51CF\u5C111\u6216\u6307\u5B9A\u91CF\u3002" },
|
|
1461
|
+
append: { detail: "\u8FFD\u52A0\u5185\u5BB9", documentation: "\u5411\u5143\u7D20\u6216\u6570\u7EC4\u8FFD\u52A0\u5185\u5BB9\u3002" },
|
|
1462
|
+
settle: { detail: "\u7B49\u5F85\u8FC7\u6E21", documentation: "\u7B49\u5F85CSS\u8FC7\u6E21/\u52A8\u753B\u5B8C\u6210\u3002" },
|
|
1463
|
+
go: { detail: "\u5BFC\u822A", documentation: "\u5BFC\u822A\u5230URL\u6216\u9875\u9762\u4F4D\u7F6E\u3002" },
|
|
1464
|
+
throw: { detail: "\u629B\u51FA\u9519\u8BEF", documentation: "\u4F7F\u7528\u6307\u5B9A\u6D88\u606F\u629B\u51FA\u9519\u8BEF\u3002" }
|
|
1465
|
+
},
|
|
1466
|
+
ko: {
|
|
1467
|
+
toggle: {
|
|
1468
|
+
detail: "\uD074\uB798\uC2A4/\uD45C\uC2DC \uC804\uD658",
|
|
1469
|
+
documentation: "\uC694\uC18C\uC758 CSS \uD074\uB798\uC2A4 \uB610\uB294 \uC18D\uC131\uC744 \uC804\uD658\uD569\uB2C8\uB2E4. \uD074\uB798\uC2A4\uAC00 \uC788\uC73C\uBA74 \uC81C\uAC70\uD558\uACE0, \uC5C6\uC73C\uBA74 \uCD94\uAC00\uD569\uB2C8\uB2E4."
|
|
1470
|
+
},
|
|
1471
|
+
add: { detail: "\uD074\uB798\uC2A4/\uC18D\uC131 \uCD94\uAC00", documentation: "\uC694\uC18C\uC5D0 CSS \uD074\uB798\uC2A4 \uB610\uB294 \uC18D\uC131\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4." },
|
|
1472
|
+
remove: {
|
|
1473
|
+
detail: "\uD074\uB798\uC2A4/\uC694\uC18C \uC81C\uAC70",
|
|
1474
|
+
documentation: "DOM\uC5D0\uC11C CSS \uD074\uB798\uC2A4, \uC18D\uC131 \uB610\uB294 \uC694\uC18C\uB97C \uC81C\uAC70\uD569\uB2C8\uB2E4."
|
|
1475
|
+
},
|
|
1476
|
+
show: { detail: "\uC694\uC18C \uD45C\uC2DC", documentation: "display:none\uC744 \uC81C\uAC70\uD558\uC5EC \uC694\uC18C\uB97C \uD45C\uC2DC\uD569\uB2C8\uB2E4." },
|
|
1477
|
+
hide: { detail: "\uC694\uC18C \uC228\uAE30\uAE30", documentation: "display:none\uC744 \uC124\uC815\uD558\uC5EC \uC694\uC18C\uB97C \uC228\uAE41\uB2C8\uB2E4." },
|
|
1478
|
+
put: {
|
|
1479
|
+
detail: "\uCF58\uD150\uCE20 \uC124\uC815",
|
|
1480
|
+
documentation: "\uC694\uC18C\uC758 \uCF58\uD150\uCE20(innerHTML, textContent \uB610\uB294 value)\uB97C \uC124\uC815\uD569\uB2C8\uB2E4."
|
|
1481
|
+
},
|
|
1482
|
+
set: { detail: "\uBCC0\uC218 \uC124\uC815", documentation: "\uBCC0\uC218 \uB610\uB294 \uC18D\uC131\uC5D0 \uAC12\uC744 \uD560\uB2F9\uD569\uB2C8\uB2E4." },
|
|
1483
|
+
get: {
|
|
1484
|
+
detail: "\uAC12 \uAC00\uC838\uC624\uAE30",
|
|
1485
|
+
documentation: "\uD45C\uD604\uC2DD\uC5D0\uC11C \uAC12\uC744 \uAC00\uC838\uC640 result \uBCC0\uC218\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4."
|
|
1486
|
+
},
|
|
1487
|
+
fetch: {
|
|
1488
|
+
detail: "HTTP \uC694\uCCAD",
|
|
1489
|
+
documentation: "HTTP \uC694\uCCAD(GET, POST \uB4F1)\uC744 \uC2E4\uD589\uD558\uACE0 \uC751\uB2F5\uC744 \uC800\uC7A5\uD569\uB2C8\uB2E4."
|
|
1490
|
+
},
|
|
1491
|
+
call: { detail: "\uD568\uC218 \uD638\uCD9C", documentation: "JavaScript \uD568\uC218 \uB610\uB294 \uBA54\uC11C\uB4DC\uB97C \uD638\uCD9C\uD569\uB2C8\uB2E4." },
|
|
1492
|
+
send: { detail: "\uC774\uBCA4\uD2B8 \uC804\uC1A1", documentation: "\uC694\uC18C\uC5D0 \uCEE4\uC2A4\uD140 \uC774\uBCA4\uD2B8\uB97C \uB514\uC2A4\uD328\uCE58\uD569\uB2C8\uB2E4." },
|
|
1493
|
+
trigger: { detail: "\uC774\uBCA4\uD2B8 \uD2B8\uB9AC\uAC70", documentation: "\uC694\uC18C\uC5D0\uC11C \uC774\uBCA4\uD2B8\uB97C \uD2B8\uB9AC\uAC70\uD569\uB2C8\uB2E4." },
|
|
1494
|
+
wait: { detail: "\uC2E4\uD589 \uC9C0\uC5F0", documentation: "\uC9C0\uC815\uB41C \uC2DC\uAC04 \uB3D9\uC548 \uC2E4\uD589\uC744 \uC77C\uC2DC \uC911\uC9C0\uD569\uB2C8\uB2E4." },
|
|
1495
|
+
log: { detail: "\uCF58\uC194 \uCD9C\uB825", documentation: "\uBE0C\uB77C\uC6B0\uC800 \uCF58\uC194\uC5D0 \uAC12\uC744 \uCD9C\uB825\uD569\uB2C8\uB2E4." },
|
|
1496
|
+
increment: { detail: "\uAC12 \uC99D\uAC00", documentation: "\uC22B\uC790 \uAC12\uC744 1 \uB610\uB294 \uC9C0\uC815\uB41C \uC591\uB9CC\uD07C \uC99D\uAC00\uC2DC\uD0B5\uB2C8\uB2E4." },
|
|
1497
|
+
decrement: { detail: "\uAC12 \uAC10\uC18C", documentation: "\uC22B\uC790 \uAC12\uC744 1 \uB610\uB294 \uC9C0\uC815\uB41C \uC591\uB9CC\uD07C \uAC10\uC18C\uC2DC\uD0B5\uB2C8\uB2E4." },
|
|
1498
|
+
append: { detail: "\uCF58\uD150\uCE20 \uCD94\uAC00", documentation: "\uC694\uC18C \uB610\uB294 \uBC30\uC5F4\uC5D0 \uCF58\uD150\uCE20\uB97C \uCD94\uAC00\uD569\uB2C8\uB2E4." },
|
|
1499
|
+
settle: {
|
|
1500
|
+
detail: "\uD2B8\uB79C\uC9C0\uC158 \uB300\uAE30",
|
|
1501
|
+
documentation: "CSS \uD2B8\uB79C\uC9C0\uC158/\uC560\uB2C8\uBA54\uC774\uC158\uC774 \uC644\uB8CC\uB420 \uB54C\uAE4C\uC9C0 \uB300\uAE30\uD569\uB2C8\uB2E4."
|
|
1502
|
+
},
|
|
1503
|
+
go: { detail: "\uB0B4\uBE44\uAC8C\uC774\uC158", documentation: "URL \uB610\uB294 \uD398\uC774\uC9C0 \uC704\uCE58\uB85C \uC774\uB3D9\uD569\uB2C8\uB2E4." },
|
|
1504
|
+
throw: { detail: "\uC624\uB958 \uBC1C\uC0DD", documentation: "\uC9C0\uC815\uB41C \uBA54\uC2DC\uC9C0\uB85C \uC624\uB958\uB97C \uBC1C\uC0DD\uC2DC\uD0B5\uB2C8\uB2E4." }
|
|
1505
|
+
},
|
|
1506
|
+
ar: {
|
|
1507
|
+
toggle: {
|
|
1508
|
+
detail: "\u062A\u0628\u062F\u064A\u0644 \u0627\u0644\u0641\u0626\u0629/\u0627\u0644\u0631\u0624\u064A\u0629",
|
|
1509
|
+
documentation: "\u064A\u0628\u062F\u0644 \u0641\u0626\u0629 CSS \u0623\u0648 \u0633\u0645\u0629 \u0639\u0644\u0649 \u0639\u0646\u0635\u0631. \u0625\u0630\u0627 \u0643\u0627\u0646\u062A \u0627\u0644\u0641\u0626\u0629 \u0645\u0648\u062C\u0648\u062F\u0629\u060C \u064A\u062A\u0645 \u0625\u0632\u0627\u0644\u062A\u0647\u0627\u061B \u0648\u0625\u0644\u0627\u060C \u064A\u062A\u0645 \u0625\u0636\u0627\u0641\u062A\u0647\u0627."
|
|
1510
|
+
},
|
|
1511
|
+
add: { detail: "\u0625\u0636\u0627\u0641\u0629 \u0641\u0626\u0629/\u0633\u0645\u0629", documentation: "\u064A\u0636\u064A\u0641 \u0641\u0626\u0629 CSS \u0623\u0648 \u0633\u0645\u0629 \u0625\u0644\u0649 \u0639\u0646\u0635\u0631." },
|
|
1512
|
+
remove: { detail: "\u0625\u0632\u0627\u0644\u0629 \u0641\u0626\u0629/\u0639\u0646\u0635\u0631", documentation: "\u064A\u0632\u064A\u0644 \u0641\u0626\u0629 CSS \u0623\u0648 \u0633\u0645\u0629 \u0623\u0648 \u0639\u0646\u0635\u0631 \u0645\u0646 DOM." },
|
|
1513
|
+
show: {
|
|
1514
|
+
detail: "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0639\u0646\u0635\u0631",
|
|
1515
|
+
documentation: "\u064A\u062C\u0639\u0644 \u0627\u0644\u0639\u0646\u0635\u0631 \u0645\u0631\u0626\u064A\u064B\u0627 \u0639\u0646 \u0637\u0631\u064A\u0642 \u0625\u0632\u0627\u0644\u0629 display:none."
|
|
1516
|
+
},
|
|
1517
|
+
hide: { detail: "\u0625\u062E\u0641\u0627\u0621 \u0627\u0644\u0639\u0646\u0635\u0631", documentation: "\u064A\u062E\u0641\u064A \u0627\u0644\u0639\u0646\u0635\u0631 \u0639\u0646 \u0637\u0631\u064A\u0642 \u062A\u0639\u064A\u064A\u0646 display:none." },
|
|
1518
|
+
put: {
|
|
1519
|
+
detail: "\u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u0645\u062D\u062A\u0648\u0649",
|
|
1520
|
+
documentation: "\u064A\u0639\u064A\u0651\u0646 \u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u0639\u0646\u0635\u0631 (innerHTML \u0623\u0648 textContent \u0623\u0648 value)."
|
|
1521
|
+
},
|
|
1522
|
+
set: { detail: "\u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u0645\u062A\u063A\u064A\u0631", documentation: "\u064A\u0639\u064A\u0651\u0646 \u0642\u064A\u0645\u0629 \u0644\u0645\u062A\u063A\u064A\u0631 \u0623\u0648 \u062E\u0627\u0635\u064A\u0629." },
|
|
1523
|
+
get: {
|
|
1524
|
+
detail: "\u0627\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0642\u064A\u0645\u0629",
|
|
1525
|
+
documentation: "\u064A\u0633\u062A\u0631\u062C\u0639 \u0642\u064A\u0645\u0629 \u0645\u0646 \u062A\u0639\u0628\u064A\u0631 \u0648\u064A\u062E\u0632\u0646\u0647\u0627 \u0641\u064A \u0645\u062A\u063A\u064A\u0631 result."
|
|
1526
|
+
},
|
|
1527
|
+
fetch: { detail: "\u0637\u0644\u0628 HTTP", documentation: "\u064A\u0646\u0641\u0630 \u0637\u0644\u0628 HTTP (GET\u060C POST\u060C \u0625\u0644\u062E) \u0648\u064A\u062E\u0632\u0646 \u0627\u0644\u0627\u0633\u062A\u062C\u0627\u0628\u0629." },
|
|
1528
|
+
call: { detail: "\u0627\u0633\u062A\u062F\u0639\u0627\u0621 \u062F\u0627\u0644\u0629", documentation: "\u064A\u0633\u062A\u062F\u0639\u064A \u062F\u0627\u0644\u0629 \u0623\u0648 \u0637\u0631\u064A\u0642\u0629 JavaScript." },
|
|
1529
|
+
send: { detail: "\u0625\u0631\u0633\u0627\u0644 \u062D\u062F\u062B", documentation: "\u064A\u0631\u0633\u0644 \u062D\u062F\u062B\u064B\u0627 \u0645\u062E\u0635\u0635\u064B\u0627 \u0639\u0644\u0649 \u0639\u0646\u0635\u0631." },
|
|
1530
|
+
trigger: { detail: "\u062A\u0634\u063A\u064A\u0644 \u062D\u062F\u062B", documentation: "\u064A\u0634\u063A\u0644 \u062D\u062F\u062B\u064B\u0627 \u0639\u0644\u0649 \u0639\u0646\u0635\u0631." },
|
|
1531
|
+
wait: { detail: "\u062A\u0623\u062E\u064A\u0631 \u0627\u0644\u062A\u0646\u0641\u064A\u0630", documentation: "\u064A\u0648\u0642\u0641 \u0627\u0644\u062A\u0646\u0641\u064A\u0630 \u0645\u0624\u0642\u062A\u064B\u0627 \u0644\u0645\u062F\u0629 \u0645\u062D\u062F\u062F\u0629." },
|
|
1532
|
+
log: { detail: "\u062A\u0633\u062C\u064A\u0644 \u0641\u064A \u0648\u062D\u062F\u0629 \u0627\u0644\u062A\u062D\u0643\u0645", documentation: "\u064A\u062E\u0631\u062C \u0642\u064A\u0645\u0629 \u0625\u0644\u0649 \u0648\u062D\u062F\u0629 \u062A\u062D\u0643\u0645 \u0627\u0644\u0645\u062A\u0635\u0641\u062D." },
|
|
1533
|
+
increment: { detail: "\u0632\u064A\u0627\u062F\u0629 \u0627\u0644\u0642\u064A\u0645\u0629", documentation: "\u064A\u0632\u064A\u062F \u0642\u064A\u0645\u0629 \u0631\u0642\u0645\u064A\u0629 \u0628\u0645\u0642\u062F\u0627\u0631 1 \u0623\u0648 \u0645\u0642\u062F\u0627\u0631 \u0645\u062D\u062F\u062F." },
|
|
1534
|
+
decrement: { detail: "\u0625\u0646\u0642\u0627\u0635 \u0627\u0644\u0642\u064A\u0645\u0629", documentation: "\u064A\u0646\u0642\u0635 \u0642\u064A\u0645\u0629 \u0631\u0642\u0645\u064A\u0629 \u0628\u0645\u0642\u062F\u0627\u0631 1 \u0623\u0648 \u0645\u0642\u062F\u0627\u0631 \u0645\u062D\u062F\u062F." },
|
|
1535
|
+
append: { detail: "\u0625\u0644\u062D\u0627\u0642 \u0645\u062D\u062A\u0648\u0649", documentation: "\u064A\u0644\u062D\u0642 \u0645\u062D\u062A\u0648\u0649 \u0628\u0639\u0646\u0635\u0631 \u0623\u0648 \u0645\u0635\u0641\u0648\u0641\u0629." },
|
|
1536
|
+
settle: { detail: "\u0627\u0646\u062A\u0638\u0627\u0631 \u0627\u0644\u062A\u062D\u0648\u0644\u0627\u062A", documentation: "\u064A\u0646\u062A\u0638\u0631 \u0627\u0643\u062A\u0645\u0627\u0644 \u062A\u062D\u0648\u0644\u0627\u062A/\u0631\u0633\u0648\u0645 CSS \u0627\u0644\u0645\u062A\u062D\u0631\u0643\u0629." },
|
|
1537
|
+
go: { detail: "\u0627\u0644\u062A\u0646\u0642\u0644", documentation: "\u064A\u0646\u062A\u0642\u0644 \u0625\u0644\u0649 \u0639\u0646\u0648\u0627\u0646 URL \u0623\u0648 \u0645\u0648\u0642\u0639 \u0635\u0641\u062D\u0629." },
|
|
1538
|
+
throw: { detail: "\u0631\u0645\u064A \u062E\u0637\u0623", documentation: "\u064A\u0631\u0645\u064A \u062E\u0637\u0623 \u0628\u0631\u0633\u0627\u0644\u0629 \u0645\u062D\u062F\u062F\u0629." }
|
|
1539
|
+
}
|
|
1540
|
+
};
|
|
1541
|
+
function getCommandDescription(command, language) {
|
|
1542
|
+
return DESCRIPTIONS[language]?.[command] ?? DESCRIPTIONS.en?.[command];
|
|
1543
|
+
}
|
|
1544
|
+
|
|
325
1545
|
// src/server.ts
|
|
326
1546
|
import * as semanticImport from "@lokascript/semantic";
|
|
327
1547
|
var semanticPackage = semanticImport;
|
|
@@ -351,7 +1571,7 @@ try {
|
|
|
351
1571
|
}
|
|
352
1572
|
var frameworkIR = null;
|
|
353
1573
|
try {
|
|
354
|
-
const fw = await import("./dist-
|
|
1574
|
+
const fw = await import("./dist-V7SKUZF5.js");
|
|
355
1575
|
frameworkIR = { fromInterchangeNode: fw.fromInterchangeNode, renderExplicit: fw.renderExplicit };
|
|
356
1576
|
console.error(
|
|
357
1577
|
"[lokascript-ls] @lokascript/framework loaded \u2014 LSE bracket notation in hover enabled"
|
|
@@ -733,12 +1953,47 @@ async function getDiagnostics(code, language) {
|
|
|
733
1953
|
});
|
|
734
1954
|
}
|
|
735
1955
|
}
|
|
1956
|
+
if (diagnostics.length === 0) {
|
|
1957
|
+
try {
|
|
1958
|
+
const chevrotainResult = parseWithRecovery(code);
|
|
1959
|
+
for (const diag of chevrotainResult.diagnostics) {
|
|
1960
|
+
const lines = code.split("\n");
|
|
1961
|
+
const { line: startLine, character: startChar } = offsetToLineChar(code, diag.startOffset);
|
|
1962
|
+
const { line: endLine, character: endChar } = offsetToLineChar(code, diag.endOffset);
|
|
1963
|
+
diagnostics.push({
|
|
1964
|
+
range: {
|
|
1965
|
+
start: { line: startLine, character: startChar },
|
|
1966
|
+
end: { line: endLine, character: endChar }
|
|
1967
|
+
},
|
|
1968
|
+
severity: diag.severity === "error" ? DiagnosticSeverity.Error : diag.severity === "warning" ? DiagnosticSeverity.Warning : DiagnosticSeverity.Information,
|
|
1969
|
+
code: diag.code,
|
|
1970
|
+
source: brand,
|
|
1971
|
+
message: diag.message
|
|
1972
|
+
});
|
|
1973
|
+
}
|
|
1974
|
+
} catch (e) {
|
|
1975
|
+
connection.console.log(`[${brand}-ls] Chevrotain parsing failed: ${e}`);
|
|
1976
|
+
}
|
|
1977
|
+
}
|
|
736
1978
|
if (diagnostics.length === 0) {
|
|
737
1979
|
const simpleDiagnostics = runSimpleDiagnostics(code, language);
|
|
738
1980
|
diagnostics.push(...simpleDiagnostics.map((d) => ({ ...d, source: brand })));
|
|
739
1981
|
}
|
|
740
1982
|
return diagnostics.slice(0, globalSettings.maxDiagnostics);
|
|
741
1983
|
}
|
|
1984
|
+
function offsetToLineChar(text, offset) {
|
|
1985
|
+
let line = 0;
|
|
1986
|
+
let col = 0;
|
|
1987
|
+
for (let i = 0; i < offset && i < text.length; i++) {
|
|
1988
|
+
if (text[i] === "\n") {
|
|
1989
|
+
line++;
|
|
1990
|
+
col = 0;
|
|
1991
|
+
} else {
|
|
1992
|
+
col++;
|
|
1993
|
+
}
|
|
1994
|
+
}
|
|
1995
|
+
return { line, character: col };
|
|
1996
|
+
}
|
|
742
1997
|
function runSimpleDiagnostics(code, _language) {
|
|
743
1998
|
const diagnostics = [];
|
|
744
1999
|
const lines = code.split("\n");
|
|
@@ -806,7 +2061,22 @@ connection.onCompletion((params) => {
|
|
|
806
2061
|
const offset = document.offsetAt(position);
|
|
807
2062
|
const beforeCursor = text.slice(0, offset);
|
|
808
2063
|
const context = inferContext(beforeCursor);
|
|
809
|
-
|
|
2064
|
+
const completions = getContextualCompletions(context, language);
|
|
2065
|
+
try {
|
|
2066
|
+
const chevrotainSuggestions = getContentAssist(beforeCursor, offset);
|
|
2067
|
+
const existingLabels = new Set(completions.map((c) => c.label));
|
|
2068
|
+
for (const s of chevrotainSuggestions) {
|
|
2069
|
+
if (existingLabels.has(s.label)) continue;
|
|
2070
|
+
completions.push({
|
|
2071
|
+
label: s.label,
|
|
2072
|
+
kind: s.kind === "command" ? CompletionItemKind.Method : s.kind === "event" ? CompletionItemKind.Event : s.kind === "selector" ? CompletionItemKind.Field : s.kind === "variable" ? CompletionItemKind.Variable : CompletionItemKind.Keyword,
|
|
2073
|
+
detail: s.detail,
|
|
2074
|
+
insertText: s.insertText
|
|
2075
|
+
});
|
|
2076
|
+
}
|
|
2077
|
+
} catch {
|
|
2078
|
+
}
|
|
2079
|
+
return completions;
|
|
810
2080
|
}
|
|
811
2081
|
});
|
|
812
2082
|
function inferContext(beforeCursor) {
|
|
@@ -840,6 +2110,10 @@ function getContextualCompletions(context, language) {
|
|
|
840
2110
|
const commandMode = isHyperscriptCompatMode(resolvedMode) ? "hyperscript" : "lokascript";
|
|
841
2111
|
const availableCommands = getCommandsForMode(commandMode);
|
|
842
2112
|
const isCommandAvailable = (cmd) => availableCommands.includes(cmd);
|
|
2113
|
+
const getDetail = (command, fallback) => {
|
|
2114
|
+
const desc = getCommandDescription(command, effectiveLanguage);
|
|
2115
|
+
return desc?.detail ?? fallback;
|
|
2116
|
+
};
|
|
843
2117
|
switch (context) {
|
|
844
2118
|
case "event":
|
|
845
2119
|
const eventNames = lspMetadata?.EVENT_NAMES ?? FALLBACK_EVENT_NAMES;
|
|
@@ -856,55 +2130,71 @@ function getContextualCompletions(context, language) {
|
|
|
856
2130
|
{
|
|
857
2131
|
label: getKeyword("toggle"),
|
|
858
2132
|
kind: CompletionItemKind.Method,
|
|
859
|
-
detail: "Toggle class/visibility",
|
|
2133
|
+
detail: getDetail("toggle", "Toggle class/visibility"),
|
|
860
2134
|
insertText: `${getKeyword("toggle")} .\${1:class}`
|
|
861
2135
|
},
|
|
862
2136
|
{
|
|
863
2137
|
label: getKeyword("add"),
|
|
864
2138
|
kind: CompletionItemKind.Method,
|
|
865
|
-
detail: "Add class/attribute",
|
|
2139
|
+
detail: getDetail("add", "Add class/attribute"),
|
|
866
2140
|
insertText: `${getKeyword("add")} .\${1:class} to \${2:me}`
|
|
867
2141
|
},
|
|
868
2142
|
{
|
|
869
2143
|
label: getKeyword("remove"),
|
|
870
2144
|
kind: CompletionItemKind.Method,
|
|
871
|
-
detail: "Remove class/element",
|
|
2145
|
+
detail: getDetail("remove", "Remove class/element"),
|
|
872
2146
|
insertText: `${getKeyword("remove")} .\${1:class} from \${2:me}`
|
|
873
2147
|
},
|
|
874
|
-
{
|
|
875
|
-
|
|
2148
|
+
{
|
|
2149
|
+
label: getKeyword("show"),
|
|
2150
|
+
kind: CompletionItemKind.Method,
|
|
2151
|
+
detail: getDetail("show", "Show element")
|
|
2152
|
+
},
|
|
2153
|
+
{
|
|
2154
|
+
label: getKeyword("hide"),
|
|
2155
|
+
kind: CompletionItemKind.Method,
|
|
2156
|
+
detail: getDetail("hide", "Hide element")
|
|
2157
|
+
},
|
|
876
2158
|
{
|
|
877
2159
|
label: getKeyword("put"),
|
|
878
2160
|
kind: CompletionItemKind.Method,
|
|
879
|
-
detail: "Set content",
|
|
2161
|
+
detail: getDetail("put", "Set content"),
|
|
880
2162
|
insertText: `${getKeyword("put")} \${1:value} into \${2:target}`
|
|
881
2163
|
},
|
|
882
2164
|
{
|
|
883
2165
|
label: getKeyword("set"),
|
|
884
2166
|
kind: CompletionItemKind.Method,
|
|
885
|
-
detail: "Set variable",
|
|
2167
|
+
detail: getDetail("set", "Set variable"),
|
|
886
2168
|
insertText: `${getKeyword("set")} \${1:variable} to \${2:value}`
|
|
887
2169
|
},
|
|
888
2170
|
{
|
|
889
2171
|
label: getKeyword("fetch"),
|
|
890
2172
|
kind: CompletionItemKind.Method,
|
|
891
|
-
detail: "HTTP request",
|
|
2173
|
+
detail: getDetail("fetch", "HTTP request"),
|
|
892
2174
|
insertText: `${getKeyword("fetch")} \${1:/api/endpoint}`
|
|
893
2175
|
},
|
|
894
2176
|
{
|
|
895
2177
|
label: getKeyword("wait"),
|
|
896
2178
|
kind: CompletionItemKind.Method,
|
|
897
|
-
detail: "Pause execution",
|
|
2179
|
+
detail: getDetail("wait", "Pause execution"),
|
|
898
2180
|
insertText: `${getKeyword("wait")} \${1:1s}`
|
|
899
2181
|
},
|
|
900
2182
|
{
|
|
901
2183
|
label: getKeyword("send"),
|
|
902
2184
|
kind: CompletionItemKind.Method,
|
|
903
|
-
detail: "Dispatch event",
|
|
2185
|
+
detail: getDetail("send", "Dispatch event"),
|
|
904
2186
|
insertText: `${getKeyword("send")} \${1:eventName} to \${2:target}`
|
|
905
2187
|
},
|
|
906
|
-
{
|
|
907
|
-
|
|
2188
|
+
{
|
|
2189
|
+
label: getKeyword("trigger"),
|
|
2190
|
+
kind: CompletionItemKind.Method,
|
|
2191
|
+
detail: getDetail("trigger", "Trigger event")
|
|
2192
|
+
},
|
|
2193
|
+
{
|
|
2194
|
+
label: getKeyword("log"),
|
|
2195
|
+
kind: CompletionItemKind.Method,
|
|
2196
|
+
detail: getDetail("log", "Console log")
|
|
2197
|
+
},
|
|
908
2198
|
{ label: getKeyword("if"), kind: CompletionItemKind.Keyword, detail: "Conditional" },
|
|
909
2199
|
{ label: getKeyword("repeat"), kind: CompletionItemKind.Keyword, detail: "Loop" }
|
|
910
2200
|
);
|
|
@@ -1077,13 +2367,15 @@ function getHoverDocumentation(word, language) {
|
|
|
1077
2367
|
const docs = lspMetadata?.HOVER_DOCS ?? FALLBACK_HOVER_DOCS;
|
|
1078
2368
|
const doc = docs[canonicalKey];
|
|
1079
2369
|
if (!doc) return null;
|
|
2370
|
+
const localizedDesc = getCommandDescription(canonicalKey, language);
|
|
1080
2371
|
let content = `**${doc.title}**`;
|
|
1081
2372
|
if (isMultilingualEnabled(resolvedMode) && wordLower !== canonicalKey) {
|
|
1082
2373
|
content = `**${word}** (${canonicalKey})`;
|
|
1083
2374
|
}
|
|
2375
|
+
const description = localizedDesc?.documentation ?? doc.description;
|
|
1084
2376
|
content += `
|
|
1085
2377
|
|
|
1086
|
-
${
|
|
2378
|
+
${description}`;
|
|
1087
2379
|
content += `
|
|
1088
2380
|
|
|
1089
2381
|
\`\`\`hyperscript
|