Very start of plugin hooks and openstreetmap pluginification
authorChristopher Allan Webber <cwebber@dustycloud.org>
Fri, 25 Jan 2013 16:39:20 +0000 (10:39 -0600)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Wed, 30 Jan 2013 19:22:18 +0000 (13:22 -0600)
 - 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/templates/mediagoblin/plugins/geolocation/map.html [moved from mediagoblin/templates/mediagoblin/utils/geolocation_map.html with 100% similarity]
mediagoblin/templates/mediagoblin/media_displays/image.html
mediagoblin/templates/mediagoblin/user_pages/media.html
mediagoblin/tools/pluginapi.py

index 30c2a90dfeb4c1251e1e84f5b547c40c33b632ad..b03cfc7841d307055074831170d41b821261508a 100644 (file)
 
 {% 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 %}
index 7e184257faf96e85d704afd19b61aacf5e2dd51e..b18e08285e07500e3e1fe327ab65325ee0d983fe 100644 (file)
@@ -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 }} &mdash; {{ super() }}{% endblock %}
   <script type="text/javascript"
           src="{{ request.staticdirect('/js/keyboard_navigation.js') }}"></script>
 
-  {% if app_config['geolocation_map_visible'] %}
-    <link rel="stylesheet"
-         href="{{ request.staticdirect('/extlib/leaflet/leaflet.css') }}" />
-
-    <script type="text/javascript"
-            src="{{ request.staticdirect('/extlib/leaflet/leaflet.js') }}"></script>
-    <script type="text/javascript"
-            src="{{ request.staticdirect('/js/geolocation-map.js') }}"></script>
-  {% endif %}
+  {% template_hook "media_extrahead" %}
 {% endblock mediagoblin_head %}
 
 {% block mediagoblin_content %}
       </p>
     {% endif %}
 
+    {% template_hook "media_sideinfo" %}
+
     {% block mediagoblin_sidebar %}
     {% endblock %}
+
   </div>
   <div class="clear"></div>
 {% endblock %}
index 38ab631baf54b36d89cf5d722cf0677cefa32ba9..2b8e95f4f590a52e7f031c1b39d2507fe2415148 100644 (file)
@@ -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)