Module: check_mk
Branch: master
Commit: 94eff13540ecccaa4e40a20947b9d38ef80ef9cb
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=94eff13540eccc…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Sat Feb 25 21:02:18 2012 +0100
New valuespec Foldable()
---
web/htdocs/check_mk.css | 14 ++++++++
web/htdocs/js/checkmk.js | 10 +++--
web/htdocs/valuespec.py | 83 +++++++++++++++++++++++++++++++++++++--------
3 files changed, 88 insertions(+), 19 deletions(-)
diff --git a/web/htdocs/check_mk.css b/web/htdocs/check_mk.css
index 7c4e8f7..fc3215e 100644
--- a/web/htdocs/check_mk.css
+++ b/web/htdocs/check_mk.css
@@ -297,6 +297,10 @@ table.valuespec_tuple td.tuple_left {
padding-bottom: 10px;
}
+table.valuespec_tuple span.title {
+ font-size: 8pt;
+}
+
table.vs_date {
border-spacing: 0px;
}
@@ -311,3 +315,13 @@ table.vs_date th {
font-size: 7pt;
padding: 0px;
}
+
+table.valuespec_listof td.vlof_buttons {
+ margin-right: 5px;
+}
+table.valuespec_listof td.vlof_content {
+ border: 1px solid white;
+ box-shadow: 1px 1px 2px #808080;
+ background-image: url("images/form_background.png");
+ background-repeat: repeat;
+}
diff --git a/web/htdocs/js/checkmk.js b/web/htdocs/js/checkmk.js
index e91ad11..3ad837b 100644
--- a/web/htdocs/js/checkmk.js
+++ b/web/htdocs/js/checkmk.js
@@ -1452,7 +1452,7 @@ function valuespec_listof_add(varprefix, magic) {
var count = parseInt(oCountInput.value);
var strcount = "" + (count + 1);
oCountInput.value = strcount;
- var oPrototype = document.getElementById(varprefix + "_prototype");
+ var oPrototype = document.getElementById(varprefix +
"_prototype").childNodes[0].childNodes[0]; // TR
var htmlcode = oPrototype.innerHTML;
htmlcode = replace_all(htmlcode, magic, strcount);
var oTable = document.getElementById(varprefix + "_table");
@@ -1462,7 +1462,7 @@ function valuespec_listof_add(varprefix, magic) {
else {
var oTbody = oTable.childNodes[0];
var oTr = document.createElement("tr")
- oTr.innerHTML = "<td>" + htmlcode + "</td>";
+ oTr.innerHTML = htmlcode;
oTbody.appendChild(oTr);
}
}
@@ -1471,6 +1471,8 @@ function valuespec_listof_add(varprefix, magic) {
// remove the according table row and add an invisible
// input element with the name varprefix + "_deleted_%nr"
function valuespec_listof_delete(oA, varprefix, nr) {
- var oTd = oA.parentNode;
- oTd.innerHTML = '<input type=hidden name="_' + varprefix +
'_deleted_' + nr + '" value=1>'
+ var oTr = oA.parentNode.parentNode; // TR
+ var oTdContent = oTr.childNodes[1];
+ oTdContent.innerHTML = '<input type=hidden name="_' + varprefix +
'_deleted_' + nr + '" value=1>'
+ oTr.style.display = "none";
}
diff --git a/web/htdocs/valuespec.py b/web/htdocs/valuespec.py
index b6c54cb..5639453 100644
--- a/web/htdocs/valuespec.py
+++ b/web/htdocs/valuespec.py
@@ -514,19 +514,21 @@ class ListOf(ValueSpec):
(varprefix, len(value), varprefix))
# Render reference element for cloning
- html.write('<div style="display:none"
id="%s_prototype">' % varprefix)
+ html.write('<table style="display:none"
id="%s_prototype">' % varprefix)
+ html.write('<tr><td class=vlof_buttons>')
self.del_button(varprefix, self._magic)
- html.write(" ")
+ html.write('</td><td class=vlof_content>')
self._valuespec.render_input(
varprefix + "_" + self._magic,
self._valuespec.canonical_value())
- html.write('</div>')
+ html.write('</td></tr></table>')
- html.write('<table id="%s_table">' % varprefix)
+ # Actual table of currently existing entries
+ html.write('<table class="valuespec_listof"
id="%s_table">' % varprefix)
for nr, v in enumerate(value):
- html.write('<tr><td>')
+ html.write('<tr><td class=vlof_buttons>')
self.del_button(varprefix, nr+1)
- html.write(" ")
+ html.write("</td><td class=vlof_content>")
self._valuespec.render_input(varprefix + "_%d" % (nr+1), v)
html.write("</td></tr>")
html.write("</table>")
@@ -1277,8 +1279,9 @@ class Tuple(ValueSpec):
return tuple([x.canonical_value() for x in self._elements])
def render_input(self, varprefix, value):
- if self._vertical:
- html.write('<table class="valuespec_tuple">')
+ html.write('<table class="valuespec_tuple">')
+ if not self._vertical:
+ html.write("<tr>")
for no, (element, val) in enumerate(zip(self._elements, value)):
vp = varprefix + "_" + str(no)
if element.help():
@@ -1288,17 +1291,27 @@ class Tuple(ValueSpec):
if self._vertical:
html.write("<tr>")
if self._show_titles:
- title = element.title()[0].upper() + element.title()[1:]
- html.write("<td class=tuple_left>%s:%s</td>" %
(title, help))
+ elem_title = element.title()
+ if elem_title:
+ title = element.title()[0].upper() + element.title()[1:]
+ else:
+ title = ""
+ if self._vertical:
+ html.write("<td class=tuple_left>%s:%s</td>" %
(title, help))
+ else:
+ html.write("<td class=tuple_td><span
class=title>%s" % title)
+ if help:
+ html.write("<br><i>%s</i>" % help)
+ html.write("</span><br>")
if self._vertical:
html.write("<td class=tuple_right>")
element.render_input(vp, val)
+ html.write("</td>")
if self._vertical:
- html.write("</td></tr>")
- else:
- html.write(" ")
- if self._vertical:
- html.write("</table>")
+ html.write("</tr>")
+ if not self._vertical:
+ html.write("</tr>")
+ html.write("</table>")
def set_focus(self, varprefix):
self._elements[0].set_focus(varprefix + "_0")
@@ -1484,3 +1497,43 @@ class AutoTimestamp(FixedValue):
def value_to_text(self, value):
return time.strftime("%F %T", time.localtime(value))
+
+# Fully transparant VS encapsulating a vs in a foldable
+# container.
+class Foldable(ValueSpec):
+ def __init__(self, valuespec, **kwargs):
+ ValueSpec.__init__(self, **kwargs)
+ self._valuespec = valuespec
+ self._open = kwargs.get("open", False)
+
+ def render_input(self, varprefix, value):
+ html.begin_foldable_container("valuespec_foldable", varprefix,
self._open,
+ self._valuespec.title(), False)
+ if self._valuespec.help():
+ html.write("<i class=help>%s</i><br>" %
self._valuespec.help())
+ self._valuespec.render_input(varprefix, value)
+ html.end_foldable_container()
+
+ def set_focus(self, varprefix):
+ self._valuespec.set_focus(varprefix)
+
+ def canonical_value(self):
+ return self._valuespec.canonical_value()
+
+ def default_value(self):
+ return self._valuespec.default_value()
+
+ def value_to_text(self, value):
+ return self._valuespec.value_to_text(value)
+
+ def from_html_vars(self, varprefix):
+ return self._valuespec.from_html_vars(varprefix)
+
+ def validate_datatype(self, value, varprefix):
+ self._valuespec.validate_datatype(value, varprefix)
+
+ def validate_value(self, value, varprefix):
+ self._valuespec.validate_value(value, varprefix)
+
+
+