qmsk/web/html.py
author Tero Marttila <terom@paivola.fi>
Thu, 29 Jan 2015 22:14:59 +0200
changeset 102 611787305686
parent 92 e5799432071c
permissions -rw-r--r--
qmsk.web.html: HTMLMixin
92
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
from qmsk.utils import flatten, merge
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
from html import escape
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
102
611787305686 qmsk.web.html: HTMLMixin
Tero Marttila <terom@paivola.fi>
parents: 92
diff changeset
     4
import qmsk.web.application
92
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
class Tag :
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
    def __init__ (self, _name=None, *_contents,
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
            _selfclosing=True,
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
            _whitespace_sensitive=False,
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
            **_attrs) :
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
        self.name = _name
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
        self.contents = _contents or [ ]
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
        self.attrs = _attrs or { }
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
        # options
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
        self.selfclosing = _selfclosing
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
        self.whitespace_sensitive = _whitespace_sensitive
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
    def __call__ (self, *_contents, 
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
            _selfclosing=None,
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
            _whitespace_sensitive=None,
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
            **_attrs):
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
        return type(self)(self.name, *tuple(flatten(self.contents, _contents)),
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
                _selfclosing            = self.selfclosing if _selfclosing is None else _selfclosing,
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
                _whitespace_sensitive   = self.whitespace_sensitive if _whitespace_sensitive is None else _whitespace_sensitive,
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
                **merge(self.attrs, _attrs)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
        )
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
    def render_attrs (self):
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
        for name, value in self.attrs.items():
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
            name = name.strip('_').replace('_', '-')
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
            if value is True:
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
                value = name
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
            elif value is None:
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
                continue
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
            else:
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
                value = str(value)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
            yield '{name}="{value}"'.format(name=name, value=escape(value, quote=True))
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
    def render (self, indent):
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
        """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
            Iterate over lines of output HTML.
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
        """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
        open = (self.contents or not self.selfclosing)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
        
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
        if self.name and self.attrs and open:
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
            yield indent, '<{name} {attrs}>'.format(name=self.name, attrs=' '.join(self.render_attrs()))
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
        elif self.name and self.attrs:
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
            yield indent, '<{name} {attrs} />'.format(name=self.name, attrs=' '.join(self.render_attrs()))
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
        elif self.name and open:
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
            yield indent, '<{name}>'.format(name=self.name)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
        elif self.name:
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
            yield indent, '<{name} />'.format(name=self.name)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
        for item in self.contents:
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
            if isinstance(item, Tag):
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
                yield from item.render(indent=indent+1)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
            elif self.whitespace_sensitive:
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
                yield 0, str(item)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
            else:
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
                yield indent + 1, str(item)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
        
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
        if self.name and open:
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
            yield indent, '</{name}>'.format(name=self.name)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
    def __str__ (self):
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
        """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
            Render as HTML.
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
        """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
        return '\n'.join('\t'*indent+line for indent, line in self.render(indent=0))
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
    def __repr__ (self):
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
        return '{name}({args})'.format(
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
                name    = self.__class__.__name__,
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
                args    = ', '.join(
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
                    [repr(self.name)]
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
                    + [repr(item) for item in self.contents]
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
                    + ['{name}={value!r}'.format(name=name, value=value) for name, value in self.attrs.items()]
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
                ),
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
        )
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    85
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
class HTML:
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
    pre     = Tag('pre', _whitespace_sensitive=True)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
    def __getattr__ (self, name):
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
        """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
            Get an empty Tag object.
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
        """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    94
        return Tag(name)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    95
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    96
    def __call__ (self, *values):
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
        """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
            Raw HTML.
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
        """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
        return Tag(None, *values)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   102
class HTML5 (HTML):
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   103
    span    = Tag('span', _selfclosing=False)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   104
    script  = Tag('script', _selfclosing=False)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   105
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   106
html5   = HTML5()
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   107
102
611787305686 qmsk.web.html: HTMLMixin
Tero Marttila <terom@paivola.fi>
parents: 92
diff changeset
   108
