web/views/xmlrss.py
branchtls-sprint
changeset 1091 b5e253c0dd13
parent 824 a5e6acffde30
child 1135 00eb43688a57
--- a/web/views/xmlrss.py	Thu Mar 12 16:23:31 2009 +0100
+++ b/web/views/xmlrss.py	Thu Mar 12 16:29:00 2009 +0100
@@ -1,6 +1,5 @@
 """base xml and rss views
 
-
 :organization: Logilab
 :copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
@@ -11,10 +10,17 @@
 
 from logilab.mtconverter import xml_escape
 
+from cubicweb.selectors import non_final_entity, one_line_rset, appobject_selectable
 from cubicweb.view import EntityView, AnyRsetView
 from cubicweb.web.httpcache import MaxAgeHTTPCacheManager
+from cubicweb.web.component import Component
+from cubicweb.web.box import BoxTemplate
 from cubicweb.common.uilib import simple_sgml_tag
 
+_ = unicode
+
+
+# base xml views ##############################################################
 
 class XmlView(EntityView):
     """xml view for entities"""
@@ -60,7 +66,6 @@
                 self.w(u'  <%s>%s</%s>\n' % (attr, value, attr))
         self.w(u'</%s>\n' % (entity.e_schema))
 
-
     
 class XmlRsetView(AnyRsetView):
     """dumps raw rset as xml"""
@@ -97,7 +102,45 @@
                 w(simple_sgml_tag(tag, val, **attrs))
             w(u' </row>\n')
         w(u'</%s>\n' % self.xml_root)
+
     
+# RSS stuff ###################################################################
+
+class RSSFeedURL(Component):
+    id = 'rss_feed_url'
+    __select__ = non_final_entity()
+    
+    def feed_url(self):
+        return self.build_url(rql=self.limited_rql(), vid='rss')
+
+
+class RSSEntityFeedURL(Component):
+    id = 'rss_feed_url'
+    __select__ = non_final_entity() & one_line_rset()
+    
+    def feed_url(self):
+        return self.entity(0, 0).rss_feed_url()
+
+        
+class RSSIconBox(BoxTemplate):
+    """just display the RSS icon on uniform result set"""
+    id = 'rss'
+    __select__ = (BoxTemplate.__select__
+                  & appobject_selectable('components', 'rss_feed_url'))
+    
+    visible = False
+    order = 999
+    
+    def call(self, **kwargs):
+        try:
+            rss = self.req.external_resource('RSS_LOGO')
+        except KeyError:
+            self.error('missing RSS_LOGO external resource')
+            return
+        urlgetter = self.vreg.select_component('rss_feed_url', self.req, self.rset)
+        url = urlgetter.feed_url()
+        self.w(u'<a href="%s"><img src="%s" alt="rss"/></a>\n' % (html_escape(url), rss))
+
 
 class RssView(XmlView):
     id = 'rss'