[silva.fanstatic][Emiliano D'Alterio] Added event subscription t...

[email protected] Tue, 22 Oct 2013 15:23:46 +0200
Newsgroups gmane.comp.web.zope.silva.cvs
Message-ID <[email protected]>
author:    Emiliano D'Alterio
date:      Tue Oct 22 15:23:32 2013 +0200
revision:  39:142dcd1dbd79 in silva.fanstatic
branch:    
details:   https://hg.infrae.com/silva.fanstatic?cmd=changeset;node=142dcd1dbd79
modified:  src/silva/fanstatic/support.py
added:     
removed:   
log:       Added event subscription to handle resources injection, so
	"Resources" content provider in templates is not required anymore.


diffstat:

 src/silva/fanstatic/support.py |  13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)

diffs (41 lines):

diff -r 8f02edb840f5 -r 142dcd1dbd79 src/silva/fanstatic/support.py
--- a/src/silva/fanstatic/support.py	Tue Oct 08 16:33:15 2013 +0200
+++ b/src/silva/fanstatic/support.py	Tue Oct 22 15:23:32 2013 +0200
@@ -8,16 +8,20 @@
 from zope.interface import Interface, implements
 from zope.traversing.browser.interfaces import IAbsoluteURL
 from zope.traversing.interfaces import ITraversable
+from zope.publisher.interfaces.browser import IBrowserView
 import fanstatic
 
 from silva.fanstatic.interfaces import ISubscribedResource
 from silva.fanstatic.interfaces import IZopeResource
 from silva.core.views.interfaces import IVirtualSite
 
+from infrae.wsgi.interfaces import IPublicationAfterRender
+
 from ZPublisher.interfaces import IPubFailure, IPubSuccess
 
 _marker = object()
 
+
 class ZopeFanstaticResource(object):
     # Hack to get ++resource++foo/bar/baz.jpg *paths* working in Zope
     # Pagetemplates. Note that ++resource+foo/bar/baz.jpg *URLs* will
@@ -66,9 +70,14 @@
         pass
 
     def render(self):
+        return u''
+
+
[email protected](IPublicationAfterRender)
+def inject_resources(event):
+    if IBrowserView.providedBy(event.content):
         grok.queryMultiSubscriptions(
-            (self.request, self.context), ISubscribedResource)
-        return u''
+            (event.request, event.content), ISubscribedResource)
 
 
 @grok.subscribe(IPubSuccess)