class HTMLMixin:
92
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   109
    """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   110
        A handler that renders a full HTML page.
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   111
    """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   112
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
    # HTML5
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   114
    html = html5
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   115
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   116
    DOCTYPE = 'html'
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   117
    HTML_XMLNS = None
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   118
    HTML_LANG = 'en'
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   119
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   120
    # <head>
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   121
    TITLE = None
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   122
    STYLE = None
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   123
    SCRIPT = None
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   124
    CSS = (
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   125
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   126
    )
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   127
    JS = (
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   128
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   129
    )
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   130
    HEAD = None
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   131
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   132
    def title (self):
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
        return self.TITLE
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   134
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   135
    def render (self):
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   136
        raise NotImplementedError()
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   137
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
    def render_html (self) :
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   139
        """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   140
            Render HTML <html> tag.
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   141
        """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   142
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   143
        html = self.html
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   144
102
611787305686 qmsk.web.html: HTMLMixin
Tero Marttila <terom@paivola.fi>
parents: 92
diff changeset
   145
        title = self.title()
611787305686 qmsk.web.html: HTMLMixin
Tero Marttila <terom@paivola.fi>
parents: 92
diff changeset
   146
611787305686 qmsk.web.html: HTMLMixin
Tero Marttila <terom@paivola.fi>
parents: 92
diff changeset
   147
        assert title
611787305686 qmsk.web.html: HTMLMixin
Tero Marttila <terom@paivola.fi>
parents: 92
diff changeset
   148
92
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   149
        return html.html(
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   150
            html.head(
102
611787305686 qmsk.web.html: HTMLMixin
Tero Marttila <terom@paivola.fi>
parents: 92
diff changeset
   151
                html.title(title),
92
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   152
                (
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   153
                    html.link(rel='Stylesheet', type="text/css", href=src) for src in self.CSS
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   154
                ), 
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   155
                (
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   156
                    html.script(src=src, type='text/javascript', _selfclosing=False) for src in self.JS
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   157
                ),
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   158
                html.style(type='text/css')(self.STYLE) if self.STYLE else None,
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   159
                html.script(type='text/javascript')(self.SCRIPT) if self.SCRIPT else None,
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   160
                self.HEAD,
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   161
            ),
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   162
            html.body(
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   163
                self.render(),
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   164
            ),
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   165
        xmlns=self.HTML_XMLNS, lang=self.HTML_LANG)
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   166
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   167
    def render_response (self):
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   168
        """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   169
            Render entire HTML response.
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   170
        """
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   171
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   172
        return """\
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   173
<!DOCTYPE {doctype}>
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   174
{html}\
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   175
""".format(doctype=self.DOCTYPE, html=self.render_html())
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   176
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   177
if __name__ == '__main__':
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   178
    html = HTML5()
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   179
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   180
    print(html.html(
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   181
        html.head(
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   182
            html.title("Testing")
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   183
        ),
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   184
        html.body(
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   185
            html.h1("Testing"),
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   186
            html.p("Just testing this..."),
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   187
            html("Raw HTML <tags>"),
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   188
            html.pre(repr(
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   189
                html.a(href="/foo")("Foo!")
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   190
            ))
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   191
        ),
e5799432071c qmsk.web: port pvl.web to python3, and rewrite html
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   192
    ))
102
611787305686 qmsk.web.html: HTMLMixin
Tero Marttila <terom@paivola.fi>
parents: 92
diff changeset
   193
611787305686 qmsk.web.html: HTMLMixin
Tero Marttila <terom@paivola.fi>
parents: 92
diff changeset
   194
class HTMLHandler (HTMLMixin, qmsk.web.application.Handler):
611787305686 qmsk.web.html: HTMLMixin
Tero Marttila <terom@paivola.fi>
parents: 92
diff changeset
   195
    pass
611787305686 qmsk.web.html: HTMLMixin
Tero Marttila <terom@paivola.fi>
parents: 92
diff changeset
   196