dommy 0.5.0 → 0.7.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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +31 -13
  3. data/lib/dommy/animation.rb +288 -0
  4. data/lib/dommy/attr.rb +23 -11
  5. data/lib/dommy/backend/nokogiri_adapter.rb +51 -0
  6. data/lib/dommy/backend/nokolexbor_adapter.rb +80 -0
  7. data/lib/dommy/backend.rb +129 -0
  8. data/lib/dommy/blob.rb +2 -2
  9. data/lib/dommy/compression_streams.rb +147 -0
  10. data/lib/dommy/cookie_store.rb +128 -0
  11. data/lib/dommy/crypto.rb +396 -0
  12. data/lib/dommy/css.rb +7 -7
  13. data/lib/dommy/custom_elements.rb +6 -6
  14. data/lib/dommy/document.rb +190 -32
  15. data/lib/dommy/dom_parser.rb +5 -4
  16. data/lib/dommy/element.rb +356 -53
  17. data/lib/dommy/event.rb +431 -25
  18. data/lib/dommy/event_source.rb +131 -0
  19. data/lib/dommy/fetch.rb +76 -6
  20. data/lib/dommy/file_reader.rb +176 -0
  21. data/lib/dommy/form_data.rb +1 -3
  22. data/lib/dommy/history.rb +82 -0
  23. data/lib/dommy/html_collection.rb +4 -4
  24. data/lib/dommy/html_elements.rb +130 -67
  25. data/lib/dommy/internal/cookie_jar.rb +2 -0
  26. data/lib/dommy/internal/css_pseudo_handlers.rb +28 -0
  27. data/lib/dommy/internal/dom_matching.rb +4 -4
  28. data/lib/dommy/internal/idna.rb +443 -0
  29. data/lib/dommy/internal/idna_data.rb +10379 -0
  30. data/lib/dommy/internal/ipv4_parser.rb +78 -0
  31. data/lib/dommy/internal/node_traversal.rb +1 -1
  32. data/lib/dommy/internal/node_wrapper_cache.rb +23 -12
  33. data/lib/dommy/internal/observable_callback.rb +25 -0
  34. data/lib/dommy/internal/punycode.rb +202 -0
  35. data/lib/dommy/internal/range_text_serializer.rb +72 -0
  36. data/lib/dommy/internal/reflected_attributes.rb +45 -0
  37. data/lib/dommy/internal/template_content_registry.rb +6 -6
  38. data/lib/dommy/intersection_observer.rb +82 -0
  39. data/lib/dommy/{router.rb → location.rb} +8 -142
  40. data/lib/dommy/media_query_list.rb +118 -0
  41. data/lib/dommy/message_channel.rb +249 -0
  42. data/lib/dommy/{observer.rb → mutation_observer.rb} +21 -11
  43. data/lib/dommy/navigator.rb +365 -5
  44. data/lib/dommy/node.rb +12 -0
  45. data/lib/dommy/notification.rb +89 -0
  46. data/lib/dommy/parser.rb +13 -13
  47. data/lib/dommy/performance.rb +146 -0
  48. data/lib/dommy/performance_observer.rb +55 -0
  49. data/lib/dommy/range.rb +597 -0
  50. data/lib/dommy/resize_observer.rb +53 -0
  51. data/lib/dommy/shadow_root.rb +10 -8
  52. data/lib/dommy/streams.rb +386 -0
  53. data/lib/dommy/svg_elements.rb +3863 -0
  54. data/lib/dommy/text_codec.rb +175 -0
  55. data/lib/dommy/tree_walker.rb +21 -21
  56. data/lib/dommy/url.rb +274 -29
  57. data/lib/dommy/url_pattern.rb +144 -0
  58. data/lib/dommy/version.rb +1 -1
  59. data/lib/dommy/web_socket.rb +209 -0
  60. data/lib/dommy/window.rb +369 -0
  61. data/lib/dommy/worker.rb +143 -0
  62. data/lib/dommy/xml_http_request.rb +438 -0
  63. data/lib/dommy.rb +43 -5
  64. metadata +44 -29
  65. data/lib/dommy/world.rb +0 -209
