summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadomir Dopieralski <openstack@sheep.art.pl>2015-03-20 15:00:14 +0100
committerRyan Brady <rbrady@redhat.com>2015-04-16 13:56:36 -0400
commitcfabb4656f4729d4b430fdb5ca8875363379f42c (patch)
tree60750e269103deffb582fa35e122c88c72011360
parent0006a339b7627ce53edf6cf0d6614f4e8cc60000 (diff)
downloadtuskar-ui-cfabb4656f4729d4b430fdb5ca8875363379f42c.tar.gz
Show required service configuration parameters as required
Because we don't want the fields to *actually* be required in the particular form, instead of making them required they have been made aware of their parameter and that is used in the overridden field template to set the proper css class. Change-Id: I4fdf3d0df712e1c2a4bd86a8acbc6eecc88186d3 Co-Authored-By: Ryan Brady <rbrady@redhat.com>
-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 1992785c..879402b3 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>