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 |