MetB

Untitled

Feb 22nd, 2020
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.94 KB | None | 0 0
  1. class HTMLElement:
  2.     def __init__(self, tag_name):
  3.         self.tag_name = tag_name
  4.         self.children = []
  5.         self.attrs = {}
  6.     def add_child(self, element):
  7.         self.children.append(element)
  8.         return self
  9.     def add_children(self, *elements):
  10.         self.children.extend(elements)
  11.         return self
  12.     def set_attrs(self, **kwargs):
  13.         self.attrs = kwargs
  14.         return self
  15.     def _start(self):
  16.         if self.attrs:
  17.             attrs = ' '.join(f'{key}="{value}"' for key,value in self.attrs.items())
  18.             return f'<{self.tag_name} {attrs}>'
  19.         else:
  20.             return f'<{self.tag_name}>'
  21.     def _end(self):
  22.         return f'</{self.tag_name}>'
  23.  
  24. class SelfClosedTag(HTMLElement):
  25.     def format(self):
  26.         return f'\n{self._start()}'
  27.  
  28. class ClosedTag(HTMLElement):
  29.     def format(self):
  30.         content = ''.join(ch.format() for ch in self.children)
  31.         mid = f'{content}' if self.children else ''
  32.         return f'\n{self._start()}{mid}\n{self._end()}'
  33.  
  34. class Text:
  35.     def __init__(self, text):
  36.         self.text = text
  37.     def format(self):
  38.         return self.text
  39.  
  40. ###
  41.  
  42. form = ClosedTag('form')
  43. for i in range(3):
  44.     form.add_child(SelfClosedTag('input').set_attrs(type='radio', name='radio'))
  45.     form.add_child(SelfClosedTag('br'))
  46.  
  47. sel = ClosedTag('select')
  48. for i in range(4):
  49.     sel.add_child(ClosedTag('option').add_child(Text(f'Choice{i}')))
  50.  
  51. form.add_children(
  52.     sel,
  53.     SelfClosedTag('br'),
  54.     ClosedTag('input').set_attrs(type='submit'),
  55.     SelfClosedTag('br')
  56. )
  57.  
  58. html = ClosedTag('html').add_children(
  59.     ClosedTag('head').add_children(
  60.     ),
  61.     ClosedTag('body').add_children(
  62.         form,
  63.         SelfClosedTag('br'),
  64.         ClosedTag('a').set_attrs(href='www.microsoft.com').add_children(
  65.             ClosedTag('div').add_children(
  66.                 Text('How was it?')
  67.             )
  68.         )
  69.     )
  70. )
  71.  
  72. print(html.format())
Advertisement
Add Comment
Please, Sign In to add comment