From cfabb4656f4729d4b430fdb5ca8875363379f42c Mon Sep 17 00:00:00 2001 From: Radomir Dopieralski Date: Fri, 20 Mar 2015 15:00:14 +0100 Subject: 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 --- tuskar_ui/infrastructure/parameters/forms.py | 43 +++++++++++++--------- .../horizon/common/_horizontal_field.html | 20 ++++++++++ 2 files changed, 45 insertions(+), 18 deletions(-) create mode 100644 tuskar_ui/infrastructure/templates/horizon/common/_horizontal_field.html 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 %} + +
+ +
+ {{ field|add_bootstrap_class }} + {% for error in field.errors %} + {{ error }} + {% 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 %} + {% filter force_escape %} {{ field.help_text }} {% endfilter %} + {% endif %} + {% endfor %} +
+
-- cgit v1.2.1