Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class HTMLElement:
- def __init__(self, tag_name):
- self.tag_name = tag_name
- self.children = []
- self.attrs = {}
- def add_child(self, element):
- self.children.append(element)
- return self
- def add_children(self, *elements):
- self.children.extend(elements)
- return self
- def set_attrs(self, **kwargs):
- self.attrs = kwargs
- return self
- def _start(self):
- if self.attrs:
- attrs = ' '.join(f'{key}="{value}"' for key,value in self.attrs.items())
- return f'<{self.tag_name} {attrs}>'
- else:
- return f'<{self.tag_name}>'
- def _end(self):
- return f'</{self.tag_name}>'
- class SelfClosedTag(HTMLElement):
- def format(self):
- return f'\n{self._start()}'
- class ClosedTag(HTMLElement):
- def format(self):
- content = ''.join(ch.format() for ch in self.children)
- mid = f'{content}' if self.children else ''
- return f'\n{self._start()}{mid}\n{self._end()}'
- class Text:
- def __init__(self, text):
- self.text = text
- def format(self):
- return self.text
- ###
- form = ClosedTag('form')
- for i in range(3):
- form.add_child(SelfClosedTag('input').set_attrs(type='radio', name='radio'))
- form.add_child(SelfClosedTag('br'))
- sel = ClosedTag('select')
- for i in range(4):
- sel.add_child(ClosedTag('option').add_child(Text(f'Choice{i}')))
- form.add_children(
- sel,
- SelfClosedTag('br'),
- ClosedTag('input').set_attrs(type='submit'),
- SelfClosedTag('br')
- )
- html = ClosedTag('html').add_children(
- ClosedTag('head').add_children(
- ),
- ClosedTag('body').add_children(
- form,
- SelfClosedTag('br'),
- ClosedTag('a').set_attrs(href='www.microsoft.com').add_children(
- ClosedTag('div').add_children(
- Text('How was it?')
- )
- )
- )
- )
- print(html.format())
Advertisement
Add Comment
Please, Sign In to add comment