author | Sylvain Thénault <sylvain.thenault@logilab.fr> |
Tue, 22 Sep 2009 14:08:21 +0200 | |
branch | stable |
changeset 3370 | 62ed9981a770 |
parent 3209 | c2c8f88a4520 |
child 3230 | 1d25e928c299 |
child 3569 | 89a60802711b |
permissions | -rw-r--r-- |
235
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
1 |
"""base classes to handle tabbed views |
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
2 |
|
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
3 |
:organization: Logilab |
1977
606923dff11b
big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1802
diff
changeset
|
4 |
:copyright: 2008-2009 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2. |
235
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
5 |
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
1977
606923dff11b
big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1802
diff
changeset
|
6 |
:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses |
235
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
7 |
""" |
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
8 |
|
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
9 |
__docformat__ = "restructuredtext en" |
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
10 |
|
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2264
diff
changeset
|
11 |
from logilab.mtconverter import xml_escape |
214
aaf2957bf69e
tabview is used to call each view for each tab
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
diff
changeset
|
12 |
|
235
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
13 |
from cubicweb import NoSelectableObject, role |
838
f2c56312b03a
rename abstract_* selectors into partial_* + add docstrings
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
782
diff
changeset
|
14 |
from cubicweb.selectors import partial_has_related_entities |
981
d86d1ee3b60e
fix some imports, update treeview for 3.2
sylvain.thenault@logilab.fr
parents:
940
diff
changeset
|
15 |
from cubicweb.view import EntityView |
1135 | 16 |
from cubicweb.common import tags, uilib |
1997
554eb4dd533d
[views] get tabs to work with startup views
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
1977
diff
changeset
|
17 |
from cubicweb.utils import make_uid |
485
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
18 |
|
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
19 |
class LazyViewMixin(object): |
510
6b92504d77c1
[tabs] improve pylint note :)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
504
diff
changeset
|
20 |
"""provides two convenience methods for the tab machinery |
6b92504d77c1
[tabs] improve pylint note :)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
504
diff
changeset
|
21 |
can also be used to lazy-load arbitrary views |
6b92504d77c1
[tabs] improve pylint note :)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
504
diff
changeset
|
22 |
caveat : lazyview is not recursive, i.e : you can't (successfully) |
6b92504d77c1
[tabs] improve pylint note :)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
504
diff
changeset
|
23 |
lazyload a view that in turns does the same |
6b92504d77c1
[tabs] improve pylint note :)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
504
diff
changeset
|
24 |
""" |
485
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
25 |
|
559
7cfd3d11edc8
[tabs] prepare for reloadability
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
547
diff
changeset
|
26 |
def _prepare_bindings(self, vid, reloadable): |
2258
79bc598c6411
when request is a json request, bind on 'ajax-loaded' instead of document.ready()
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1997
diff
changeset
|
27 |
self.req.add_onload(u""" |
559
7cfd3d11edc8
[tabs] prepare for reloadability
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
547
diff
changeset
|
28 |
jQuery('#lazy-%(vid)s').bind('%(event)s', function(event) { |
7cfd3d11edc8
[tabs] prepare for reloadability
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
547
diff
changeset
|
29 |
load_now('#lazy-%(vid)s', '#%(vid)s-hole', %(reloadable)s); |
7cfd3d11edc8
[tabs] prepare for reloadability
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
547
diff
changeset
|
30 |
});""" % {'event': 'load_%s' % vid, 'vid': vid, |
7cfd3d11edc8
[tabs] prepare for reloadability
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
547
diff
changeset
|
31 |
'reloadable' : str(reloadable).lower()}) |
7cfd3d11edc8
[tabs] prepare for reloadability
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
547
diff
changeset
|
32 |
|
1000
90705536b7c8
[tabs] from rev 917 - got lost in a merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
999
diff
changeset
|
33 |
def lazyview(self, vid, rql=None, eid=None, rset=None, static=False, |
90705536b7c8
[tabs] from rev 917 - got lost in a merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
999
diff
changeset
|
34 |
reloadable=False, show_spinbox=True, w=None): |
485
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
35 |
"""a lazy version of wview |
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
36 |
first version only support lazy viewing for an entity at a time |
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
37 |
""" |
1000
90705536b7c8
[tabs] from rev 917 - got lost in a merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
999
diff
changeset
|
38 |
assert rql or eid or rset or static, \ |
90705536b7c8
[tabs] from rev 917 - got lost in a merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
999
diff
changeset
|
39 |
'lazyview wants at least : rql, or an eid, or an rset -- or call it with static=True' |
485
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
40 |
w = w or self.w |
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
41 |
self.req.add_js('cubicweb.lazy.js') |
1498
2c6eec0b46b9
fix imports, cleanup, repair some ajax calls
sylvain.thenault@logilab.fr
parents:
1477
diff
changeset
|
42 |
urlparams = {'vid' : vid, 'fname' : 'view'} |
1000
90705536b7c8
[tabs] from rev 917 - got lost in a merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
999
diff
changeset
|
43 |
if rql: |
90705536b7c8
[tabs] from rev 917 - got lost in a merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
999
diff
changeset
|
44 |
urlparams['rql'] = rql |
90705536b7c8
[tabs] from rev 917 - got lost in a merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
999
diff
changeset
|
45 |
elif eid: |
1135 | 46 |
urlparams['rql'] = uilib.rql_for_eid(eid) |
1000
90705536b7c8
[tabs] from rev 917 - got lost in a merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
999
diff
changeset
|
47 |
elif rset: |
90705536b7c8
[tabs] from rev 917 - got lost in a merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
999
diff
changeset
|
48 |
urlparams['rql'] = rset.printable_rql() |
543
c0f2b6378f70
simplification of lazy tabs mechanism
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
542
diff
changeset
|
49 |
w(u'<div id="lazy-%s" cubicweb:loadurl="%s">' % ( |
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2264
diff
changeset
|
50 |
vid, xml_escape(self.build_url('json', **urlparams)))) |
485
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
51 |
if show_spinbox: |
522
385ce5e0b30b
cubicweb__loadurl -> cubicweb:lazyloadurl
sylvain.thenault@logilab.fr
parents:
510
diff
changeset
|
52 |
w(u'<img src="data/loading.gif" id="%s-hole" alt="%s"/>' |
385ce5e0b30b
cubicweb__loadurl -> cubicweb:lazyloadurl
sylvain.thenault@logilab.fr
parents:
510
diff
changeset
|
53 |
% (vid, self.req._('loading'))) |
485
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
54 |
w(u'</div>') |
559
7cfd3d11edc8
[tabs] prepare for reloadability
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
547
diff
changeset
|
55 |
self._prepare_bindings(vid, reloadable) |
485
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
56 |
|
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
57 |
def forceview(self, vid): |
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
58 |
"""trigger an event that will force immediate loading of the view |
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
59 |
on dom readyness |
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
60 |
""" |
559
7cfd3d11edc8
[tabs] prepare for reloadability
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
547
diff
changeset
|
61 |
self.req.add_js('cubicweb.lazy.js') |
2258
79bc598c6411
when request is a json request, bind on 'ajax-loaded' instead of document.ready()
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1997
diff
changeset
|
62 |
self.req.add_onload("trigger_load('%s');" % vid) |
543
c0f2b6378f70
simplification of lazy tabs mechanism
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
542
diff
changeset
|
63 |
|
485
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
64 |
|
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
65 |
class TabsMixin(LazyViewMixin): |
1079
452cb76fe07a
backport typo fix
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1000
diff
changeset
|
66 |
"""a tab mixin |
452cb76fe07a
backport typo fix
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1000
diff
changeset
|
67 |
""" |
485
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
68 |
|
606
40c7c2cf0797
[tabs] reuse the new set_cookie controller method
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
559
diff
changeset
|
69 |
@property |
40c7c2cf0797
[tabs] reuse the new set_cookie controller method
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
559
diff
changeset
|
70 |
def cookie_name(self): |
40c7c2cf0797
[tabs] reuse the new set_cookie controller method
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
559
diff
changeset
|
71 |
return str('%s_active_tab' % self.config.appid) |
40c7c2cf0797
[tabs] reuse the new set_cookie controller method
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
559
diff
changeset
|
72 |
|
485
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
73 |
def active_tab(self, tabs, default): |
3209
c2c8f88a4520
allow user to give ?tab=tabname and be set to the right tab (part of #345399)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3026
diff
changeset
|
74 |
formtab = self.req.form.get('tab') |
c2c8f88a4520
allow user to give ?tab=tabname and be set to the right tab (part of #345399)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3026
diff
changeset
|
75 |
if formtab in tabs: |
c2c8f88a4520
allow user to give ?tab=tabname and be set to the right tab (part of #345399)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3026
diff
changeset
|
76 |
return formtab |
1000
90705536b7c8
[tabs] from rev 917 - got lost in a merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
999
diff
changeset
|
77 |
cookies = self.req.get_cookie() |
606
40c7c2cf0797
[tabs] reuse the new set_cookie controller method
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
559
diff
changeset
|
78 |
cookiename = self.cookie_name |
1000
90705536b7c8
[tabs] from rev 917 - got lost in a merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
999
diff
changeset
|
79 |
activetab = cookies.get(cookiename) |
235
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
80 |
if activetab is None: |
1000
90705536b7c8
[tabs] from rev 917 - got lost in a merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
999
diff
changeset
|
81 |
cookies[cookiename] = default |
90705536b7c8
[tabs] from rev 917 - got lost in a merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
999
diff
changeset
|
82 |
self.req.set_cookie(cookies, cookiename) |
487
355356b781d7
[tabs] avoid nasty surprises when tab name change & the cookie remembers the past
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
485
diff
changeset
|
83 |
tab = default |
355356b781d7
[tabs] avoid nasty surprises when tab name change & the cookie remembers the past
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
485
diff
changeset
|
84 |
else: |
355356b781d7
[tabs] avoid nasty surprises when tab name change & the cookie remembers the past
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
485
diff
changeset
|
85 |
tab = activetab.value |
494
c47229797d0d
python 2.4 compat
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
490
diff
changeset
|
86 |
return tab in tabs and tab or default |
214
aaf2957bf69e
tabview is used to call each view for each tab
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
diff
changeset
|
87 |
|
490
b84d64db2350
[tabs] prune tab set _before_ computing & setting 'active' tab
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
489
diff
changeset
|
88 |
def prune_tabs(self, tabs): |
b84d64db2350
[tabs] prune tab set _before_ computing & setting 'active' tab
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
489
diff
changeset
|
89 |
selected_tabs = [] |
b84d64db2350
[tabs] prune tab set _before_ computing & setting 'active' tab
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
489
diff
changeset
|
90 |
for tab in tabs: |
b84d64db2350
[tabs] prune tab set _before_ computing & setting 'active' tab
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
489
diff
changeset
|
91 |
try: |
2650
18aec79ec3a3
R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2386
diff
changeset
|
92 |
self.vreg['views'].select(tab, self.req, rset=self.rset) |
490
b84d64db2350
[tabs] prune tab set _before_ computing & setting 'active' tab
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
489
diff
changeset
|
93 |
selected_tabs.append(tab) |
b84d64db2350
[tabs] prune tab set _before_ computing & setting 'active' tab
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
489
diff
changeset
|
94 |
except NoSelectableObject: |
b84d64db2350
[tabs] prune tab set _before_ computing & setting 'active' tab
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
489
diff
changeset
|
95 |
continue |
b84d64db2350
[tabs] prune tab set _before_ computing & setting 'active' tab
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
489
diff
changeset
|
96 |
return selected_tabs |
b84d64db2350
[tabs] prune tab set _before_ computing & setting 'active' tab
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
489
diff
changeset
|
97 |
|
1997
554eb4dd533d
[views] get tabs to work with startup views
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
1977
diff
changeset
|
98 |
def render_tabs(self, tabs, default, entity=None): |
2264 | 99 |
# delegate to the default tab if there is more than one entity |
100 |
# in the result set (tabs are pretty useless there) |
|
1997
554eb4dd533d
[views] get tabs to work with startup views
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
1977
diff
changeset
|
101 |
if entity and len(self.rset) > 1: |
1379
6c6dbc0df829
MUST NOT consider req.form['rql'] in a view, use len(rset) > 1 to detect if we can apply tabs or not
sylvain.thenault@logilab.fr
parents:
1112
diff
changeset
|
102 |
entity.view(default, w=self.w) |
6c6dbc0df829
MUST NOT consider req.form['rql'] in a view, use len(rset) > 1 to detect if we can apply tabs or not
sylvain.thenault@logilab.fr
parents:
1112
diff
changeset
|
103 |
return |
2673
9e639925ca2f
Backed out changeset 3e1d2ab5f8c0 (restore ui.tabs.js instead of jquery tools)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
2123
diff
changeset
|
104 |
self.req.add_css('ui.tabs.css') |
9e639925ca2f
Backed out changeset 3e1d2ab5f8c0 (restore ui.tabs.js instead of jquery tools)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
2123
diff
changeset
|
105 |
self.req.add_js(('ui.core.js', 'ui.tabs.js', |
522
385ce5e0b30b
cubicweb__loadurl -> cubicweb:lazyloadurl
sylvain.thenault@logilab.fr
parents:
510
diff
changeset
|
106 |
'cubicweb.ajax.js', 'cubicweb.tabs.js', 'cubicweb.lazy.js')) |
490
b84d64db2350
[tabs] prune tab set _before_ computing & setting 'active' tab
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
489
diff
changeset
|
107 |
# prune tabs : not all are to be shown |
b84d64db2350
[tabs] prune tab set _before_ computing & setting 'active' tab
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
489
diff
changeset
|
108 |
tabs = self.prune_tabs(tabs) |
b84d64db2350
[tabs] prune tab set _before_ computing & setting 'active' tab
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
489
diff
changeset
|
109 |
# select a tab |
485
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
110 |
active_tab = self.active_tab(tabs, default) |
214
aaf2957bf69e
tabview is used to call each view for each tab
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
diff
changeset
|
111 |
# build the html structure |
235
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
112 |
w = self.w |
2386
b246d5cee44e
[tabs] backport entity-less support for tabs
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2383
diff
changeset
|
113 |
uid = entity and entity.eid or make_uid('tab') |
b246d5cee44e
[tabs] backport entity-less support for tabs
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2383
diff
changeset
|
114 |
w(u'<div id="entity-tabs-%s">' % uid) |
2673
9e639925ca2f
Backed out changeset 3e1d2ab5f8c0 (restore ui.tabs.js instead of jquery tools)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
2123
diff
changeset
|
115 |
w(u'<ul>') |
214
aaf2957bf69e
tabview is used to call each view for each tab
Laure Bourgois <Laure.Bourgois@logilab.fr>
parents:
diff
changeset
|
116 |
for tab in tabs: |
235
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
117 |
w(u'<li>') |
3209
c2c8f88a4520
allow user to give ?tab=tabname and be set to the right tab (part of #345399)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3026
diff
changeset
|
118 |
w(u'<a href="#%s">' % tab) |
606
40c7c2cf0797
[tabs] reuse the new set_cookie controller method
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
559
diff
changeset
|
119 |
w(u'<span onclick="set_tab(\'%s\', \'%s\')">' % (tab, self.cookie_name)) |
235
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
120 |
w(self.req._(tab)) |
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
121 |
w(u'</span>') |
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
122 |
w(u'</a>') |
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
123 |
w(u'</li>') |
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
124 |
w(u'</ul>') |
b43362d92a1d
rename to tabs.py
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
220
diff
changeset
|
125 |
w(u'</div>') |
490
b84d64db2350
[tabs] prune tab set _before_ computing & setting 'active' tab
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
489
diff
changeset
|
126 |
for tab in tabs: |
3209
c2c8f88a4520
allow user to give ?tab=tabname and be set to the right tab (part of #345399)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3026
diff
changeset
|
127 |
w(u'<div id="%s">' % tab) |
1997
554eb4dd533d
[views] get tabs to work with startup views
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
1977
diff
changeset
|
128 |
if entity: |
554eb4dd533d
[views] get tabs to work with startup views
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
1977
diff
changeset
|
129 |
self.lazyview(tab, eid=entity.eid) |
554eb4dd533d
[views] get tabs to work with startup views
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
1977
diff
changeset
|
130 |
else: |
554eb4dd533d
[views] get tabs to work with startup views
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
1977
diff
changeset
|
131 |
self.lazyview(tab, static=True) |
485
0f830732be19
[tabs] provide a working tabs implementation, that lazy-loads tab content & should remember the current position
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
235
diff
changeset
|
132 |
w(u'</div>') |
543
c0f2b6378f70
simplification of lazy tabs mechanism
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
542
diff
changeset
|
133 |
# call the set_tab() JS function *after* each tab is generated |
c0f2b6378f70
simplification of lazy tabs mechanism
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
542
diff
changeset
|
134 |
# because the callback binding needs to be done before |
2383
96780c1e0c53
shrink a bit the tabs
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2381
diff
changeset
|
135 |
# XXX make work history: true |
3026
17644247f0ff
fix emacs syntaxic colorization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2675
diff
changeset
|
136 |
self.req.add_onload(u""" |
2674
ff6114c2c416
merge (after jquery.tools backout)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
diff
changeset
|
137 |
jQuery('#entity-tabs-%(eeid)s > ul').tabs( { selected: %(tabindex)s }); |
ff6114c2c416
merge (after jquery.tools backout)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
diff
changeset
|
138 |
set_tab('%(vid)s', '%(cookiename)s'); |
3026
17644247f0ff
fix emacs syntaxic colorization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2675
diff
changeset
|
139 |
""" % {'tabindex' : tabs.index(active_tab), |
2674
ff6114c2c416
merge (after jquery.tools backout)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
diff
changeset
|
140 |
'vid' : active_tab, |
ff6114c2c416
merge (after jquery.tools backout)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
diff
changeset
|
141 |
'eeid' : (entity and entity.eid or uid), |
ff6114c2c416
merge (after jquery.tools backout)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
diff
changeset
|
142 |
'cookiename' : self.cookie_name}) |
489 | 143 |
|
3026
17644247f0ff
fix emacs syntaxic colorization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2675
diff
changeset
|
144 |
|
982
ba5257deec7d
rename EntityRelatedTab into EntityRelationView, some fixes
sylvain.thenault@logilab.fr
parents:
981
diff
changeset
|
145 |
class EntityRelationView(EntityView): |
ba5257deec7d
rename EntityRelatedTab into EntityRelationView, some fixes
sylvain.thenault@logilab.fr
parents:
981
diff
changeset
|
146 |
"""view displaying entity related stuff. |
489 | 147 |
Such a view _must_ provide the rtype, target and vid attributes : |
148 |
||
149 |
Example : |
|
150 |
||
151 |
class ProjectScreenshotsView(EntityRelationView): |
|
542
46d4ff5aa917
use lgc.decorators.monkeypatch in tabs.py
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
522
diff
changeset
|
152 |
'''display project's screenshots''' |
489 | 153 |
id = title = _('projectscreenshots') |
982
ba5257deec7d
rename EntityRelatedTab into EntityRelationView, some fixes
sylvain.thenault@logilab.fr
parents:
981
diff
changeset
|
154 |
__select__ = EntityRelationView.__select__ & implements('Project') |
489 | 155 |
rtype = 'screenshot' |
982
ba5257deec7d
rename EntityRelatedTab into EntityRelationView, some fixes
sylvain.thenault@logilab.fr
parents:
981
diff
changeset
|
156 |
role = 'subject' |
489 | 157 |
vid = 'gallery' |
158 |
||
3209
c2c8f88a4520
allow user to give ?tab=tabname and be set to the right tab (part of #345399)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3026
diff
changeset
|
159 |
in this example, entities related to project entity by the 'screenshot' |
982
ba5257deec7d
rename EntityRelatedTab into EntityRelationView, some fixes
sylvain.thenault@logilab.fr
parents:
981
diff
changeset
|
160 |
relation (where the project is subject of the relation) will be displayed |
ba5257deec7d
rename EntityRelatedTab into EntityRelationView, some fixes
sylvain.thenault@logilab.fr
parents:
981
diff
changeset
|
161 |
using the 'gallery' view. |
489 | 162 |
""" |
838
f2c56312b03a
rename abstract_* selectors into partial_* + add docstrings
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
782
diff
changeset
|
163 |
__select__ = EntityView.__select__ & partial_has_related_entities() |
489 | 164 |
vid = 'list' |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1498
diff
changeset
|
165 |
|
489 | 166 |
def cell_call(self, row, col): |
542
46d4ff5aa917
use lgc.decorators.monkeypatch in tabs.py
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
522
diff
changeset
|
167 |
rset = self.entity(row, col).related(self.rtype, role(self)) |
489 | 168 |
self.w(u'<div class="mainInfo">') |
982
ba5257deec7d
rename EntityRelatedTab into EntityRelationView, some fixes
sylvain.thenault@logilab.fr
parents:
981
diff
changeset
|
169 |
if self.title: |
1014 | 170 |
self.w(tags.h1(self.req._(self.title))) |
489 | 171 |
self.wview(self.vid, rset, 'noresult') |
172 |
self.w(u'</div>') |