author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
Fri, 22 Mar 2013 20:10:19 +0100 | |
changeset 8773 | 21edcb0a5ed7 |
parent 8728 | 75be9de9d68e |
child 8900 | 010a59e12d89 |
permissions | -rw-r--r-- |
7879
9aae456abab5
[pylint] fix pylint detected errors and tweak it so that pylint -E will be much less verbose next time (+ update some copyrights on the way)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6582
diff
changeset
|
1 |
# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
2 |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
3 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
4 |
# This file is part of CubicWeb. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
5 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
6 |
# CubicWeb is free software: you can redistribute it and/or modify it under the |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
7 |
# terms of the GNU Lesser General Public License as published by the Free |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
8 |
# Software Foundation, either version 2.1 of the License, or (at your option) |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
9 |
# any later version. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
10 |
# |
5424
8ecbcbff9777
replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5421
diff
changeset
|
11 |
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
12 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
13 |
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
14 |
# details. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
15 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
16 |
# You should have received a copy of the GNU Lesser General Public License along |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5389
diff
changeset
|
17 |
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
18 |
"""Set of tree views / tree-building widgets, some based on jQuery treeview |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
19 |
plugin. |
928
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
20 |
""" |
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
21 |
|
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
22 |
__docformat__ = "restructuredtext en" |
6582
8eb7883b4223
[pylint] fix a bug of pylint detected errors and i18n pb (calling builtins._ instead of req._)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6140
diff
changeset
|
23 |
_ = unicode |
928
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
24 |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
25 |
from warnings import warn |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
26 |
|
2312
af4d8f75c5db
use xml_escape
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2216
diff
changeset
|
27 |
from logilab.mtconverter import xml_escape |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
28 |
|
5940
0e3ae19b181a
[uilib] refactor json_dumps code organization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5912
diff
changeset
|
29 |
from cubicweb.utils import make_uid, json |
8190
2a3c1b787688
[vreg] move base registry implementation to logilab.common. Closes #1916014
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8128
diff
changeset
|
30 |
from cubicweb.predicates import adaptable |
981
d86d1ee3b60e
fix some imports, update treeview for 3.2
sylvain.thenault@logilab.fr
parents:
939
diff
changeset
|
31 |
from cubicweb.view import EntityView |
5569
cb14af012a96
[adapters] refactoring fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5557
diff
changeset
|
32 |
from cubicweb.mixins import _done_init |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
33 |
from cubicweb.web.views import baseviews |
8128
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
34 |
from cubicweb.web.views.ajaxcontroller import ajaxfunc |
0 | 35 |
|
928
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
36 |
def treecookiename(treeid): |
2391
59a2def75e93
[treeview] nicer cookie name
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2381
diff
changeset
|
37 |
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
|
38 |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
39 |
|
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
40 |
class BaseTreeView(baseviews.ListView): |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
41 |
"""base tree view""" |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
42 |
__regid__ = 'tree' |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
43 |
__select__ = adaptable('ITree') |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
44 |
item_vid = 'treeitem' |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
45 |
|
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
46 |
def call(self, done=None, **kwargs): |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
47 |
if done is None: |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
48 |
done = set() |
5597
180229f07c12
[adapters] fix NameError introduced by adapters refactoring
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5569
diff
changeset
|
49 |
super(BaseTreeView, self).call(done=done, **kwargs) |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
50 |
|
5718
8d246203730a
[ITree] fix adapter/_done_init to handle tree_[attribute|relation], add maxlevel argument to base tree view since one side effect of the new code is that it find tree view for entity types it didn't find before, hence one may want to limit tree view depth when it wasn't necessary before
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5716
diff
changeset
|
51 |
def cell_call(self, row, col=0, vid=None, done=None, maxlevel=None, **kwargs): |
8d246203730a
[ITree] fix adapter/_done_init to handle tree_[attribute|relation], add maxlevel argument to base tree view since one side effect of the new code is that it find tree view for entity types it didn't find before, hence one may want to limit tree view depth when it wasn't necessary before
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5716
diff
changeset
|
52 |
assert maxlevel is None or maxlevel > 0 |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
53 |
done, entity = _done_init(done, self, row, col) |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
54 |
if done is None: |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
55 |
# entity is actually an error message |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
56 |
self.w(u'<li class="badcontent">%s</li>' % entity) |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
57 |
return |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
58 |
self.open_item(entity) |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
59 |
entity.view(vid or self.item_vid, w=self.w, **kwargs) |
5718
8d246203730a
[ITree] fix adapter/_done_init to handle tree_[attribute|relation], add maxlevel argument to base tree view since one side effect of the new code is that it find tree view for entity types it didn't find before, hence one may want to limit tree view depth when it wasn't necessary before
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5716
diff
changeset
|
60 |
if maxlevel is not None: |
8d246203730a
[ITree] fix adapter/_done_init to handle tree_[attribute|relation], add maxlevel argument to base tree view since one side effect of the new code is that it find tree view for entity types it didn't find before, hence one may want to limit tree view depth when it wasn't necessary before
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5716
diff
changeset
|
61 |
maxlevel -= 1 |
8d246203730a
[ITree] fix adapter/_done_init to handle tree_[attribute|relation], add maxlevel argument to base tree view since one side effect of the new code is that it find tree view for entity types it didn't find before, hence one may want to limit tree view depth when it wasn't necessary before
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5716
diff
changeset
|
62 |
if maxlevel == 0: |
8d246203730a
[ITree] fix adapter/_done_init to handle tree_[attribute|relation], add maxlevel argument to base tree view since one side effect of the new code is that it find tree view for entity types it didn't find before, hence one may want to limit tree view depth when it wasn't necessary before
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5716
diff
changeset
|
63 |
self.close_item(entity) |
8d246203730a
[ITree] fix adapter/_done_init to handle tree_[attribute|relation], add maxlevel argument to base tree view since one side effect of the new code is that it find tree view for entity types it didn't find before, hence one may want to limit tree view depth when it wasn't necessary before
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5716
diff
changeset
|
64 |
return |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
65 |
relatedrset = entity.cw_adapt_to('ITree').children(entities=False) |
5718
8d246203730a
[ITree] fix adapter/_done_init to handle tree_[attribute|relation], add maxlevel argument to base tree view since one side effect of the new code is that it find tree view for entity types it didn't find before, hence one may want to limit tree view depth when it wasn't necessary before
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5716
diff
changeset
|
66 |
self.wview(self.__regid__, relatedrset, 'null', done=done, |
8d246203730a
[ITree] fix adapter/_done_init to handle tree_[attribute|relation], add maxlevel argument to base tree view since one side effect of the new code is that it find tree view for entity types it didn't find before, hence one may want to limit tree view depth when it wasn't necessary before
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5716
diff
changeset
|
67 |
maxlevel=maxlevel, **kwargs) |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
68 |
self.close_item(entity) |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
69 |
|
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
70 |
def open_item(self, entity): |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
71 |
self.w(u'<li class="%s">\n' % entity.__regid__.lower()) |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
72 |
def close_item(self, entity): |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
73 |
self.w(u'</li>\n') |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
74 |
|
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
75 |
|
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
76 |
class TreePathView(EntityView): |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
77 |
"""a recursive path view""" |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
78 |
__regid__ = 'path' |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
79 |
__select__ = adaptable('ITree') |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
80 |
item_vid = 'oneline' |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
81 |
separator = u' > ' |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
82 |
|
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
83 |
def call(self, **kwargs): |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
84 |
self.w(u'<div class="pathbar">') |
5597
180229f07c12
[adapters] fix NameError introduced by adapters refactoring
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5569
diff
changeset
|
85 |
super(TreePathView, self).call(**kwargs) |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
86 |
self.w(u'</div>') |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
87 |
|
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
88 |
def cell_call(self, row, col=0, vid=None, done=None, **kwargs): |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
89 |
done, entity = _done_init(done, self, row, col) |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
90 |
if done is None: |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
91 |
# entity is actually an error message |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
92 |
self.w(u'<span class="badcontent">%s</span>' % entity) |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
93 |
return |
5871
b21eb3e90a10
[ITree] small fixes: parent_entity is a IBreadCrumbs method, we should use .parent on ITree
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5762
diff
changeset
|
94 |
parent = entity.cw_adapt_to('ITree').parent() |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
95 |
if parent: |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
96 |
parent.view(self.__regid__, w=self.w, done=done) |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
97 |
self.w(self.separator) |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
98 |
entity.view(vid or self.item_vid, w=self.w) |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
99 |
|
6006
54cdc0164193
[massmailing] need edition.js for the freeezeFormButtons function
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5979
diff
changeset
|
100 |
|
5912
ff916bf2eba0
[itree] backport default combobox view for entities implementing ITree (from folder/zone cube)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5871
diff
changeset
|
101 |
class TreeComboBoxView(TreePathView): |
ff916bf2eba0
[itree] backport default combobox view for entities implementing ITree (from folder/zone cube)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5871
diff
changeset
|
102 |
"""display folder in edition's combobox""" |
ff916bf2eba0
[itree] backport default combobox view for entities implementing ITree (from folder/zone cube)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5871
diff
changeset
|
103 |
__regid__ = 'combobox' |
ff916bf2eba0
[itree] backport default combobox view for entities implementing ITree (from folder/zone cube)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5871
diff
changeset
|
104 |
item_vid = 'text' |
ff916bf2eba0
[itree] backport default combobox view for entities implementing ITree (from folder/zone cube)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5871
diff
changeset
|
105 |
separator = u' > ' |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
106 |
|
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
107 |
# XXX rename regid to ajaxtree/foldabletree or something like that (same for |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
108 |
# treeitemview) |
0 | 109 |
class TreeView(EntityView): |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
110 |
"""ajax tree view, click to expand folder""" |
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
111 |
|
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
112 |
__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
|
113 |
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
|
114 |
subvid = 'oneline' |
6140
65a619eb31c4
[boxes] introduce new boxes system
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6006
diff
changeset
|
115 |
cssclass = 'treeview widget' |
443 | 116 |
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
|
117 |
|
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
118 |
def _init_params(self, subvid, treeid, initial_load, initial_thru_ajax, morekwargs): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
119 |
form = self._cw.form |
0 | 120 |
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
|
121 |
subvid = form.pop('treesubvid', self.subvid) # consume it |
1828
e9e8beb06f01
[treeview] really fix #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1826
diff
changeset
|
122 |
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
|
123 |
treeid = form.pop('treeid', None) |
1828
e9e8beb06f01
[treeview] really fix #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1826
diff
changeset
|
124 |
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
|
125 |
treeid = 'throw_away' + make_uid('uid') |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
126 |
if 'morekwargs' in self._cw.form: |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
127 |
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
|
128 |
# 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
|
129 |
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
|
130 |
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
|
131 |
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
|
132 |
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
|
133 |
return subvid, treeid, toplevel_thru_ajax, toplevel |
cb543d6bd0e6
make it easier to subclass
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3222
diff
changeset
|
134 |
|
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
135 |
def _init_headers(self, treeid, toplevel_thru_ajax): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
136 |
self._cw.add_css('jquery.treeview.css') |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
137 |
self._cw.add_js(('cubicweb.ajax.js', 'cubicweb.widgets.js', 'jquery.treeview.js')) |
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
138 |
self._cw.html_headers.add_onload(u""" |
4851
e55bdd10421e
remove deprecation warning introduced by add_onload api change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4721
diff
changeset
|
139 |
jQuery("#tree-%s").treeview({toggle: toggleTree, prerendered: true});""" % treeid) |
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
140 |
|
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
141 |
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
|
142 |
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
|
143 |
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
|
144 |
subvid, treeid, initial_load, initial_thru_ajax, morekwargs) |
3298
caef98aa4a98
backport from 3.5
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
2391
diff
changeset
|
145 |
ulid = ' ' |
caef98aa4a98
backport from 3.5
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
2391
diff
changeset
|
146 |
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
|
147 |
self._init_headers(treeid, toplevel_thru_ajax) |
3298
caef98aa4a98
backport from 3.5
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
2391
diff
changeset
|
148 |
ulid = ' id="tree-%s"' % treeid |
6140
65a619eb31c4
[boxes] introduce new boxes system
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6006
diff
changeset
|
149 |
self.w(u'<ul%s class="%s">' % (ulid, self.cssclass)) |
4552
79f461d7ec37
sort on sortvalue, not dc_title to allow customization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4459
diff
changeset
|
150 |
# XXX force sorting on x.sortvalue() (which return dc_title by default) |
79f461d7ec37
sort on sortvalue, not dc_title to allow customization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4459
diff
changeset
|
151 |
# we need proper ITree & co specification to avoid this. |
79f461d7ec37
sort on sortvalue, not dc_title to allow customization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4459
diff
changeset
|
152 |
# (pb when type ambiguity at the other side of the tree relation, |
79f461d7ec37
sort on sortvalue, not dc_title to allow customization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4459
diff
changeset
|
153 |
# unability to provide generic implementation on eg Folder...) |
4436 | 154 |
for i, entity in enumerate(sorted(self.cw_rset.entities(), |
4552
79f461d7ec37
sort on sortvalue, not dc_title to allow customization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4459
diff
changeset
|
155 |
key=lambda x: x.sortvalue())): |
4436 | 156 |
if i+1 < len(self.cw_rset): |
4407
e4f921a68703
[treeview] ensure items are ordered according to their dc_title, we can't rely on an ordered rset
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
157 |
morekwargs['is_last'] = False |
e4f921a68703
[treeview] ensure items are ordered according to their dc_title, we can't rely on an ordered rset
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
158 |
else: |
e4f921a68703
[treeview] ensure items are ordered according to their dc_title, we can't rely on an ordered rset
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
159 |
morekwargs['is_last'] = True |
4436 | 160 |
entity.view(self.itemvid, vid=subvid, parentvid=self.__regid__, |
4407
e4f921a68703
[treeview] ensure items are ordered according to their dc_title, we can't rely on an ordered rset
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
161 |
treeid=treeid, w=self.w, **morekwargs) |
0 | 162 |
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
|
163 |
|
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
164 |
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
|
165 |
""" 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
|
166 |
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
|
167 |
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
|
168 |
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
|
169 |
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
|
170 |
|
4407
e4f921a68703
[treeview] ensure items are ordered according to their dc_title, we can't rely on an ordered rset
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
171 |
|
150
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
172 |
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
|
173 |
"""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
|
174 |
""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
175 |
__regid__ = 'filetree' |
6140
65a619eb31c4
[boxes] introduce new boxes system
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6006
diff
changeset
|
176 |
cssclass = 'treeview widget filetree' |
443 | 177 |
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
|
178 |
|
3320
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
179 |
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
|
180 |
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
|
181 |
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
|
182 |
|
443 | 183 |
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
|
184 |
"""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
|
185 |
|
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
186 |
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
|
187 |
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
|
188 |
""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
189 |
__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
|
190 |
|
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
191 |
def cell_call(self, row, col): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
192 |
entity = self.cw_rset.get_entity(row, col) |
5720
f0e521487903
[ITree] more fixes, fix fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5718
diff
changeset
|
193 |
itree = entity.cw_adapt_to('ITree') |
f0e521487903
[ITree] more fixes, fix fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5718
diff
changeset
|
194 |
if itree and not itree.is_leaf(): |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
195 |
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
|
196 |
else: |
1190261a1f13
provide a specific version of treeview to display files and directories
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
0
diff
changeset
|
197 |
# 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
|
198 |
self.w(u'<div class="file">%s</div>\n' % entity.view('oneline')) |
0 | 199 |
|
200 |
||
201 |
class DefaultTreeViewItemView(EntityView): |
|
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
202 |
"""default treeitem view for entities which don't adapt to ITree""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
203 |
__regid__ = 'treeitemview' |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1133
diff
changeset
|
204 |
|
4411
d0bde029f625
should take arbitrary arguments
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4407
diff
changeset
|
205 |
def cell_call(self, row, col, vid='oneline', treeid=None, **morekwargs): |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
206 |
assert treeid is not None |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
207 |
itemview = self._cw.view(vid, self.cw_rset, row=row, col=col) |
4455
6af31772765f
[views/treeview] fix non-ITree nodes last element computation
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
4411
diff
changeset
|
208 |
last_class = morekwargs['is_last'] and ' class="last"' or '' |
6af31772765f
[views/treeview] fix non-ITree nodes last element computation
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
4411
diff
changeset
|
209 |
self.w(u'<li%s>%s</li>' % (last_class, itemview)) |
0 | 210 |
|
211 |
||
928
57614f333dc6
[treeview] (in progress) treeid has to be produced from outside
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
918
diff
changeset
|
212 |
class TreeViewItemView(EntityView): |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
213 |
"""specific treeitem view for entities which adapt to 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
|
214 |
|
981
d86d1ee3b60e
fix some imports, update treeview for 3.2
sylvain.thenault@logilab.fr
parents:
939
diff
changeset
|
215 |
(each item should be expandable if it's not a tree leaf) |
0 | 216 |
""" |
3377
dd9d292b6a6d
use __regid__ instead of id on appobject classes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3369
diff
changeset
|
217 |
__regid__ = 'treeitemview' |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
218 |
__select__ = adaptable('ITree') |
3298
caef98aa4a98
backport from 3.5
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
2391
diff
changeset
|
219 |
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
|
220 |
|
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
221 |
def open_state(self, eeid, treeid): |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
222 |
cookies = self._cw.get_cookie() |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
223 |
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
|
224 |
if treestate: |
5758
37968502da70
imported patch cookie handling: do not use semicolon as it has some tech meaning (web2 -> web)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5693
diff
changeset
|
225 |
return str(eeid) in treestate.value.split(':') |
3298
caef98aa4a98
backport from 3.5
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
2391
diff
changeset
|
226 |
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
|
227 |
|
4407
e4f921a68703
[treeview] ensure items are ordered according to their dc_title, we can't rely on an ordered rset
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
228 |
def cell_call(self, row, col, treeid, vid='oneline', parentvid='treeview', |
e4f921a68703
[treeview] ensure items are ordered according to their dc_title, we can't rely on an ordered rset
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
229 |
is_last=False, **morekwargs): |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
230 |
w = self.w |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
231 |
entity = self.cw_rset.get_entity(row, col) |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
232 |
itree = entity.cw_adapt_to('ITree') |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
233 |
liclasses = [] |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
234 |
is_open = self.open_state(entity.eid, treeid) |
5720
f0e521487903
[ITree] more fixes, fix fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5718
diff
changeset
|
235 |
is_leaf = itree is None or itree.is_leaf() |
2216
b44b06520ddc
[treeview] fix condition
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1977
diff
changeset
|
236 |
if is_leaf: |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
237 |
if is_last: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
238 |
liclasses.append('last') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
239 |
w(u'<li class="%s">' % u' '.join(liclasses)) |
0 | 240 |
else: |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
241 |
rql = itree.children_rql() % {'x': entity.eid} |
8728
75be9de9d68e
[web] Use the new '/ajax' URL path to access the AjaxController (closes #2758254)
Rémi Cardona <remi.cardona@logilab.fr>
parents:
8190
diff
changeset
|
242 |
url = xml_escape(self._cw.build_url('ajax', rql=rql, vid=parentvid, |
3460
e4843535db25
[api] some more _cw / __regid__, automatic tests now pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3451
diff
changeset
|
243 |
pageid=self._cw.pageid, |
e4843535db25
[api] some more _cw / __regid__, automatic tests now pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3451
diff
changeset
|
244 |
treeid=treeid, |
e4843535db25
[api] some more _cw / __regid__, automatic tests now pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3451
diff
changeset
|
245 |
fname='view', |
e4843535db25
[api] some more _cw / __regid__, automatic tests now pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3451
diff
changeset
|
246 |
treesubvid=vid, |
e4843535db25
[api] some more _cw / __regid__, automatic tests now pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3451
diff
changeset
|
247 |
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
|
248 |
divclasses = ['hitarea'] |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
249 |
if is_open: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
250 |
liclasses.append('collapsable') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
251 |
divclasses.append('collapsable-hitarea') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
252 |
else: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
253 |
liclasses.append('expandable') |
1828
e9e8beb06f01
[treeview] really fix #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1826
diff
changeset
|
254 |
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
|
255 |
if is_last: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
256 |
if is_open: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
257 |
liclasses.append('lastCollapsable') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
258 |
divclasses.append('lastCollapsable-hitarea') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
259 |
else: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
260 |
liclasses.append('lastExpandable') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
261 |
divclasses.append('lastExpandable-hitarea') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
262 |
if is_open: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
263 |
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
|
264 |
else: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
265 |
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
|
266 |
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
|
267 |
divtail = '' |
0dc8b2d46a53
more in the way of subclassability & args passing all the way down
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
3311
diff
changeset
|
268 |
else: |
4721
8f63691ccb7f
pylint style fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4719
diff
changeset
|
269 |
divtail = """ onclick="asyncRemoteExec('node_clicked', '%s', '%s')" """ % ( |
8f63691ccb7f
pylint style fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4719
diff
changeset
|
270 |
treeid, entity.eid) |
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
271 |
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
|
272 |
|
0 | 273 |
# add empty <ul> because jquery's treeview plugin checks for |
274 |
# sublists presence |
|
1826
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
275 |
if not is_open: |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
276 |
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
|
277 |
# the local node info |
3451
6b46d73823f5
[api] work in progress, use __regid__, cw_*, etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3377
diff
changeset
|
278 |
self.wview(vid, self.cw_rset, row=row, col=col, **morekwargs) |
2216
b44b06520ddc
[treeview] fix condition
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1977
diff
changeset
|
279 |
if is_open and not is_leaf: # => rql is defined |
5556
9ab2b4c74baf
[entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
280 |
self.wview(parentvid, itree.children(entities=False), subvid=vid, |
3888
6f145783409d
use ITree api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3596
diff
changeset
|
281 |
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
|
282 |
w(u'</li>') |
afc563537d8f
[treeview] restore functionnality lost in some previous merge #343232
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
1802
diff
changeset
|
283 |
|
8128
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
284 |
|
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
285 |
|
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
286 |
@ajaxfunc |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
287 |
def node_clicked(self, treeid, nodeeid): |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
288 |
"""add/remove eid in treestate cookie""" |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
289 |
cookies = self._cw.get_cookie() |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
290 |
statename = treecookiename(treeid) |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
291 |
treestate = cookies.get(statename) |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
292 |
if treestate is None: |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
293 |
self._cw.set_cookie(statename, nodeeid) |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
294 |
else: |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
295 |
marked = set(filter(None, treestate.value.split(':'))) |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
296 |
if nodeeid in marked: |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
297 |
marked.remove(nodeeid) |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
298 |
else: |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
299 |
marked.add(nodeeid) |
0a927fe4541b
[controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7879
diff
changeset
|
300 |
self._cw.set_cookie(statename, ':'.join(marked)) |