web/views/treeview.py
branchtreeview-tabs
changeset 929 80de412e6ed7
parent 928 57614f333dc6
child 930 bab7f79fa26b
equal deleted inserted replaced
928:57614f333dc6 929:80de412e6ed7
    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()