erge
authorLaure Bourgois <Laure.Bourgois@logilab.fr>
Tue, 25 Nov 2008 17:45:11 +0100
changeset 145 d5acef862c58
parent 144 3159772915c4 (diff)
parent 141 6d008838f2c9 (current diff)
child 146 f8035a67971a
erge
doc/book/en/01-00-introduction.en.txt
doc/book/en/01-01-create-cube.en.txt
doc/book/en/01-05-components.en.txt
doc/book/en/01-06-maintemplate.en.txt
doc/book/en/01-07-rss-xml.en.txt
doc/book/en/01-08-book-map.en.txt
doc/book/en/02-00-foundation.en.txt
doc/book/en/02-01-concepts.en.txt
doc/book/en/02-02-registry.en.txt
doc/book/en/02-03-configuration.en.txt
doc/book/en/03-00-definition-schema.en.txt
doc/book/en/03-00-setup.en.txt
doc/book/en/03-01-bis-installation.en.txt
doc/book/en/03-01-installation.en.txt
doc/book/en/03-02-create-instance.en.txt
doc/book/en/03-03-cubicweb-ctl.en.txt
doc/book/en/03-10-stdlib-schemas.en.txt
doc/book/en/03-11-definition-schema.en.txt
doc/book/en/04-00-define-schema.en.txt
doc/book/en/04-01-schema-stdlib.en.txt
doc/book/en/04-02-schema-definition.en.txt
doc/book/en/05-00-define-views.en.txt
doc/book/en/05-01-views-stdlib.en.txt
doc/book/en/06-00-define-workflows.en.txt
doc/book/en/07-00-data-as-objects.en.txt
doc/book/en/07-01-define-entities.en.txt
doc/book/en/08-00-site-config.en.txt
doc/book/en/09-00-instance-config.en.txt
doc/book/en/10-00-form-management.en.txt
doc/book/en/11-00-ajax-json.en.txt
doc/book/en/12-00-internationalization.en.txt
doc/book/en/12-00-reference.en.txt
doc/book/en/12-00-ui-components.en.txt
doc/book/en/14-00-hooks.en.txt
doc/book/en/15-00-notifications.en.txt
doc/book/en/16-00-rql.en.txt
doc/book/en/17-00-migration.en.txt
doc/book/en/18-00-tests.en.txt
doc/book/en/19-00-i18n.en.txt
doc/book/en/20-00-google-appengine.en.txt
doc/book/en/20-01-intro.en.txt
doc/book/en/20-02-install.en.txt
doc/book/en/21-00-appendix.en.txt
doc/book/en/21-01-architecture.en.txt
doc/book/en/21-03-modules-stdlib.en.txt
doc/book/en/21-04-modules-cbw-api.en.txt
doc/book/en/21-05-mercurial.en.txt
doc/book/en/21-06-mercurial-forest.en.txt
doc/book/en/22-00-faq.en.txt
doc/book/en/XX-XX-actions.en.txt
doc/book/en/XX-XX-boxes.en.txt
doc/book/en/XX-XX-dbapi.en.txt
doc/book/en/XX-XX-embedding-external-page.en.txt
doc/book/en/XX-XX-repository-operations.en.txt
doc/book/en/XX-XX-repository-session.en.txt
doc/book/en/XX-XX-repository-tasks.en.txt
doc/book/en/XX-XX-request.en.txt
doc/book/en/XX-XX-sessions.en.txt
doc/book/en/XX-XX-templates.en.txt
doc/book/en/XX-XX-urlrewrite.en.txt
misc/migration/3.0.0_Any.py
skeleton/site_cubicweb.py
skeleton/sobjects.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 ##########################################################
 
--- 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
--- 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'&nbsp;|&nbsp;'.join(html))
         self.w(u'</div>')
         
+
+
+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()
+
--- 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'<link rel="alternate" type="application/rss+xml" title="RSS feed" href="%s"/>\n'
-                   % html_escape(url))
+                       %  html_escape(url))
 
     def pageid(self):
         req = self.req
--- 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'<a href="%s"><img src="%s" border="0" /></a>\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'<a href="%s"><img src="%s" border="0" /></a>\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'<a href="%s"><img src="%s" border="0" /></a>\n' %
-               (html_escape(url), rss))
 
 ## warning("schemabox ne marche plus pour le moment")
 ## class SchemaBox(BoxTemplate):