7 from cubicweb.web.views.baseviews import OneLineView |
7 from cubicweb.web.views.baseviews import OneLineView |
8 |
8 |
9 class TreeView(EntityView): |
9 class TreeView(EntityView): |
10 id = 'treeview' |
10 id = 'treeview' |
11 accepts = ('Any',) |
11 accepts = ('Any',) |
12 fstree = False |
|
13 itemvid = 'treeitemview' |
12 itemvid = 'treeitemview' |
|
13 css_classes = 'treeview widget' |
|
14 title = _('tree view') |
14 |
15 |
15 def call(self, subvid=None): |
16 def call(self, subvid=None): |
16 if subvid is None and 'subvid' in self.req.form: |
17 if subvid is None and 'subvid' in self.req.form: |
17 subvid = self.req.form.pop('subvid') # consume it |
18 subvid = self.req.form.pop('subvid') # consume it |
18 if subvid is None: |
19 if subvid is None: |
19 subvid = 'oneline' |
20 subvid = 'oneline' |
20 self.req.add_css('jquery.treeview.css') |
21 self.req.add_css('jquery.treeview.css') |
21 self.req.add_js(('cubicweb.ajax.js', 'jquery.treeview.js', 'cubicweb.widgets.js')) |
22 self.req.add_js(('cubicweb.ajax.js', 'jquery.treeview.js', 'cubicweb.widgets.js')) |
22 css_classes = 'treeview widget' |
|
23 if self.fstree: |
|
24 css_classes += ' filetree' |
|
25 # XXX noautoload is a quick hack to avoid treeview to be rebuilt |
23 # XXX noautoload is a quick hack to avoid treeview to be rebuilt |
26 # after a json query and avoid double toggling bugs. |
24 # after a json query and avoid double toggling bugs. |
27 # Need to find a way to do that cleanly. |
25 # Need to find a way to do that cleanly. |
28 if 'noautoload' in self.req.form: |
26 if 'noautoload' in self.req.form: |
29 self.w(u'<ul class="%s" cubicweb:wdgtype="TreeView">' % css_classes) |
27 self.w(u'<ul class="%s" cubicweb:wdgtype="TreeView">' % self.css_classes) |
30 else: |
28 else: |
31 self.w(u'<ul class="%s" cubicweb:loadtype="auto" cubicweb:wdgtype="TreeView">' |
29 self.w(u'<ul class="%s" cubicweb:loadtype="auto" cubicweb:wdgtype="TreeView">' |
32 % css_classes) |
30 % self.css_classes) |
33 for rowidx in xrange(len(self.rset)): |
31 for rowidx in xrange(len(self.rset)): |
34 self.wview(self.itemvid, self.rset, row=rowidx, col=0, |
32 self.wview(self.itemvid, self.rset, row=rowidx, col=0, |
35 vid=subvid, parentvid=self.id) |
33 vid=subvid, parentvid=self.id) |
36 self.w(u'</ul>') |
34 self.w(u'</ul>') |
37 |
35 |
38 |
36 |
39 class FileTreeView(TreeView): |
37 class FileTreeView(TreeView): |
40 """specific version of the treeview to display file trees |
38 """specific version of the treeview to display file trees |
41 """ |
39 """ |
42 id = 'filetree' |
40 id = 'filetree' |
43 fstree = True |
41 css_classes = 'treeview widget filetree' |
|
42 title = _('file tree view') |
44 |
43 |
45 def call(self, subvid=None): |
44 def call(self, subvid=None): |
46 super(FileTreeView, self).call(subvid='filetree-oneline') |
45 super(FileTreeView, self).call(subvid='filetree-oneline') |
47 |
46 |
48 |
47 |
49 |
48 |
50 class FileItemInnerView(OneLineView): |
49 class FileItemInnerView(EntityView): |
51 """inner view used by the TreeItemView instead of oneline view |
50 """inner view used by the TreeItemView instead of oneline view |
52 |
51 |
53 This view adds an enclosing <span> with some specific CSS classes |
52 This view adds an enclosing <span> with some specific CSS classes |
54 around the oneline view. This is needed by the jquery treeview plugin. |
53 around the oneline view. This is needed by the jquery treeview plugin. |
55 """ |
54 """ |