From 1c2d01ae3ba421536d5775e5992393019714b856 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Fri, 25 Jan 2013 10:39:20 -0600 Subject: Very start of plugin hooks and openstreetmap pluginification - Added start of template hook code to pluginapi.py - Started to break openstreetmap into plugin; moved templates - Added plugin hooks in media and image media templates ... almost certainly, none of this works yet. :) --- .../mediagoblin/plugins/geolocation/map.html | 60 ++++++++++++++++++++++ .../mediagoblin/media_displays/image.html | 8 +++ .../templates/mediagoblin/user_pages/media.html | 14 ++--- .../mediagoblin/utils/geolocation_map.html | 60 ---------------------- mediagoblin/tools/pluginapi.py | 27 ++++++++++ 5 files changed, 100 insertions(+), 69 deletions(-) create mode 100644 mediagoblin/plugins/geolocation/templates/mediagoblin/plugins/geolocation/map.html delete mode 100644 mediagoblin/templates/mediagoblin/utils/geolocation_map.html diff --git a/mediagoblin/plugins/geolocation/templates/mediagoblin/plugins/geolocation/map.html b/mediagoblin/plugins/geolocation/templates/mediagoblin/plugins/geolocation/map.html new file mode 100644 index 00000000..b48678bb --- /dev/null +++ b/mediagoblin/plugins/geolocation/templates/mediagoblin/plugins/geolocation/map.html @@ -0,0 +1,60 @@ +{# +# 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 . +#} + +{% block geolocation_map %} + {% if app_config['geolocation_map_visible'] + and media.media_data.gps_latitude is defined + and media.media_data.gps_latitude + and media.media_data.gps_longitude is defined + and media.media_data.gps_longitude %} +

{% trans %}Location{% endtrans %}

+
+ {%- set lon = media.media_data.gps_longitude %} + {%- set lat = media.media_data.gps_latitude %} + {%- set osm_url = "http://openstreetmap.org/?mlat={lat}&mlon={lon}".format(lat=lat, lon=lon) %} +
+ + +
+ + +

+ + {% trans -%} + View on OpenStreetMap + {%- endtrans %} + +

+
+ {% endif %} +{% endblock %} diff --git a/mediagoblin/templates/mediagoblin/media_displays/image.html b/mediagoblin/templates/mediagoblin/media_displays/image.html index 30c2a90d..b03cfc78 100644 --- a/mediagoblin/templates/mediagoblin/media_displays/image.html +++ b/mediagoblin/templates/mediagoblin/media_displays/image.html @@ -18,5 +18,13 @@ {% extends 'mediagoblin/user_pages/media.html' %} +{% from "/mediagoblin/utils/templatehooks.html" import template_hook %} + +{% block mediagoblin_head %} + {{ super() }} + {% template_hook "image_extrahead" %} +{% endblock mediagoblin_head %} + {% block mediagoblin_sidebar %} + {% template_hook "image_sideinfo" %} {% endblock %} diff --git a/mediagoblin/templates/mediagoblin/user_pages/media.html b/mediagoblin/templates/mediagoblin/user_pages/media.html index 7e184257..b18e0828 100644 --- a/mediagoblin/templates/mediagoblin/user_pages/media.html +++ b/mediagoblin/templates/mediagoblin/user_pages/media.html @@ -18,6 +18,7 @@ {% 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 %} @@ -30,15 +31,7 @@ - {% if app_config['geolocation_map_visible'] %} - - - - - {% endif %} + {% template_hook "media_extrahead" %} {% endblock mediagoblin_head %} {% block mediagoblin_content %} @@ -206,8 +199,11 @@

{% endif %} + {% template_hook "media_sideinfo" %} + {% block mediagoblin_sidebar %} {% endblock %} +
{% endblock %} diff --git a/mediagoblin/templates/mediagoblin/utils/geolocation_map.html b/mediagoblin/templates/mediagoblin/utils/geolocation_map.html deleted file mode 100644 index b48678bb..00000000 --- a/mediagoblin/templates/mediagoblin/utils/geolocation_map.html +++ /dev/null @@ -1,60 +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 . -#} - -{% block geolocation_map %} - {% if app_config['geolocation_map_visible'] - and media.media_data.gps_latitude is defined - and media.media_data.gps_latitude - and media.media_data.gps_longitude is defined - and media.media_data.gps_longitude %} -

{% trans %}Location{% endtrans %}

-
- {%- set lon = media.media_data.gps_longitude %} - {%- set lat = media.media_data.gps_latitude %} - {%- set osm_url = "http://openstreetmap.org/?mlat={lat}&mlon={lon}".format(lat=lat, lon=lon) %} -
- - -
- - -

- - {% trans -%} - View on OpenStreetMap - {%- endtrans %} - -

-
- {% endif %} -{% endblock %} diff --git a/mediagoblin/tools/pluginapi.py b/mediagoblin/tools/pluginapi.py index 38ab631b..2b8e95f4 100644 --- a/mediagoblin/tools/pluginapi.py +++ b/mediagoblin/tools/pluginapi.py @@ -83,6 +83,9 @@ class PluginManager(object): # list of registered template paths "template_paths": set(), + # list of template hooks + "template_hooks": {}, + # list of registered routes "routes": [], } @@ -131,6 +134,28 @@ class PluginManager(object): def get_routes(self): return tuple(self.routes) + def register_template_hooks(self, template_hooks): + """ + Register a dict of template hooks. + + Takes template_hooks as an argument, which is a dictionary of + template hook names/keys to the templates they should provide. + (The value can either be a single template path or an iterable + of paths.) + + Example: + {"media_sidebar": "/plugin/sidemess/mess_up_the_side.html", + "media_descriptionbox": ["/plugin/sidemess/even_more_mess.html", + "/plugin/sidemess/so_much_mess.html"]} + """ + for hook, templates in template_hooks.items(): + if isinstance(templates, (list, tuple)): + self.template_hooks.setdefault(hook, []).extend(list(templates)) + else: + # In this case, it's actually a single callable---not a + # list of callables. + self.hooks.setdefault(hook, []).append(templates) + def register_routes(routes): """Registers one or more routes @@ -208,3 +233,5 @@ def get_config(key): return plugin_section.get(key, {}) +def register_template_hooks(template_hooks): + PluginManager().register_template_hooks(template_hooks) -- cgit v1.2.3