77 lines
2.2 KiB
Python
77 lines
2.2 KiB
Python
__license__ = '''
|
|
This file is part of Dominate.
|
|
|
|
Dominate is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Lesser General Public License as
|
|
published by the Free Software Foundation, either version 3 of
|
|
the License, or (at your option) any later version.
|
|
|
|
Dominate is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General
|
|
Public License along with Dominate. If not, see
|
|
<http://www.gnu.org/licenses/>.
|
|
'''
|
|
|
|
from . import tags
|
|
from . import util
|
|
|
|
try:
|
|
basestring = basestring
|
|
except NameError: # py3
|
|
basestring = str
|
|
unicode = str
|
|
|
|
class document(tags.html):
|
|
tagname = 'html'
|
|
def __init__(self, title='Dominate', doctype='<!DOCTYPE html>', *a, **kw):
|
|
'''
|
|
Creates a new document instance. Accepts `title` and `doctype`
|
|
'''
|
|
super(document, self).__init__(*a, **kw)
|
|
self.doctype = doctype
|
|
self.head = super(document, self).add(tags.head())
|
|
self.body = super(document, self).add(tags.body())
|
|
if title is not None:
|
|
self.title_node = self.head.add(tags.title(title))
|
|
with self.body:
|
|
self.header = util.container()
|
|
self.main = util.container()
|
|
self.footer = util.container()
|
|
self._entry = self.main
|
|
|
|
def get_title(self):
|
|
return self.title_node.text
|
|
|
|
def set_title(self, title):
|
|
if isinstance(title, basestring):
|
|
self.title_node.text = title
|
|
else:
|
|
self.head.remove(self.title_node)
|
|
self.head.add(title)
|
|
self.title_node = title
|
|
|
|
title = property(get_title, set_title)
|
|
|
|
def add(self, *args):
|
|
'''
|
|
Adding tags to a document appends them to the <body>.
|
|
'''
|
|
return self._entry.add(*args)
|
|
|
|
def _render(self, sb, *args, **kwargs):
|
|
'''
|
|
Renders the DOCTYPE and tag tree.
|
|
'''
|
|
# adds the doctype if one was set
|
|
if self.doctype:
|
|
sb.append(self.doctype)
|
|
sb.append('\n')
|
|
return super(document, self)._render(sb, *args, **kwargs)
|
|
|
|
def __repr__(self):
|
|
return '<dominate.document "%s">' % self.title
|