Commit aa2ca37e authored by Jeffrey Shell's avatar Jeffrey Shell

added expand=... functionality

parent 229b5573
...@@ -9,8 +9,8 @@ ...@@ -9,8 +9,8 @@
# rights reserved. # rights reserved.
# #
############################################################################ ############################################################################
__rcs_id__='$Id: TreeTag.py,v 1.5 1997/09/09 23:17:25 brian Exp $' __rcs_id__='$Id: TreeTag.py,v 1.6 1997/11/10 16:32:48 jeffrey Exp $'
__version__='$Revision: 1.5 $'[11:-2] __version__='$Revision: 1.6 $'[11:-2]
from DocumentTemplate.DT_Util import * from DocumentTemplate.DT_Util import *
from DocumentTemplate.DT_String import String from DocumentTemplate.DT_String import String
...@@ -18,19 +18,24 @@ from DocumentTemplate.DT_String import String ...@@ -18,19 +18,24 @@ from DocumentTemplate.DT_String import String
class Tree: class Tree:
name='tree' name='tree'
blockContinuations=() blockContinuations=()
expand=None
def __init__(self, blocks): def __init__(self, blocks):
tname, args, section = blocks[0] tname, args, section = blocks[0]
args=parse_params(args, name='') args=parse_params(args, name='', expand='')
name=name_param(args) name=name_param(args)
self.__name__ = name self.__name__ = name
self.section=section self.section=section
if args.has_key('expand') and args['expand']:
self.expand=args['expand']
def render(self,md): def render(self,md):
try: v=md[self.__name__] try: v=md[self.__name__]
except: v=None except: v=None
if v is None: return '' if v is None: return ''
return tpRender(v,md,self.section) expand=self.expand
if expand: expand=md.getitem(expand,0)
return tpRender(v,md,self.section, expand)
__call__=render __call__=render
...@@ -42,51 +47,66 @@ from urllib import quote, unquote ...@@ -42,51 +47,66 @@ from urllib import quote, unquote
pyid=id # Copy builtin pyid=id # Copy builtin
def tpRender(self, md, section): def tpRender(self, md, section, expand):
# Check for collapse all, expand all, and state data=[]
try: collapse_all=md['collapse_all']
except: collapse_all=None try:
if collapse_all: # see if we are being run as a sub-document
state=[] root=md['tree-root-url']
else: url=md['tree-item-url']
try: expand_all=md['expand_all'] state=md['tree-state'] or md['state']
except: expand_all=None substate=md['-tree-substate-']
if expand_all: colspan=md['tree-colspan']
state=tpValuesIds(self) level=md['tree-level']
except KeyError:
# Check for collapse all, expand all, and state
try: collapse_all=md['collapse_all']
except: collapse_all=None
if collapse_all:
state=[]
else: else:
try: try: expand_all=md['expand_all']
state=md['state'] except: expand_all=None
if state[0] != '[': state=unquote(state) if expand_all:
state=list(eval(state,{'__builtins__':{}})) state=tpValuesIds(self)
except: else:
state=[] try:
state=md['tree-state'] or md['state'] or md['-tree-state-']
if state[0] != '[': state=unquote(state)
state=list(eval(state,{'__builtins__':{}}))
except:
state=[]
colspan=1+tpStateLevel(state)
level = 0
substate=state
root=md['URL']
l=rfind(root, '/')
if l >= 0: root=root[l+1:]
url=''
# Save state in a cookie # Save state in a cookie
if state: md['RESPONSE'].setCookie('state',quote(str(state)[1:-1]+',')) if state: md['RESPONSE'].setCookie('tree-state',quote(str(state)[1:-1]+','))
else: md['RESPONSE'].expireCookie('state') else: md['RESPONSE'].expireCookie('tree-state')
if substate==state: data.append('<TABLE CELLSPACING="0">\n')
#level=0
treeData={'tree-root-url': root,
'tree-colspan': colspan,
'tree-state': state }
root=md['URL']
l=rfind(root, '/')
if l >= 0: root=root[l+1:]
url=''
data =[]
data.append('<TABLE CELLSPACING="0">\n')
colspan=1+tpStateLevel(state)
treeData={'tree-root-url': root}
md.push(treeData) md.push(treeData)
try: try:
for item in self.tpValues(): for item in self.tpValues():
data=tpRenderTABLE(item,root,url,state,state,data,colspan, data=tpRenderTABLE(item,root,url,state,substate,data,colspan,
section,md,treeData) section,md,treeData, level, expand)
data.append('</TABLE>\n') if state is substate: data.append('</TABLE>\n')
result=join(data,'') result=join(data,'')
finally: md.pop(1) finally: md.pop(1)
return result return result
def tpStateLevel(state): def tpStateLevel(state, level=0):
level=0
for sub in state: for sub in state:
if len(sub)==2: level = max(level, 1+tpStateLevel(sub[1])) if len(sub)==2: level = max(level, 1+tpStateLevel(sub[1]))
else: level=max(level,1) else: level=max(level,1)
...@@ -112,16 +132,16 @@ def tpValuesIds(self): ...@@ -112,16 +132,16 @@ def tpValuesIds(self):
def tpRenderTABLE(self, root_url, url, state, substate, data, def tpRenderTABLE(self, root_url, url, state, substate, data,
colspan, section, md, treeData, level=0): colspan, section, md, treeData, level=0, expand=None):
try: items=self.tpValues() try: items=self.tpValues()
except: items=None except: items=None
tpUrl=self.tpURL() tpUrl=self.tpURL()
url = (url and ('%s/%s' % (url, tpUrl))) or tpUrl url = (url and ('%s/%s' % (url, tpUrl))) or tpUrl
treeData['tree-item-url']=url treeData['tree-item-url']=url
treeData['tree-level']=level
treeData['tree-item-expanded']=0 treeData['tree-item-expanded']=0
try: id=self.tpId() try: id=self.tpId()
except: id=None except: id=None
if id is None: if id is None:
...@@ -148,12 +168,12 @@ def tpRenderTABLE(self, root_url, url, state, substate, data, ...@@ -148,12 +168,12 @@ def tpRenderTABLE(self, root_url, url, state, substate, data,
if exp: if exp:
treeData['tree-item-expanded']=1 treeData['tree-item-expanded']=1
del substate[exp-1] del substate[exp-1]
output('<A HREF="%s?state=%s">%s</A>' % output('<A HREF="%s?tree-state=%s">%s</A>' %
(root_url,quote(str(state)[1:-1]+','), icoMinus)) (root_url,quote(str(state)[1:-1]+','), icoMinus))
substate.append(sub) substate.append(sub)
else: else:
substate.append([id]) substate.append([id])
output('<A HREF="%s?state=%s">%s</A>' % output('<A HREF="%s?tree-state=%s">%s</A>' %
(root_url,quote(str(state)[1:-1]+','), icoPlus)) (root_url,quote(str(state)[1:-1]+','), icoPlus))
del substate[-1] del substate[-1]
else: else:
...@@ -166,11 +186,18 @@ def tpRenderTABLE(self, root_url, url, state, substate, data, ...@@ -166,11 +186,18 @@ def tpRenderTABLE(self, root_url, url, state, substate, data,
output('</TD>\n</TR>\n') output('</TD>\n</TR>\n')
if exp: if exp:
for item in items: if expand is not None:
if len(sub)==1: sub.append([]) treeData['-tree-substate-']=sub
data=tpRenderTABLE(item, root_url,url,state,sub[1],data, treeData['tree-level']=level+1
colspan, section, md, treeData, level+1) md.push(treeData)
if not sub[1]: del sub[1] output(expand(self,md))
md.pop(1)
else:
for item in items:
if len(sub)==1: sub.append([])
data=tpRenderTABLE(item, root_url,url,state,sub[1],data,
colspan, section, md, treeData, level+1)
if not sub[1]: del sub[1]
return data return data
...@@ -178,3 +205,13 @@ icoSpace='<IMG SRC="%s/TreeDisplay/Blank_icon.gif" BORDER="0">' % SOFTWARE_URL ...@@ -178,3 +205,13 @@ icoSpace='<IMG SRC="%s/TreeDisplay/Blank_icon.gif" BORDER="0">' % SOFTWARE_URL
icoPlus ='<IMG SRC="%s/TreeDisplay/Plus_icon.gif" BORDER="0">' % SOFTWARE_URL icoPlus ='<IMG SRC="%s/TreeDisplay/Plus_icon.gif" BORDER="0">' % SOFTWARE_URL
icoMinus='<IMG SRC="%s/TreeDisplay/Minus_icon.gif" BORDER="0">' % SOFTWARE_URL icoMinus='<IMG SRC="%s/TreeDisplay/Minus_icon.gif" BORDER="0">' % SOFTWARE_URL
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment