# HG changeset patch # User Tero Marttila # Date 1244227736 -10800 # Node ID 53e798708413d9ff95181ad1e9c5f5de92af2ff6 # Parent fad360dd01da4b9b917e1456fafa9c2616f541c0 write new templates using html, replacing old mako stuff diff -r fad360dd01da -r 53e798708413 degal/template.py --- a/degal/template.py Fri Jun 05 21:47:45 2009 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -from mako import exceptions -from mako.lookup import TemplateLookup - -import settings, resources, helpers - -import log - -""" - Locating and rendering templates -""" - -_lookup = TemplateLookup( - directories=[resources.TEMPLATE_DIR], -# module_directory='%s/cache' % settings.TEMPLATE_DIR, - output_encoding='utf-8', - filesystem_checks=False, # this may need to be changed if used in a long-term process -) - -TEMPLATE_GLOBALS = dict( - h = helpers, - version = settings.VERSION, -) - -class Template (object) : - def __init__ (self, name) : - self.name = name - self.tpl = _lookup.get_template("%s.%s" % (name, settings.TEMPLATE_EXT)) - - def render (self, **data) : - data.update(TEMPLATE_GLOBALS) - - try : - log.debug("render %s with %s", self.name, data) - return self.tpl.render(**data) - except : - data = exceptions.text_error_template().render() - log.error(data) - - raise - - def render_to (self, file, **data) : - fh = open(file, "w") - fh.write(self.render(**data)) - fh.close() - -# templates -gallery = Template("gallery") -image = Template("image") - diff -r fad360dd01da -r 53e798708413 degal/templates.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/degal/templates.py Fri Jun 05 21:48:56 2009 +0300 @@ -0,0 +1,189 @@ +""" + Templates for HTML output +""" + +import html +from html import tags + +def link_from (from_page, to_page) : + """ + Returns a partial a tag linking from the given page to the given page + + XXX: URLEncode unicode -> str! + """ + + return tags.a(href=to_page.path_from(from_page)) + +def image_link (from_page, image) : + """ + Link to the given image + """ + + return link_from(from_page, imgae.html)( + tags.img(src=image.path_from(from_page)) + ) + +def image_page (image) : + """ + The per-image view + """ + + return [ + tags.div(id_='image')( + # title + tags.h1(image.title) if image.title else None, + + # image-links + tags.p( + # prev thumb + image_link(image.html, image.prev.thumb) if image.prev else None, + + # preview + image_link(image.html, image.preview), + + # next thumb + image_link(image.html, image.next.thumb) if image.next else None + ), + + # optional description + tags.p(image.description) if image.description else None, + ), + + # extended info, metadata + tags.div(id_='info')( + tags.p("%s: " % name, value) for name, value in image.metadata + ), + ] + +def folder_link (from_page, folder, page=0) : + """ + Returns a link to the given folder from the given page + """ + + return link_from(from_page, folder.html_file(page))(folder.title) + +def folder_page_link (folder, page) : + """ + Returns a partial a tag from the folder itself to the given page number + """ + + return link_from(folder, folder.html_file(page)) + +def folder_paginate (folder, cur_page) : + """ + Render the pagination view for a folder, if needed + """ + + if folder.page_count > 1 : + return tags.div(class_='paginate')( + tags.ul( + # prev link + tags.li(folder_page_link(folder, cur_page - 1)(html.raw("« Prev"))) + if cur_page > 0 else + tags.li(tags.span(html.raw("« Prev"))), + + (( + # page link + tags.li(folder_page_link(folder, page)(page + 1)) + if page != cur_page else + tags.li(tags.strong(page + 1)) + ) for page in xrange(folder.page_count)), + + # next link + tags.li(folder_page_link(folder, cur_page + 1)(html.raw("» Next"))) + if cur_page < folder.page_count - 1 else + tags.li(tags.span(html.raw("» Next"))), + ) + ) + +def folder_page (folder, cur_page) : + """ + Render the per-Folder view for the given page + """ + + # render the paginate-view once + paginate = folder_paginate(folder, cur_page) + + return [ + # title + tags.h1(folder.title) if folder.title else None, + + # subdirs + tags.div(id_='dirs')( + tags.ul( + tags.li( + folder_link(folder, subfolder) + ) for subfolder in folder.subfolders + ) if folder.subfolders else None + ), + + # upper paginate + paginate, + + # image thumbnails + (( + image_link(folder, image) + ) for image in folder.images), + + # lower paginate + paginate, + + # description + tags.p(id='description')(folder.description) if folder.description else None, + + # shorturl + ] + +def breadcrumb_trail (gallery, page) : + """ + Yield the breadcrumb elements + """ + + is_first = True + + for segment in gallery.path_to(page) : + # spacers + if is_first : + is_first = False + + else : + yield html.raw("»") + + # link from this page to sub-page + yield link_from(page, segment)(segment.title) + + +def breadcrumb (gallery, page) : + """ + Build a breadcrumb trail from the gallery root to the given object + """ + + return tags.div(id='breadcrumb')( + breadcrumb_trail(gallery, page) + ) + +def master (gallery, title, page, body) : + """ + Render the full-page HTML layout for the given page with title and body + """ + + return html.XHTMLDocument( + head=[ + tags.title(title), + + # stylesheet + tags.link(rel='Stylesheet', type='text/css', href=gallery.stylesheet.path_from(page)) + ], + + body=[ + # top-of-page breadcrumb nav + breadcrumb(gallery, page), + + # other content + body, + + # footer + tags.p(id='about')(tags.a(href='http://projects.qmsk.net/degal')('Degal'), gallery.version) + ], + ) + diff -r fad360dd01da -r 53e798708413 degal/templates/gallery.html --- a/degal/templates/gallery.html Fri Jun 05 21:47:45 2009 +0300 +++ b/degal/templates/gallery.html Fri Jun 05 21:48:56 2009 +0300 @@ -1,10 +1,8 @@ -<%! use_javascript = False %> -<%inherit file="master.html" /> +<%inherit file="master.html" /> -<%def name="pagination(num_pages, cur_page)"> +<%def name="pagination(num_pages, cur_page)"> % if num_pages > 1 : % endif - +

${title}

diff -r fad360dd01da -r 53e798708413 degal/templates/image.html --- a/degal/templates/image.html Fri Jun 05 21:47:45 2009 +0300 +++ b/degal/templates/image.html Fri Jun 05 21:48:56 2009 +0300 @@ -1,5 +1,4 @@ -<%! use_javascript = False %> -<%inherit file="master.html" /> +<%inherit file="master.html" />

${title}

@@ -24,11 +23,11 @@

Dimensions: ${h.format_imgsize(img_size)}

File size: ${h.format_filesize(file_size)}

Last modified: ${h.format_timestamp(timestamp)}

-% for key, value in exif_data : +% for key, value in exif_data :

${key}: ${value}

-% endfor +% endfor +% endif -% endif

ShortURL: ${shorturl_code}

% if series_url :

${series_verb} series

diff -r fad360dd01da -r 53e798708413 degal/templates/master.html --- a/degal/templates/master.html Fri Jun 05 21:47:45 2009 +0300 +++ b/degal/templates/master.html Fri Jun 05 21:48:56 2009 +0300 @@ -6,11 +6,6 @@ ${title} -% if self.module.use_javascript : -