class Uploader(formrender.Form): """A renderer allowing for updates to individual records using file upload. This renderer exposes a form with a file widget. It is likely that the interface will change. """ name = "upload" def render_uploadInfo(self, ctx, data): if data is None: return T.invisible() else: for key, val in data.original.getPrimaryTable().rows[0].iteritems(): ctx.tag.fillSlots(key, str(val)) return ctx.tag docFactory = loaders.stan(T.html[ T.head[ T.title["Upload"], T.invisible(render=T.directive("commonhead")), ], T.body(render=T.directive("withsidebar"))[ T.h1(render=T.directive("meta"))["title"], T.p(class_="procMessage", data=T.directive("result"), render=T.directive("uploadInfo"))[ T.slot(name="nAffected"), " record(s) modified." ], T.invisible(render=T.directive("form genForm")) ] ])
class Index(rend.Page): addSlash = True def __init__(self, name='main'): rend.Page.__init__(self) self.name = name def render_name(self, ctx, data): return self.name def render_links(self, ctx, data): inner = [T.li[T.a(href=url.here.child(x))[x]] for x in ['a', 'b', 'c']] return T.ul[inner] def childFactory(self, ctx, name): return Index(self.name+'/'+name) docFactory = loaders.stan( T.html[ T.head[T.title['Nevow wsgi Test cgi app']], T.body[ T.h1(render=T.directive('name')), T.invisible(render=T.directive('links')) ] ] )
def render_content(self, ctx, data): if self.db[0] == "FIRSTRUN": return ctx.tag[tags.table( height="100%", width="100%" )[tags.tr(height="100%")[tags.td[tags.div( id="centerBox", valign="middle" )[tags.div(id="blockTop") [""], tags .div(id="centerBlock")[tags.h1( style="color:#fff;font-family:arial;" )["TUMS Installation Wizard"]], tags .div(id="menuBlock")[tags.div( style= "margin-top:-5em; text-align:left; font-family:arial; color:#786D38;" )[tags.h3["Welcome to the TUMS installation wizard."], """This wizard will guide you through an initial configuration of the host system. This should be carried out by a Thusa employee. If your server has arrived unconfigured it is recommended that you contact Thusa support for this to be carried out. """, tags.br, """Click the NEXT button bellow to continue with the installation""", tags.br, tags.br, tags.a(href="Wizard/1/")[tags.img( src='/images/next.png')]]]]]]]] return ctx.tag[tags.a(href="/auth/")["Login"]]
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 render_middle(self, context, data): yield T.div(render=T.directive('trail'), data=data.get_ancestry()) yield T.h1(class_='main-heading')[data.title] yield T.div(render=T.directive('items'), data=data.get_subdirs()) yield T.div(render=T.directive('rst')) yield T.div(render=T.directive('items'), data=data.get_items())
def render_pageLabel(self, ctx, data): labels = { 1: "Server Identification", 2: "Network configuration - Initial Layout", 3: "Network configuration - LAN Details", 4: "Network configuration - ADSL Details", 5: "Network configuration - WAN Details", 6: "Firewall configuration", 7: "Samba configuration", 8: "Mail configuration", 9: "Congratulations" } try: return ctx.tag[tags.h1( style="color:#fff;font-family:arial;")[labels[self.id]]] except: return ctx.tag[tags.h1( style="color:#fff;font-family:arial;")["No Title"]]
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))]]])
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'))]])
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)]]])
def test_authenticatedStartmenu(self): """ The I{startmenu} renderer should add navigation elements to the tag it is passed if it is called on a L{_PublicPageMixin} being rendered for an authenticated user. """ navigable = FakeNavigableElement(store=self.userStore) installOn(navigable, self.userStore) navigable.tabs = [Tab('foo', 123, 0, [Tab('bar', 432, 0)])] page = self.createPage(self.username) startMenuTag = div[ h1(pattern='tab'), h2(pattern='subtabs')] ctx = context.WebContext(tag=startMenuTag) tag = page.render_startmenu(ctx, None) self.assertEqual(tag.tagName, 'div') self.assertEqual(tag.attributes, {}) children = [child for child in tag.children if child.pattern is None] self.assertEqual(len(children), 0) # This structure seems overly complex. tabs = list(tag.slotData.pop('tabs')) self.assertEqual(len(tabs), 1) fooTab = tabs[0] self.assertEqual(fooTab.tagName, 'h1') self.assertEqual(fooTab.attributes, {}) self.assertEqual(fooTab.children, []) self.assertEqual(fooTab.slotData['href'], self.privateApp.linkTo(123)) self.assertEqual(fooTab.slotData['name'], 'foo') self.assertEqual(fooTab.slotData['kids'].tagName, 'h2') subtabs = list(fooTab.slotData['kids'].slotData['kids']) self.assertEqual(len(subtabs), 1) barTab = subtabs[0] self.assertEqual(barTab.tagName, 'h1') self.assertEqual(barTab.attributes, {}) self.assertEqual(barTab.children, []) self.assertEqual(barTab.slotData['href'], self.privateApp.linkTo(432)) self.assertEqual(barTab.slotData['name'], 'bar') self.assertEqual(barTab.slotData['kids'], '')
def test_authenticatedStartmenu(self): """ The I{startmenu} renderer should add navigation elements to the tag it is passed if it is called on a L{_PublicPageMixin} being rendered for an authenticated user. """ navigable = FakeNavigableElement(store=self.userStore) installOn(navigable, self.userStore) navigable.tabs = [Tab('foo', 123, 0, [Tab('bar', 432, 0)])] page = self.createPage(self.username) startMenuTag = div[h1(pattern='tab'), h2(pattern='subtabs')] ctx = context.WebContext(tag=startMenuTag) tag = page.render_startmenu(ctx, None) self.assertEqual(tag.tagName, 'div') self.assertEqual(tag.attributes, {}) children = [child for child in tag.children if child.pattern is None] self.assertEqual(len(children), 0) # This structure seems overly complex. tabs = list(tag.slotData.pop('tabs')) self.assertEqual(len(tabs), 1) fooTab = tabs[0] self.assertEqual(fooTab.tagName, 'h1') self.assertEqual(fooTab.attributes, {}) self.assertEqual(fooTab.children, []) self.assertEqual(fooTab.slotData['href'], self.privateApp.linkTo(123)) self.assertEqual(fooTab.slotData['name'], 'foo') self.assertEqual(fooTab.slotData['kids'].tagName, 'h2') subtabs = list(fooTab.slotData['kids'].slotData['kids']) self.assertEqual(len(subtabs), 1) barTab = subtabs[0] self.assertEqual(barTab.tagName, 'h1') self.assertEqual(barTab.attributes, {}) self.assertEqual(barTab.children, []) self.assertEqual(barTab.slotData['href'], self.privateApp.linkTo(432)) self.assertEqual(barTab.slotData['name'], 'bar') self.assertEqual(barTab.slotData['kids'], '')
class Mine(rend.Page): addSlash = True docFactory = loaders.stan(T.html[T.head[T.title["This is title"]], T.body[ T.h1(id="header")["Welcome"], T.ol(data=directive("theList"), render=directive("sequence"))[ T.span(pattern="header")["HEADER"], T.li(pattern="item")["Stuff: ", T.span(render=directive("string")), "!"], T.span(pattern="divider")["-----"], T.div(pattern="empty")["Nothing."], T.span(pattern="footer")["FOOTER"], ], T.ol(data=directive("empty"), render=directive("sequence"))[ T.span(pattern="header")["HEADER"], T.li(pattern="item")["Stuff: ", T.span(render=directive("string")), "!"], T.span(pattern="divider")["-----"], T.div(pattern="empty")["Nothing."], T.span(pattern="footer")["FOOTER"], ], T.span(render=directive("foo"))[ "This entire node, including the span tag, will be replaced by \ a randomly chosen node from below:", T.div(pattern="one", style="color: red")["one"], T.table(pattern="two")[T.tr[T.td["two"], T.td["two"], T.td["two"]]], T.ol(pattern="three")[T.li["three"], T.li["three"], T.li["three"], ]]]]) def render_foo(self, context, data): return inevow.IQ(context).onePattern( random.choice(['one', 'two', 'three'])) def data_theList(self, context, data): return [random.randint(0, 5000) for x in range(random.randint(0, 10))] def data_empty(self, context, data): return []
def heading(self): return tags.h1(class_=self.ob.css_class)[self.mediumName(self.ob), " : ", self.ob.kind.lower(), " documentation"]
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 heading(self): return tags.h1(class_=self.ob.css_class)[ self.mediumName(self.ob), " : ", self.ob.kind.lower(), " documentation"]
def render_ListTitle(self, _, data): """Render the list title.""" # pylint: disable-msg=E1101 return T.div(render=self.render_small_rounded_box, _class="listtitle")[ T.h1(style="color:white; padding: 1ex")[data]]
.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], ]]]]])
.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"))],