diff options
author | Radomir Dopieralski <openstack@sheep.art.pl> | 2015-03-20 15:00:14 +0100 |
---|---|---|
committer | Ryan Brady <rbrady@redhat.com> | 2015-04-16 13:56:36 -0400 |
commit | cfabb4656f4729d4b430fdb5ca8875363379f42c (patch) | |
tree | 60750e269103deffb582fa35e122c88c72011360 | |
parent | 0006a339b7627ce53edf6cf0d6614f4e8cc60000 (diff) | |
download | tuskar-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.py | 43 | ||||
-rw-r--r-- | tuskar_ui/infrastructure/templates/horizon/common/_horizontal_field.html | 20 |
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> |