class FormExamplePage(formal.ResourceMixin, rend.Page): """ A base page for the actual examples. The page renders something sensible, including the title example and description. It also include the "example" form in an appropriate place. Each example page is expected to provide the title and description attributes as well as a form_example method that builds and returns a formal.Form instance. """ docFactory = loaders.stan( T.invisible[DOCTYPE, T.html[ T.head[CHARSET, T.title(data=T.directive('title'), render=rend.data), T.link(rel='stylesheet', type='text/css', href=url.root.child('examples.css')), T.link(rel='stylesheet', type='text/css', href=url.root.child('formal.css')), T.script(type='text/javascript', src='js/formal.js'), ], T.body[T.h1(data=T.directive('title'), render=rend.data), T.p(data=T.directive('description'), render=rend.data), T.directive('form example'), ], ], ], ) def data_title(self, ctx, data): return self.title def data_description(self, ctx, data): return self.description
def getTemplate(self, resultFormat): if resultFormat in self.service.templates: return self.service.getTemplate(resultFormat) return common.doctypedStan(T.html[ T.head(render=T.directive("commonhead"))[T.title( render=T.directive("meta"))['title'], ], T.body(render=T.directive("withsidebar"))[ T.h1(render=T.directive("meta"))['title'], T.div(class_="result", data=T.directive("result"))[T.invisible( render=T.directive(resultFormat))]]])
def test_title(self): """ The I{title} renderer should add the wrapped fragment's title attribute, if any, or the default "Divmod". """ page = self.createPage(self.username) titleTag = title() tag = page.render_title(context.WebContext(tag=titleTag), None) self.assertIdentical(tag, titleTag) flattened = flatten(tag) self.assertSubstring(flatten(getattr(page.fragment, "title", "Divmod")), flattened)
class HistoryPage(rend.Page): def __init__(self, root, ob, rev): self.root = root self.ob = ob self.rev = rev def render_title(self, context, data): return context.tag[u"History of \N{LEFT DOUBLE QUOTATION MARK}" + self.ob.fullName() + u"\N{RIGHT DOUBLE QUOTATION MARK}s docstring"] def render_links(self, context, data): ds = self.root.edits(self.ob) therange = range(len(ds)) rev = therange[self.rev] ul = tags.ul() for i in therange: li = tags.li() if i: li[tags.a(href=url.URL.fromContext( context).sibling('diff').add('ob', self.ob.fullName()).add( 'revA', i - 1).add('revB', i))["(diff)"]] else: li["(diff)"] li[" - "] if i == len(ds) - 1: label = "Latest" else: label = str(i) if i == rev: li[label] else: li[tags.a(href=url.gethere.replace('rev', str(i)))[label]] li[' - ' + ds[i].user + '/' + ds[i].time] ul[li] return context.tag[ul] def render_docstring(self, context, data): docstring = self.root.editsbyob[self.ob][self.rev].newDocstring if docstring is None: docstring = '' return epydoc2stan.doc2html(self.ob, docstring=docstring)[0] def render_linkback(self, context, data): return util.taglink(self.ob, label="Back") docFactory = loaders.stan( tags.html[tags.head[ tags.title(render=tags.directive('title')), tags.link(rel="stylesheet", type="text/css", href='apidocs.css')], tags.body[tags.h1(render=tags.directive('title')), tags.p(render=tags.directive('links')), tags.div(render=tags.directive('docstring')), tags.p(render=tags.directive('linkback'))]])
def test_title(self): """ The I{title} renderer should add the wrapped fragment's title attribute, if any, or the default "Divmod". """ page = self.createPage(self.username) titleTag = title() tag = page.render_title(context.WebContext(tag=titleTag), None) self.assertIdentical(tag, titleTag) flattened = flatten(tag) self.assertSubstring( flatten(getattr(page.fragment, 'title', 'Divmod')), flattened)
class VirtualHostList(rend.Page): def __init__(self, nvh): rend.Page.__init__(self) self.nvh = nvh stylesheet = """ body { border: 0; padding: 0; margin: 0; background-color: #efefef; } h1 {padding: 0.1em; background-color: #777; color: white; border-bottom: thin white dashed;} """ def getStyleSheet(self): return self.stylesheet def data_hostlist(self, context, data): return self.nvh.hosts.keys() def render_hostlist(self, context, data): host = data req = context.locate(inevow.IRequest) proto = req.clientproto.split('/')[0].lower() port = req.getHeader('host').split(':')[1] link = "%s://%s" % (proto, host) if port != 80: link += ":%s" % port link += req.path return context.tag[tags.a(href=link)[host]] def render_title(self, context, data): req = context.locate(inevow.IRequest) proto = req.clientproto.split('/')[0].lower() host = req.getHeader('host') return context.tag["Virtual Host Listing for %s://%s" % (proto, host)] def render_stylesheet(self, context, data): return tags.style(type="text/css")[self.getStyleSheet()] docFactory = loaders.stan(tags.html[tags.head[ tags.title(render=render_title), tags.directive('stylesheet'), ], tags.body[ tags.h1(render=render_title), tags.ul(data=directive("hostlist"), render=directive("sequence") )[tags.li(pattern="item", render=render_hostlist)]]])
class ElementRenderingLivePage(LivePage): """ Trivial LivePage which renders an instance of a particular element class. """ docFactory = stan(html[head(render=directive('liveglue'))[title( render=directive('title'))], body[div(render=directive('element'))]]) def __init__(self, element): LivePage.__init__(self) self.element = element def render_title(self, ctx, data): return ctx.tag[self.element.__class__.__name__] def render_element(self, ctx, data): self.element.setFragmentParent(self) return ctx.tag[self.element]
class DirectoryLister(rend.Page): def __init__(self, pathname, dirs=None, contentTypes={}, contentEncodings={}, defaultType='text/html'): self.contentTypes = contentTypes self.contentEncodings = contentEncodings self.defaultType = defaultType # dirs allows usage of the File to specify what gets listed self.dirs = dirs self.path = pathname rend.Page.__init__(self) def data_listing(self, context, data): from nevow.static import getTypeAndEncoding if self.dirs is None: directory = os.listdir(self.path) directory.sort() else: directory = self.dirs files = [] dirs = [] for path in directory: url = quote(path, '/') if os.path.isdir(os.path.join(self.path, path)): url = url + '/' dirs.append({ 'link': url, 'linktext': path + "/", 'type': '[Directory]', 'filesize': '', 'encoding': '', }) else: mimetype, encoding = getTypeAndEncoding( path, self.contentTypes, self.contentEncodings, self.defaultType) try: filesize = os.stat(os.path.join(self.path, path))[stat.ST_SIZE] except OSError as x: if x.errno != 2 and x.errno != 13: raise x else: files.append({ 'link': url, 'linktext': path, 'type': '[%s]' % mimetype, 'filesize': formatFileSize(filesize), 'encoding': (encoding and '[%s]' % encoding or '') }) return dirs + files def data_header(self, context, data): request = context.locate(inevow.IRequest) return "Directory listing for %s" % unquote(request.uri) def render_tableLink(self, context, data): return tags.a(href=data['link'])[data['linktext']] def __repr__(self): return '<DirectoryLister of %r>' % self.path __str__ = __repr__ docFactory = loaders.stan(tags.html[tags.head[tags.title( data=tags.directive('header'))[str], tags.style[''' th, .even td, .odd td { padding-right: 0.5em; } .even-dir { background-color: #efe0ef } .even { background-color: #eee } .odd-dir {background-color: #f0d0ef } .odd { background-color: #dedede } .icon { text-align: center } .listing { margin-left: auto; margin-right: auto; width: 50%; padding: 0.1em; } body { border: 0; padding: 0; margin: 0; background-color: #efefef;} h1 {padding: 0.1em; background-color: #777; color: white; border-bottom: thin white dashed;} ''']], tags.body[tags.div(_class='directory-listing')[ tags.h1(data=tags.directive('header'))[str], tags.table(render=rend.sequence, data=tags.directive('listing'))[ tags.tr(pattern="header")[tags.th["Filename"], tags.th["Size"], tags.th["Content type"], tags.th["Content encoding"], ], tags.tr(_class="even", pattern="item")[ tags.td[tags.a(render=tags.directive("tableLink"))], tags.td(data=tags.directive("filesize"))[str], tags.td(data=tags.directive("type"))[str], tags.td(data=tags.directive("encoding"))[str], ], tags.tr(_class="odd", pattern="item")[ tags.td[tags.a(render=tags.directive("tableLink"))], tags.td(data=tags.directive("filesize"))[str], tags.td(data=tags.directive("type"))[str], tags.td(data=tags.directive("encoding"))[str], ]]]]])
def make_grid_head(argsdict, request=None): branch = argsdict['branch'] if 'branch' in argsdict else 'master' page_head = [title()['BVT grid for ' + branch]] return str(nevow.flat.flatten(page_head))
return dirs + files def data_header(self, context, data): request = context.locate(inevow.IRequest) return "Directory listing for %s" % urllib.unquote(request.uri) def render_tableLink(self, context, data): return tags.a(href=data['link'])[data['linktext']] def __repr__(self): return '<DirectoryLister of %r>' % self.path __str__ = __repr__ docFactory = loaders.stan(tags.html[tags.head[tags.title( data=tags.directive('header'))[str], tags.style[''' th, .even td, .odd td { padding-right: 0.5em; } .even-dir { background-color: #efe0ef } .even { background-color: #eee } .odd-dir {background-color: #f0d0ef } .odd { background-color: #dedede } .icon { text-align: center } .listing { margin-left: auto; margin-right: auto; width: 50%; padding: 0.1em; } body { border: 0; padding: 0; margin: 0; background-color: #efefef;} h1 {padding: 0.1em; background-color: #777; color: white; border-bottom: thin white dashed;}
def data_header(self, context, data): request = context.locate(inevow.IRequest) return "Directory listing for %s" % urllib.unquote(request.uri) def render_tableLink(self, context, data): return tags.a(href=data['link'])[data['linktext']] def __repr__(self): return '<DirectoryLister of %r>' % self.path __str__ = __repr__ docFactory = loaders.stan(tags.html[ tags.head[ tags.title(data=tags.directive('header'))[str], tags.style[''' th, .even td, .odd td { padding-right: 0.5em; } .even-dir { background-color: #efe0ef } .even { background-color: #eee } .odd-dir {background-color: #f0d0ef } .odd { background-color: #dedede } .icon { text-align: center } .listing { margin-left: auto; margin-right: auto; width: 50%; padding: 0.1em; } body { border: 0; padding: 0; margin: 0; background-color: #efefef;}