|
1 | 1 | import typing as t |
2 | 2 |
|
3 | | -from py_html.el.base import BaseHTML |
| 3 | +from py_html.el.base import BaseElement, BaseHTML |
4 | 4 |
|
5 | 5 |
|
6 | 6 | class Image(BaseHTML): |
@@ -164,11 +164,17 @@ def __init__( |
164 | 164 | self, |
165 | 165 | height: t.Optional[t.Any] = None, |
166 | 166 | width: t.Optional[t.Any] = None, |
| 167 | + xmlns: str = "http://www.w3.org/2000/svg", |
| 168 | + viewBox: t.Optional[str] = None, |
| 169 | + role: str = "img", |
167 | 170 | **attrs, |
168 | 171 | ) -> None: |
169 | 172 | super().__init__( |
170 | 173 | height=height, |
171 | 174 | width=width, |
| 175 | + xmlns=xmlns, |
| 176 | + role=role, |
| 177 | + viewBox=viewBox, |
172 | 178 | **attrs, |
173 | 179 | ) |
174 | 180 |
|
@@ -200,3 +206,172 @@ def __init__( |
200 | 206 |
|
201 | 207 | def render_tag(self, attrs: str, inner_html: str) -> str: |
202 | 208 | return f"<{self.tag} {attrs}/>" |
| 209 | + |
| 210 | + |
| 211 | +class Circle(BaseElement): |
| 212 | + tag = "circle" |
| 213 | + |
| 214 | + def __init__( |
| 215 | + self, |
| 216 | + *content: t.Any, |
| 217 | + cx: t.Optional[int] = None, |
| 218 | + cy: t.Optional[int] = None, |
| 219 | + r: t.Optional[int] = None, |
| 220 | + stroke: t.Optional[str] = None, |
| 221 | + stroke_width: t.Optional[str] = None, |
| 222 | + fill: t.Optional[str] = None, |
| 223 | + **attrs, |
| 224 | + ): |
| 225 | + super().__init__( |
| 226 | + *content, |
| 227 | + cx=cx, |
| 228 | + cy=cy, |
| 229 | + r=r, |
| 230 | + stroke=stroke, |
| 231 | + stroke_width=stroke_width, |
| 232 | + fill=fill, |
| 233 | + **attrs, |
| 234 | + ) |
| 235 | + |
| 236 | + |
| 237 | +class Rect(BaseElement): |
| 238 | + tag = "rect" |
| 239 | + |
| 240 | + def __init__( |
| 241 | + self, |
| 242 | + *content: t.Any, |
| 243 | + x: t.Optional[int] = None, |
| 244 | + y: t.Optional[int] = None, |
| 245 | + width: t.Optional[int] = None, |
| 246 | + height: t.Optional[int] = None, |
| 247 | + stroke: t.Optional[str] = None, |
| 248 | + stroke_width: t.Optional[str] = None, |
| 249 | + fill: t.Optional[str] = None, |
| 250 | + **attrs, |
| 251 | + ): |
| 252 | + super().__init__( |
| 253 | + *content, |
| 254 | + x=x, |
| 255 | + y=y, |
| 256 | + width=width, |
| 257 | + height=height, |
| 258 | + stroke=stroke, |
| 259 | + stroke_width=stroke_width, |
| 260 | + fill=fill, |
| 261 | + **attrs, |
| 262 | + ) |
| 263 | + |
| 264 | + |
| 265 | +class Polygon(BaseElement): |
| 266 | + tag = "polygon" |
| 267 | + |
| 268 | + def __init__( |
| 269 | + self, |
| 270 | + *content: t.Any, |
| 271 | + points: t.Optional[str] = None, |
| 272 | + stroke: t.Optional[str] = None, |
| 273 | + stroke_width: t.Optional[str] = None, |
| 274 | + fill: t.Optional[str] = None, |
| 275 | + **attrs, |
| 276 | + ): |
| 277 | + super().__init__( |
| 278 | + *content, |
| 279 | + points=points, |
| 280 | + stroke=stroke, |
| 281 | + stroke_width=stroke_width, |
| 282 | + fill=fill, |
| 283 | + **attrs, |
| 284 | + ) |
| 285 | + |
| 286 | + |
| 287 | +class Defs(BaseElement): |
| 288 | + tag = "defs" |
| 289 | + |
| 290 | + |
| 291 | +class LinearGradient(BaseElement): |
| 292 | + tag = "linearGradient" |
| 293 | + |
| 294 | + |
| 295 | +class Stop(BaseElement): |
| 296 | + tag = "stop" |
| 297 | + |
| 298 | + def __init__(self, *content: t.Any, stop_color: t.Optional[str] = None, **attrs): |
| 299 | + super().__init__(*content, stop_color=stop_color, **attrs) |
| 300 | + |
| 301 | + |
| 302 | +class Ellipse(BaseElement): |
| 303 | + tag = "ellipse" |
| 304 | + |
| 305 | + def __init__( |
| 306 | + self, |
| 307 | + *content: t.Any, |
| 308 | + cx: t.Optional[int] = None, |
| 309 | + cy: t.Optional[int] = None, |
| 310 | + r: t.Optional[int] = None, |
| 311 | + rx: t.Optional[int] = None, |
| 312 | + ry: t.Optional[int] = None, |
| 313 | + stroke: t.Optional[str] = None, |
| 314 | + stroke_width: t.Optional[str] = None, |
| 315 | + fill: t.Optional[str] = None, |
| 316 | + **attrs, |
| 317 | + ): |
| 318 | + super().__init__( |
| 319 | + *content, |
| 320 | + cx=cx, |
| 321 | + cy=cy, |
| 322 | + r=r, |
| 323 | + rx=rx, |
| 324 | + ry=ry, |
| 325 | + stroke=stroke, |
| 326 | + stroke_width=stroke_width, |
| 327 | + fill=fill, |
| 328 | + **attrs, |
| 329 | + ) |
| 330 | + |
| 331 | + |
| 332 | +class Text(BaseElement): |
| 333 | + tag = "text" |
| 334 | + |
| 335 | + def __init__( |
| 336 | + self, |
| 337 | + *content: t.Any, |
| 338 | + font_size: t.Optional[int] = None, |
| 339 | + font_family: t.Optional[str] = None, |
| 340 | + x: t.Optional[str] = None, |
| 341 | + y: t.Optional[str] = None, |
| 342 | + fill: t.Optional[str] = None, |
| 343 | + **attrs, |
| 344 | + ): |
| 345 | + super().__init__( |
| 346 | + *content, |
| 347 | + font_size=font_size, |
| 348 | + font_family=font_family, |
| 349 | + x=x, |
| 350 | + y=y, |
| 351 | + fill=fill, |
| 352 | + **attrs, |
| 353 | + ) |
| 354 | + |
| 355 | + |
| 356 | +class Path(BaseElement): |
| 357 | + tag = "path" |
| 358 | + |
| 359 | + def __init__( |
| 360 | + self, |
| 361 | + *content: t.Any, |
| 362 | + d: t.Optional[str] = None, |
| 363 | + fill_rule: t.Optional[str] = None, |
| 364 | + clip_rule: t.Optional[str] = None, |
| 365 | + stroke: t.Optional[str] = None, |
| 366 | + fill: t.Optional[str] = None, |
| 367 | + **attrs, |
| 368 | + ): |
| 369 | + super().__init__( |
| 370 | + *content, |
| 371 | + d=d, |
| 372 | + fill_rule=fill_rule, |
| 373 | + clip_rule=clip_rule, |
| 374 | + stroke=stroke, |
| 375 | + fill=fill, |
| 376 | + **attrs, |
| 377 | + ) |
0 commit comments