| @@ -3,6 +3,7 @@ | |||||
| Jinja template utilties | Jinja template utilties | ||||
| """ | """ | ||||
| from datetime import datetime, date | |||||
| import re | import re | ||||
| from hyde.fs import File, Folder | from hyde.fs import File, Folder | ||||
| @@ -12,7 +13,7 @@ from hyde.util import getLoggerWithNullHandler | |||||
| from jinja2 import contextfunction, Environment | from jinja2 import contextfunction, Environment | ||||
| from jinja2 import FileSystemLoader, FileSystemBytecodeCache | from jinja2 import FileSystemLoader, FileSystemBytecodeCache | ||||
| from jinja2 import environmentfilter, Markup, Undefined, nodes | |||||
| from jinja2 import contextfilter, environmentfilter, Markup, Undefined, nodes | |||||
| from jinja2.ext import Extension | from jinja2.ext import Extension | ||||
| from jinja2.exceptions import TemplateError | from jinja2.exceptions import TemplateError | ||||
| @@ -47,6 +48,34 @@ def content_url(context, path): | |||||
| site = context['site'] | site = context['site'] | ||||
| return Folder(site.config.base_url).child(path) | return Folder(site.config.base_url).child(path) | ||||
| @contextfilter | |||||
| def date_format(ctx, dt, fmt=None): | |||||
| if not dt: | |||||
| dt = datetime.now() | |||||
| if not isinstance(dt, datetime) or \ | |||||
| not isinstance(dt, date): | |||||
| logger.error("Date format called on a non date object") | |||||
| return dt | |||||
| format = fmt or "%a, %d %b %Y" | |||||
| if not fmt: | |||||
| global_format = ctx.resolve('dateformat') | |||||
| if not isinstance(global_format, Undefined): | |||||
| format = global_format | |||||
| return dt.strftime(format) | |||||
| def xmldatetime(dt): | |||||
| if not dt: | |||||
| dt = datetime.now() | |||||
| zprefix = "Z" | |||||
| tz = dt.strftime("%z") | |||||
| if tz: | |||||
| zprefix = tz[:3] + ":" + tz[3:] | |||||
| return dt.strftime("%Y-%m-%dT%H:%M:%S") + zprefix | |||||
| @environmentfilter | @environmentfilter | ||||
| def markdown(env, value): | def markdown(env, value): | ||||
| """ | """ | ||||
| @@ -491,6 +520,8 @@ class Jinja2Template(Template): | |||||
| self.env.globals['deps'] = {} | self.env.globals['deps'] = {} | ||||
| self.env.filters['markdown'] = markdown | self.env.filters['markdown'] = markdown | ||||
| self.env.filters['syntax'] = syntax | self.env.filters['syntax'] = syntax | ||||
| self.env.filters['date_format'] = date_format | |||||
| self.env.filters['xmldatetime'] = xmldatetime | |||||
| config = {} | config = {} | ||||
| if hasattr(site, 'config'): | if hasattr(site, 'config'): | ||||