author | Adrien Di Mascio <Adrien.DiMascio@logilab.fr> |
Wed, 23 Sep 2009 09:54:25 +0200 | |
changeset 3396 | fb261afd49cd |
parent 3377 | dd9d292b6a6d |
child 3451 | 6b46d73823f5 |
permissions | -rw-r--r-- |
928
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
1 |
"""Set of tree-building widgets, based on jQuery treeview plugin |
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
2 |
|
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
3 |
:organization: Logilab |
1977
606923dff11b
big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1844
diff
changeset
|
4 |
:copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), license is LGPL v2. |
928
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
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:
1844
diff
changeset
|
6 |
:license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses |
928
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
7 |
""" |
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
8 |
__docformat__ = "restructuredtext en" |
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
9 |
|
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
10 |
import simplejson as json |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
11 |
|
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
12 |
from logilab.common.decorators import monkeypatch |
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2216
diff
changeset
|
13 |
from logilab.mtconverter import xml_escape |
1828
e9e8beb06f01
[treeview] really fix #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1826
diff
changeset
|
14 |
from cubicweb.utils import make_uid |
0 | 15 |
from cubicweb.interfaces import ITree |
981
d86d1ee3b60e
fix some imports, update treeview for 3.2
sylvain.thenault@logilab.fr
parents:
939
diff
changeset
|
16 |
from cubicweb.selectors import implements |
d86d1ee3b60e
fix some imports, update treeview for 3.2
sylvain.thenault@logilab.fr
parents:
939
diff
changeset
|
17 |
from cubicweb.view import EntityView |
0 | 18 |
|
928
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
19 |
def treecookiename(treeid): |
2391
59a2def75e93
[treeview] nicer cookie name
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2381
diff
changeset
|
20 |
return str('%s-treestate' % treeid) |
928
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
21 |
|
0 | 22 |
class TreeView(EntityView): |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
23 |
__regid__ = 'treeview' |
150
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
24 |
itemvid = 'treeitemview' |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
25 |
subvid = 'oneline' |
443 | 26 |
css_classes = 'treeview widget' |
27 |
title = _('tree view') |
|
916
968f00dd9a24
[treeview] (in progress) use less magic, having something that now allows prepopulating a part of the tree
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
472
diff
changeset
|
28 |
|
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
29 |
def _init_params(self, subvid, treeid, initial_load, initial_thru_ajax, morekwargs): |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
30 |
form = self.req.form |
0 | 31 |
if subvid is None: |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
32 |
subvid = form.pop('treesubvid', self.subvid) # consume it |
1828
e9e8beb06f01
[treeview] really fix #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1826
diff
changeset
|
33 |
if treeid is None: |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
34 |
treeid = form.pop('treeid', None) |
1828
e9e8beb06f01
[treeview] really fix #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1826
diff
changeset
|
35 |
if treeid is None: |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
36 |
treeid = 'throw_away' + make_uid('uid') |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
37 |
if 'morekwargs' in self.req.form: |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
38 |
ajaxargs = json.loads(form.pop('morekwargs')) |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
39 |
# got unicode & python keywords must be strings |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
40 |
morekwargs.update(dict((str(k), v) |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
41 |
for k, v in ajaxargs.iteritems())) |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
42 |
toplevel_thru_ajax = form.pop('treeview_top', False) or initial_thru_ajax |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
43 |
toplevel = toplevel_thru_ajax or (initial_load and not form.get('fname')) |
3299
cb543d6bd0e6
make it easier to subclass
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3222
diff
changeset
|
44 |
return subvid, treeid, toplevel_thru_ajax, toplevel |
cb543d6bd0e6
make it easier to subclass
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3222
diff
changeset
|
45 |
|
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
46 |
def _init_headers(self, treeid, toplevel_thru_ajax): |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
47 |
self.req.add_css('jquery.treeview.css') |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
48 |
self.req.add_js(('cubicweb.ajax.js', 'cubicweb.widgets.js', 'jquery.treeview.js')) |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
49 |
self.req.html_headers.add_onload(u""" |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
50 |
jQuery("#tree-%s").treeview({toggle: toggleTree, prerendered: true});""" % treeid, |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
51 |
jsoncall=toplevel_thru_ajax) |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
52 |
|
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
53 |
def call(self, subvid=None, treeid=None, |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
54 |
initial_load=True, initial_thru_ajax=False, **morekwargs): |
3299
cb543d6bd0e6
make it easier to subclass
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3222
diff
changeset
|
55 |
subvid, treeid, toplevel_thru_ajax, toplevel = self._init_params( |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
56 |
subvid, treeid, initial_load, initial_thru_ajax, morekwargs) |
3298
caef98aa4a98
backport from 3.5
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
2391
diff
changeset
|
57 |
ulid = ' ' |
caef98aa4a98
backport from 3.5
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
2391
diff
changeset
|
58 |
if toplevel: |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
59 |
self._init_headers(treeid, toplevel_thru_ajax) |
3298
caef98aa4a98
backport from 3.5
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
2391
diff
changeset
|
60 |
ulid = ' id="tree-%s"' % treeid |
caef98aa4a98
backport from 3.5
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
2391
diff
changeset
|
61 |
self.w(u'<ul%s class="%s">' % (ulid, self.css_classes)) |
0 | 62 |
for rowidx in xrange(len(self.rset)): |
150
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
63 |
self.wview(self.itemvid, self.rset, row=rowidx, col=0, |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
64 |
vid=subvid, parentvid=self.id, treeid=treeid, **morekwargs) |
0 | 65 |
self.w(u'</ul>') |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
66 |
|
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
67 |
def cell_call(self, *args, **allargs): |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
68 |
""" does not makes much sense until you have to invoke |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
69 |
somentity.view('treeview') """ |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
70 |
allargs.pop('row') |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
71 |
allargs.pop('col') |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
72 |
self.call(*args, **allargs) |
150
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
73 |
|
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
74 |
class FileTreeView(TreeView): |
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
75 |
"""specific version of the treeview to display file trees |
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
76 |
""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
77 |
__regid__ = 'filetree' |
443 | 78 |
css_classes = 'treeview widget filetree' |
79 |
title = _('file tree view') |
|
150
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
80 |
|
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
81 |
def call(self, subvid=None, treeid=None, initial_load=True, **kwargs): |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
82 |
super(FileTreeView, self).call(treeid=treeid, subvid='filetree-oneline', |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
83 |
initial_load=initial_load, **kwargs) |
150
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
84 |
|
443 | 85 |
class FileItemInnerView(EntityView): |
150
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
86 |
"""inner view used by the TreeItemView instead of oneline view |
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
87 |
|
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
88 |
This view adds an enclosing <span> with some specific CSS classes |
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
89 |
around the oneline view. This is needed by the jquery treeview plugin. |
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
90 |
""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
91 |
__regid__ = 'filetree-oneline' |
150
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
92 |
|
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
93 |
def cell_call(self, row, col): |
2789
39712da6f397
R propagate deprecation of AppObject.entity()
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2391
diff
changeset
|
94 |
entity = self.rset.get_entity(row, col) |
150
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
95 |
if ITree.is_implemented_by(entity.__class__) and not entity.is_leaf(): |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
96 |
self.w(u'<div class="folder">%s</div>\n' % entity.view('oneline')) |
150
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
97 |
else: |
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
98 |
# XXX define specific CSS classes according to mime types |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
99 |
self.w(u'<div class="file">%s</div>\n' % entity.view('oneline')) |
0 | 100 |
|
101 |
||
102 |
class DefaultTreeViewItemView(EntityView): |
|
981
d86d1ee3b60e
fix some imports, update treeview for 3.2
sylvain.thenault@logilab.fr
parents:
939
diff
changeset
|
103 |
"""default treeitem view for entities which don't implement ITree""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
104 |
__regid__ = 'treeitemview' |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1133
diff
changeset
|
105 |
|
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
106 |
def cell_call(self, row, col, vid='oneline', parentvid='treeview', treeid=None): |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
107 |
assert treeid is not None |
2789
39712da6f397
R propagate deprecation of AppObject.entity()
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2391
diff
changeset
|
108 |
entity = self.rset.get_entity(row, col) |
0 | 109 |
itemview = self.view(vid, self.rset, row=row, col=col) |
110 |
if row == len(self.rset) - 1: |
|
111 |
self.w(u'<li class="last">%s</li>' % itemview) |
|
112 |
else: |
|
472 | 113 |
self.w(u'<li>%s</li>' % itemview) |
0 | 114 |
|
115 |
||
928
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
116 |
class TreeViewItemView(EntityView): |
0 | 117 |
"""specific treeitem view for entities which implement ITree |
916
968f00dd9a24
[treeview] (in progress) use less magic, having something that now allows prepopulating a part of the tree
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
472
diff
changeset
|
118 |
|
981
d86d1ee3b60e
fix some imports, update treeview for 3.2
sylvain.thenault@logilab.fr
parents:
939
diff
changeset
|
119 |
(each item should be expandable if it's not a tree leaf) |
0 | 120 |
""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
121 |
__regid__ = 'treeitemview' |
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
122 |
__select__ = EntityView.__select__ & implements(ITree) |
3298
caef98aa4a98
backport from 3.5
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
2391
diff
changeset
|
123 |
default_branch_state_is_open = False |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1133
diff
changeset
|
124 |
|
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
125 |
def open_state(self, eeid, treeid): |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
126 |
cookies = self.req.get_cookie() |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
127 |
treestate = cookies.get(treecookiename(treeid)) |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
128 |
if treestate: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
129 |
return str(eeid) in treestate.value.split(';') |
3298
caef98aa4a98
backport from 3.5
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
2391
diff
changeset
|
130 |
return self.default_branch_state_is_open |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
131 |
|
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
132 |
def cell_call(self, row, col, treeid, vid='oneline', parentvid='treeview', **morekwargs): |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
133 |
w = self.w |
2789
39712da6f397
R propagate deprecation of AppObject.entity()
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2391
diff
changeset
|
134 |
entity = self.rset.get_entity(row, col) |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
135 |
liclasses = [] |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
136 |
is_last = row == len(self.rset) - 1 |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
137 |
is_open = self.open_state(entity.eid, treeid) |
2216
b44b06520ddc
[treeview] fix condition
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1977
diff
changeset
|
138 |
is_leaf = not hasattr(entity, 'is_leaf') or entity.is_leaf() |
b44b06520ddc
[treeview] fix condition
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1977
diff
changeset
|
139 |
if is_leaf: |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
140 |
if is_last: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
141 |
liclasses.append('last') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
142 |
w(u'<li class="%s">' % u' '.join(liclasses)) |
0 | 143 |
else: |
144 |
rql = entity.children_rql() % {'x': entity.eid} |
|
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2216
diff
changeset
|
145 |
url = xml_escape(self.build_url('json', rql=rql, vid=parentvid, |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
146 |
pageid=self.req.pageid, |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
147 |
treeid=treeid, |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
148 |
fname='view', |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
149 |
treesubvid=vid, |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
150 |
morekwargs=json.dumps(morekwargs))) |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
151 |
divclasses = ['hitarea'] |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
152 |
if is_open: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
153 |
liclasses.append('collapsable') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
154 |
divclasses.append('collapsable-hitarea') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
155 |
else: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
156 |
liclasses.append('expandable') |
1828
e9e8beb06f01
[treeview] really fix #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1826
diff
changeset
|
157 |
divclasses.append('expandable-hitarea') |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
158 |
if is_last: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
159 |
if is_open: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
160 |
liclasses.append('lastCollapsable') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
161 |
divclasses.append('lastCollapsable-hitarea') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
162 |
else: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
163 |
liclasses.append('lastExpandable') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
164 |
divclasses.append('lastExpandable-hitarea') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
165 |
if is_open: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
166 |
w(u'<li class="%s">' % u' '.join(liclasses)) |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
167 |
else: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
168 |
w(u'<li cubicweb:loadurl="%s" class="%s">' % (url, u' '.join(liclasses))) |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
169 |
if treeid.startswith('throw_away'): |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
170 |
divtail = '' |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
171 |
else: |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
172 |
divtail = """ onclick="asyncRemoteExec('node_clicked', '%s', '%s')" """ %\ |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
173 |
(treeid, entity.eid) |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
174 |
w(u'<div class="%s"%s></div>' % (u' '.join(divclasses), divtail)) |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
175 |
|
0 | 176 |
# add empty <ul> because jquery's treeview plugin checks for |
177 |
# sublists presence |
|
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
178 |
if not is_open: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
179 |
w(u'<ul class="placeholder"><li>place holder</li></ul>') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
180 |
# the local node info |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
181 |
self.wview(vid, self.rset, row=row, col=col, **morekwargs) |
2216
b44b06520ddc
[treeview] fix condition
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1977
diff
changeset
|
182 |
if is_open and not is_leaf: # => rql is defined |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
183 |
self.wview(parentvid, self.req.execute(rql), treeid=treeid, initial_load=False, **morekwargs) |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
184 |
w(u'</li>') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
185 |