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