65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
from language_utils import gen_boolean, gen_color, gen_date, gen_email, gen_javascript, gen_number, gen_style, gen_text, gen_url
|
|
|
|
|
|
class HTMLTag:
|
|
def __init__(self, name, self_closing=False):
|
|
self.name = name
|
|
self.self_closing = self_closing
|
|
self.attributes = []
|
|
self.children = []
|
|
|
|
def __str__(self) -> str:
|
|
tag = ""
|
|
if self.self_closing:
|
|
tag = f"<{self.name} "
|
|
for attr in self.attributes:
|
|
tag += f"{attr} "
|
|
tag += "/>"
|
|
else:
|
|
tag = f"<{self.name}"
|
|
for attr in self.attributes:
|
|
tag += f"{attr} "
|
|
tag += ">"
|
|
for child in self.children:
|
|
tag += f"{child}"
|
|
tag += f"</{self.name}>"
|
|
return tag
|
|
|
|
|
|
class HTMLTagAttributeType:
|
|
TypeText = 0
|
|
TypeBoolean = 1
|
|
TypeNumber = 2
|
|
TypeColor = 3
|
|
TypeJavascript = 4
|
|
TypeStlye = 5
|
|
TypeURL = 6
|
|
TypeEmail = 7
|
|
TypeDate = 8
|
|
|
|
|
|
Generators = {
|
|
HTMLTagAttributeType.TypeText: gen_text,
|
|
HTMLTagAttributeType.TypeBoolean: gen_boolean,
|
|
HTMLTagAttributeType.TypeNumber: gen_number,
|
|
HTMLTagAttributeType.TypeColor: gen_color,
|
|
HTMLTagAttributeType.TypeJavascript: gen_javascript,
|
|
HTMLTagAttributeType.TypeStlye: gen_style,
|
|
HTMLTagAttributeType.TypeURL: gen_url,
|
|
HTMLTagAttributeType.TypeEmail: gen_email,
|
|
HTMLTagAttributeType.TypeDate: gen_date,
|
|
}
|
|
|
|
|
|
class HTMLAttribute:
|
|
def __init__(self, name, value_type):
|
|
self.name = name
|
|
self.kind = value_type
|
|
self.value = Generators[value_type]()
|
|
|
|
def __str__(self) -> str:
|
|
if not self.value:
|
|
return self.name
|
|
else:
|
|
return f'{self.name}="{self.value}"'
|