summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tuskar_ui/infrastructure/parameters/forms.py43
-rw-r--r--tuskar_ui/infrastructure/templates/horizon/common/_horizontal_field.html20
2 files changed, 45 insertions, 18 deletions
diff --git a/tuskar_ui/infrastructure/parameters/forms.py b/tuskar_ui/infrastructure/parameters/forms.py
index cefba145..b94dc00e 100644
--- a/tuskar_ui/infrastructure/parameters/forms.py
+++ b/tuskar_ui/infrastructure/parameters/forms.py
@@ -46,6 +46,10 @@ CINDER_ISCSI_HELPER_CHOICES = [
]
+class ParameterAwareMixin(object):
+ parameter = None
+
+
def parameter_fields(request, prefix=None, read_only=False):
fields = SortedDict()
plan = api.tuskar.Plan.get_the_plan(request)
@@ -54,18 +58,17 @@ def parameter_fields(request, prefix=None, read_only=False):
for p in parameters:
if prefix and not p.name.startswith(prefix):
continue
- kwargs = {}
+ Field = django.forms.CharField
+ field_kwargs = {}
+ widget = None
if read_only:
if p.hidden:
- kwargs['widget'] = tuskar_ui.forms.StaticTextPasswordWidget
+ widget = tuskar_ui.forms.StaticTextPasswordWidget
else:
- kwargs['widget'] = tuskar_ui.forms.StaticTextWidget
- Field = django.forms.CharField
+ widget = tuskar_ui.forms.StaticTextWidget
else:
if p.hidden:
- Field = django.forms.CharField
- kwargs['widget'] = (
- django.forms.PasswordInput(render_value=True))
+ widget = django.forms.PasswordInput(render_value=True)
elif p.type == 'number':
Field = django.forms.IntegerField
elif p.type == 'boolean':
@@ -73,18 +76,22 @@ def parameter_fields(request, prefix=None, read_only=False):
elif (p.type == 'string' and
p.constraints['allowed_values']['definition']):
Field = django.forms.ChoiceField
- kwargs['choices'] = (
+ field_kwargs['choices'] = (
p.constraints['allowed_values']['definition'])
- else:
- if (p.type in ['json', 'comma_delimited_list'] or
- 'Certificate' in p.name):
- kwargs['widget'] = django.forms.Textarea
- Field = django.forms.CharField
-
- fields[p.name] = Field(required=False,
- label=_parameter_label(p),
- initial=p.value,
- **kwargs)
+ elif (p.type in ['json', 'comma_delimited_list'] or
+ 'Certificate' in p.name):
+ widget = django.forms.Textarea
+
+ fields[p.name] = Field(
+ required=False,
+ label=_parameter_label(p),
+ initial=p.value,
+ widget=widget,
+ **field_kwargs
+ )
+ fields[p.name].__class__ = type('ParameterAwareField',
+ (ParameterAwareMixin, Field), {})
+ fields[p.name].parameter = p
return fields
diff --git a/tuskar_ui/infrastructure/templates/horizon/common/_horizontal_field.html b/tuskar_ui/infrastructure/templates/horizon/common/_horizontal_field.html
new file mode 100644
index 00000000..96947c0a
--- /dev/null
+++ b/tuskar_ui/infrastructure/templates/horizon/common/_horizontal_field.html
@@ -0,0 +1,20 @@
+{% load form_helpers %}
+
+<div class="form-group{% if field.errors %} has-error{% endif %} {{ field.css_classes }}">
+ <label class="control-label col-sm-3 {% if field.field.required or field.field.parameter.is_required %}{{ form.required_css_class }}{% endif %}" for="{{ field.id_for_label }}">{{ field.label }}</label>
+ <div class="col-sm-9 {{ classes.value }} {{ field|wrapper_classes }}">
+ {{ field|add_bootstrap_class }}
+ {% for error in field.errors %}
+ <span class="help-block alert alert-danger {{ form.error_css_class }}">{{ error }}</span>
+ {% empty %}
+ {% comment %}
+ Escape help_text a second time here, to avoid an XSS issue in bootstrap.js.
+ This can most likely be removed once we upgrade bootstrap.js past 2.0.2.
+ Note: the spaces are necessary here.
+ {% endcomment %}
+ {% if field.help_text %}
+ <span class="help-block">{% filter force_escape %} {{ field.help_text }} {% endfilter %} </span>
+ {% endif %}
+ {% endfor %}
+ </div>
+</div>