13 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
13 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
14 # details. |
14 # details. |
15 # |
15 # |
16 # You should have received a copy of the GNU Lesser General Public License along |
16 # You should have received a copy of the GNU Lesser General Public License along |
17 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
17 # with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
18 """base xml and rss views |
18 """base xml and rss views""" |
19 |
19 |
20 """ |
|
21 __docformat__ = "restructuredtext en" |
20 __docformat__ = "restructuredtext en" |
22 _ = unicode |
21 _ = unicode |
23 |
22 |
24 from time import timezone |
23 from time import timezone |
25 |
24 |
26 from logilab.mtconverter import xml_escape |
25 from logilab.mtconverter import xml_escape |
27 |
26 |
28 from cubicweb.selectors import non_final_entity, one_line_rset, appobject_selectable |
27 from cubicweb.selectors import (implements, non_final_entity, one_line_rset, |
29 from cubicweb.view import EntityView, AnyRsetView, Component |
28 appobject_selectable, adaptable) |
|
29 from cubicweb.view import EntityView, EntityAdapter, AnyRsetView, Component |
|
30 from cubicweb.view import implements_adapter_compat |
30 from cubicweb.uilib import simple_sgml_tag |
31 from cubicweb.uilib import simple_sgml_tag |
31 from cubicweb.web import httpcache, box |
32 from cubicweb.web import httpcache, box |
32 |
33 |
33 |
34 |
34 # base xml views ############################################################## |
35 # base xml views ############################################################## |
118 w(u'</%s>\n' % self.xml_root) |
119 w(u'</%s>\n' % self.xml_root) |
119 |
120 |
120 |
121 |
121 # RSS stuff ################################################################### |
122 # RSS stuff ################################################################### |
122 |
123 |
|
124 class IFeedAdapter(EntityAdapter): |
|
125 __regid__ = 'IFeed' |
|
126 __select__ = implements('Any') |
|
127 |
|
128 @implements_adapter_compat('IFeed') |
|
129 def rss_feed_url(self): |
|
130 """return an url to the rss feed for this entity""" |
|
131 return self.absolute_url(vid='rss') |
|
132 |
|
133 |
123 class RSSFeedURL(Component): |
134 class RSSFeedURL(Component): |
124 __regid__ = 'rss_feed_url' |
135 __regid__ = 'rss_feed_url' |
125 __select__ = non_final_entity() |
136 __select__ = non_final_entity() |
126 |
137 |
127 def feed_url(self): |
138 def feed_url(self): |
128 return self._cw.build_url(rql=self.cw_rset.limited_rql(), vid='rss') |
139 return self._cw.build_url(rql=self.cw_rset.limited_rql(), vid='rss') |
129 |
140 |
130 |
141 |
131 class RSSEntityFeedURL(Component): |
142 class RSSEntityFeedURL(Component): |
132 __regid__ = 'rss_feed_url' |
143 __regid__ = 'rss_feed_url' |
133 __select__ = non_final_entity() & one_line_rset() |
144 __select__ = one_line_rset() & adaptable('IFeed') |
134 |
145 |
135 def feed_url(self): |
146 def feed_url(self): |
136 return self.cw_rset.get_entity(0, 0).rss_feed_url() |
147 entity = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0) |
|
148 return entity.cw_adapt_to('IFeed').rss_feed_url() |
137 |
149 |
138 |
150 |
139 class RSSIconBox(box.BoxTemplate): |
151 class RSSIconBox(box.BoxTemplate): |
140 """just display the RSS icon on uniform result set""" |
152 """just display the RSS icon on uniform result set""" |
141 __regid__ = 'rss' |
153 __regid__ = 'rss' |