20 itemvid = 'treeitemview' |
20 itemvid = 'treeitemview' |
21 css_classes = 'treeview widget' |
21 css_classes = 'treeview widget' |
22 title = _('tree view') |
22 title = _('tree view') |
23 |
23 |
24 def call(self, subvid=None, treeid=None): |
24 def call(self, subvid=None, treeid=None): |
25 assert treeid is not None |
|
26 if subvid is None and 'subvid' in self.req.form: |
25 if subvid is None and 'subvid' in self.req.form: |
27 subvid = self.req.form.pop('subvid') # consume it |
26 subvid = self.req.form.pop('subvid') # consume it |
28 if subvid is None: |
27 if subvid is None: |
29 subvid = 'oneline' |
28 subvid = 'oneline' |
|
29 if treeid is None and 'treeid' in self.req.form: |
|
30 treeid = self.req.form.pop('treeid') |
|
31 assert treeid is not None |
30 self.req.add_css('jquery.treeview.css') |
32 self.req.add_css('jquery.treeview.css') |
31 self.req.add_js(('cubicweb.ajax.js', 'jquery.treeview.js')) |
33 self.req.add_js(('cubicweb.ajax.js', 'jquery.treeview.js')) |
32 self.req.html_headers.add_onload(u""" |
34 self.req.html_headers.add_onload(u""" |
33 $("#tree-%s").treeview({toggle: toggleTree, |
35 $("#tree-%s").treeview({toggle: toggleTree, |
34 prerendered: true});""" % treeid) |
36 prerendered: true});""" % treeid) |
94 |
96 |
95 def open_state(self, eeid, treeid): |
97 def open_state(self, eeid, treeid): |
96 cookies = self.req.get_cookie() |
98 cookies = self.req.get_cookie() |
97 treestate = cookies.get(treecookiename(treeid)) |
99 treestate = cookies.get(treecookiename(treeid)) |
98 if treestate: |
100 if treestate: |
99 return eeid in set(treestate.value.split(';')) |
101 return str(eeid) in treestate.value |
100 return False |
102 return False |
101 |
103 |
102 def cell_call(self, row, col, treeid, vid='oneline', parentvid='treeview'): |
104 def cell_call(self, row, col, treeid, vid='oneline', parentvid='treeview'): |
103 w = self.w |
105 w = self.w |
104 entity = self.entity(row, col) |
106 entity = self.entity(row, col) |
112 w(u'<li class="%s">' % u' '.join(liclasses)) |
114 w(u'<li class="%s">' % u' '.join(liclasses)) |
113 else: |
115 else: |
114 rql = entity.children_rql() % {'x': entity.eid} |
116 rql = entity.children_rql() % {'x': entity.eid} |
115 url = html_escape(self.build_url('json', rql=rql, vid=parentvid, |
117 url = html_escape(self.build_url('json', rql=rql, vid=parentvid, |
116 pageid=self.req.pageid, |
118 pageid=self.req.pageid, |
|
119 treeid=treeid, |
117 subvid=vid, |
120 subvid=vid, |
118 noautoload=True)) |
121 noautoload=True)) |
119 if is_open: |
122 if is_open: |
120 liclasses.append('collapsable') |
123 liclasses.append('collapsable') |
121 else: |
124 else: |
134 else: |
137 else: |
135 w(u'<li cubicweb:loadurl="%s" class="%s">' % (url, u' '.join(liclasses))) |
138 w(u'<li cubicweb:loadurl="%s" class="%s">' % (url, u' '.join(liclasses))) |
136 if is_leaf: |
139 if is_leaf: |
137 divtail = '' |
140 divtail = '' |
138 else: |
141 else: |
139 divtail = ''' onclick="async_remote_exec('node_clicked', %s)"''' % entity.eid |
142 divtail = ''' onclick="async_remote_exec('node_clicked', '%s', '%s')"''' % \ |
|
143 (treeid, entity.eid) |
140 w(u'<div class="%s"%s></div>' % (u' '.join(divclasses), divtail)) |
144 w(u'<div class="%s"%s></div>' % (u' '.join(divclasses), divtail)) |
141 |
145 |
142 # add empty <ul> because jquery's treeview plugin checks for |
146 # add empty <ul> because jquery's treeview plugin checks for |
143 # sublists presence |
147 # sublists presence |
144 if not is_open: |
148 if not is_open: |
151 |
155 |
152 from logilab.common.decorators import monkeypatch |
156 from logilab.common.decorators import monkeypatch |
153 from cubicweb.web.views.basecontrollers import JSonController |
157 from cubicweb.web.views.basecontrollers import JSonController |
154 |
158 |
155 @monkeypatch(JSonController) |
159 @monkeypatch(JSonController) |
156 def js_node_clicked(self, eid): |
160 def js_node_clicked(self, treeid, eid): |
157 """add/remove eid in treestate cookie |
161 """add/remove eid in treestate cookie |
158 XXX this deals with one tree per page |
162 XXX this deals with one tree per page |
159 also check the treeid issue above |
163 also check the treeid issue above |
160 """ |
164 """ |
161 cookies = self.req.get_cookie() |
165 cookies = self.req.get_cookie() |