From 927be5e8cafbf561ee6ff6a6d74ad566fa3402f0 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Mon, 28 Jan 2013 14:08:16 -0600 Subject: [PATCH] Move template hook over to a template_hook tag. Seems to work! :) --- .../mediagoblin/media_displays/image.html | 13 ++----- .../mediagoblin/user_pages/media.html | 5 +-- .../mediagoblin/utils/templatehooks.html | 22 ----------- mediagoblin/tools/template.py | 38 ++++++++++++++++++- 4 files changed, 42 insertions(+), 36 deletions(-) delete mode 100644 mediagoblin/templates/mediagoblin/utils/templatehooks.html diff --git a/mediagoblin/templates/mediagoblin/media_displays/image.html b/mediagoblin/templates/mediagoblin/media_displays/image.html index f27433bd..bc03c456 100644 --- a/mediagoblin/templates/mediagoblin/media_displays/image.html +++ b/mediagoblin/templates/mediagoblin/media_displays/image.html @@ -18,19 +18,12 @@ {% extends 'mediagoblin/user_pages/media.html' %} -{% from "/mediagoblin/utils/templatehooks.html" import template_hook with context %} - {% block mediagoblin_head %} {{ super() }} - {% for template in get_hook_templates("image_extrahead") %} - {% include template %} - {% endfor %} - {# {{ template_hook("image_extrahead") }} #} + {% template_hook("image_extrahead") %} {% endblock mediagoblin_head %} {% block mediagoblin_sidebar %} - {% for template in get_hook_templates("image_sideinfo") %} - {% include template %} - {% endfor %} - {# {{ template_hook("image_sideinfo") }} #} + {{ super() }} + {% template_hook("image_sideinfo") %} {% endblock %} diff --git a/mediagoblin/templates/mediagoblin/user_pages/media.html b/mediagoblin/templates/mediagoblin/user_pages/media.html index 2e159be4..1cc2a763 100644 --- a/mediagoblin/templates/mediagoblin/user_pages/media.html +++ b/mediagoblin/templates/mediagoblin/user_pages/media.html @@ -18,7 +18,6 @@ {% extends "mediagoblin/base.html" %} {% import "/mediagoblin/utils/wtforms.html" as wtforms_util %} -{% from "/mediagoblin/utils/templatehooks.html" import template_hook %} {% from "mediagoblin/utils/pagination.html" import render_pagination %} {% block title %}{{ media.title }} — {{ super() }}{% endblock %} @@ -31,7 +30,7 @@ - {{ template_hook("media_extrahead") }} + {% template_hook("media_extrahead") %} {% endblock mediagoblin_head %} {% block mediagoblin_content %} @@ -197,7 +196,7 @@

{% endif %} - {{ template_hook("media_sideinfo") }} + {% template_hook("media_sideinfo") %} {% block mediagoblin_sidebar %} {% endblock %} diff --git a/mediagoblin/templates/mediagoblin/utils/templatehooks.html b/mediagoblin/templates/mediagoblin/utils/templatehooks.html deleted file mode 100644 index 615ea635..00000000 --- a/mediagoblin/templates/mediagoblin/utils/templatehooks.html +++ /dev/null @@ -1,22 +0,0 @@ -{# -# GNU MediaGoblin -- federated, autonomous media hosting -# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -#} -{% macro template_hook(hook_name) %} - {% for template in get_hook_templates(hook_name) %} - {% include template %} - {% endfor %} -{% endmacro %} diff --git a/mediagoblin/tools/template.py b/mediagoblin/tools/template.py index c76ce639..f83c8228 100644 --- a/mediagoblin/tools/template.py +++ b/mediagoblin/tools/template.py @@ -15,7 +15,11 @@ # along with this program. If not, see . from math import ceil + import jinja2 +from jinja2.ext import Extension +from jinja2.nodes import Include, Const + from babel.localedata import exists from werkzeug.urls import url_quote_plus @@ -49,7 +53,9 @@ def get_jinja_env(template_loader, locale): template_env = jinja2.Environment( loader=template_loader, autoescape=True, undefined=jinja2.StrictUndefined, - extensions=['jinja2.ext.i18n', 'jinja2.ext.autoescape']) + extensions=[ + 'jinja2.ext.i18n', 'jinja2.ext.autoescape', + TemplateHookExtension]) template_env.install_gettext_callables( mg_globals.thread_scope.translations.ugettext, @@ -102,3 +108,33 @@ def render_template(request, template_path, context): def clear_test_template_context(): global TEMPLATE_TEST_CONTEXT TEMPLATE_TEST_CONTEXT = {} + + +class TemplateHookExtension(Extension): + """ + Easily loop through a bunch of templates from a template hook. + + Use: + {% template_hook("comment_extras") %} + + ... will include all templates hooked into the comment_extras section. + """ + + tags={"template_hook"} + + def __init__(self, environment): + super(TemplateHookExtension, self).__init__(environment) + + def parse(self, parser): + includes = [] + expr = parser.parse_expression() + lineno = expr.lineno + hook_name = expr.args[0].value + + for template_name in get_hook_templates(hook_name): + includes.append( + parser.parse_import_context( + Include(Const(template_name), True, False, lineno=lineno), + True)) + + return includes -- 2.25.1