Author: eallen
Date: 2008-11-04 14:37:02 -0500 (Tue, 04 Nov 2008)
New Revision: 2732
Modified:
mgmt/trunk/cumin/python/wooly/forms.py
mgmt/trunk/cumin/python/wooly/forms.strings
mgmt/trunk/cumin/python/wooly/parameters.py
Log:
Resurrecting IntegerField class.
Adding MoreFormField and accompanying javascript to show and hide a list of fields on a
form.
Modified: mgmt/trunk/cumin/python/wooly/forms.py
===================================================================
--- mgmt/trunk/cumin/python/wooly/forms.py 2008-11-03 18:37:19 UTC (rev 2731)
+++ mgmt/trunk/cumin/python/wooly/forms.py 2008-11-04 19:37:02 UTC (rev 2732)
@@ -208,12 +208,8 @@
def __init__(self, app, name, param):
super(RadioInput, self).__init__(app, name, param)
- self.value = None
+ self.value = name
- # XXX lose this
- def set_value(self, value):
- self.value = value
-
def render_value(self, session, *args):
return self.value
@@ -287,6 +283,9 @@
def do_validate(self, session, errors):
pass
+ def render_field_help(self, session):
+ pass
+
class ScalarField(FormField):
def __init__(self, app, name, input):
super(ScalarField, self).__init__(app, name)
@@ -324,11 +323,22 @@
class IntegerField(ScalarField):
def __init__(self, app, name):
- super(IntegerInputField, self).__init__(app, name, None)
+ super(IntegerField, self).__init__(app, name, None)
- self.input = PasswordInput(app, "input")
+ self.input = IntegerInput(app, "input")
self.add_child(self.input)
+ def do_validate(self, session, errors):
+ val = self.get(session)
+ try:
+ val = int(val)
+ except:
+ if val:
+ error = FormError("A Numeric Value is Expected")
+ errors.append(error)
+ else:
+ self.set(session, self.input.param.get_default(session))
+
# XXX make this use a RadioInputSet instead?
class RadioField(FormField):
def __init__(self, app, name, param):
@@ -418,3 +428,13 @@
writer.write(field.render(session))
return writer.to_string()
+
+class MoreFieldSet(FieldForm, FormField):
+ def render_inputs(self, session, *args):
+ return self.render_fields(session, *args)
+
+ def render_more_text(self, session, *args):
+ return "Show Advanced Options..."
+
+ def render_less_text(self, session, *args):
+ return "Hide Advanced Options..."
Modified: mgmt/trunk/cumin/python/wooly/forms.strings
===================================================================
--- mgmt/trunk/cumin/python/wooly/forms.strings 2008-11-03 18:37:19 UTC (rev 2731)
+++ mgmt/trunk/cumin/python/wooly/forms.strings 2008-11-04 19:37:02 UTC (rev 2732)
@@ -58,8 +58,13 @@
div.field div.title {
font-weight: bold;
font-size: 0.9em;
- margin: 0 0 1em 0;
+ float: left;
+ margin: 0 1em 1em 0;
}
+div.field div.field_help {
+ font-size: 0.9em;
+ color: #222;
+}
div.field div.inputs {
margin: 0 0 1em 1em;
@@ -67,9 +72,9 @@
[FormField.html]
<div class="field">
- <div class="title">{title}</div>
+ <div class="title">{title}</div> <div
class="field_help">{field_help}</div><div
style="clear:left;"><!-- --></div>
{errors}
- <div class="inputs">{inputs}</div>
+ <div class="inputs">{inputs}</div><div
style="clear:left;"><!-- --></div>
</div>
[RadioFieldOption.html]
@@ -78,3 +83,43 @@
tabindex="{tab_index}" {checked_attr} {disabled_attr}/>
<label for="{id}">{title}</label>
</div>
+
+
+[MoreFieldSet.css]
+div.more_inputs {
+ display: none;
+ margin-left: 0.5em;
+ padding: 0.5em;
+ border: 1px dashed #333;
+ background-color: #FCFCFC;
+}
+
+div.more_field_set {
+ margin-bottom: 1em;
+}
+
+[MoreFieldSet.html]
+<div class="more_field_set">
+ <input type="button" id="button_{id}"
onclick="toggle_more_fieldset(); return false;" value="{more_text}"
/>
+ <div id="{id}" class="more_inputs"
style="display:none;">
+ {inputs}
+ </div>
+</div><!-- end of "more_field_set" -->
+<script type="text/javascript">
+function toggle_more_fieldset() {
+ var oDiv = document.getElementById("{id}");
+ var oButton = document.getElementById("button_{id}");
+ if (oDiv) {
+ if (oDiv.style.display == "none") {
+ oDiv.style.display = "block";
+ if (oButton)
+ oButton.value = "{less_text}";
+ } else {
+ oDiv.style.display = "none"
+ if (oButton)
+ oButton.value = "{more_text}";
+ }
+ }
+}
+</script>
+
\ No newline at end of file
Modified: mgmt/trunk/cumin/python/wooly/parameters.py
===================================================================
--- mgmt/trunk/cumin/python/wooly/parameters.py 2008-11-03 18:37:19 UTC (rev 2731)
+++ mgmt/trunk/cumin/python/wooly/parameters.py 2008-11-04 19:37:02 UTC (rev 2732)
@@ -78,7 +78,10 @@
class IntegerParameter(Parameter):
def do_unmarshal(self, string):
- return int(string)
+ try:
+ return int(string)
+ except:
+ return string
class BooleanParameter(Parameter):
def __init__(self, model, name):