@@ -0,0 +1,3863 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dommy
4
+ # Base for specialized SVGElement subclasses. Mirrors HTMLElement's
5
+ # role for HTML: a thin layer over Element that adds reflection
6
+ # helpers (via Internal::ReflectedAttributes) and a few attribute
7
+ # accessors that apply to every SVG element.
8
+ #
9
+ # Ruby property names use snake_case; the JS bridge (`__js_get__` /
10
+ # `__js_set__`) accepts the camelCase / spec name. The underlying
11
+ # HTML attribute name is whatever the SVG spec defines (often
12
+ # camelCase: `viewBox`, `gradientUnits`, `preserveAspectRatio`),
13
+ # passed verbatim to `reflected_string`.
14
+ class SVGElement < Element
15
+ include Internal::ReflectedAttributes
16
+
17
+ # SVG attribute names are case-sensitive (`viewBox` ≠ `viewbox`).
18
+ # Element's get/set/has/remove_attribute consult this flag to
19
+ # decide whether to lowercase the attribute name.
20
+ def case_sensitive_attribute_names?
21
+ true
22
+ end
23
+
24
+ # Common SVG attributes shared across all elements.
25
+
26
+ def id
27
+ reflected_string("id")
28
+ end
29
+
30
+ def id=(value)
31
+ set_reflected_string("id", value)
32
+ end
33
+
34
+ def class_name
35
+ reflected_string("class")
36
+ end
37
+
38
+ def class_name=(value)
39
+ set_reflected_string("class", value)
40
+ end
41
+
42
+ def tabindex
43
+ reflected_string("tabindex")
44
+ end
45
+
46
+ def tabindex=(value)
47
+ set_reflected_string("tabindex", value)
48
+ end
49
+
50
+ def __js_get__(key)
51
+ case key
52
+ when "id"
53
+ id
54
+ when "className"
55
+ class_name
56
+ when "tabIndex"
57
+ tabindex
58
+ else
59
+ super
60
+ end
61
+ end
62
+
63
+ def __js_set__(key, value)
64
+ case key
65
+ when "id"
66
+ self.id = value
67
+ when "className"
68
+ self.class_name = value
69
+ when "tabIndex"
70
+ self.tabindex = value
71
+ else
72
+ super
73
+ end
74
+ end
75
+ end
76
+
77
+ # `<svg>` — the root of an SVG subtree.
78
+ class SVGSVGElement < SVGElement
79
+ def width
80
+ reflected_string("width")
81
+ end
82
+
83
+ def width=(v)
84
+ set_reflected_string("width", v)
85
+ end
86
+
87
+ def height
88
+ reflected_string("height")
89
+ end
90
+
91
+ def height=(v)
92
+ set_reflected_string("height", v)
93
+ end
94
+
95
+ def view_box
96
+ reflected_string("viewBox")
97
+ end
98
+
99
+ def view_box=(v)
100
+ set_reflected_string("viewBox", v)
101
+ end
102
+
103
+ def preserve_aspect_ratio
104
+ reflected_string("preserveAspectRatio")
105
+ end
106
+
107
+ def preserve_aspect_ratio=(v)
108
+ set_reflected_string("preserveAspectRatio", v)
109
+ end
110
+
111
+ def __js_get__(key)
112
+ case key
113
+ when "width"
114
+ width
115
+ when "height"
116
+ height
117
+ when "viewBox"
118
+ view_box
119
+ when "preserveAspectRatio"
120
+ preserve_aspect_ratio
121
+ else
122
+ super
123
+ end
124
+ end
125
+
126
+ def __js_set__(key, value)
127
+ case key
128
+ when "width"
129
+ self.width = value
130
+ when "height"
131
+ self.height = value
132
+ when "viewBox"
133
+ self.view_box = value
134
+ when "preserveAspectRatio"
135
+ self.preserve_aspect_ratio = value
136
+ else
137
+ super
138
+ end
139
+ end
140
+ end
141
+
142
+ # `<g>` — generic group; only inherits common attributes.
143
+ class SVGGElement < SVGElement
144
+ end
145
+
146
+ # `<circle>` — cx, cy, r.
147
+ class SVGCircleElement < SVGElement
148
+ def cx
149
+ reflected_string("cx")
150
+ end
151
+
152
+ def cx=(v)
153
+ set_reflected_string("cx", v)
154
+ end
155
+
156
+ def cy
157
+ reflected_string("cy")
158
+ end
159
+
160
+ def cy=(v)
161
+ set_reflected_string("cy", v)
162
+ end
163
+
164
+ def r
165
+ reflected_string("r")
166
+ end
167
+
168
+ def r=(v)
169
+ set_reflected_string("r", v)
170
+ end
171
+
172
+ def __js_get__(key)
173
+ case key
174
+ when "cx"
175
+ cx
176
+ when "cy"
177
+ cy
178
+ when "r"
179
+ r
180
+ else
181
+ super
182
+ end
183
+ end
184
+
185
+ def __js_set__(key, value)
186
+ case key
187
+ when "cx"
188
+ self.cx = value
189
+ when "cy"
190
+ self.cy = value
191
+ when "r"
192
+ self.r = value
193
+ else
194
+ super
195
+ end
196
+ end
197
+ end
198
+
199
+ # `<rect>` — x, y, width, height, rx, ry.
200
+ class SVGRectElement < SVGElement
201
+ def x
202
+ reflected_string("x")
203
+ end
204
+
205
+ def x=(v)
206
+ set_reflected_string("x", v)
207
+ end
208
+
209
+ def y
210
+ reflected_string("y")
211
+ end
212
+
213
+ def y=(v)
214
+ set_reflected_string("y", v)
215
+ end
216
+
217
+ def width
218
+ reflected_string("width")
219
+ end
220
+
221
+ def width=(v)
222
+ set_reflected_string("width", v)
223
+ end
224
+
225
+ def height
226
+ reflected_string("height")
227
+ end
228
+
229
+ def height=(v)
230
+ set_reflected_string("height", v)
231
+ end
232
+
233
+ def rx
234
+ reflected_string("rx")
235
+ end
236
+
237
+ def rx=(v)
238
+ set_reflected_string("rx", v)
239
+ end
240
+
241
+ def ry
242
+ reflected_string("ry")
243
+ end
244
+
245
+ def ry=(v)
246
+ set_reflected_string("ry", v)
247
+ end
248
+
249
+ def __js_get__(key)
250
+ case key
251
+ when "x"
252
+ x
253
+ when "y"
254
+ y
255
+ when "width"
256
+ width
257
+ when "height"
258
+ height
259
+ when "rx"
260
+ rx
261
+ when "ry"
262
+ ry
263
+ else
264
+ super
265
+ end
266
+ end
267
+
268
+ def __js_set__(key, value)
269
+ case key
270
+ when "x"
271
+ self.x = value
272
+ when "y"
273
+ self.y = value
274
+ when "width"
275
+ self.width = value
276
+ when "height"
277
+ self.height = value
278
+ when "rx"
279
+ self.rx = value
280
+ when "ry"
281
+ self.ry = value
282
+ else
283
+ super
284
+ end
285
+ end
286
+ end
287
+
288
+ # `<ellipse>` — cx, cy, rx, ry.
289
+ class SVGEllipseElement < SVGElement
290
+ def cx
291
+ reflected_string("cx")
292
+ end
293
+
294
+ def cx=(v)
295
+ set_reflected_string("cx", v)
296
+ end
297
+
298
+ def cy
299
+ reflected_string("cy")
300
+ end
301
+
302
+ def cy=(v)
303
+ set_reflected_string("cy", v)
304
+ end
305
+
306
+ def rx
307
+ reflected_string("rx")
308
+ end
309
+
310
+ def rx=(v)
311
+ set_reflected_string("rx", v)
312
+ end
313
+
314
+ def ry
315
+ reflected_string("ry")
316
+ end
317
+
318
+ def ry=(v)
319
+ set_reflected_string("ry", v)
320
+ end
321
+
322
+ def __js_get__(key)
323
+ case key
324
+ when "cx"
325
+ cx
326
+ when "cy"
327
+ cy
328
+ when "rx"
329
+ rx
330
+ when "ry"
331
+ ry
332
+ else
333
+ super
334
+ end
335
+ end
336
+
337
+ def __js_set__(key, value)
338
+ case key
339
+ when "cx"
340
+ self.cx = value
341
+ when "cy"
342
+ self.cy = value
343
+ when "rx"
344
+ self.rx = value
345
+ when "ry"
346
+ self.ry = value
347
+ else
348
+ super
349
+ end
350
+ end
351
+ end
352
+
353
+ # `<line>` — x1, y1, x2, y2.
354
+ class SVGLineElement < SVGElement
355
+ def x1
356
+ reflected_string("x1")
357
+ end
358
+
359
+ def x1=(v)
360
+ set_reflected_string("x1", v)
361
+ end
362
+
363
+ def y1
364
+ reflected_string("y1")
365
+ end
366
+
367
+ def y1=(v)
368
+ set_reflected_string("y1", v)
369
+ end
370
+
371
+ def x2
372
+ reflected_string("x2")
373
+ end
374
+
375
+ def x2=(v)
376
+ set_reflected_string("x2", v)
377
+ end
378
+
379
+ def y2
380
+ reflected_string("y2")
381
+ end
382
+
383
+ def y2=(v)
384
+ set_reflected_string("y2", v)
385
+ end
386
+
387
+ def __js_get__(key)
388
+ case key
389
+ when "x1"
390
+ x1
391
+ when "y1"
392
+ y1
393
+ when "x2"
394
+ x2
395
+ when "y2"
396
+ y2
397
+ else
398
+ super
399
+ end
400
+ end
401
+
402
+ def __js_set__(key, value)
403
+ case key
404
+ when "x1"
405
+ self.x1 = value
406
+ when "y1"
407
+ self.y1 = value
408
+ when "x2"
409
+ self.x2 = value
410
+ when "y2"
411
+ self.y2 = value
412
+ else
413
+ super
414
+ end
415
+ end
416
+ end
417
+
418
+ # `<polygon>` — points (a string like "0,0 10,0 10,10").
419
+ class SVGPolygonElement < SVGElement
420
+ def points
421
+ reflected_string("points")
422
+ end
423
+
424
+ def points=(v)
425
+ set_reflected_string("points", v)
426
+ end
427
+
428
+ def __js_get__(key)
429
+ key == "points" ? points : super
430
+ end
431
+
432
+ def __js_set__(key, value)
433
+ key == "points" ? (self.points = value) : super
434
+ end
435
+ end
436
+
437
+ # `<polyline>` — points.
438
+ class SVGPolylineElement < SVGElement
439
+ def points
440
+ reflected_string("points")
441
+ end
442
+
443
+ def points=(v)
444
+ set_reflected_string("points", v)
445
+ end
446
+
447
+ def __js_get__(key)
448
+ key == "points" ? points : super
449
+ end
450
+
451
+ def __js_set__(key, value)
452
+ key == "points" ? (self.points = value) : super
453
+ end
454
+ end
455
+
456
+ # `<path>` — d (path data), pathLength.
457
+ class SVGPathElement < SVGElement
458
+ def d
459
+ reflected_string("d")
460
+ end
461
+
462
+ def d=(v)
463
+ set_reflected_string("d", v)
464
+ end
465
+
466
+ def path_length
467
+ reflected_string("pathLength")
468
+ end
469
+
470
+ def path_length=(v)
471
+ set_reflected_string("pathLength", v)
472
+ end
473
+
474
+ def __js_get__(key)
475
+ case key
476
+ when "d"
477
+ d
478
+ when "pathLength"
479
+ path_length
480
+ else
481
+ super
482
+ end
483
+ end
484
+
485
+ def __js_set__(key, value)
486
+ case key
487
+ when "d"
488
+ self.d = value
489
+ when "pathLength"
490
+ self.path_length = value
491
+ else
492
+ super
493
+ end
494
+ end
495
+ end
496
+
497
+ # `<text>` — x, y, dx, dy, text-anchor.
498
+ class SVGTextElement < SVGElement
499
+ def x
500
+ reflected_string("x")
501
+ end
502
+
503
+ def x=(v)
504
+ set_reflected_string("x", v)
505
+ end
506
+
507
+ def y
508
+ reflected_string("y")
509
+ end
510
+
511
+ def y=(v)
512
+ set_reflected_string("y", v)
513
+ end
514
+
515
+ def dx
516
+ reflected_string("dx")
517
+ end
518
+
519
+ def dx=(v)
520
+ set_reflected_string("dx", v)
521
+ end
522
+
523
+ def dy
524
+ reflected_string("dy")
525
+ end
526
+
527
+ def dy=(v)
528
+ set_reflected_string("dy", v)
529
+ end
530
+
531
+ def text_anchor
532
+ reflected_string("text-anchor")
533
+ end
534
+
535
+ def text_anchor=(v)
536
+ set_reflected_string("text-anchor", v)
537
+ end
538
+
539
+ def __js_get__(key)
540
+ case key
541
+ when "x"
542
+ x
543
+ when "y"
544
+ y
545
+ when "dx"
546
+ dx
547
+ when "dy"
548
+ dy
549
+ when "textAnchor"
550
+ text_anchor
551
+ else
552
+ super
553
+ end
554
+ end
555
+
556
+ def __js_set__(key, value)
557
+ case key
558
+ when "x"
559
+ self.x = value
560
+ when "y"
561
+ self.y = value
562
+ when "dx"
563
+ self.dx = value
564
+ when "dy"
565
+ self.dy = value
566
+ when "textAnchor"
567
+ self.text_anchor = value
568
+ else
569
+ super
570
+ end
571
+ end
572
+ end
573
+
574
+ # `<tspan>` — same coord attrs as <text>.
575
+ class SVGTSpanElement < SVGElement
576
+ def x
577
+ reflected_string("x")
578
+ end
579
+
580
+ def x=(v)
581
+ set_reflected_string("x", v)
582
+ end
583
+
584
+ def y
585
+ reflected_string("y")
586
+ end
587
+
588
+ def y=(v)
589
+ set_reflected_string("y", v)
590
+ end
591
+
592
+ def dx
593
+ reflected_string("dx")
594
+ end
595
+
596
+ def dx=(v)
597
+ set_reflected_string("dx", v)
598
+ end
599
+
600
+ def dy
601
+ reflected_string("dy")
602
+ end
603
+
604
+ def dy=(v)
605
+ set_reflected_string("dy", v)
606
+ end
607
+
608
+ def __js_get__(key)
609
+ case key
610
+ when "x"
611
+ x
612
+ when "y"
613
+ y
614
+ when "dx"
615
+ dx
616
+ when "dy"
617
+ dy
618
+ else
619
+ super
620
+ end
621
+ end
622
+
623
+ def __js_set__(key, value)
624
+ case key
625
+ when "x"
626
+ self.x = value
627
+ when "y"
628
+ self.y = value
629
+ when "dx"
630
+ self.dx = value
631
+ when "dy"
632
+ self.dy = value
633
+ else
634
+ super
635
+ end
636
+ end
637
+ end
638
+
639
+ # `<defs>` — container for reusable definitions; no special attrs.
640
+ class SVGDefsElement < SVGElement
641
+ end
642
+
643
+ # `<use>` — href, x, y, width, height.
644
+ class SVGUseElement < SVGElement
645
+ def href
646
+ reflected_string("href")
647
+ end
648
+
649
+ def href=(v)
650
+ set_reflected_string("href", v)
651
+ end
652
+
653
+ def x
654
+ reflected_string("x")
655
+ end
656
+
657
+ def x=(v)
658
+ set_reflected_string("x", v)
659
+ end
660
+
661
+ def y
662
+ reflected_string("y")
663
+ end
664
+
665
+ def y=(v)
666
+ set_reflected_string("y", v)
667
+ end
668
+
669
+ def width
670
+ reflected_string("width")
671
+ end
672
+
673
+ def width=(v)
674
+ set_reflected_string("width", v)
675
+ end
676
+
677
+ def height
678
+ reflected_string("height")
679
+ end
680
+
681
+ def height=(v)
682
+ set_reflected_string("height", v)
683
+ end
684
+
685
+ def __js_get__(key)
686
+ case key
687
+ when "href"
688
+ href
689
+ when "x"
690
+ x
691
+ when "y"
692
+ y
693
+ when "width"
694
+ width
695
+ when "height"
696
+ height
697
+ else
698
+ super
699
+ end
700
+ end
701
+
702
+ def __js_set__(key, value)
703
+ case key
704
+ when "href"
705
+ self.href = value
706
+ when "x"
707
+ self.x = value
708
+ when "y"
709
+ self.y = value
710
+ when "width"
711
+ self.width = value
712
+ when "height"
713
+ self.height = value
714
+ else
715
+ super
716
+ end
717
+ end
718
+ end
719
+
720
+ # `<image>` — href + box + preserveAspectRatio.
721
+ class SVGImageElement < SVGElement
722
+ def href
723
+ reflected_string("href")
724
+ end
725
+
726
+ def href=(v)
727
+ set_reflected_string("href", v)
728
+ end
729
+
730
+ def x
731
+ reflected_string("x")
732
+ end
733
+
734
+ def x=(v)
735
+ set_reflected_string("x", v)
736
+ end
737
+
738
+ def y
739
+ reflected_string("y")
740
+ end
741
+
742
+ def y=(v)
743
+ set_reflected_string("y", v)
744
+ end
745
+
746
+ def width
747
+ reflected_string("width")
748
+ end
749
+
750
+ def width=(v)
751
+ set_reflected_string("width", v)
752
+ end
753
+
754
+ def height
755
+ reflected_string("height")
756
+ end
757
+
758
+ def height=(v)
759
+ set_reflected_string("height", v)
760
+ end
761
+
762
+ def preserve_aspect_ratio
763
+ reflected_string("preserveAspectRatio")
764
+ end
765
+
766
+ def preserve_aspect_ratio=(v)
767
+ set_reflected_string("preserveAspectRatio", v)
768
+ end
769
+
770
+ def __js_get__(key)
771
+ case key
772
+ when "href"
773
+ href
774
+ when "x"
775
+ x
776
+ when "y"
777
+ y
778
+ when "width"
779
+ width
780
+ when "height"
781
+ height
782
+ when "preserveAspectRatio"
783
+ preserve_aspect_ratio
784
+ else
785
+ super
786
+ end
787
+ end
788
+
789
+ def __js_set__(key, value)
790
+ case key
791
+ when "href"
792
+ self.href = value
793
+ when "x"
794
+ self.x = value
795
+ when "y"
796
+ self.y = value
797
+ when "width"
798
+ self.width = value
799
+ when "height"
800
+ self.height = value
801
+ when "preserveAspectRatio"
802
+ self.preserve_aspect_ratio = value
803
+ else
804
+ super
805
+ end
806
+ end
807
+ end
808
+
809
+ # `<symbol>` — reusable template; viewBox + preserveAspectRatio.
810
+ class SVGSymbolElement < SVGElement
811
+ def view_box
812
+ reflected_string("viewBox")
813
+ end
814
+
815
+ def view_box=(v)
816
+ set_reflected_string("viewBox", v)
817
+ end
818
+
819
+ def preserve_aspect_ratio
820
+ reflected_string("preserveAspectRatio")
821
+ end
822
+
823
+ def preserve_aspect_ratio=(v)
824
+ set_reflected_string("preserveAspectRatio", v)
825
+ end
826
+
827
+ def __js_get__(key)
828
+ case key
829
+ when "viewBox"
830
+ view_box
831
+ when "preserveAspectRatio"
832
+ preserve_aspect_ratio
833
+ else
834
+ super
835
+ end
836
+ end
837
+
838
+ def __js_set__(key, value)
839
+ case key
840
+ when "viewBox"
841
+ self.view_box = value
842
+ when "preserveAspectRatio"
843
+ self.preserve_aspect_ratio = value
844
+ else
845
+ super
846
+ end
847
+ end
848
+ end
849
+
850
+ # `<foreignObject>` — embeds non-SVG content; standard box attrs.
851
+ class SVGForeignObjectElement < SVGElement
852
+ def x
853
+ reflected_string("x")
854
+ end
855
+
856
+ def x=(v)
857
+ set_reflected_string("x", v)
858
+ end
859
+
860
+ def y
861
+ reflected_string("y")
862
+ end
863
+
864
+ def y=(v)
865
+ set_reflected_string("y", v)
866
+ end
867
+
868
+ def width
869
+ reflected_string("width")
870
+ end
871
+
872
+ def width=(v)
873
+ set_reflected_string("width", v)
874
+ end
875
+
876
+ def height
877
+ reflected_string("height")
878
+ end
879
+
880
+ def height=(v)
881
+ set_reflected_string("height", v)
882
+ end
883
+
884
+ def __js_get__(key)
885
+ case key
886
+ when "x"
887
+ x
888
+ when "y"
889
+ y
890
+ when "width"
891
+ width
892
+ when "height"
893
+ height
894
+ else
895
+ super
896
+ end
897
+ end
898
+
899
+ def __js_set__(key, value)
900
+ case key
901
+ when "x"
902
+ self.x = value
903
+ when "y"
904
+ self.y = value
905
+ when "width"
906
+ self.width = value
907
+ when "height"
908
+ self.height = value
909
+ else
910
+ super
911
+ end
912
+ end
913
+ end
914
+
915
+ # `<title>` (inside SVG) — distinct from HTMLTitleElement.
916
+ class SVGTitleElement < SVGElement
917
+ end
918
+
919
+ # `<desc>` — accessibility description.
920
+ class SVGDescElement < SVGElement
921
+ end
922
+
923
+ # `<mask>` — alpha mask region.
924
+ class SVGMaskElement < SVGElement
925
+ def x
926
+ reflected_string("x")
927
+ end
928
+
929
+ def x=(v)
930
+ set_reflected_string("x", v)
931
+ end
932
+
933
+ def y
934
+ reflected_string("y")
935
+ end
936
+
937
+ def y=(v)
938
+ set_reflected_string("y", v)
939
+ end
940
+
941
+ def width
942
+ reflected_string("width")
943
+ end
944
+
945
+ def width=(v)
946
+ set_reflected_string("width", v)
947
+ end
948
+
949
+ def height
950
+ reflected_string("height")
951
+ end
952
+
953
+ def height=(v)
954
+ set_reflected_string("height", v)
955
+ end
956
+
957
+ def mask_units
958
+ reflected_string("maskUnits")
959
+ end
960
+
961
+ def mask_units=(v)
962
+ set_reflected_string("maskUnits", v)
963
+ end
964
+
965
+ def mask_content_units
966
+ reflected_string("maskContentUnits")
967
+ end
968
+
969
+ def mask_content_units=(v)
970
+ set_reflected_string("maskContentUnits", v)
971
+ end
972
+
973
+ def __js_get__(key)
974
+ case key
975
+ when "x"
976
+ x
977
+ when "y"
978
+ y
979
+ when "width"
980
+ width
981
+ when "height"
982
+ height
983
+ when "maskUnits"
984
+ mask_units
985
+ when "maskContentUnits"
986
+ mask_content_units
987
+ else
988
+ super
989
+ end
990
+ end
991
+
992
+ def __js_set__(key, value)
993
+ case key
994
+ when "x"
995
+ self.x = value
996
+ when "y"
997
+ self.y = value
998
+ when "width"
999
+ self.width = value
1000
+ when "height"
1001
+ self.height = value
1002
+ when "maskUnits"
1003
+ self.mask_units = value
1004
+ when "maskContentUnits"
1005
+ self.mask_content_units = value
1006
+ else
1007
+ super
1008
+ end
1009
+ end
1010
+ end
1011
+
1012
+ # `<clipPath>` — clipping region.
1013
+ class SVGClipPathElement < SVGElement
1014
+ def clip_path_units
1015
+ reflected_string("clipPathUnits")
1016
+ end
1017
+
1018
+ def clip_path_units=(v)
1019
+ set_reflected_string("clipPathUnits", v)
1020
+ end
1021
+
1022
+ def __js_get__(key)
1023
+ key == "clipPathUnits" ? clip_path_units : super
1024
+ end
1025
+
1026
+ def __js_set__(key, value)
1027
+ key == "clipPathUnits" ? (self.clip_path_units = value) : super
1028
+ end
1029
+ end
1030
+
1031
+ # `<pattern>` — tile-based paint server.
1032
+ class SVGPatternElement < SVGElement
1033
+ def x
1034
+ reflected_string("x")
1035
+ end
1036
+
1037
+ def x=(v)
1038
+ set_reflected_string("x", v)
1039
+ end
1040
+
1041
+ def y
1042
+ reflected_string("y")
1043
+ end
1044
+
1045
+ def y=(v)
1046
+ set_reflected_string("y", v)
1047
+ end
1048
+
1049
+ def width
1050
+ reflected_string("width")
1051
+ end
1052
+
1053
+ def width=(v)
1054
+ set_reflected_string("width", v)
1055
+ end
1056
+
1057
+ def height
1058
+ reflected_string("height")
1059
+ end
1060
+
1061
+ def height=(v)
1062
+ set_reflected_string("height", v)
1063
+ end
1064
+
1065
+ def pattern_units
1066
+ reflected_string("patternUnits")
1067
+ end
1068
+
1069
+ def pattern_units=(v)
1070
+ set_reflected_string("patternUnits", v)
1071
+ end
1072
+
1073
+ def pattern_content_units
1074
+ reflected_string("patternContentUnits")
1075
+ end
1076
+
1077
+ def pattern_content_units=(v)
1078
+ set_reflected_string("patternContentUnits", v)
1079
+ end
1080
+
1081
+ def href
1082
+ reflected_string("href")
1083
+ end
1084
+
1085
+ def href=(v)
1086
+ set_reflected_string("href", v)
1087
+ end
1088
+
1089
+ def __js_get__(key)
1090
+ case key
1091
+ when "x"
1092
+ x
1093
+ when "y"
1094
+ y
1095
+ when "width"
1096
+ width
1097
+ when "height"
1098
+ height
1099
+ when "patternUnits"
1100
+ pattern_units
1101
+ when "patternContentUnits"
1102
+ pattern_content_units
1103
+ when "href"
1104
+ href
1105
+ else
1106
+ super
1107
+ end
1108
+ end
1109
+
1110
+ def __js_set__(key, value)
1111
+ case key
1112
+ when "x"
1113
+ self.x = value
1114
+ when "y"
1115
+ self.y = value
1116
+ when "width"
1117
+ self.width = value
1118
+ when "height"
1119
+ self.height = value
1120
+ when "patternUnits"
1121
+ self.pattern_units = value
1122
+ when "patternContentUnits"
1123
+ self.pattern_content_units = value
1124
+ when "href"
1125
+ self.href = value
1126
+ else
1127
+ super
1128
+ end
1129
+ end
1130
+ end
1131
+
1132
+ # `<linearGradient>` — linear color gradient paint server.
1133
+ class SVGLinearGradientElement < SVGElement
1134
+ def x1
1135
+ reflected_string("x1")
1136
+ end
1137
+
1138
+ def x1=(v)
1139
+ set_reflected_string("x1", v)
1140
+ end
1141
+
1142
+ def y1
1143
+ reflected_string("y1")
1144
+ end
1145
+
1146
+ def y1=(v)
1147
+ set_reflected_string("y1", v)
1148
+ end
1149
+
1150
+ def x2
1151
+ reflected_string("x2")
1152
+ end
1153
+
1154
+ def x2=(v)
1155
+ set_reflected_string("x2", v)
1156
+ end
1157
+
1158
+ def y2
1159
+ reflected_string("y2")
1160
+ end
1161
+
1162
+ def y2=(v)
1163
+ set_reflected_string("y2", v)
1164
+ end
1165
+
1166
+ def gradient_units
1167
+ reflected_string("gradientUnits")
1168
+ end
1169
+
1170
+ def gradient_units=(v)
1171
+ set_reflected_string("gradientUnits", v)
1172
+ end
1173
+
1174
+ def gradient_transform
1175
+ reflected_string("gradientTransform")
1176
+ end
1177
+
1178
+ def gradient_transform=(v)
1179
+ set_reflected_string("gradientTransform", v)
1180
+ end
1181
+
1182
+ def spread_method
1183
+ reflected_string("spreadMethod")
1184
+ end
1185
+
1186
+ def spread_method=(v)
1187
+ set_reflected_string("spreadMethod", v)
1188
+ end
1189
+
1190
+ def href
1191
+ reflected_string("href")
1192
+ end
1193
+
1194
+ def href=(v)
1195
+ set_reflected_string("href", v)
1196
+ end
1197
+
1198
+ def __js_get__(key)
1199
+ case key
1200
+ when "x1"
1201
+ x1
1202
+ when "y1"
1203
+ y1
1204
+ when "x2"
1205
+ x2
1206
+ when "y2"
1207
+ y2
1208
+ when "gradientUnits"
1209
+ gradient_units
1210
+ when "gradientTransform"
1211
+ gradient_transform
1212
+ when "spreadMethod"
1213
+ spread_method
1214
+ when "href"
1215
+ href
1216
+ else
1217
+ super
1218
+ end
1219
+ end
1220
+
1221
+ def __js_set__(key, value)
1222
+ case key
1223
+ when "x1"
1224
+ self.x1 = value
1225
+ when "y1"
1226
+ self.y1 = value
1227
+ when "x2"
1228
+ self.x2 = value
1229
+ when "y2"
1230
+ self.y2 = value
1231
+ when "gradientUnits"
1232
+ self.gradient_units = value
1233
+ when "gradientTransform"
1234
+ self.gradient_transform = value
1235
+ when "spreadMethod"
1236
+ self.spread_method = value
1237
+ when "href"
1238
+ self.href = value
1239
+ else
1240
+ super
1241
+ end
1242
+ end
1243
+ end
1244
+
1245
+ # `<radialGradient>` — radial color gradient paint server.
1246
+ class SVGRadialGradientElement < SVGElement
1247
+ def cx
1248
+ reflected_string("cx")
1249
+ end
1250
+
1251
+ def cx=(v)
1252
+ set_reflected_string("cx", v)
1253
+ end
1254
+
1255
+ def cy
1256
+ reflected_string("cy")
1257
+ end
1258
+
1259
+ def cy=(v)
1260
+ set_reflected_string("cy", v)
1261
+ end
1262
+
1263
+ def r
1264
+ reflected_string("r")
1265
+ end
1266
+
1267
+ def r=(v)
1268
+ set_reflected_string("r", v)
1269
+ end
1270
+
1271
+ def fx
1272
+ reflected_string("fx")
1273
+ end
1274
+
1275
+ def fx=(v)
1276
+ set_reflected_string("fx", v)
1277
+ end
1278
+
1279
+ def fy
1280
+ reflected_string("fy")
1281
+ end
1282
+
1283
+ def fy=(v)
1284
+ set_reflected_string("fy", v)
1285
+ end
1286
+
1287
+ def fr
1288
+ reflected_string("fr")
1289
+ end
1290
+
1291
+ def fr=(v)
1292
+ set_reflected_string("fr", v)
1293
+ end
1294
+
1295
+ def gradient_units
1296
+ reflected_string("gradientUnits")
1297
+ end
1298
+
1299
+ def gradient_units=(v)
1300
+ set_reflected_string("gradientUnits", v)
1301
+ end
1302
+
1303
+ def gradient_transform
1304
+ reflected_string("gradientTransform")
1305
+ end
1306
+
1307
+ def gradient_transform=(v)
1308
+ set_reflected_string("gradientTransform", v)
1309
+ end
1310
+
1311
+ def spread_method
1312
+ reflected_string("spreadMethod")
1313
+ end
1314
+
1315
+ def spread_method=(v)
1316
+ set_reflected_string("spreadMethod", v)
1317
+ end
1318
+
1319
+ def href
1320
+ reflected_string("href")
1321
+ end
1322
+
1323
+ def href=(v)
1324
+ set_reflected_string("href", v)
1325
+ end
1326
+
1327
+ def __js_get__(key)
1328
+ case key
1329
+ when "cx"
1330
+ cx
1331
+ when "cy"
1332
+ cy
1333
+ when "r"
1334
+ r
1335
+ when "fx"
1336
+ fx
1337
+ when "fy"
1338
+ fy
1339
+ when "fr"
1340
+ fr
1341
+ when "gradientUnits"
1342
+ gradient_units
1343
+ when "gradientTransform"
1344
+ gradient_transform
1345
+ when "spreadMethod"
1346
+ spread_method
1347
+ when "href"
1348
+ href
1349
+ else
1350
+ super
1351
+ end
1352
+ end
1353
+
1354
+ def __js_set__(key, value)
1355
+ case key
1356
+ when "cx"
1357
+ self.cx = value
1358
+ when "cy"
1359
+ self.cy = value
1360
+ when "r"
1361
+ self.r = value
1362
+ when "fx"
1363
+ self.fx = value
1364
+ when "fy"
1365
+ self.fy = value
1366
+ when "fr"
1367
+ self.fr = value
1368
+ when "gradientUnits"
1369
+ self.gradient_units = value
1370
+ when "gradientTransform"
1371
+ self.gradient_transform = value
1372
+ when "spreadMethod"
1373
+ self.spread_method = value
1374
+ when "href"
1375
+ self.href = value
1376
+ else
1377
+ super
1378
+ end
1379
+ end
1380
+ end
1381
+
1382
+ # `<stop>` — a single gradient color stop.
1383
+ class SVGStopElement < SVGElement
1384
+ def offset
1385
+ reflected_string("offset")
1386
+ end
1387
+
1388
+ def offset=(v)
1389
+ set_reflected_string("offset", v)
1390
+ end
1391
+
1392
+ def __js_get__(key)
1393
+ key == "offset" ? offset : super
1394
+ end
1395
+
1396
+ def __js_set__(key, value)
1397
+ key == "offset" ? (self.offset = value) : super
1398
+ end
1399
+ end
1400
+
1401
+ # `<filter>` — filter region + primitive units + href.
1402
+ class SVGFilterElement < SVGElement
1403
+ def x
1404
+ reflected_string("x")
1405
+ end
1406
+
1407
+ def x=(v)
1408
+ set_reflected_string("x", v)
1409
+ end
1410
+
1411
+ def y
1412
+ reflected_string("y")
1413
+ end
1414
+
1415
+ def y=(v)
1416
+ set_reflected_string("y", v)
1417
+ end
1418
+
1419
+ def width
1420
+ reflected_string("width")
1421
+ end
1422
+
1423
+ def width=(v)
1424
+ set_reflected_string("width", v)
1425
+ end
1426
+
1427
+ def height
1428
+ reflected_string("height")
1429
+ end
1430
+
1431
+ def height=(v)
1432
+ set_reflected_string("height", v)
1433
+ end
1434
+
1435
+ def filter_units
1436
+ reflected_string("filterUnits")
1437
+ end
1438
+
1439
+ def filter_units=(v)
1440
+ set_reflected_string("filterUnits", v)
1441
+ end
1442
+
1443
+ def primitive_units
1444
+ reflected_string("primitiveUnits")
1445
+ end
1446
+
1447
+ def primitive_units=(v)
1448
+ set_reflected_string("primitiveUnits", v)
1449
+ end
1450
+
1451
+ def href
1452
+ reflected_string("href")
1453
+ end
1454
+
1455
+ def href=(v)
1456
+ set_reflected_string("href", v)
1457
+ end
1458
+
1459
+ def __js_get__(key)
1460
+ case key
1461
+ when "x"
1462
+ x
1463
+ when "y"
1464
+ y
1465
+ when "width"
1466
+ width
1467
+ when "height"
1468
+ height
1469
+ when "filterUnits"
1470
+ filter_units
1471
+ when "primitiveUnits"
1472
+ primitive_units
1473
+ when "href"
1474
+ href
1475
+ else
1476
+ super
1477
+ end
1478
+ end
1479
+
1480
+ def __js_set__(key, value)
1481
+ case key
1482
+ when "x"
1483
+ self.x = value
1484
+ when "y"
1485
+ self.y = value
1486
+ when "width"
1487
+ self.width = value
1488
+ when "height"
1489
+ self.height = value
1490
+ when "filterUnits"
1491
+ self.filter_units = value
1492
+ when "primitiveUnits"
1493
+ self.primitive_units = value
1494
+ when "href"
1495
+ self.href = value
1496
+ else
1497
+ super
1498
+ end
1499
+ end
1500
+ end
1501
+
1502
+ # `<marker>` — arrowhead / line marker.
1503
+ class SVGMarkerElement < SVGElement
1504
+ def ref_x
1505
+ reflected_string("refX")
1506
+ end
1507
+
1508
+ def ref_x=(v)
1509
+ set_reflected_string("refX", v)
1510
+ end
1511
+
1512
+ def ref_y
1513
+ reflected_string("refY")
1514
+ end
1515
+
1516
+ def ref_y=(v)
1517
+ set_reflected_string("refY", v)
1518
+ end
1519
+
1520
+ def marker_width
1521
+ reflected_string("markerWidth")
1522
+ end
1523
+
1524
+ def marker_width=(v)
1525
+ set_reflected_string("markerWidth", v)
1526
+ end
1527
+
1528
+ def marker_height
1529
+ reflected_string("markerHeight")
1530
+ end
1531
+
1532
+ def marker_height=(v)
1533
+ set_reflected_string("markerHeight", v)
1534
+ end
1535
+
1536
+ def orient
1537
+ reflected_string("orient")
1538
+ end
1539
+
1540
+ def orient=(v)
1541
+ set_reflected_string("orient", v)
1542
+ end
1543
+
1544
+ def marker_units
1545
+ reflected_string("markerUnits")
1546
+ end
1547
+
1548
+ def marker_units=(v)
1549
+ set_reflected_string("markerUnits", v)
1550
+ end
1551
+
1552
+ def view_box
1553
+ reflected_string("viewBox")
1554
+ end
1555
+
1556
+ def view_box=(v)
1557
+ set_reflected_string("viewBox", v)
1558
+ end
1559
+
1560
+ def preserve_aspect_ratio
1561
+ reflected_string("preserveAspectRatio")
1562
+ end
1563
+
1564
+ def preserve_aspect_ratio=(v)
1565
+ set_reflected_string("preserveAspectRatio", v)
1566
+ end
1567
+
1568
+ def __js_get__(key)
1569
+ case key
1570
+ when "refX"
1571
+ ref_x
1572
+ when "refY"
1573
+ ref_y
1574
+ when "markerWidth"
1575
+ marker_width
1576
+ when "markerHeight"
1577
+ marker_height
1578
+ when "orient"
1579
+ orient
1580
+ when "markerUnits"
1581
+ marker_units
1582
+ when "viewBox"
1583
+ view_box
1584
+ when "preserveAspectRatio"
1585
+ preserve_aspect_ratio
1586
+ else
1587
+ super
1588
+ end
1589
+ end
1590
+
1591
+ def __js_set__(key, value)
1592
+ case key
1593
+ when "refX"
1594
+ self.ref_x = value
1595
+ when "refY"
1596
+ self.ref_y = value
1597
+ when "markerWidth"
1598
+ self.marker_width = value
1599
+ when "markerHeight"
1600
+ self.marker_height = value
1601
+ when "orient"
1602
+ self.orient = value
1603
+ when "markerUnits"
1604
+ self.marker_units = value
1605
+ when "viewBox"
1606
+ self.view_box = value
1607
+ when "preserveAspectRatio"
1608
+ self.preserve_aspect_ratio = value
1609
+ else
1610
+ super
1611
+ end
1612
+ end
1613
+ end
1614
+
1615
+ # `<a>` (in the SVG namespace) — a hyperlink wrapping SVG content.
1616
+ # Distinct from `HTMLAnchorElement` (the HTML `<a>`).
1617
+ class SVGAElement < SVGElement
1618
+ def href
1619
+ reflected_string("href")
1620
+ end
1621
+
1622
+ def href=(v)
1623
+ set_reflected_string("href", v)
1624
+ end
1625
+
1626
+ def target
1627
+ reflected_string("target")
1628
+ end
1629
+
1630
+ def target=(v)
1631
+ set_reflected_string("target", v)
1632
+ end
1633
+
1634
+ def download
1635
+ reflected_string("download")
1636
+ end
1637
+
1638
+ def download=(v)
1639
+ set_reflected_string("download", v)
1640
+ end
1641
+
1642
+ def rel
1643
+ reflected_string("rel")
1644
+ end
1645
+
1646
+ def rel=(v)
1647
+ set_reflected_string("rel", v)
1648
+ end
1649
+
1650
+ def type
1651
+ reflected_string("type")
1652
+ end
1653
+
1654
+ def type=(v)
1655
+ set_reflected_string("type", v)
1656
+ end
1657
+
1658
+ def __js_get__(key)
1659
+ case key
1660
+ when "href"
1661
+ href
1662
+ when "target"
1663
+ target
1664
+ when "download"
1665
+ download
1666
+ when "rel"
1667
+ rel
1668
+ when "type"
1669
+ type
1670
+ else
1671
+ super
1672
+ end
1673
+ end
1674
+
1675
+ def __js_set__(key, value)
1676
+ case key
1677
+ when "href"
1678
+ self.href = value
1679
+ when "target"
1680
+ self.target = value
1681
+ when "download"
1682
+ self.download = value
1683
+ when "rel"
1684
+ self.rel = value
1685
+ when "type"
1686
+ self.type = value
1687
+ else
1688
+ super
1689
+ end
1690
+ end
1691
+ end
1692
+
1693
+ # `<textPath>` — text laid out along a path.
1694
+ class SVGTextPathElement < SVGElement
1695
+ def href
1696
+ reflected_string("href")
1697
+ end
1698
+
1699
+ def href=(v)
1700
+ set_reflected_string("href", v)
1701
+ end
1702
+
1703
+ def start_offset
1704
+ reflected_string("startOffset")
1705
+ end
1706
+
1707
+ def start_offset=(v)
1708
+ set_reflected_string("startOffset", v)
1709
+ end
1710
+
1711
+ def method_attr
1712
+ reflected_string("method")
1713
+ end
1714
+
1715
+ def method_attr=(v)
1716
+ set_reflected_string("method", v)
1717
+ end
1718
+
1719
+ def spacing
1720
+ reflected_string("spacing")
1721
+ end
1722
+
1723
+ def spacing=(v)
1724
+ set_reflected_string("spacing", v)
1725
+ end
1726
+
1727
+ def text_length
1728
+ reflected_string("textLength")
1729
+ end
1730
+
1731
+ def text_length=(v)
1732
+ set_reflected_string("textLength", v)
1733
+ end
1734
+
1735
+ def length_adjust
1736
+ reflected_string("lengthAdjust")
1737
+ end
1738
+
1739
+ def length_adjust=(v)
1740
+ set_reflected_string("lengthAdjust", v)
1741
+ end
1742
+
1743
+ def __js_get__(key)
1744
+ case key
1745
+ when "href"
1746
+ href
1747
+ when "startOffset"
1748
+ start_offset
1749
+ when "method"
1750
+ method_attr
1751
+ when "spacing"
1752
+ spacing
1753
+ when "textLength"
1754
+ text_length
1755
+ when "lengthAdjust"
1756
+ length_adjust
1757
+ else
1758
+ super
1759
+ end
1760
+ end
1761
+
1762
+ def __js_set__(key, value)
1763
+ case key
1764
+ when "href"
1765
+ self.href = value
1766
+ when "startOffset"
1767
+ self.start_offset = value
1768
+ when "method"
1769
+ self.method_attr = value
1770
+ when "spacing"
1771
+ self.spacing = value
1772
+ when "textLength"
1773
+ self.text_length = value
1774
+ when "lengthAdjust"
1775
+ self.length_adjust = value
1776
+ else
1777
+ super
1778
+ end
1779
+ end
1780
+ end
1781
+
1782
+ # `<view>` — a named view region referenced by SVG fragment identifier.
1783
+ class SVGViewElement < SVGElement
1784
+ def view_box
1785
+ reflected_string("viewBox")
1786
+ end
1787
+
1788
+ def view_box=(v)
1789
+ set_reflected_string("viewBox", v)
1790
+ end
1791
+
1792
+ def preserve_aspect_ratio
1793
+ reflected_string("preserveAspectRatio")
1794
+ end
1795
+
1796
+ def preserve_aspect_ratio=(v)
1797
+ set_reflected_string("preserveAspectRatio", v)
1798
+ end
1799
+
1800
+ def zoom_and_pan
1801
+ reflected_string("zoomAndPan")
1802
+ end
1803
+
1804
+ def zoom_and_pan=(v)
1805
+ set_reflected_string("zoomAndPan", v)
1806
+ end
1807
+
1808
+ def __js_get__(key)
1809
+ case key
1810
+ when "viewBox"
1811
+ view_box
1812
+ when "preserveAspectRatio"
1813
+ preserve_aspect_ratio
1814
+ when "zoomAndPan"
1815
+ zoom_and_pan
1816
+ else
1817
+ super
1818
+ end
1819
+ end
1820
+
1821
+ def __js_set__(key, value)
1822
+ case key
1823
+ when "viewBox"
1824
+ self.view_box = value
1825
+ when "preserveAspectRatio"
1826
+ self.preserve_aspect_ratio = value
1827
+ when "zoomAndPan"
1828
+ self.zoom_and_pan = value
1829
+ else
1830
+ super
1831
+ end
1832
+ end
1833
+ end
1834
+
1835
+ # `<switch>` — conditionally renders the first child whose feature /
1836
+ # systemLanguage attributes match. No special own attributes.
1837
+ class SVGSwitchElement < SVGElement
1838
+ end
1839
+
1840
+ # `<metadata>` — XML metadata container; opaque to dommy.
1841
+ class SVGMetadataElement < SVGElement
1842
+ end
1843
+
1844
+ # ===== Filter primitives =====
1845
+ #
1846
+ # `<filter>`'s children. All inherit the standard region attrs
1847
+ # (x / y / width / height) plus `result` (the name of this
1848
+ # primitive's output, referenced by subsequent primitives via `in`).
1849
+ # Specific primitives add their own attributes.
1850
+ class SVGFilterPrimitiveElement < SVGElement
1851
+ def x
1852
+ reflected_string("x")
1853
+ end
1854
+
1855
+ def x=(v)
1856
+ set_reflected_string("x", v)
1857
+ end
1858
+
1859
+ def y
1860
+ reflected_string("y")
1861
+ end
1862
+
1863
+ def y=(v)
1864
+ set_reflected_string("y", v)
1865
+ end
1866
+
1867
+ def width
1868
+ reflected_string("width")
1869
+ end
1870
+
1871
+ def width=(v)
1872
+ set_reflected_string("width", v)
1873
+ end
1874
+
1875
+ def height
1876
+ reflected_string("height")
1877
+ end
1878
+
1879
+ def height=(v)
1880
+ set_reflected_string("height", v)
1881
+ end
1882
+
1883
+ def result
1884
+ reflected_string("result")
1885
+ end
1886
+
1887
+ def result=(v)
1888
+ set_reflected_string("result", v)
1889
+ end
1890
+
1891
+ def __js_get__(key)
1892
+ case key
1893
+ when "x"
1894
+ x
1895
+ when "y"
1896
+ y
1897
+ when "width"
1898
+ width
1899
+ when "height"
1900
+ height
1901
+ when "result"
1902
+ result
1903
+ else
1904
+ super
1905
+ end
1906
+ end
1907
+
1908
+ def __js_set__(key, value)
1909
+ case key
1910
+ when "x"
1911
+ self.x = value
1912
+ when "y"
1913
+ self.y = value
1914
+ when "width"
1915
+ self.width = value
1916
+ when "height"
1917
+ self.height = value
1918
+ when "result"
1919
+ self.result = value
1920
+ else
1921
+ super
1922
+ end
1923
+ end
1924
+ end
1925
+
1926
+ # `<feGaussianBlur>` — Gaussian blur primitive.
1927
+ class SVGFEGaussianBlurElement < SVGFilterPrimitiveElement
1928
+ def in1
1929
+ reflected_string("in")
1930
+ end
1931
+
1932
+ def in1=(v)
1933
+ set_reflected_string("in", v)
1934
+ end
1935
+
1936
+ def std_deviation
1937
+ reflected_string("stdDeviation")
1938
+ end
1939
+
1940
+ def std_deviation=(v)
1941
+ set_reflected_string("stdDeviation", v)
1942
+ end
1943
+
1944
+ def edge_mode
1945
+ reflected_string("edgeMode")
1946
+ end
1947
+
1948
+ def edge_mode=(v)
1949
+ set_reflected_string("edgeMode", v)
1950
+ end
1951
+
1952
+ def __js_get__(key)
1953
+ case key
1954
+ when "in"
1955
+ in1
1956
+ when "stdDeviation"
1957
+ std_deviation
1958
+ when "edgeMode"
1959
+ edge_mode
1960
+ else
1961
+ super
1962
+ end
1963
+ end
1964
+
1965
+ def __js_set__(key, value)
1966
+ case key
1967
+ when "in"
1968
+ self.in1 = value
1969
+ when "stdDeviation"
1970
+ self.std_deviation = value
1971
+ when "edgeMode"
1972
+ self.edge_mode = value
1973
+ else
1974
+ super
1975
+ end
1976
+ end
1977
+ end
1978
+
1979
+ # `<feOffset>` — translates input by (dx, dy).
1980
+ class SVGFEOffsetElement < SVGFilterPrimitiveElement
1981
+ def in1
1982
+ reflected_string("in")
1983
+ end
1984
+
1985
+ def in1=(v)
1986
+ set_reflected_string("in", v)
1987
+ end
1988
+
1989
+ def dx
1990
+ reflected_string("dx")
1991
+ end
1992
+
1993
+ def dx=(v)
1994
+ set_reflected_string("dx", v)
1995
+ end
1996
+
1997
+ def dy
1998
+ reflected_string("dy")
1999
+ end
2000
+
2001
+ def dy=(v)
2002
+ set_reflected_string("dy", v)
2003
+ end
2004
+
2005
+ def __js_get__(key)
2006
+ case key
2007
+ when "in"
2008
+ in1
2009
+ when "dx"
2010
+ dx
2011
+ when "dy"
2012
+ dy
2013
+ else
2014
+ super
2015
+ end
2016
+ end
2017
+
2018
+ def __js_set__(key, value)
2019
+ case key
2020
+ when "in"
2021
+ self.in1 = value
2022
+ when "dx"
2023
+ self.dx = value
2024
+ when "dy"
2025
+ self.dy = value
2026
+ else
2027
+ super
2028
+ end
2029
+ end
2030
+ end
2031
+
2032
+ # `<feBlend>` — blends two inputs with a mode.
2033
+ class SVGFEBlendElement < SVGFilterPrimitiveElement
2034
+ def in1
2035
+ reflected_string("in")
2036
+ end
2037
+
2038
+ def in1=(v)
2039
+ set_reflected_string("in", v)
2040
+ end
2041
+
2042
+ def in2
2043
+ reflected_string("in2")
2044
+ end
2045
+
2046
+ def in2=(v)
2047
+ set_reflected_string("in2", v)
2048
+ end
2049
+
2050
+ def mode
2051
+ reflected_string("mode")
2052
+ end
2053
+
2054
+ def mode=(v)
2055
+ set_reflected_string("mode", v)
2056
+ end
2057
+
2058
+ def __js_get__(key)
2059
+ case key
2060
+ when "in"
2061
+ in1
2062
+ when "in2"
2063
+ in2
2064
+ when "mode"
2065
+ mode
2066
+ else
2067
+ super
2068
+ end
2069
+ end
2070
+
2071
+ def __js_set__(key, value)
2072
+ case key
2073
+ when "in"
2074
+ self.in1 = value
2075
+ when "in2"
2076
+ self.in2 = value
2077
+ when "mode"
2078
+ self.mode = value
2079
+ else
2080
+ super
2081
+ end
2082
+ end
2083
+ end
2084
+
2085
+ # `<feColorMatrix>` — applies a color matrix transformation.
2086
+ class SVGFEColorMatrixElement < SVGFilterPrimitiveElement
2087
+ def in1
2088
+ reflected_string("in")
2089
+ end
2090
+
2091
+ def in1=(v)
2092
+ set_reflected_string("in", v)
2093
+ end
2094
+
2095
+ def type
2096
+ reflected_string("type")
2097
+ end
2098
+
2099
+ def type=(v)
2100
+ set_reflected_string("type", v)
2101
+ end
2102
+
2103
+ def values
2104
+ reflected_string("values")
2105
+ end
2106
+
2107
+ def values=(v)
2108
+ set_reflected_string("values", v)
2109
+ end
2110
+
2111
+ def __js_get__(key)
2112
+ case key
2113
+ when "in"
2114
+ in1
2115
+ when "type"
2116
+ type
2117
+ when "values"
2118
+ values
2119
+ else
2120
+ super
2121
+ end
2122
+ end
2123
+
2124
+ def __js_set__(key, value)
2125
+ case key
2126
+ when "in"
2127
+ self.in1 = value
2128
+ when "type"
2129
+ self.type = value
2130
+ when "values"
2131
+ self.values = value
2132
+ else
2133
+ super
2134
+ end
2135
+ end
2136
+ end
2137
+
2138
+ # `<feFlood>` — fills the primitive region with a solid color.
2139
+ class SVGFEFloodElement < SVGFilterPrimitiveElement
2140
+ def flood_color
2141
+ reflected_string("flood-color")
2142
+ end
2143
+
2144
+ def flood_color=(v)
2145
+ set_reflected_string("flood-color", v)
2146
+ end
2147
+
2148
+ def flood_opacity
2149
+ reflected_string("flood-opacity")
2150
+ end
2151
+
2152
+ def flood_opacity=(v)
2153
+ set_reflected_string("flood-opacity", v)
2154
+ end
2155
+
2156
+ def __js_get__(key)
2157
+ case key
2158
+ when "flood-color"
2159
+ flood_color
2160
+ when "flood-opacity"
2161
+ flood_opacity
2162
+ else
2163
+ super
2164
+ end
2165
+ end
2166
+
2167
+ def __js_set__(key, value)
2168
+ case key
2169
+ when "flood-color"
2170
+ self.flood_color = value
2171
+ when "flood-opacity"
2172
+ self.flood_opacity = value
2173
+ else
2174
+ super
2175
+ end
2176
+ end
2177
+ end
2178
+
2179
+ # `<feComposite>` — composes two inputs per the Porter–Duff
2180
+ # `operator` (or arithmetic with k1..k4).
2181
+ class SVGFECompositeElement < SVGFilterPrimitiveElement
2182
+ def in1
2183
+ reflected_string("in")
2184
+ end
2185
+
2186
+ def in1=(v)
2187
+ set_reflected_string("in", v)
2188
+ end
2189
+
2190
+ def in2
2191
+ reflected_string("in2")
2192
+ end
2193
+
2194
+ def in2=(v)
2195
+ set_reflected_string("in2", v)
2196
+ end
2197
+
2198
+ def operator
2199
+ reflected_string("operator")
2200
+ end
2201
+
2202
+ def operator=(v)
2203
+ set_reflected_string("operator", v)
2204
+ end
2205
+
2206
+ def k1
2207
+ reflected_string("k1")
2208
+ end
2209
+
2210
+ def k1=(v)
2211
+ set_reflected_string("k1", v)
2212
+ end
2213
+
2214
+ def k2
2215
+ reflected_string("k2")
2216
+ end
2217
+
2218
+ def k2=(v)
2219
+ set_reflected_string("k2", v)
2220
+ end
2221
+
2222
+ def k3
2223
+ reflected_string("k3")
2224
+ end
2225
+
2226
+ def k3=(v)
2227
+ set_reflected_string("k3", v)
2228
+ end
2229
+
2230
+ def k4
2231
+ reflected_string("k4")
2232
+ end
2233
+
2234
+ def k4=(v)
2235
+ set_reflected_string("k4", v)
2236
+ end
2237
+
2238
+ def __js_get__(key)
2239
+ case key
2240
+ when "in"
2241
+ in1
2242
+ when "in2"
2243
+ in2
2244
+ when "operator"
2245
+ operator
2246
+ when "k1"
2247
+ k1
2248
+ when "k2"
2249
+ k2
2250
+ when "k3"
2251
+ k3
2252
+ when "k4"
2253
+ k4
2254
+ else
2255
+ super
2256
+ end
2257
+ end
2258
+
2259
+ def __js_set__(key, value)
2260
+ case key
2261
+ when "in"
2262
+ self.in1 = value
2263
+ when "in2"
2264
+ self.in2 = value
2265
+ when "operator"
2266
+ self.operator = value
2267
+ when "k1"
2268
+ self.k1 = value
2269
+ when "k2"
2270
+ self.k2 = value
2271
+ when "k3"
2272
+ self.k3 = value
2273
+ when "k4"
2274
+ self.k4 = value
2275
+ else
2276
+ super
2277
+ end
2278
+ end
2279
+ end
2280
+
2281
+ # `<feMerge>` — composites a list of inputs (children are
2282
+ # `<feMergeNode>` elements naming the inputs).
2283
+ class SVGFEMergeElement < SVGFilterPrimitiveElement
2284
+ end
2285
+
2286
+ # `<feMergeNode>` — a single input reference inside `<feMerge>`.
2287
+ # Not itself a region/result primitive, but inherits the common
2288
+ # attribute machinery from SVGElement.
2289
+ class SVGFEMergeNodeElement < SVGElement
2290
+ def in1
2291
+ reflected_string("in")
2292
+ end
2293
+
2294
+ def in1=(v)
2295
+ set_reflected_string("in", v)
2296
+ end
2297
+
2298
+ def __js_get__(key)
2299
+ key == "in" ? in1 : super
2300
+ end
2301
+
2302
+ def __js_set__(key, value)
2303
+ key == "in" ? (self.in1 = value) : super
2304
+ end
2305
+ end
2306
+
2307
+ # `<feComponentTransfer>` — per-channel color transfer. Children are
2308
+ # `<feFuncR>` / `<feFuncG>` / `<feFuncB>` / `<feFuncA>`.
2309
+ class SVGFEComponentTransferElement < SVGFilterPrimitiveElement
2310
+ def in1
2311
+ reflected_string("in")
2312
+ end
2313
+
2314
+ def in1=(v)
2315
+ set_reflected_string("in", v)
2316
+ end
2317
+
2318
+ def __js_get__(key)
2319
+ key == "in" ? in1 : super
2320
+ end
2321
+
2322
+ def __js_set__(key, value)
2323
+ key == "in" ? (self.in1 = value) : super
2324
+ end
2325
+ end
2326
+
2327
+ # Base for `<feFuncR>` / `<feFuncG>` / `<feFuncB>` / `<feFuncA>`.
2328
+ # Per the DOM spec, all four share the same attribute set
2329
+ # (`type` + parameters by type) so they're modeled as a single
2330
+ # superclass that the four tag-specific subclasses inherit verbatim.
2331
+ class SVGComponentTransferFunctionElement < SVGElement
2332
+ def type
2333
+ reflected_string("type")
2334
+ end
2335
+
2336
+ def type=(v)
2337
+ set_reflected_string("type", v)
2338
+ end
2339
+
2340
+ def table_values
2341
+ reflected_string("tableValues")
2342
+ end
2343
+
2344
+ def table_values=(v)
2345
+ set_reflected_string("tableValues", v)
2346
+ end
2347
+
2348
+ def slope
2349
+ reflected_string("slope")
2350
+ end
2351
+
2352
+ def slope=(v)
2353
+ set_reflected_string("slope", v)
2354
+ end
2355
+
2356
+ def intercept
2357
+ reflected_string("intercept")
2358
+ end
2359
+
2360
+ def intercept=(v)
2361
+ set_reflected_string("intercept", v)
2362
+ end
2363
+
2364
+ def amplitude
2365
+ reflected_string("amplitude")
2366
+ end
2367
+
2368
+ def amplitude=(v)
2369
+ set_reflected_string("amplitude", v)
2370
+ end
2371
+
2372
+ def exponent
2373
+ reflected_string("exponent")
2374
+ end
2375
+
2376
+ def exponent=(v)
2377
+ set_reflected_string("exponent", v)
2378
+ end
2379
+
2380
+ def offset
2381
+ reflected_string("offset")
2382
+ end
2383
+
2384
+ def offset=(v)
2385
+ set_reflected_string("offset", v)
2386
+ end
2387
+
2388
+ def __js_get__(key)
2389
+ case key
2390
+ when "type"
2391
+ type
2392
+ when "tableValues"
2393
+ table_values
2394
+ when "slope"
2395
+ slope
2396
+ when "intercept"
2397
+ intercept
2398
+ when "amplitude"
2399
+ amplitude
2400
+ when "exponent"
2401
+ exponent
2402
+ when "offset"
2403
+ offset
2404
+ else
2405
+ super
2406
+ end
2407
+ end
2408
+
2409
+ def __js_set__(key, value)
2410
+ case key
2411
+ when "type"
2412
+ self.type = value
2413
+ when "tableValues"
2414
+ self.table_values = value
2415
+ when "slope"
2416
+ self.slope = value
2417
+ when "intercept"
2418
+ self.intercept = value
2419
+ when "amplitude"
2420
+ self.amplitude = value
2421
+ when "exponent"
2422
+ self.exponent = value
2423
+ when "offset"
2424
+ self.offset = value
2425
+ else
2426
+ super
2427
+ end
2428
+ end
2429
+ end
2430
+
2431
+ class SVGFEFuncRElement < SVGComponentTransferFunctionElement
2432
+ end
2433
+
2434
+ class SVGFEFuncGElement < SVGComponentTransferFunctionElement
2435
+ end
2436
+
2437
+ class SVGFEFuncBElement < SVGComponentTransferFunctionElement
2438
+ end
2439
+
2440
+ class SVGFEFuncAElement < SVGComponentTransferFunctionElement
2441
+ end
2442
+
2443
+ # `<feTile>` — fills the primitive region by tiling its input.
2444
+ class SVGFETileElement < SVGFilterPrimitiveElement
2445
+ def in1
2446
+ reflected_string("in")
2447
+ end
2448
+
2449
+ def in1=(v)
2450
+ set_reflected_string("in", v)
2451
+ end
2452
+
2453
+ def __js_get__(key)
2454
+ key == "in" ? in1 : super
2455
+ end
2456
+
2457
+ def __js_set__(key, value)
2458
+ key == "in" ? (self.in1 = value) : super
2459
+ end
2460
+ end
2461
+
2462
+ # `<feMorphology>` — morphological erode / dilate.
2463
+ class SVGFEMorphologyElement < SVGFilterPrimitiveElement
2464
+ def in1
2465
+ reflected_string("in")
2466
+ end
2467
+
2468
+ def in1=(v)
2469
+ set_reflected_string("in", v)
2470
+ end
2471
+
2472
+ def operator
2473
+ reflected_string("operator")
2474
+ end
2475
+
2476
+ def operator=(v)
2477
+ set_reflected_string("operator", v)
2478
+ end
2479
+
2480
+ def radius
2481
+ reflected_string("radius")
2482
+ end
2483
+
2484
+ def radius=(v)
2485
+ set_reflected_string("radius", v)
2486
+ end
2487
+
2488
+ def __js_get__(key)
2489
+ case key
2490
+ when "in"
2491
+ in1
2492
+ when "operator"
2493
+ operator
2494
+ when "radius"
2495
+ radius
2496
+ else
2497
+ super
2498
+ end
2499
+ end
2500
+
2501
+ def __js_set__(key, value)
2502
+ case key
2503
+ when "in"
2504
+ self.in1 = value
2505
+ when "operator"
2506
+ self.operator = value
2507
+ when "radius"
2508
+ self.radius = value
2509
+ else
2510
+ super
2511
+ end
2512
+ end
2513
+ end
2514
+
2515
+ # `<feImage>` — fetches an external image (or references one by id)
2516
+ # and supplies it as input to the filter pipeline.
2517
+ class SVGFEImageElement < SVGFilterPrimitiveElement
2518
+ def href
2519
+ reflected_string("href")
2520
+ end
2521
+
2522
+ def href=(v)
2523
+ set_reflected_string("href", v)
2524
+ end
2525
+
2526
+ def preserve_aspect_ratio
2527
+ reflected_string("preserveAspectRatio")
2528
+ end
2529
+
2530
+ def preserve_aspect_ratio=(v)
2531
+ set_reflected_string("preserveAspectRatio", v)
2532
+ end
2533
+
2534
+ def crossorigin
2535
+ reflected_string("crossorigin")
2536
+ end
2537
+
2538
+ def crossorigin=(v)
2539
+ set_reflected_string("crossorigin", v)
2540
+ end
2541
+
2542
+ def __js_get__(key)
2543
+ case key
2544
+ when "href"
2545
+ href
2546
+ when "preserveAspectRatio"
2547
+ preserve_aspect_ratio
2548
+ when "crossorigin"
2549
+ crossorigin
2550
+ else
2551
+ super
2552
+ end
2553
+ end
2554
+
2555
+ def __js_set__(key, value)
2556
+ case key
2557
+ when "href"
2558
+ self.href = value
2559
+ when "preserveAspectRatio"
2560
+ self.preserve_aspect_ratio = value
2561
+ when "crossorigin"
2562
+ self.crossorigin = value
2563
+ else
2564
+ super
2565
+ end
2566
+ end
2567
+ end
2568
+
2569
+ # `<feDropShadow>` — convenience filter primitive producing a
2570
+ # drop shadow (Gaussian-blurred translated copy of the input,
2571
+ # composited under the source).
2572
+ class SVGFEDropShadowElement < SVGFilterPrimitiveElement
2573
+ def in1
2574
+ reflected_string("in")
2575
+ end
2576
+
2577
+ def in1=(v)
2578
+ set_reflected_string("in", v)
2579
+ end
2580
+
2581
+ def dx
2582
+ reflected_string("dx")
2583
+ end
2584
+
2585
+ def dx=(v)
2586
+ set_reflected_string("dx", v)
2587
+ end
2588
+
2589
+ def dy
2590
+ reflected_string("dy")
2591
+ end
2592
+
2593
+ def dy=(v)
2594
+ set_reflected_string("dy", v)
2595
+ end
2596
+
2597
+ def std_deviation
2598
+ reflected_string("stdDeviation")
2599
+ end
2600
+
2601
+ def std_deviation=(v)
2602
+ set_reflected_string("stdDeviation", v)
2603
+ end
2604
+
2605
+ def flood_color
2606
+ reflected_string("flood-color")
2607
+ end
2608
+
2609
+ def flood_color=(v)
2610
+ set_reflected_string("flood-color", v)
2611
+ end
2612
+
2613
+ def flood_opacity
2614
+ reflected_string("flood-opacity")
2615
+ end
2616
+
2617
+ def flood_opacity=(v)
2618
+ set_reflected_string("flood-opacity", v)
2619
+ end
2620
+
2621
+ def __js_get__(key)
2622
+ case key
2623
+ when "in"
2624
+ in1
2625
+ when "dx"
2626
+ dx
2627
+ when "dy"
2628
+ dy
2629
+ when "stdDeviation"
2630
+ std_deviation
2631
+ when "flood-color"
2632
+ flood_color
2633
+ when "flood-opacity"
2634
+ flood_opacity
2635
+ else
2636
+ super
2637
+ end
2638
+ end
2639
+
2640
+ def __js_set__(key, value)
2641
+ case key
2642
+ when "in"
2643
+ self.in1 = value
2644
+ when "dx"
2645
+ self.dx = value
2646
+ when "dy"
2647
+ self.dy = value
2648
+ when "stdDeviation"
2649
+ self.std_deviation = value
2650
+ when "flood-color"
2651
+ self.flood_color = value
2652
+ when "flood-opacity"
2653
+ self.flood_opacity = value
2654
+ else
2655
+ super
2656
+ end
2657
+ end
2658
+ end
2659
+
2660
+ # `<feTurbulence>` — Perlin noise generator. No `in` (it produces
2661
+ # output rather than transforming an input).
2662
+ class SVGFETurbulenceElement < SVGFilterPrimitiveElement
2663
+ def base_frequency
2664
+ reflected_string("baseFrequency")
2665
+ end
2666
+
2667
+ def base_frequency=(v)
2668
+ set_reflected_string("baseFrequency", v)
2669
+ end
2670
+
2671
+ def num_octaves
2672
+ reflected_string("numOctaves")
2673
+ end
2674
+
2675
+ def num_octaves=(v)
2676
+ set_reflected_string("numOctaves", v)
2677
+ end
2678
+
2679
+ def seed
2680
+ reflected_string("seed")
2681
+ end
2682
+
2683
+ def seed=(v)
2684
+ set_reflected_string("seed", v)
2685
+ end
2686
+
2687
+ def stitch_tiles
2688
+ reflected_string("stitchTiles")
2689
+ end
2690
+
2691
+ def stitch_tiles=(v)
2692
+ set_reflected_string("stitchTiles", v)
2693
+ end
2694
+
2695
+ def type
2696
+ reflected_string("type")
2697
+ end
2698
+
2699
+ def type=(v)
2700
+ set_reflected_string("type", v)
2701
+ end
2702
+
2703
+ def __js_get__(key)
2704
+ case key
2705
+ when "baseFrequency"
2706
+ base_frequency
2707
+ when "numOctaves"
2708
+ num_octaves
2709
+ when "seed"
2710
+ seed
2711
+ when "stitchTiles"
2712
+ stitch_tiles
2713
+ when "type"
2714
+ type
2715
+ else
2716
+ super
2717
+ end
2718
+ end
2719
+
2720
+ def __js_set__(key, value)
2721
+ case key
2722
+ when "baseFrequency"
2723
+ self.base_frequency = value
2724
+ when "numOctaves"
2725
+ self.num_octaves = value
2726
+ when "seed"
2727
+ self.seed = value
2728
+ when "stitchTiles"
2729
+ self.stitch_tiles = value
2730
+ when "type"
2731
+ self.type = value
2732
+ else
2733
+ super
2734
+ end
2735
+ end
2736
+ end
2737
+
2738
+ # `<feDisplacementMap>` — uses one input as a map to displace pixels
2739
+ # of another.
2740
+ class SVGFEDisplacementMapElement < SVGFilterPrimitiveElement
2741
+ def in1
2742
+ reflected_string("in")
2743
+ end
2744
+
2745
+ def in1=(v)
2746
+ set_reflected_string("in", v)
2747
+ end
2748
+
2749
+ def in2
2750
+ reflected_string("in2")
2751
+ end
2752
+
2753
+ def in2=(v)
2754
+ set_reflected_string("in2", v)
2755
+ end
2756
+
2757
+ def scale
2758
+ reflected_string("scale")
2759
+ end
2760
+
2761
+ def scale=(v)
2762
+ set_reflected_string("scale", v)
2763
+ end
2764
+
2765
+ def x_channel_selector
2766
+ reflected_string("xChannelSelector")
2767
+ end
2768
+
2769
+ def x_channel_selector=(v)
2770
+ set_reflected_string("xChannelSelector", v)
2771
+ end
2772
+
2773
+ def y_channel_selector
2774
+ reflected_string("yChannelSelector")
2775
+ end
2776
+
2777
+ def y_channel_selector=(v)
2778
+ set_reflected_string("yChannelSelector", v)
2779
+ end
2780
+
2781
+ def __js_get__(key)
2782
+ case key
2783
+ when "in"
2784
+ in1
2785
+ when "in2"
2786
+ in2
2787
+ when "scale"
2788
+ scale
2789
+ when "xChannelSelector"
2790
+ x_channel_selector
2791
+ when "yChannelSelector"
2792
+ y_channel_selector
2793
+ else
2794
+ super
2795
+ end
2796
+ end
2797
+
2798
+ def __js_set__(key, value)
2799
+ case key
2800
+ when "in"
2801
+ self.in1 = value
2802
+ when "in2"
2803
+ self.in2 = value
2804
+ when "scale"
2805
+ self.scale = value
2806
+ when "xChannelSelector"
2807
+ self.x_channel_selector = value
2808
+ when "yChannelSelector"
2809
+ self.y_channel_selector = value
2810
+ else
2811
+ super
2812
+ end
2813
+ end
2814
+ end
2815
+
2816
+ # ===== Light sources =====
2817
+ #
2818
+ # Children of `<feDiffuseLighting>` / `<feSpecularLighting>` (which
2819
+ # aren't specialized yet — see SVGElement fallback). Light sources
2820
+ # carry no `result` of their own; they configure the parent primitive.
2821
+
2822
+ # `<feDistantLight>` — light at infinity, characterized only by direction.
2823
+ class SVGFEDistantLightElement < SVGElement
2824
+ def azimuth
2825
+ reflected_string("azimuth")
2826
+ end
2827
+
2828
+ def azimuth=(v)
2829
+ set_reflected_string("azimuth", v)
2830
+ end
2831
+
2832
+ def elevation
2833
+ reflected_string("elevation")
2834
+ end
2835
+
2836
+ def elevation=(v)
2837
+ set_reflected_string("elevation", v)
2838
+ end
2839
+
2840
+ def __js_get__(key)
2841
+ case key
2842
+ when "azimuth"
2843
+ azimuth
2844
+ when "elevation"
2845
+ elevation
2846
+ else
2847
+ super
2848
+ end
2849
+ end
2850
+
2851
+ def __js_set__(key, value)
2852
+ case key
2853
+ when "azimuth"
2854
+ self.azimuth = value
2855
+ when "elevation"
2856
+ self.elevation = value
2857
+ else
2858
+ super
2859
+ end
2860
+ end
2861
+ end
2862
+
2863
+ # `<fePointLight>` — point light source at (x, y, z).
2864
+ class SVGFEPointLightElement < SVGElement
2865
+ def x
2866
+ reflected_string("x")
2867
+ end
2868
+
2869
+ def x=(v)
2870
+ set_reflected_string("x", v)
2871
+ end
2872
+
2873
+ def y
2874
+ reflected_string("y")
2875
+ end
2876
+
2877
+ def y=(v)
2878
+ set_reflected_string("y", v)
2879
+ end
2880
+
2881
+ def z
2882
+ reflected_string("z")
2883
+ end
2884
+
2885
+ def z=(v)
2886
+ set_reflected_string("z", v)
2887
+ end
2888
+
2889
+ def __js_get__(key)
2890
+ case key
2891
+ when "x"
2892
+ x
2893
+ when "y"
2894
+ y
2895
+ when "z"
2896
+ z
2897
+ else
2898
+ super
2899
+ end
2900
+ end
2901
+
2902
+ def __js_set__(key, value)
2903
+ case key
2904
+ when "x"
2905
+ self.x = value
2906
+ when "y"
2907
+ self.y = value
2908
+ when "z"
2909
+ self.z = value
2910
+ else
2911
+ super
2912
+ end
2913
+ end
2914
+ end
2915
+
2916
+ # `<feSpotLight>` — spotlight emanating from (x, y, z), aimed at
2917
+ # (pointsAtX, pointsAtY, pointsAtZ). `limitingConeAngle` restricts
2918
+ # the spread; `specularExponent` controls focus falloff.
2919
+ class SVGFESpotLightElement < SVGElement
2920
+ def x
2921
+ reflected_string("x")
2922
+ end
2923
+
2924
+ def x=(v)
2925
+ set_reflected_string("x", v)
2926
+ end
2927
+
2928
+ def y
2929
+ reflected_string("y")
2930
+ end
2931
+
2932
+ def y=(v)
2933
+ set_reflected_string("y", v)
2934
+ end
2935
+
2936
+ def z
2937
+ reflected_string("z")
2938
+ end
2939
+
2940
+ def z=(v)
2941
+ set_reflected_string("z", v)
2942
+ end
2943
+
2944
+ def points_at_x
2945
+ reflected_string("pointsAtX")
2946
+ end
2947
+
2948
+ def points_at_x=(v)
2949
+ set_reflected_string("pointsAtX", v)
2950
+ end
2951
+
2952
+ def points_at_y
2953
+ reflected_string("pointsAtY")
2954
+ end
2955
+
2956
+ def points_at_y=(v)
2957
+ set_reflected_string("pointsAtY", v)
2958
+ end
2959
+
2960
+ def points_at_z
2961
+ reflected_string("pointsAtZ")
2962
+ end
2963
+
2964
+ def points_at_z=(v)
2965
+ set_reflected_string("pointsAtZ", v)
2966
+ end
2967
+
2968
+ def specular_exponent
2969
+ reflected_string("specularExponent")
2970
+ end
2971
+
2972
+ def specular_exponent=(v)
2973
+ set_reflected_string("specularExponent", v)
2974
+ end
2975
+
2976
+ def limiting_cone_angle
2977
+ reflected_string("limitingConeAngle")
2978
+ end
2979
+
2980
+ def limiting_cone_angle=(v)
2981
+ set_reflected_string("limitingConeAngle", v)
2982
+ end
2983
+
2984
+ def __js_get__(key)
2985
+ case key
2986
+ when "x"
2987
+ x
2988
+ when "y"
2989
+ y
2990
+ when "z"
2991
+ z
2992
+ when "pointsAtX"
2993
+ points_at_x
2994
+ when "pointsAtY"
2995
+ points_at_y
2996
+ when "pointsAtZ"
2997
+ points_at_z
2998
+ when "specularExponent"
2999
+ specular_exponent
3000
+ when "limitingConeAngle"
3001
+ limiting_cone_angle
3002
+ else
3003
+ super
3004
+ end
3005
+ end
3006
+
3007
+ def __js_set__(key, value)
3008
+ case key
3009
+ when "x"
3010
+ self.x = value
3011
+ when "y"
3012
+ self.y = value
3013
+ when "z"
3014
+ self.z = value
3015
+ when "pointsAtX"
3016
+ self.points_at_x = value
3017
+ when "pointsAtY"
3018
+ self.points_at_y = value
3019
+ when "pointsAtZ"
3020
+ self.points_at_z = value
3021
+ when "specularExponent"
3022
+ self.specular_exponent = value
3023
+ when "limitingConeAngle"
3024
+ self.limiting_cone_angle = value
3025
+ else
3026
+ super
3027
+ end
3028
+ end
3029
+ end
3030
+
3031
+ # `<feConvolveMatrix>` — applies an arbitrary convolution kernel.
3032
+ # Heavy in attribute count; all are reflected.
3033
+ class SVGFEConvolveMatrixElement < SVGFilterPrimitiveElement
3034
+ def in1
3035
+ reflected_string("in")
3036
+ end
3037
+
3038
+ def in1=(v)
3039
+ set_reflected_string("in", v)
3040
+ end
3041
+
3042
+ def order
3043
+ reflected_string("order")
3044
+ end
3045
+
3046
+ def order=(v)
3047
+ set_reflected_string("order", v)
3048
+ end
3049
+
3050
+ def kernel_matrix
3051
+ reflected_string("kernelMatrix")
3052
+ end
3053
+
3054
+ def kernel_matrix=(v)
3055
+ set_reflected_string("kernelMatrix", v)
3056
+ end
3057
+
3058
+ def divisor
3059
+ reflected_string("divisor")
3060
+ end
3061
+
3062
+ def divisor=(v)
3063
+ set_reflected_string("divisor", v)
3064
+ end
3065
+
3066
+ def bias
3067
+ reflected_string("bias")
3068
+ end
3069
+
3070
+ def bias=(v)
3071
+ set_reflected_string("bias", v)
3072
+ end
3073
+
3074
+ def target_x
3075
+ reflected_string("targetX")
3076
+ end
3077
+
3078
+ def target_x=(v)
3079
+ set_reflected_string("targetX", v)
3080
+ end
3081
+
3082
+ def target_y
3083
+ reflected_string("targetY")
3084
+ end
3085
+
3086
+ def target_y=(v)
3087
+ set_reflected_string("targetY", v)
3088
+ end
3089
+
3090
+ def edge_mode
3091
+ reflected_string("edgeMode")
3092
+ end
3093
+
3094
+ def edge_mode=(v)
3095
+ set_reflected_string("edgeMode", v)
3096
+ end
3097
+
3098
+ def kernel_unit_length
3099
+ reflected_string("kernelUnitLength")
3100
+ end
3101
+
3102
+ def kernel_unit_length=(v)
3103
+ set_reflected_string("kernelUnitLength", v)
3104
+ end
3105
+
3106
+ def preserve_alpha
3107
+ reflected_string("preserveAlpha")
3108
+ end
3109
+
3110
+ def preserve_alpha=(v)
3111
+ set_reflected_string("preserveAlpha", v)
3112
+ end
3113
+
3114
+ def __js_get__(key)
3115
+ case key
3116
+ when "in"
3117
+ in1
3118
+ when "order"
3119
+ order
3120
+ when "kernelMatrix"
3121
+ kernel_matrix
3122
+ when "divisor"
3123
+ divisor
3124
+ when "bias"
3125
+ bias
3126
+ when "targetX"
3127
+ target_x
3128
+ when "targetY"
3129
+ target_y
3130
+ when "edgeMode"
3131
+ edge_mode
3132
+ when "kernelUnitLength"
3133
+ kernel_unit_length
3134
+ when "preserveAlpha"
3135
+ preserve_alpha
3136
+ else
3137
+ super
3138
+ end
3139
+ end
3140
+
3141
+ def __js_set__(key, value)
3142
+ case key
3143
+ when "in"
3144
+ self.in1 = value
3145
+ when "order"
3146
+ self.order = value
3147
+ when "kernelMatrix"
3148
+ self.kernel_matrix = value
3149
+ when "divisor"
3150
+ self.divisor = value
3151
+ when "bias"
3152
+ self.bias = value
3153
+ when "targetX"
3154
+ self.target_x = value
3155
+ when "targetY"
3156
+ self.target_y = value
3157
+ when "edgeMode"
3158
+ self.edge_mode = value
3159
+ when "kernelUnitLength"
3160
+ self.kernel_unit_length = value
3161
+ when "preserveAlpha"
3162
+ self.preserve_alpha = value
3163
+ else
3164
+ super
3165
+ end
3166
+ end
3167
+ end
3168
+
3169
+ # `<feDiffuseLighting>` — applies diffuse lighting based on a
3170
+ # bumpmap input and a light source child (one of feDistantLight /
3171
+ # fePointLight / feSpotLight).
3172
+ class SVGFEDiffuseLightingElement < SVGFilterPrimitiveElement
3173
+ def in1
3174
+ reflected_string("in")
3175
+ end
3176
+
3177
+ def in1=(v)
3178
+ set_reflected_string("in", v)
3179
+ end
3180
+
3181
+ def surface_scale
3182
+ reflected_string("surfaceScale")
3183
+ end
3184
+
3185
+ def surface_scale=(v)
3186
+ set_reflected_string("surfaceScale", v)
3187
+ end
3188
+
3189
+ def diffuse_constant
3190
+ reflected_string("diffuseConstant")
3191
+ end
3192
+
3193
+ def diffuse_constant=(v)
3194
+ set_reflected_string("diffuseConstant", v)
3195
+ end
3196
+
3197
+ def kernel_unit_length
3198
+ reflected_string("kernelUnitLength")
3199
+ end
3200
+
3201
+ def kernel_unit_length=(v)
3202
+ set_reflected_string("kernelUnitLength", v)
3203
+ end
3204
+
3205
+ def lighting_color
3206
+ reflected_string("lighting-color")
3207
+ end
3208
+
3209
+ def lighting_color=(v)
3210
+ set_reflected_string("lighting-color", v)
3211
+ end
3212
+
3213
+ def __js_get__(key)
3214
+ case key
3215
+ when "in"
3216
+ in1
3217
+ when "surfaceScale"
3218
+ surface_scale
3219
+ when "diffuseConstant"
3220
+ diffuse_constant
3221
+ when "kernelUnitLength"
3222
+ kernel_unit_length
3223
+ when "lighting-color"
3224
+ lighting_color
3225
+ else
3226
+ super
3227
+ end
3228
+ end
3229
+
3230
+ def __js_set__(key, value)
3231
+ case key
3232
+ when "in"
3233
+ self.in1 = value
3234
+ when "surfaceScale"
3235
+ self.surface_scale = value
3236
+ when "diffuseConstant"
3237
+ self.diffuse_constant = value
3238
+ when "kernelUnitLength"
3239
+ self.kernel_unit_length = value
3240
+ when "lighting-color"
3241
+ self.lighting_color = value
3242
+ else
3243
+ super
3244
+ end
3245
+ end
3246
+ end
3247
+
3248
+ # `<feSpecularLighting>` — applies specular (highlight) lighting.
3249
+ # Like feDiffuseLighting but with a specularConstant and
3250
+ # specularExponent driving the highlight shape.
3251
+ class SVGFESpecularLightingElement < SVGFilterPrimitiveElement
3252
+ def in1
3253
+ reflected_string("in")
3254
+ end
3255
+
3256
+ def in1=(v)
3257
+ set_reflected_string("in", v)
3258
+ end
3259
+
3260
+ def surface_scale
3261
+ reflected_string("surfaceScale")
3262
+ end
3263
+
3264
+ def surface_scale=(v)
3265
+ set_reflected_string("surfaceScale", v)
3266
+ end
3267
+
3268
+ def specular_constant
3269
+ reflected_string("specularConstant")
3270
+ end
3271
+
3272
+ def specular_constant=(v)
3273
+ set_reflected_string("specularConstant", v)
3274
+ end
3275
+
3276
+ def specular_exponent
3277
+ reflected_string("specularExponent")
3278
+ end
3279
+
3280
+ def specular_exponent=(v)
3281
+ set_reflected_string("specularExponent", v)
3282
+ end
3283
+
3284
+ def kernel_unit_length
3285
+ reflected_string("kernelUnitLength")
3286
+ end
3287
+
3288
+ def kernel_unit_length=(v)
3289
+ set_reflected_string("kernelUnitLength", v)
3290
+ end
3291
+
3292
+ def lighting_color
3293
+ reflected_string("lighting-color")
3294
+ end
3295
+
3296
+ def lighting_color=(v)
3297
+ set_reflected_string("lighting-color", v)
3298
+ end
3299
+
3300
+ def __js_get__(key)
3301
+ case key
3302
+ when "in"
3303
+ in1
3304
+ when "surfaceScale"
3305
+ surface_scale
3306
+ when "specularConstant"
3307
+ specular_constant
3308
+ when "specularExponent"
3309
+ specular_exponent
3310
+ when "kernelUnitLength"
3311
+ kernel_unit_length
3312
+ when "lighting-color"
3313
+ lighting_color
3314
+ else
3315
+ super
3316
+ end
3317
+ end
3318
+
3319
+ def __js_set__(key, value)
3320
+ case key
3321
+ when "in"
3322
+ self.in1 = value
3323
+ when "surfaceScale"
3324
+ self.surface_scale = value
3325
+ when "specularConstant"
3326
+ self.specular_constant = value
3327
+ when "specularExponent"
3328
+ self.specular_exponent = value
3329
+ when "kernelUnitLength"
3330
+ self.kernel_unit_length = value
3331
+ when "lighting-color"
3332
+ self.lighting_color = value
3333
+ else
3334
+ super
3335
+ end
3336
+ end
3337
+ end
3338
+
3339
+ # ===== SMIL animation =====
3340
+ #
3341
+ # `<animate>` and friends — declarative animation built into the
3342
+ # SVG spec. Supported in all major browsers as of Baseline 2023.
3343
+
3344
+ # Base class for SMIL animation elements; carries the timing
3345
+ # attributes (`begin`, `end`, `dur`, etc.) that all animation
3346
+ # elements share.
3347
+ class SVGAnimationElement < SVGElement
3348
+ # The `begin` / `end` Ruby methods correspond exactly to the SVG
3349
+ # attributes; Ruby permits these as method names (block keywords
3350
+ # are only special syntax, not identifier-level reserved words).
3351
+ def begin
3352
+ reflected_string("begin")
3353
+ end
3354
+
3355
+ def begin=(v)
3356
+ set_reflected_string("begin", v)
3357
+ end
3358
+
3359
+ def end
3360
+ reflected_string("end")
3361
+ end
3362
+
3363
+ def end=(v)
3364
+ set_reflected_string("end", v)
3365
+ end
3366
+
3367
+ def dur
3368
+ reflected_string("dur")
3369
+ end
3370
+
3371
+ def dur=(v)
3372
+ set_reflected_string("dur", v)
3373
+ end
3374
+
3375
+ def min
3376
+ reflected_string("min")
3377
+ end
3378
+
3379
+ def min=(v)
3380
+ set_reflected_string("min", v)
3381
+ end
3382
+
3383
+ def max
3384
+ reflected_string("max")
3385
+ end
3386
+
3387
+ def max=(v)
3388
+ set_reflected_string("max", v)
3389
+ end
3390
+
3391
+ def restart
3392
+ reflected_string("restart")
3393
+ end
3394
+
3395
+ def restart=(v)
3396
+ set_reflected_string("restart", v)
3397
+ end
3398
+
3399
+ def repeat_count
3400
+ reflected_string("repeatCount")
3401
+ end
3402
+
3403
+ def repeat_count=(v)
3404
+ set_reflected_string("repeatCount", v)
3405
+ end
3406
+
3407
+ def repeat_dur
3408
+ reflected_string("repeatDur")
3409
+ end
3410
+
3411
+ def repeat_dur=(v)
3412
+ set_reflected_string("repeatDur", v)
3413
+ end
3414
+
3415
+ def fill
3416
+ reflected_string("fill")
3417
+ end
3418
+
3419
+ def fill=(v)
3420
+ set_reflected_string("fill", v)
3421
+ end
3422
+
3423
+ def attribute_name
3424
+ reflected_string("attributeName")
3425
+ end
3426
+
3427
+ def attribute_name=(v)
3428
+ set_reflected_string("attributeName", v)
3429
+ end
3430
+
3431
+ def __js_get__(key)
3432
+ case key
3433
+ when "begin"
3434
+ self.begin
3435
+ when "end"
3436
+ self.end
3437
+ when "dur"
3438
+ dur
3439
+ when "min"
3440
+ min
3441
+ when "max"
3442
+ max
3443
+ when "restart"
3444
+ restart
3445
+ when "repeatCount"
3446
+ repeat_count
3447
+ when "repeatDur"
3448
+ repeat_dur
3449
+ when "fill"
3450
+ fill
3451
+ when "attributeName"
3452
+ attribute_name
3453
+ else
3454
+ super
3455
+ end
3456
+ end
3457
+
3458
+ def __js_set__(key, value)
3459
+ case key
3460
+ when "begin"
3461
+ self.begin = value
3462
+ when "end"
3463
+ self.end = value
3464
+ when "dur"
3465
+ self.dur = value
3466
+ when "min"
3467
+ self.min = value
3468
+ when "max"
3469
+ self.max = value
3470
+ when "restart"
3471
+ self.restart = value
3472
+ when "repeatCount"
3473
+ self.repeat_count = value
3474
+ when "repeatDur"
3475
+ self.repeat_dur = value
3476
+ when "fill"
3477
+ self.fill = value
3478
+ when "attributeName"
3479
+ self.attribute_name = value
3480
+ else
3481
+ super
3482
+ end
3483
+ end
3484
+ end
3485
+
3486
+ # `<animate>` — animates a target attribute's value over time.
3487
+ class SVGAnimateElement < SVGAnimationElement
3488
+ def from
3489
+ reflected_string("from")
3490
+ end
3491
+
3492
+ def from=(v)
3493
+ set_reflected_string("from", v)
3494
+ end
3495
+
3496
+ def to
3497
+ reflected_string("to")
3498
+ end
3499
+
3500
+ def to=(v)
3501
+ set_reflected_string("to", v)
3502
+ end
3503
+
3504
+ def by
3505
+ reflected_string("by")
3506
+ end
3507
+
3508
+ def by=(v)
3509
+ set_reflected_string("by", v)
3510
+ end
3511
+
3512
+ def values
3513
+ reflected_string("values")
3514
+ end
3515
+
3516
+ def values=(v)
3517
+ set_reflected_string("values", v)
3518
+ end
3519
+
3520
+ def calc_mode
3521
+ reflected_string("calcMode")
3522
+ end
3523
+
3524
+ def calc_mode=(v)
3525
+ set_reflected_string("calcMode", v)
3526
+ end
3527
+
3528
+ def key_times
3529
+ reflected_string("keyTimes")
3530
+ end
3531
+
3532
+ def key_times=(v)
3533
+ set_reflected_string("keyTimes", v)
3534
+ end
3535
+
3536
+ def key_splines
3537
+ reflected_string("keySplines")
3538
+ end
3539
+
3540
+ def key_splines=(v)
3541
+ set_reflected_string("keySplines", v)
3542
+ end
3543
+
3544
+ def __js_get__(key)
3545
+ case key
3546
+ when "from"
3547
+ from
3548
+ when "to"
3549
+ to
3550
+ when "by"
3551
+ by
3552
+ when "values"
3553
+ values
3554
+ when "calcMode"
3555
+ calc_mode
3556
+ when "keyTimes"
3557
+ key_times
3558
+ when "keySplines"
3559
+ key_splines
3560
+ else
3561
+ super
3562
+ end
3563
+ end
3564
+
3565
+ def __js_set__(key, value)
3566
+ case key
3567
+ when "from"
3568
+ self.from = value
3569
+ when "to"
3570
+ self.to = value
3571
+ when "by"
3572
+ self.by = value
3573
+ when "values"
3574
+ self.values = value
3575
+ when "calcMode"
3576
+ self.calc_mode = value
3577
+ when "keyTimes"
3578
+ self.key_times = value
3579
+ when "keySplines"
3580
+ self.key_splines = value
3581
+ else
3582
+ super
3583
+ end
3584
+ end
3585
+ end
3586
+
3587
+ # `<animateTransform>` — animates a transform attribute (translate,
3588
+ # scale, rotate, skewX, skewY).
3589
+ class SVGAnimateTransformElement < SVGAnimationElement
3590
+ def type
3591
+ reflected_string("type")
3592
+ end
3593
+
3594
+ def type=(v)
3595
+ set_reflected_string("type", v)
3596
+ end
3597
+
3598
+ def from
3599
+ reflected_string("from")
3600
+ end
3601
+
3602
+ def from=(v)
3603
+ set_reflected_string("from", v)
3604
+ end
3605
+
3606
+ def to
3607
+ reflected_string("to")
3608
+ end
3609
+
3610
+ def to=(v)
3611
+ set_reflected_string("to", v)
3612
+ end
3613
+
3614
+ def by
3615
+ reflected_string("by")
3616
+ end
3617
+
3618
+ def by=(v)
3619
+ set_reflected_string("by", v)
3620
+ end
3621
+
3622
+ def values
3623
+ reflected_string("values")
3624
+ end
3625
+
3626
+ def values=(v)
3627
+ set_reflected_string("values", v)
3628
+ end
3629
+
3630
+ def __js_get__(key)
3631
+ case key
3632
+ when "type"
3633
+ type
3634
+ when "from"
3635
+ from
3636
+ when "to"
3637
+ to
3638
+ when "by"
3639
+ by
3640
+ when "values"
3641
+ values
3642
+ else
3643
+ super
3644
+ end
3645
+ end
3646
+
3647
+ def __js_set__(key, value)
3648
+ case key
3649
+ when "type"
3650
+ self.type = value
3651
+ when "from"
3652
+ self.from = value
3653
+ when "to"
3654
+ self.to = value
3655
+ when "by"
3656
+ self.by = value
3657
+ when "values"
3658
+ self.values = value
3659
+ else
3660
+ super
3661
+ end
3662
+ end
3663
+ end
3664
+
3665
+ # `<animateMotion>` — animates an element along a path.
3666
+ class SVGAnimateMotionElement < SVGAnimationElement
3667
+ def path
3668
+ reflected_string("path")
3669
+ end
3670
+
3671
+ def path=(v)
3672
+ set_reflected_string("path", v)
3673
+ end
3674
+
3675
+ def key_points
3676
+ reflected_string("keyPoints")
3677
+ end
3678
+
3679
+ def key_points=(v)
3680
+ set_reflected_string("keyPoints", v)
3681
+ end
3682
+
3683
+ def rotate
3684
+ reflected_string("rotate")
3685
+ end
3686
+
3687
+ def rotate=(v)
3688
+ set_reflected_string("rotate", v)
3689
+ end
3690
+
3691
+ def origin
3692
+ reflected_string("origin")
3693
+ end
3694
+
3695
+ def origin=(v)
3696
+ set_reflected_string("origin", v)
3697
+ end
3698
+
3699
+ def __js_get__(key)
3700
+ case key
3701
+ when "path"
3702
+ path
3703
+ when "keyPoints"
3704
+ key_points
3705
+ when "rotate"
3706
+ rotate
3707
+ when "origin"
3708
+ origin
3709
+ else
3710
+ super
3711
+ end
3712
+ end
3713
+
3714
+ def __js_set__(key, value)
3715
+ case key
3716
+ when "path"
3717
+ self.path = value
3718
+ when "keyPoints"
3719
+ self.key_points = value
3720
+ when "rotate"
3721
+ self.rotate = value
3722
+ when "origin"
3723
+ self.origin = value
3724
+ else
3725
+ super
3726
+ end
3727
+ end
3728
+ end
3729
+
3730
+ # `<set>` — sets the value of an attribute for a specified duration
3731
+ # (no interpolation between values).
3732
+ class SVGSetElement < SVGAnimationElement
3733
+ def to
3734
+ reflected_string("to")
3735
+ end
3736
+
3737
+ def to=(v)
3738
+ set_reflected_string("to", v)
3739
+ end
3740
+
3741
+ def __js_get__(key)
3742
+ key == "to" ? to : super
3743
+ end
3744
+
3745
+ def __js_set__(key, value)
3746
+ key == "to" ? (self.to = value) : super
3747
+ end
3748
+ end
3749
+
3750
+ # `<mpath>` — child of `<animateMotion>` that references an external
3751
+ # `<path>` by href.
3752
+ class SVGMPathElement < SVGElement
3753
+ def href
3754
+ reflected_string("href")
3755
+ end
3756
+
3757
+ def href=(v)
3758
+ set_reflected_string("href", v)
3759
+ end
3760
+
3761
+ def __js_get__(key)
3762
+ key == "href" ? href : super
3763
+ end
3764
+
3765
+ def __js_set__(key, value)
3766
+ key == "href" ? (self.href = value) : super
3767
+ end
3768
+ end
3769
+
3770
+ # `<discard>` (SVG 2) — removes the target element from the document
3771
+ # at a specified time.
3772
+ class SVGDiscardElement < SVGAnimationElement
3773
+ def href
3774
+ reflected_string("href")
3775
+ end
3776
+
3777
+ def href=(v)
3778
+ set_reflected_string("href", v)
3779
+ end
3780
+
3781
+ def __js_get__(key)
3782
+ key == "href" ? href : super
3783
+ end
3784
+
3785
+ def __js_set__(key, value)
3786
+ key == "href" ? (self.href = value) : super
3787
+ end
3788
+ end
3789
+
3790
+ # Tag-name → class lookup. Keys are the lowercased form Nokogiri::HTML5
3791
+ # stores in the tree. Tags absent from this table fall through to
3792
+ # `Dommy::SVGElement` via `element_class_for`.
3793
+ SVG_ELEMENT_CLASSES = {
3794
+ "svg" => SVGSVGElement,
3795
+ "g" => SVGGElement,
3796
+ "circle" => SVGCircleElement,
3797
+ "rect" => SVGRectElement,
3798
+ "ellipse" => SVGEllipseElement,
3799
+ "line" => SVGLineElement,
3800
+ "polygon" => SVGPolygonElement,
3801
+ "polyline" => SVGPolylineElement,
3802
+ "path" => SVGPathElement,
3803
+ "text" => SVGTextElement,
3804
+ "tspan" => SVGTSpanElement,
3805
+ "defs" => SVGDefsElement,
3806
+ "use" => SVGUseElement,
3807
+ "image" => SVGImageElement,
3808
+ "symbol" => SVGSymbolElement,
3809
+ "foreignobject" => SVGForeignObjectElement,
3810
+ "title" => SVGTitleElement,
3811
+ "desc" => SVGDescElement,
3812
+ "mask" => SVGMaskElement,
3813
+ "clippath" => SVGClipPathElement,
3814
+ "pattern" => SVGPatternElement,
3815
+ "lineargradient" => SVGLinearGradientElement,
3816
+ "radialgradient" => SVGRadialGradientElement,
3817
+ "stop" => SVGStopElement,
3818
+ "filter" => SVGFilterElement,
3819
+ "marker" => SVGMarkerElement,
3820
+
3821
+ # Recommended additions
3822
+ "a" => SVGAElement,
3823
+ "textpath" => SVGTextPathElement,
3824
+ "view" => SVGViewElement,
3825
+ "switch" => SVGSwitchElement,
3826
+ "metadata" => SVGMetadataElement,
3827
+
3828
+ # Filter primitives (common ones)
3829
+ "fegaussianblur" => SVGFEGaussianBlurElement,
3830
+ "feoffset" => SVGFEOffsetElement,
3831
+ "feblend" => SVGFEBlendElement,
3832
+ "fecolormatrix" => SVGFEColorMatrixElement,
3833
+ "feflood" => SVGFEFloodElement,
3834
+ "fecomposite" => SVGFECompositeElement,
3835
+ "femerge" => SVGFEMergeElement,
3836
+ "femergenode" => SVGFEMergeNodeElement,
3837
+ "fecomponenttransfer" => SVGFEComponentTransferElement,
3838
+ "fefuncr" => SVGFEFuncRElement,
3839
+ "fefuncg" => SVGFEFuncGElement,
3840
+ "fefuncb" => SVGFEFuncBElement,
3841
+ "fefunca" => SVGFEFuncAElement,
3842
+ "fetile" => SVGFETileElement,
3843
+ "femorphology" => SVGFEMorphologyElement,
3844
+ "feimage" => SVGFEImageElement,
3845
+ "fedropshadow" => SVGFEDropShadowElement,
3846
+ "feturbulence" => SVGFETurbulenceElement,
3847
+ "fedisplacementmap" => SVGFEDisplacementMapElement,
3848
+ "fedistantlight" => SVGFEDistantLightElement,
3849
+ "fepointlight" => SVGFEPointLightElement,
3850
+ "fespotlight" => SVGFESpotLightElement,
3851
+ "feconvolvematrix" => SVGFEConvolveMatrixElement,
3852
+ "fediffuselighting" => SVGFEDiffuseLightingElement,
3853
+ "fespecularlighting" => SVGFESpecularLightingElement,
3854
+
3855
+ # SMIL animation
3856
+ "animate" => SVGAnimateElement,
3857
+ "animatetransform" => SVGAnimateTransformElement,
3858
+ "animatemotion" => SVGAnimateMotionElement,
3859
+ "set" => SVGSetElement,
3860
+ "mpath" => SVGMPathElement,
3861
+ "discard" => SVGDiscardElement
3862
+ }.freeze
3863
+ end