web/views/tabs.py
changeset 2293 7ded2a1416e4
parent 2123 3e1d2ab5f8c0
parent 2264 17b8a6ad58fc
child 2381 caad2367d940
equal deleted inserted replaced
2235:d5987f75c97c 2293:7ded2a1416e4
    22     caveat : lazyview is not recursive, i.e : you can't (successfully)
    22     caveat : lazyview is not recursive, i.e : you can't (successfully)
    23     lazyload a view that in turns does the same
    23     lazyload a view that in turns does the same
    24     """
    24     """
    25 
    25 
    26     def _prepare_bindings(self, vid, reloadable):
    26     def _prepare_bindings(self, vid, reloadable):
    27         self.req.html_headers.add_onload(u"""
    27         self.req.add_onload(u"""
    28   jQuery('#lazy-%(vid)s').bind('%(event)s', function(event) {
    28   jQuery('#lazy-%(vid)s').bind('%(event)s', function(event) {
    29      load_now('#lazy-%(vid)s', '#%(vid)s-hole', %(reloadable)s);
    29      load_now('#lazy-%(vid)s', '#%(vid)s-hole', %(reloadable)s);
    30   });""" % {'event': 'load_%s' % vid, 'vid': vid,
    30   });""" % {'event': 'load_%s' % vid, 'vid': vid,
    31             'reloadable' : str(reloadable).lower()})
    31             'reloadable' : str(reloadable).lower()})
    32 
    32 
    57     def forceview(self, vid):
    57     def forceview(self, vid):
    58         """trigger an event that will force immediate loading of the view
    58         """trigger an event that will force immediate loading of the view
    59         on dom readyness
    59         on dom readyness
    60         """
    60         """
    61         self.req.add_js('cubicweb.lazy.js')
    61         self.req.add_js('cubicweb.lazy.js')
    62         self.req.html_headers.add_onload("trigger_load('%s');" % vid)
    62         self.req.add_onload("trigger_load('%s');" % vid)
    63 
    63 
    64 
    64 
    65 class TabsMixin(LazyViewMixin):
    65 class TabsMixin(LazyViewMixin):
    66     """a tab mixin
    66     """a tab mixin
    67     """
    67     """
    91             except NoSelectableObject:
    91             except NoSelectableObject:
    92                 continue
    92                 continue
    93         return selected_tabs
    93         return selected_tabs
    94 
    94 
    95     def render_tabs(self, tabs, default, entity=None):
    95     def render_tabs(self, tabs, default, entity=None):
    96         # tabbed views do no support concatenation
    96         # delegate to the default tab if there is more than one entity
    97         # hence we delegate to the default tab if there is more than on entity
    97         # in the result set (tabs are pretty useless there)
    98         # in the result set
       
    99         if entity and len(self.rset) > 1:
    98         if entity and len(self.rset) > 1:
   100             entity.view(default, w=self.w)
    99             entity.view(default, w=self.w)
   101             return
   100             return
   102         # XXX (syt) fix below add been introduced at some point to fix something
       
   103         # (http://intranet.logilab.fr/jpl/ticket/32174 ?) but this is not a clean
       
   104         # way. We must not consider form['rql'] here since it introduces some
       
   105         # other failures on non rql queries (plain text, shortcuts,... handled by
       
   106         # magicsearch) which has a single result whose primary view is using tabs
       
   107         # (https://www.logilab.net/cwo/ticket/342789)
       
   108         #rql = self.req.form.get('rql')
       
   109         #if rql:
       
   110         #    self.req.execute(rql).get_entity(0,0).view(default, w=self.w)
       
   111         #    return
       
   112         self.req.add_css('tabs-no-images.css')
   101         self.req.add_css('tabs-no-images.css')
   113         self.req.add_js(('jquery.tools.min.js', 'cubicweb.htmlhelpers.js',
   102         self.req.add_js(('jquery.tools.min.js', 'cubicweb.htmlhelpers.js',
   114                          'cubicweb.ajax.js', 'cubicweb.tabs.js', 'cubicweb.lazy.js'))
   103                          'cubicweb.ajax.js', 'cubicweb.tabs.js', 'cubicweb.lazy.js'))
   115         # prune tabs : not all are to be shown
   104         # prune tabs : not all are to be shown
   116         tabs = self.prune_tabs(tabs)
   105         tabs = self.prune_tabs(tabs)
   143                 self.lazyview(tab, static=True)
   132                 self.lazyview(tab, static=True)
   144             w(u'</div>')
   133             w(u'</div>')
   145         w(u'</div>')
   134         w(u'</div>')
   146         # call the set_tab() JS function *after* each tab is generated
   135         # call the set_tab() JS function *after* each tab is generated
   147         # because the callback binding needs to be done before
   136         # because the callback binding needs to be done before
   148         self.req.html_headers.add_onload(u"""
   137         self.req.add_onload(u'''
   149     jQuery(function() {
   138     jQuery(function() {
   150       jQuery("#tabs-%(eeid)s").tabs("#panes-%(eeid)s > div", {initialIndex: %(tabindex)s});
   139       jQuery("#tabs-%(eeid)s").tabs("#panes-%(eeid)s > div", {initialIndex: %(tabindex)s});
   151       set_tab('%(vid)s', '%(cookiename)s');
   140       set_tab('%(vid)s', '%(cookiename)s');
   152     });""" % {'eeid' : entity.eid,
   141     });''' % {'eeid' : entity.eid,
   153               'vid'  : active_tab,
   142               'vid'  : active_tab,
   154               'cookiename' : self.cookie_name,
   143               'cookiename' : self.cookie_name,
   155               'tabindex' : tabs.index(active_tab)})
   144               'tabindex' : tabs.index(active_tab)})
   156 
   145 
   157 
   146