Support stuff-other-than-updates. veekun-promotions/2010121201 veekun-promotions/2010122201 veekun-promotions/2010122701 veekun-promotions/2011011701 veekun-promotions/2011021501 veekun-promotions/2011021502 veekun-promotions/2011022101 veekun-promotions/2011030301 veekun-promotions/2011030302
authorEevee <git@veekun.com>
Sat, 11 Dec 2010 08:25:34 +0000 (00:25 -0800)
committerEevee <git@veekun.com>
Sat, 11 Dec 2010 08:25:34 +0000 (00:25 -0800)
splinext/frontpage/controllers/frontpage.py
splinext/frontpage/templates/front_page/extras.mako [new file with mode: 0644]
splinext/frontpage/templates/front_page/updates.mako

index 900c87b..fdb0b4c 100644 (file)
@@ -8,6 +8,7 @@ from sqlalchemy.orm.exc import NoResultFound
 
 from spline.lib import helpers as h
 from spline.lib.base import BaseController, render
 
 from spline.lib import helpers as h
 from spline.lib.base import BaseController, render
+from spline.lib.plugin.load import run_hooks
 from spline.model import meta
 from splinext.frontpage.sources import max_age_to_datetime
 
 from spline.model import meta
 from splinext.frontpage.sources import max_age_to_datetime
 
@@ -45,6 +46,13 @@ class FrontPageController(BaseController):
 
             run_hooks('frontpage_updates_updatetype', opt1=val1, opt2=val2)
 
 
             run_hooks('frontpage_updates_updatetype', opt1=val1, opt2=val2)
 
+        Plugins may also respond to the `frontpage_extras` hook with other
+        interesting things to put on the front page.  There's no way to
+        customize the order of these extras or which appear and which don't, at
+        the moment.  Such hooks should return an object with at least a
+        `template` attribute; the template will be called with the object
+        passed in as its `obj` argument.
+
         Local plugins can override the fairly simple index.mako template to
         customize the front page layout.
         """
         Local plugins can override the fairly simple index.mako template to
         customize the front page layout.
         """
@@ -99,6 +107,11 @@ class FrontPageController(BaseController):
         # Done!  Feed to template
         c.updates = updates
 
         # Done!  Feed to template
         c.updates = updates
 
+        # Hook for non-update interesting things to put on the front page.
+        # This hook should return objects with a 'template' attribute, and
+        # whatever else they need
+        c.extras = run_hooks('frontpage_extras')
+
         ret = render('/index.mako')
 
         # Commit AFTER rendering the template!  Committing invalidates
         ret = render('/index.mako')
 
         # Commit AFTER rendering the template!  Committing invalidates
diff --git a/splinext/frontpage/templates/front_page/extras.mako b/splinext/frontpage/templates/front_page/extras.mako
new file mode 100644 (file)
index 0000000..d387425
--- /dev/null
@@ -0,0 +1,3 @@
+% for extra in c.extras:
+    <%include file="${extra.template}" args="obj=extra" />
+% endfor
index 257f0dd..e0f95da 100644 (file)
@@ -1,3 +1,4 @@
+<h1>Updates</h1>
 % if c.updates and not c.last_seen_item:
     <hr class="frontpage-new-stuff">
 % endif
 % if c.updates and not c.last_seen_item:
     <hr class="frontpage-new-stuff">
 % endif