web/views/facets.py
branchstable
changeset 2339 00b704535984
parent 2337 6620e5abcd99
parent 2326 05ae71d9a069
child 2340 65445ae67db0
equal deleted inserted replaced
2338:3f7c7fbae94e 2339:00b704535984
     7 """
     7 """
     8 __docformat__ = "restructuredtext en"
     8 __docformat__ = "restructuredtext en"
     9 
     9 
    10 from simplejson import dumps
    10 from simplejson import dumps
    11 
    11 
    12 from logilab.mtconverter import html_escape
    12 from logilab.mtconverter import xml_escape
    13 
    13 
    14 from cubicweb.vregistry import objectify_selector
    14 from cubicweb.vregistry import objectify_selector
    15 from cubicweb.selectors import (non_final_entity, two_lines_rset,
    15 from cubicweb.selectors import (non_final_entity, two_lines_rset,
    16                                 match_context_prop, yes, relation_possible)
    16                                 match_context_prop, yes, relation_possible)
    17 from cubicweb.web.box import BoxTemplate
    17 from cubicweb.web.box import BoxTemplate
    40     roundcorners = True
    40     roundcorners = True
    41 
    41 
    42     needs_css = 'cubicweb.facets.css'
    42     needs_css = 'cubicweb.facets.css'
    43     needs_js = ('cubicweb.ajax.js', 'cubicweb.formfilter.js')
    43     needs_js = ('cubicweb.ajax.js', 'cubicweb.formfilter.js')
    44 
    44 
    45     bkLinkBox_template = u'<div class="facetTitle">%s</div>'
    45     bk_linkbox_template = u'<div class="facetTitle">%s</div>'
    46 
    46 
    47     def facetargs(self):
    47     def facetargs(self):
    48         """this method returns the list of extra arguments that should
    48         """this method returns the list of extra arguments that should
    49         be used by the facet
    49         be used by the facet
    50         """
    50         """
    81                     wdg = facet.get_widget()
    81                     wdg = facet.get_widget()
    82                     if wdg is not None:
    82                     if wdg is not None:
    83                         widgets.append(wdg)
    83                         widgets.append(wdg)
    84             if not widgets:
    84             if not widgets:
    85                 return
    85                 return
    86             if self.bkLinkBox_template:
    86             if self.bk_linkbox_template:
    87                 self.displayBookmarkLink(rset)
    87                 self.display_bookmark_link(rset)
    88             w = self.w
    88             w = self.w
    89             w(u'<form method="post" id="%sForm" cubicweb:facetargs="%s" action="">'  % (
    89             w(u'<form method="post" id="%sForm" cubicweb:facetargs="%s" action="">'  % (
    90                 divid, html_escape(dumps([divid, vid, paginate, self.facetargs()]))))
    90                 divid, xml_escape(dumps([divid, vid, paginate, self.facetargs()]))))
    91             w(u'<fieldset>')
    91             w(u'<fieldset>')
    92             hiddens = {'facets': ','.join(wdg.facet.id for wdg in widgets),
    92             hiddens = {'facets': ','.join(wdg.facet.id for wdg in widgets),
    93                        'baserql': baserql}
    93                        'baserql': baserql}
    94             for param in ('subvid', 'vtitle'):
    94             for param in ('subvid', 'vtitle'):
    95                 if param in req.form:
    95                 if param in req.form:
   101         finally:
   101         finally:
   102             rqlst.recover()
   102             rqlst.recover()
   103             import cubicweb
   103             import cubicweb
   104             cubicweb.info('after facets with rql: %s' % repr(rqlst))
   104             cubicweb.info('after facets with rql: %s' % repr(rqlst))
   105 
   105 
   106     def displayBookmarkLink(self, rset):
   106     def display_bookmark_link(self, rset):
   107         eschema = self.schema.eschema('Bookmark')
   107         eschema = self.schema.eschema('Bookmark')
   108         if eschema.has_perm(self.req, 'add'):
   108         if eschema.has_perm(self.req, 'add'):
   109             bk_path = 'view?rql=%s' % rset.printable_rql()
   109             bk_path = 'view?rql=%s' % rset.printable_rql()
   110             bk_title = self.req._('my custom search')
   110             bk_title = self.req._('my custom search')
   111             linkto = 'bookmarked_by:%s:subject' % self.req.user.eid
   111             linkto = 'bookmarked_by:%s:subject' % self.req.user.eid
   112             bk_add_url = self.build_url('add/Bookmark', path=bk_path, title=bk_title, __linkto=linkto)
   112             bk_add_url = self.build_url('add/Bookmark', path=bk_path, title=bk_title, __linkto=linkto)
   113             bk_base_url = self.build_url('add/Bookmark', title=bk_title, __linkto=linkto)
   113             bk_base_url = self.build_url('add/Bookmark', title=bk_title, __linkto=linkto)
   114             bk_link = u'<a cubicweb:target="%s" id="facetBkLink" href="%s">%s</a>' % (
   114             bk_link = u'<a cubicweb:target="%s" id="facetBkLink" href="%s">%s</a>' % (
   115                     html_escape(bk_base_url),
   115                     xml_escape(bk_base_url),
   116                     html_escape(bk_add_url),
   116                     xml_escape(bk_add_url),
   117                     self.req._('bookmark this search'))
   117                     self.req._('bookmark this search'))
   118             self.w(self.bkLinkBox_template % bk_link)
   118             self.w(self.bk_linkbox_template % bk_link)
   119 
   119 
   120     def get_facets(self, rset, mainvar):
   120     def get_facets(self, rset, mainvar):
   121         return self.vreg.possible_vobjects('facets', self.req, rset,
   121         return self.vreg.possible_vobjects('facets', self.req, rset,
   122                                            context='facetbox',
   122                                            context='facetbox',
   123                                            filtered_variable=mainvar)
   123                                            filtered_variable=mainvar)