1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
pub trait SvgElementExt: AsRef<web_sys::SvgElement> + Clone {
    fn create(tag: impl AsRef<str>) -> Self
    where
        Self: Sized + web_sys::wasm_bindgen::JsCast,
    {
        use web_sys::wasm_bindgen::JsCast;
        gloo::utils::document()
            .create_element_ns(Some("http://www.w3.org/2000/svg"), tag.as_ref())
            .unwrap()
            .dyn_into()
            .unwrap()
    }
    fn css(&self, property: impl AsRef<str>, value: impl AsRef<str>) -> Self {
        self.as_ref().style().set_property(property.as_ref(), value.as_ref()).unwrap();
        self.clone()
    }
}

impl<T: AsRef<web_sys::SvgElement> + Clone> SvgElementExt for T {}

pub(crate) type ThisBase = web_sys::SvgElement;
pub(crate) use SvgElementExt as ThisExt;

crate::element_macros::impls!(
SvgElement : ;
SvgAnimateElement : animate;
SvgAnimateMotionElement : animateMotion;
SvgAnimateTransformElement : animateTransform;
SvgAnimationElement : ;
SvgCircleElement : circle;
SvgClipPathElement : clipPath;
SvgComponentTransferFunctionElement : ;
SvgDefsElement : defs;
SvgDescElement : desc;
SvgEllipseElement : ellipse;
SvgFilterElement : filter;
SvgForeignObjectElement : foreignObject;
SvgGeometryElement : ;
SvgGradientElement : ;
SvgGraphicsElement : ;
SvgImageElement : image;
SvgLineElement : line;
SvgLinearGradientElement : linearGradient;
SvgMarkerElement : marker;
SvgMaskElement : mask;
SvgMetadataElement : metadata;
SvgPathElement : path;
SvgPatternElement : pattern;
SvgPolygonElement : polygon;
SvgPolylineElement : polyline;
SvgRadialGradientElement : radialGradient;
SvgRectElement : rect;
SvgScriptElement : script;
SvgSetElement : set;
SvgStopElement : stop;
SvgStyleElement : style;
SvgSwitchElement : switch;
SvgSymbolElement : symbol;
SvgTextContentElement : ;
SvgTextElement : text;
SvgTextPathElement : textPath;
SvgTextPositioningElement : ;
SvgTitleElement : title;
SvgUseElement : use false; //TODO: waiting for https://github.com/dtolnay/paste/issues/74.
SvgViewElement : view;
SvgaElement : a;
SvgfeBlendElement : feBlend;
SvgfeColorMatrixElement : feColorMatrix;
SvgfeComponentTransferElement : feComponentTransfer;
SvgfeCompositeElement : feComposite;
SvgfeConvolveMatrixElement : feConvolveMatrix;
SvgfeDiffuseLightingElement : feDiffuseLighting;
SvgfeDisplacementMapElement : feDisplacementMap;
SvgfeDistantLightElement : feDistantLight;
SvgfeDropShadowElement : feDropShadow;
SvgfeFloodElement : feFlood;
SvgfeFuncAElement : feFuncA;
SvgfeFuncBElement : feFuncB;
SvgfeFuncGElement : feFuncG;
SvgfeFuncRElement : feFuncR;
SvgfeGaussianBlurElement : feGaussianBlur;
SvgfeImageElement : feImage;
SvgfeMergeElement : feMerge;
SvgfeMergeNodeElement : feMergeNode;
SvgfeMorphologyElement : feMorphology;
SvgfeOffsetElement : feOffset;
SvgfePointLightElement : fePointLight;
SvgfeSpecularLightingElement : feSpecularLighting;
SvgfeSpotLightElement : feSpotLight;
SvgfeTileElement : feTile;
SvgfeTurbulenceElement : feTurbulence;
SvggElement : g;
SvgmPathElement : mpath;
SvgsvgElement : svg;
SvgtSpanElement : tspan
);