From 2eb573f2ad08bbeb63d6b50902c3761abb3b38fe Mon Sep 17 00:00:00 2001 From: John Martin Date: Thu, 18 Jul 2013 13:07:38 +0100 Subject: [PATCH] [#1089] Add required '*' to forms * Adds extra params to form macros called `is_required` * Also adds extra macro for outputting the '* is required field' on the bottom of forms * Also adds said params to needed forms --- .../javascript/plugins/jquery.slug-preview.js | 3 +- ckan/public/base/less/forms.less | 8 ++++ ckan/templates/group/snippets/group_form.html | 3 +- ckan/templates/macros/form.html | 46 +++++++++++++------ .../snippets/organization_form.html | 3 +- .../snippets/package_basic_fields.html | 4 +- .../package/snippets/resource_form.html | 5 +- ckan/templates/user/edit_user_form.html | 6 ++- 8 files changed, 56 insertions(+), 22 deletions(-) diff --git a/ckan/public/base/javascript/plugins/jquery.slug-preview.js b/ckan/public/base/javascript/plugins/jquery.slug-preview.js index b9ffe1509eb..fd3cb170cb9 100644 --- a/ckan/public/base/javascript/plugins/jquery.slug-preview.js +++ b/ckan/public/base/javascript/plugins/jquery.slug-preview.js @@ -31,13 +31,14 @@ var field = element.find('input'); var preview = $(options.template); var value = preview.find('.slug-preview-value'); + var required = $('
').append($('.control-required', element).clone()).html(); function setValue() { var val = escape(field.val()) || options.placeholder; value.text(val); } - preview.find('strong').text(options.i18n['URL'] + ':'); + preview.find('strong').html(required + ' ' + options.i18n['URL'] + ':'); preview.find('.slug-preview-prefix').text(options.prefix); preview.find('button').text(options.i18n['Edit']).click(function (event) { event.preventDefault(); diff --git a/ckan/public/base/less/forms.less b/ckan/public/base/less/forms.less index a7449a9980a..289439c291a 100644 --- a/ckan/public/base/less/forms.less +++ b/ckan/public/base/less/forms.less @@ -79,6 +79,14 @@ textarea { height: (@baseLineHeight*2)+1; } +.control-required { + color: @errorBorder; +} + +.form-actions .control-required-message { + float: left; +} + .form-actions { background: none; margin-left: -@gutterX; diff --git a/ckan/templates/group/snippets/group_form.html b/ckan/templates/group/snippets/group_form.html index 75bc19e1276..f8b45f2f3d9 100644 --- a/ckan/templates/group/snippets/group_form.html +++ b/ckan/templates/group/snippets/group_form.html @@ -15,7 +15,7 @@ {% set domain = domain|replace("http://", "")|replace("https://", "") %} {% set attrs = {'data-module': 'slug-preview-slug', 'data-module-prefix': domain, 'data-module-placeholder': ''} %} - {{ form.prepend('name', label=_('URL'), prepend=prefix, id='field-url', placeholder=_('my-group'), value=data.name, error=errors.name, attrs=attrs) }} + {{ form.prepend('name', label=_('URL'), prepend=prefix, id='field-url', placeholder=_('my-group'), value=data.name, error=errors.name, attrs=attrs, is_required=true) }} {{ form.markdown('description', label=_('Description'), id='field-description', placeholder=_('A little information about my group...'), value=data.description, error=errors.description) }} @@ -70,6 +70,7 @@ #}
+ {{ form.required_message() }} {% block delete_button %} {% if h.check_access('group_delete', {'id': data.id}) %} {% set locale = h.dump_json({'content': _('Are you sure you want to delete this Group?')}) %} diff --git a/ckan/templates/macros/form.html b/ckan/templates/macros/form.html index 7f83a09ff71..533e56a1be8 100644 --- a/ckan/templates/macros/form.html +++ b/ckan/templates/macros/form.html @@ -17,10 +17,10 @@ {{ form.input('title', label=_('Title'), value=data.title, error=errors.title) }} #} -{% macro input(name, id='', label='', value='', placeholder='', type='text', error="", classes=[], attrs={}) %} +{% macro input(name, id='', label='', value='', placeholder='', type='text', error="", classes=[], attrs={}, is_required=false) %} {%- set extra_html = caller() if caller -%} - {% call input_block(id or name, label or name, error, classes, extra_html=extra_html) %} + {% call input_block(id or name, label or name, error, classes, extra_html=extra_html, is_required=is_required) %} {% endcall %} {% endmacro %} @@ -42,13 +42,14 @@ {{ form.checkbox('remember', checked=true) }} #} -{% macro checkbox(name, id='', label='', value='', checked=false, placeholder='', error="", classes=[], attrs={}) %} +{% macro checkbox(name, id='', label='', value='', checked=false, placeholder='', error="", classes=[], attrs={}, is_required=false) %} {%- set extra_html = caller() if caller -%}
{{ extra_html }} @@ -78,12 +79,12 @@ {{ form.select('year', label=_('Year'), options={2010: 2010, 2011: 2011}, selected=2011, error=errors.year) }} #} -{% macro select(name, id='', label='', options='', selected='', error='', classes=[], attrs={}) %} +{% macro select(name, id='', label='', options='', selected='', error='', classes=[], attrs={}, is_required=false) %} {% set classes = (classes|list) %} {% do classes.append('control-select') %} {%- set extra_html = caller() if caller -%} - {% call input_block(id or name, label or name, error, classes, extra_html=extra_html) %} + {% call input_block(id or name, label or name, error, classes, extra_html=extra_html, is_required=is_required) %} {% trans %}You can use Markdown formatting here{% endtrans %} {% endcall %} @@ -139,12 +140,12 @@ {{ form.textarea('desc', id='field-description', label=_('Description'), value=data.desc, error=errors.desc) }} #} -{% macro textarea(name, id='', label='', value='', placeholder='', error="", classes=[], attrs={}) %} +{% macro textarea(name, id='', label='', value='', placeholder='', error="", classes=[], attrs={}, is_required=false) %} {% set classes = (classes|list) %} {% do classes.append('control-full') %} {%- set extra_html = caller() if caller -%} - {% call input_block(id or name, label or name, error, classes, extra_html=extra_html) %} + {% call input_block(id or name, label or name, error, classes, extra_html=extra_html, is_required=is_required) %} {% endcall %} {% endmacro %} @@ -170,12 +171,12 @@ {{ form.prepend('slug', id='field-slug', prepend='/dataset/', label=_('Slug'), value=data.slug, error=errors.slug) }} #} -{% macro prepend(name, id='', label='', prepend='', value='', placeholder='', type='text', error="", classes=[], attrs={}) %} +{% macro prepend(name, id='', label='', prepend='', value='', placeholder='', type='text', error="", classes=[], attrs={}, is_required=false) %} {# We manually append the error here as it needs to be inside the .input-prepend block #} {% set classes = (classes|list) %} {% do classes.append('error') if error %} {%- set extra_html = caller() if caller -%} - {% call input_block(id or name, label or name, error='', classes=classes, extra_html=extra_html) %} + {% call input_block(id or name, label or name, error='', classes=classes, extra_html=extra_html, is_required=is_required) %}
{% if prepend %}{{ prepend }}{%- endif -%} @@ -211,13 +212,13 @@ error='' ) }} #} -{% macro custom(names=(), id="", label="", values=(), placeholders=(), error="", classes=[], attrs={}) %} +{% macro custom(names=(), id="", label="", values=(), placeholders=(), error="", classes=[], attrs={}, is_required=false) %} {%- set classes = (classes|list) -%} {%- set label_id = (id or names[0]) ~ "-key" -%} {%- set extra_html = caller() if caller -%} {%- do classes.append('control-custom') -%} - {% call input_block(label_id, label or name, error, classes, control_classes=["editor"], extra_html=extra_html) %} + {% call input_block(label_id, label or name, error, classes, control_classes=["editor"], extra_html=extra_html, is_required=is_required) %}
@@ -250,9 +251,9 @@ {% endcall %} #} -{% macro input_block(for, label="", error="", classes=[], control_classes=[], extra_html="") %} +{% macro input_block(for, label="", error="", classes=[], control_classes=[], extra_html="", is_required=false) %}
- +
{{ caller() }} {% if error and error is iterable %}{{ error|join(', ') }}{% endif %} @@ -371,3 +372,18 @@ {{ " " }}{{ key }}{% if value != "" %}="{{ value }}"{% endif %} {%- endfor -%} {%- endmacro -%} + +{# +Outputs the "* Required field" message for the bottom of formss + +Example + {% import 'macros/form.html' as form %} + {{ form.required_message() }} + +#} +{% macro required_message() %} +

+ * {{ _("Required field") }} +

+{% endmacro %} + diff --git a/ckan/templates/organization/snippets/organization_form.html b/ckan/templates/organization/snippets/organization_form.html index 67b16063497..70eb35de227 100644 --- a/ckan/templates/organization/snippets/organization_form.html +++ b/ckan/templates/organization/snippets/organization_form.html @@ -15,7 +15,7 @@ {% set domain = domain|replace("http://", "")|replace("https://", "") %} {% set attrs = {'data-module': 'slug-preview-slug', 'data-module-prefix': domain, 'data-module-placeholder': ''} %} - {{ form.prepend('name', label=_('URL'), prepend=prefix, id='field-url', placeholder=_('my-organization'), value=data.name, error=errors.name, attrs=attrs) }} + {{ form.prepend('name', label=_('URL'), prepend=prefix, id='field-url', placeholder=_('my-organization'), value=data.name, error=errors.name, attrs=attrs, is_required=true) }} {{ form.markdown('description', label=_('Description'), id='field-description', placeholder=_('A little information about my organization...'), value=data.description, error=errors.description) }} @@ -72,6 +72,7 @@ #}
+ {{ form.required_message() }} {% block delete_button %} {% if h.check_access('organization_delete', {'id': data.id}) %} {% set locale = h.dump_json({'content': _('Are you sure you want to delete this Organization? This will delete all the public and private datasets belonging to this organization.')}) %} diff --git a/ckan/templates/package/snippets/package_basic_fields.html b/ckan/templates/package/snippets/package_basic_fields.html index 9c8d26f500d..9a85d41a421 100644 --- a/ckan/templates/package/snippets/package_basic_fields.html +++ b/ckan/templates/package/snippets/package_basic_fields.html @@ -10,7 +10,7 @@ {% set domain = domain|replace("http://", "")|replace("https://", "") %} {% set attrs = {'data-module': 'slug-preview-slug', 'data-module-prefix': domain, 'data-module-placeholder': ''} %} -{{ form.prepend('name', id='field-name', label=_('URL'), prepend=prefix, placeholder=_('eg. my-dataset'), value=data.name, error=errors.name, attrs=attrs) }} +{{ form.prepend('name', id='field-name', label=_('URL'), prepend=prefix, placeholder=_('eg. my-dataset'), value=data.name, error=errors.name, attrs=attrs, is_required=true) }} {% endblock %} {% block package_basic_fields_custom %} @@ -99,4 +99,6 @@
{% endif %} +{{ form.required_message() }} + {% endblock %} diff --git a/ckan/templates/package/snippets/resource_form.html b/ckan/templates/package/snippets/resource_form.html index 8ce9d8efae1..397d3d2504d 100644 --- a/ckan/templates/package/snippets/resource_form.html +++ b/ckan/templates/package/snippets/resource_form.html @@ -38,7 +38,7 @@ {% endblock %} {% block basic_fields_url %} - {{ form.input('url', id='field-url', label=_('Resource'), placeholder=_('eg. http://example.com/gold-prices-jan-2011.json'), value=data.url, error=errors.url, classes=['control-full', 'control-large']) }} + {{ form.input('url', id='field-url', label=_('Resource'), placeholder=_('eg. http://example.com/gold-prices-jan-2011.json'), value=data.url, error=errors.url, classes=['control-full', 'control-large'], is_required=true) }} {% endblock %} {% block basic_fields_name %} @@ -58,6 +58,9 @@ {% endcall %} {% endblock %} + + {{ form.required_message() }} + {% endblock %} {% block metadata_fields %} diff --git a/ckan/templates/user/edit_user_form.html b/ckan/templates/user/edit_user_form.html index bf84b2163a5..19b8755b2bd 100644 --- a/ckan/templates/user/edit_user_form.html +++ b/ckan/templates/user/edit_user_form.html @@ -6,11 +6,11 @@
{{ _('Change your details') }} - {{ form.input('name', label=_('Username'), id='field-username', value=data.name, error=errors.name, classes=['control-medium']) }} + {{ form.input('name', label=_('Username'), id='field-username', value=data.name, error=errors.name, classes=['control-medium'], is_required=true) }} {{ form.input('fullname', label=_('Full name'), id='field-fullname', value=data.fullname, error=errors.fullname, placeholder=_('eg. Joe Bloggs'), classes=['control-medium']) }} - {{ form.input('email', label=_('Email'), id='field-email', type='email', value=data.email, error=errors.email, placeholder=_('eg. joe@example.com'), classes=['control-medium']) }} + {{ form.input('email', label=_('Email'), id='field-email', type='email', value=data.email, error=errors.email, placeholder=_('eg. joe@example.com'), classes=['control-medium'], is_required=true) }} {{ form.markdown('about', label=_('About'), id='field-about', value=data.about, error=errors.about, placeholder=_('A little information about yourself')) }} @@ -20,6 +20,8 @@ {% endcall %} {% endif %} + {{ form.required_message() }} +