Move template hook over to a template_hook tag. Seems to work! :)

This commit is contained in:
Christopher Allan Webber 2013-01-28 14:08:16 -06:00
parent e9c3384b84
commit 927be5e8ca
4 changed files with 42 additions and 36 deletions

View File

@ -18,19 +18,12 @@
{% extends 'mediagoblin/user_pages/media.html' %} {% extends 'mediagoblin/user_pages/media.html' %}
{% from "/mediagoblin/utils/templatehooks.html" import template_hook with context %}
{% block mediagoblin_head %} {% block mediagoblin_head %}
{{ super() }} {{ super() }}
{% for template in get_hook_templates("image_extrahead") %} {% template_hook("image_extrahead") %}
{% include template %}
{% endfor %}
{# {{ template_hook("image_extrahead") }} #}
{% endblock mediagoblin_head %} {% endblock mediagoblin_head %}
{% block mediagoblin_sidebar %} {% block mediagoblin_sidebar %}
{% for template in get_hook_templates("image_sideinfo") %} {{ super() }}
{% include template %} {% template_hook("image_sideinfo") %}
{% endfor %}
{# {{ template_hook("image_sideinfo") }} #}
{% endblock %} {% endblock %}

View File

@ -18,7 +18,6 @@
{% extends "mediagoblin/base.html" %} {% extends "mediagoblin/base.html" %}
{% import "/mediagoblin/utils/wtforms.html" as wtforms_util %} {% import "/mediagoblin/utils/wtforms.html" as wtforms_util %}
{% from "/mediagoblin/utils/templatehooks.html" import template_hook %}
{% from "mediagoblin/utils/pagination.html" import render_pagination %} {% from "mediagoblin/utils/pagination.html" import render_pagination %}
{% block title %}{{ media.title }} — {{ super() }}{% endblock %} {% block title %}{{ media.title }} — {{ super() }}{% endblock %}
@ -31,7 +30,7 @@
<script type="text/javascript" <script type="text/javascript"
src="{{ request.staticdirect('/js/keyboard_navigation.js') }}"></script> src="{{ request.staticdirect('/js/keyboard_navigation.js') }}"></script>
{{ template_hook("media_extrahead") }} {% template_hook("media_extrahead") %}
{% endblock mediagoblin_head %} {% endblock mediagoblin_head %}
{% block mediagoblin_content %} {% block mediagoblin_content %}
@ -197,7 +196,7 @@
</p> </p>
{% endif %} {% endif %}
{{ template_hook("media_sideinfo") }} {% template_hook("media_sideinfo") %}
{% block mediagoblin_sidebar %} {% block mediagoblin_sidebar %}
{% endblock %} {% endblock %}

View File

@ -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 <http://www.gnu.org/licenses/>.
#}
{% macro template_hook(hook_name) %}
{% for template in get_hook_templates(hook_name) %}
{% include template %}
{% endfor %}
{% endmacro %}

View File

@ -15,7 +15,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from math import ceil from math import ceil
import jinja2 import jinja2
from jinja2.ext import Extension
from jinja2.nodes import Include, Const
from babel.localedata import exists from babel.localedata import exists
from werkzeug.urls import url_quote_plus from werkzeug.urls import url_quote_plus
@ -49,7 +53,9 @@ def get_jinja_env(template_loader, locale):
template_env = jinja2.Environment( template_env = jinja2.Environment(
loader=template_loader, autoescape=True, loader=template_loader, autoescape=True,
undefined=jinja2.StrictUndefined, undefined=jinja2.StrictUndefined,
extensions=['jinja2.ext.i18n', 'jinja2.ext.autoescape']) extensions=[
'jinja2.ext.i18n', 'jinja2.ext.autoescape',
TemplateHookExtension])
template_env.install_gettext_callables( template_env.install_gettext_callables(
mg_globals.thread_scope.translations.ugettext, mg_globals.thread_scope.translations.ugettext,
@ -102,3 +108,33 @@ def render_template(request, template_path, context):
def clear_test_template_context(): def clear_test_template_context():
global TEMPLATE_TEST_CONTEXT global TEMPLATE_TEST_CONTEXT
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