# HG changeset patch # User Laure Bourgois # Date 1227631511 -3600 # Node ID d5acef862c588d58049c1c03cfcd7991bc86938c # Parent 3159772915c4764d84ed8b40bde923ad9b315c02# Parent 6d008838f2c9d48a8f1c1edec9ca2891638a9653 erge diff -r 6d008838f2c9 -r d5acef862c58 common/selectors.py --- a/common/selectors.py Tue Nov 25 14:06:26 2008 +0100 +++ b/common/selectors.py Tue Nov 25 17:45:11 2008 +0100 @@ -389,6 +389,16 @@ return 0 return 1 +def appobject_selectable(registry, oid): + @lltrace + def selector(cls, req, rset, *args, **kwargs): + try: + cls.vreg.select_object(registry, oid, req, rset, *args, **kwargs) + return 1 + except NoSelectableObject: + return 0 + return selector + # compound selectors ########################################################## diff -r 6d008838f2c9 -r d5acef862c58 entities/__init__.py --- a/entities/__init__.py Tue Nov 25 14:06:26 2008 +0100 +++ b/entities/__init__.py Tue Nov 25 17:45:11 2008 +0100 @@ -202,6 +202,7 @@ def rss_feed_url(self): return self.absolute_url(vid='rss') + # abstractions making the whole things (well, some at least) working ###### @classmethod diff -r 6d008838f2c9 -r d5acef862c58 web/views/basecomponents.py --- a/web/views/basecomponents.py Tue Nov 25 14:06:26 2008 +0100 +++ b/web/views/basecomponents.py Tue Nov 25 17:45:11 2008 +0100 @@ -14,14 +14,14 @@ from cubicweb import Unauthorized from cubicweb.common.uilib import html_escape, toggle_action -from cubicweb.common.selectors import yes_selector +from cubicweb.common.selectors import yes_selector, nfentity_selector, onelinerset_selector from cubicweb.schema import display_name from cubicweb.common.selectors import (chainfirst, multitype_selector, req_form_params_selector) from cubicweb.web.htmlwidgets import MenuWidget, PopupBoxMenu, BoxSeparator, BoxLink -from cubicweb.web.component import (SingletonVComponent, EntityVComponent, - RelatedObjectsVComponent) +from cubicweb.web.component import (VComponent, SingletonVComponent, EntityVComponent, + RelatedObjectsVComponent) _ = unicode @@ -234,3 +234,19 @@ self.w(u' | '.join(html)) self.w(u'') + + +class RSSFeedURL(VComponent): + id = 'rss_feed_url' + __selectors__ = (nfentity_selector,) + + def feed_url(self): + return self.build_url(rql=self.limited_rql(), vid='rss') + +class RSSEntityFeedURL(VComponent): + id = 'rss_feed_url' + __selectors__ = (nfentity_selector, onelinerset_selector) + + def feed_url(self): + return self.entity(0, 0).rss_feed_url() + diff -r 6d008838f2c9 -r d5acef862c58 web/views/basetemplates.py --- a/web/views/basetemplates.py Tue Nov 25 14:06:26 2008 +0100 +++ b/web/views/basetemplates.py Tue Nov 25 17:45:11 2008 +0100 @@ -11,7 +11,7 @@ from cubicweb import NoSelectableObject, ObjectNotFound from cubicweb.common.view import Template, MainTemplate, NOINDEX, NOFOLLOW -from cubicweb.common.selectors import nfentity_selector +from cubicweb.common.selectors import nfentity_selector, onelinerset_selector from cubicweb.common.utils import make_uid from cubicweb.web.views.baseviews import vid_from_rset @@ -331,11 +331,11 @@ self.req.add_js(jscript, localfile=False) def alternates(self): - # nfentity_selector is used by the rss icon box as well - if nfentity_selector(self, self.req, self.rset): - url = self.build_url(rql=self.limited_rql(), vid='rss') + urlgetter = self.vreg.select_component('rss_feed_url', self.req, self.rset) + if urlgetter is not None: + url = urlgetter.feed_url() self.whead(u'\n' - % html_escape(url)) + % html_escape(url)) def pageid(self): req = self.req diff -r 6d008838f2c9 -r d5acef862c58 web/views/boxes.py --- a/web/views/boxes.py Tue Nov 25 14:06:26 2008 +0100 +++ b/web/views/boxes.py Tue Nov 25 17:45:11 2008 +0100 @@ -17,7 +17,7 @@ from logilab.mtconverter import html_escape -from cubicweb.common.selectors import rset_selector, nfentity_selector, onelinerset_selector +from cubicweb.common.selectors import (rset_selector, appobject_selectable) from cubicweb.web.htmlwidgets import BoxWidget, BoxMenu, BoxHtml, RawBoxItem from cubicweb.web.box import BoxTemplate, ExtResourcesBoxTemplate @@ -165,7 +165,6 @@ """display a box containing links to all possible views""" id = 'possible_views_box' - title = _('possible views') order = 10 require_groups = ('users', 'managers') @@ -184,9 +183,10 @@ box.render(self.w) + class RSSIconBox(ExtResourcesBoxTemplate): """just display the RSS icon on uniform result set""" - __selectors__ = ExtResourcesBoxTemplate.__selectors__ + (nfentity_selector,) + __selectors__ = ExtResourcesBoxTemplate.__selectors__ + (appobject_selectable('components', 'rss_feed_url'),) id = 'rss' order = 999 @@ -194,21 +194,11 @@ visible = False def call(self, **kwargs): - url = html_escape(self.build_url(rql=self.limited_rql(), vid='rss')) + urlgetter = self.vreg.select_component('rss_feed_url', self.req, self.rset) + url = urlgetter.feed_url() rss = self.req.external_resource('RSS_LOGO') - self.w(u'\n' % (url, rss)) - -class EntityRSSIconBox(RSSIconBox): - """just display the RSS icon on uniform result set for a single entity""" - __selectors__ = RSSIconBox.__selectors__ + (onelinerset_selector,) + self.w(u'\n' % (html_escape(url), rss)) - def call(self, **kwargs): - entity = self.entity(0, 0) - url = entity.rss_feed_url() - eid = entity.eid - rss = self.req.external_resource('RSS_LOGO') - self.w(u'\n' % - (html_escape(url), rss)) ## warning("schemabox ne marche plus pour le moment") ## class SchemaBox(BoxTemplate):