web/views/facets.py
branchtls-sprint
changeset 742 99115e029dca
parent 692 800592b8d39b
child 758 0c0dfd33a76d
equal deleted inserted replaced
739:39721e56b56d 742:99115e029dca
     8 
     8 
     9 from simplejson import dumps
     9 from simplejson import dumps
    10 
    10 
    11 from logilab.mtconverter import html_escape
    11 from logilab.mtconverter import html_escape
    12 
    12 
       
    13 from cubicweb.vregistry import objectify_selector
    13 from cubicweb.selectors import (chainfirst, chainall, non_final_entity,
    14 from cubicweb.selectors import (chainfirst, chainall, non_final_entity,
    14                                 two_lines_rset, match_context_prop,
    15                                 two_lines_rset, match_context_prop,
    15                                 yes, one_has_relation)
    16                                 yes, relation_possible)
    16 from cubicweb.web.box import BoxTemplate
    17 from cubicweb.web.box import BoxTemplate
    17 from cubicweb.web.facet import (AbstractFacet, VocabularyFacet, FacetStringWidget,
    18 from cubicweb.web.facet import (AbstractFacet, VocabularyFacet, FacetStringWidget,
    18                              RelationFacet, prepare_facets_rqlst, filter_hiddens)
    19                              RelationFacet, prepare_facets_rqlst, filter_hiddens)
    19 
    20 
       
    21 @objectify_selector
    20 def contextview_selector(cls, req, rset, row=None, col=None, view=None,
    22 def contextview_selector(cls, req, rset, row=None, col=None, view=None,
    21                          **kwargs):
    23                          **kwargs):
    22     if view and getattr(view, 'filter_box_context_info', lambda: None)():
    24     if view and getattr(view, 'filter_box_context_info', lambda: None)():
    23         return 1
    25         return 1
    24     return 0    
    26     return 0    
    25 
    27 
    26 
    28 
    27 class FilterBox(BoxTemplate):
    29 class FilterBox(BoxTemplate):
    28     """filter results of a query"""
    30     """filter results of a query"""
    29     id = 'filter_box'
    31     id = 'filter_box'
    30     __selectors__ = ((non_final_entity() & two_lines_rset) | contextview_selector,
    32     __select__ = (((non_final_entity() & two_lines_rset())
    31                      match_context_prop)
    33                    | contextview_selector
       
    34                    ) & match_context_prop)
    32     context = 'left'
    35     context = 'left'
    33     title = _('boxes_filter_box')
    36     title = _('boxes_filter_box')
    34     visible = True # functionality provided by the search box by default
    37     visible = True # functionality provided by the search box by default
    35     order = 1
    38     order = 1
    36     roundcorners = True
    39     roundcorners = True
   126     target_attr = 'name'
   129     target_attr = 'name'
   127 
   130 
   128 # inherit from RelationFacet to benefit from its possible_values implementation
   131 # inherit from RelationFacet to benefit from its possible_values implementation
   129 class ETypeFacet(RelationFacet):
   132 class ETypeFacet(RelationFacet):
   130     id = 'etype-facet'
   133     id = 'etype-facet'
   131     __selectors__ = (yes,)
   134     __select__ = yes()
   132     order = 1
   135     order = 1
   133     rtype = 'is'
   136     rtype = 'is'
   134     target_attr = 'name'
   137     target_attr = 'name'
   135 
   138 
   136     @property
   139     @property
   150             return
   153             return
   151         self.rqlst.add_type_restriction(self.filtered_variable, value)
   154         self.rqlst.add_type_restriction(self.filtered_variable, value)
   152 
   155 
   153 
   156 
   154 class HasTextFacet(AbstractFacet):
   157 class HasTextFacet(AbstractFacet):
   155     __selectors__ = (one_has_relation, match_context_prop)
   158     __select__ = relation_possible('has_text', 'subject') & match_context_prop()
   156     id = 'has_text-facet'
   159     id = 'has_text-facet'
   157     rtype = 'has_text'
   160     rtype = 'has_text'
   158     role = 'subject'
   161     role = 'subject'
   159     order = 0
   162     order = 0
   160     @property
   163     @property