This commit is contained in:
Seth Trowbridge 2025-08-15 13:09:46 -04:00
parent 557fd6e697
commit 9e0af0b509

View File

@ -1,6 +1,10 @@
from typing import List, Protocol, Tuple, Union
def MakeAttrs(css:str|Tuple[str, ...]|None, id:str|None, attributes: dict[str, str | None]) -> str:
render_depth:int = 0
def MakeAttrs(css:str|Tuple[str, ...]|None, id:str|None, attributes: dict[str, str | None]|None) -> str:
if not attributes:
attributes = {}
if css:
attributes['class'] = " ".join(css) if isinstance(css, (list, tuple)) else css
if id:
@ -16,10 +20,15 @@ class ComplexProxyLeaf(dict):
attrs:str = ""
def __init__(self, name:str):
self.name = name
def __call__(self, css:str|None = None, id:str|None = None):
clone = ComplexProxyLeaf(self.name)
clone.attrs = MakeAttrs(css, id, {})
def props(self, css:str|Tuple[str, ...]|None, id:str|None, attributes: dict[str, str | None]|None):
clone = clone = self.__class__(self.name)
clone.attrs = MakeAttrs(css, id, attributes)
return clone
def __call__(self, css:str|None = None, id:str|None = None):
return self.props(css, id, {})
def __repr__(self) -> str:
return f'<{self.name} {self.attrs}/>'
@ -28,34 +37,36 @@ class ComplexProxyBranch(ComplexProxyLeaf):
attrs:str = ""
def __init__(self, name:str):
self.name = name
def __call__(self, css:str|None = None, id:str|None = None):
clone = ComplexProxyBranch(self.name)
clone.attrs = MakeAttrs(css, id, {})
return clone
return self.props(css, id, None)
def __repr__(self) -> str:
print("dump", self.attrs)
copy = self.attrs
self.attrs = ""
return f'<{self.name} {copy}></{self.name}>'
return f'<{self.name} {self.attrs}></{self.name}>'
def __getitem__(self, key:Union[str, 'ComplexProxyBranch', ComplexProxyLeaf, Tuple[Union[str, 'ComplexProxyBranch', ComplexProxyLeaf], ...]]) -> str:
global render_depth
render_depth = render_depth + 1
if isinstance(key, tuple):
children = "".join(str(k) for k in key)
children = f'\n'.join(str(k) for k in key)
else:
children = key
print("child", self.attrs)
return f'<{self.name} {self.attrs}>{children}</{self.name}>'
render_depth = render_depth - 1
return f'<{self.name} {self.attrs}>\n{children}\n</{self.name}>'
IMG = ComplexProxyLeaf("img")
BR = ComplexProxyLeaf("br")
A = ComplexProxyBranch("a")
print(
A
[
"click here",
BR,
IMG(id="header.png"),
A(css="test"),
A["other?"],
A(css="www.site.com")
[
IMG(id="image.png")