Module: check_mk
Branch: master
Commit: 32ba1d04d0b19cbb3586b96ed1497cdfe285ef63
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=32ba1d04d0b19c…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Feb 7 13:58:51 2012 +0100
Improve CascadingDropdown
---
web/htdocs/valuespec.py | 21 ++++++++++++++++-----
1 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/web/htdocs/valuespec.py b/web/htdocs/valuespec.py
index 21e3d65..d6267e0 100644
--- a/web/htdocs/valuespec.py
+++ b/web/htdocs/valuespec.py
@@ -265,6 +265,7 @@ class Filesize(Integer):
class TextAscii(ValueSpec):
def __init__(self, **kwargs):
ValueSpec.__init__(self, **kwargs)
+ self._label = kwargs.get("label")
self._size = kwargs.get("size", 30)
self._strip = kwargs.get("strip", True)
self._allow_empty = kwargs.get("allow_empty", True)
@@ -278,6 +279,9 @@ class TextAscii(ValueSpec):
return ""
def render_input(self, varprefix, value):
+ if self._label:
+ html.write(self._label)
+ html.write(" ")
html.text_input(varprefix, str(value), size = self._size)
def value_to_text(self, value):
@@ -595,7 +599,9 @@ class DropdownChoice(ValueSpec):
# The currently selected ValueSpec will be displayed.
# The text representations of the ValueSpecs will be used as texts.
# A ValueSpec of None is also allowed and will return
-# the value None.
+# the value None. It is also allowed to leave out the
+# value spec for some of the choices (which is the same as
+# using None).
# The resulting value is either a single value (if no
# value spec is defined for the selected entry) or a pair
# of (x, y) where x is the value of the selected entry and
@@ -604,7 +610,11 @@ class DropdownChoice(ValueSpec):
class CascadingDropdown(ValueSpec):
def __init__(self, **kwargs):
ValueSpec.__init__(self, **kwargs)
- self._choices = kwargs["choices"]
+ self._choices = []
+ for entry in kwargs["choices"]:
+ if len(entry) == 2:
+ entry = entry + (None,)
+ self._choices.append(entry)
self._separator = kwargs.get("separator", ", ")
self._html_separator = kwargs.get("html_separator", "<br>")
self._sorted = kwargs.get("sorted", True)
@@ -642,13 +652,14 @@ class CascadingDropdown(ValueSpec):
else:
def_val = vs.default_value()
disp = "none"
- html.write('<div id="%s_%s_sub" style="display: %s">' % (varprefix, nr, disp))
+ html.write('<span id="%s_%s_sub" style="display: %s">' % (varprefix, nr, disp))
vs.render_input(vp, def_val)
- html.write('</div>')
+ html.write('</span>')
def value_to_text(self, value):
for val, title, vs in self._choices:
- if value[0] == val:
+ if (vs and value[0] == val) or \
+ (value == val):
if not vs:
return title
else: