Skip to content

Commit 7f07fc3

Browse files
committed
Extend "additional" parameter to work with (multi)links.
1 parent 1e395b9 commit 7f07fc3

File tree

1 file changed

+35
-5
lines changed

1 file changed

+35
-5
lines changed

roundup/cgi/templating.py

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1908,6 +1908,21 @@ def menu(self, size=None, height=None, showid=0, additional=[], value=None,
19081908
if value and value not in options:
19091909
options.insert(0, value)
19101910

1911+
if additional:
1912+
additional_fns = []
1913+
props = linkcl.getprops()
1914+
for propname in additional:
1915+
prop = props[propname]
1916+
if isinstance(prop, hyperdb.Link):
1917+
cl = self._db.getclass(prop.classname)
1918+
labelprop = cl.labelprop()
1919+
fn = lambda optionid: cl.get(linkcl.get(optionid,
1920+
propname),
1921+
labelprop)
1922+
else:
1923+
fn = lambda optionid: linkcl.get(optionid, propname)
1924+
additional_fns.append(fn)
1925+
19111926
for optionid in options:
19121927
# get the option value, and if it's None use an empty string
19131928
option = linkcl.get(optionid, k) or ''
@@ -1930,9 +1945,9 @@ def menu(self, size=None, height=None, showid=0, additional=[], value=None,
19301945
lab = lab[:size-3] + '...'
19311946
if additional:
19321947
m = []
1933-
for propname in additional:
1934-
m.append(linkcl.get(optionid, propname))
1935-
lab = lab + ' (%s)'%', '.join(map(str, m))
1948+
for fn in additional_fns:
1949+
m.append(str(fn(optionid)))
1950+
lab = lab + ' (%s)'%', '.join(m)
19361951

19371952
# and generate
19381953
lab = cgi.escape(self._(lab))
@@ -2109,6 +2124,21 @@ def menu(self, size=None, height=None, showid=0, additional=[],
21092124
if val not in options:
21102125
options.insert(0, val)
21112126

2127+
if additional:
2128+
additional_fns = []
2129+
props = linkcl.getprops()
2130+
for propname in additional:
2131+
prop = props[propname]
2132+
if isinstance(prop, hyperdb.Link):
2133+
cl = self._db.getclass(prop.classname)
2134+
labelprop = cl.labelprop()
2135+
fn = lambda optionid: cl.get(linkcl.get(optionid,
2136+
propname),
2137+
labelprop)
2138+
else:
2139+
fn = lambda optionid: linkcl.get(optionid, propname)
2140+
additional_fns.append(fn)
2141+
21122142
for optionid in options:
21132143
# get the option value, and if it's None use an empty string
21142144
option = linkcl.get(optionid, k) or ''
@@ -2128,8 +2158,8 @@ def menu(self, size=None, height=None, showid=0, additional=[],
21282158
lab = lab[:size-3] + '...'
21292159
if additional:
21302160
m = []
2131-
for propname in additional:
2132-
m.append(linkcl.get(optionid, propname))
2161+
for fn in additional_fns:
2162+
m.append(str(fn(optionid)))
21332163
lab = lab + ' (%s)'%', '.join(m)
21342164

21352165
# and generate

0 commit comments

Comments
 (0)