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) %}
+
{% 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