diff options
author | Frédéric Buclin <LpSolit@gmail.com> | 2015-08-06 16:56:24 +0200 |
---|---|---|
committer | Frédéric Buclin <LpSolit@gmail.com> | 2015-08-06 16:56:24 +0200 |
commit | 684bee48e1356c46aee7c1366c6ac03629528231 (patch) | |
tree | a547bdbe2e0802ffaa007b41811a5ebd6da3490a | |
parent | baed5713d175eee3fe2aed9ee3afef916b4641d4 (diff) | |
download | bugzilla-684bee48e1356c46aee7c1366c6ac03629528231.tar.gz bugzilla-684bee48e1356c46aee7c1366c6ac03629528231.tar.xz |
Bug 1183398: Mandatory custom fields block form submission if they are hidden and have no value
r=gerv a=dkl
-rw-r--r-- | js/field.js | 13 | ||||
-rw-r--r-- | template/en/default/bug/field.html.tmpl | 30 | ||||
-rw-r--r-- | template/en/default/global/textarea.html.tmpl | 4 |
3 files changed, 33 insertions, 14 deletions
diff --git a/js/field.js b/js/field.js index 5a48db471..5055c003e 100644 --- a/js/field.js +++ b/js/field.js @@ -506,7 +506,8 @@ function handleVisControllerValueChange(e, args) { var controller = args[1]; var values = args[2]; - var label_container = + var field = document.getElementById(controlled_id); + var label_container = document.getElementById('field_label_' + controlled_id); var field_container = document.getElementById('field_container_' + controlled_id); @@ -521,10 +522,20 @@ function handleVisControllerValueChange(e, args) { if (selected) { YAHOO.util.Dom.removeClass(label_container, 'bz_hidden_field'); YAHOO.util.Dom.removeClass(field_container, 'bz_hidden_field'); + // Restore the 'required' attribute for mandatory fields. + if (field.getAttribute('data-required') == "true") { + field.setAttribute('required', 'true'); + field.setAttribute('aria-required', 'true'); + } } else { YAHOO.util.Dom.addClass(label_container, 'bz_hidden_field'); YAHOO.util.Dom.addClass(field_container, 'bz_hidden_field'); + // A hidden field must never be required, because the user cannot set it. + if (field.getAttribute('data-required') == "true") { + field.removeAttribute('required'); + field.removeAttribute('aria-required'); + } } } diff --git a/template/en/default/bug/field.html.tmpl b/template/en/default/bug/field.html.tmpl index bfd385f9d..85f7aea33 100644 --- a/template/en/default/bug/field.html.tmpl +++ b/template/en/default/bug/field.html.tmpl @@ -43,13 +43,17 @@ value="[% value FILTER html %]" size="40" maxlength="[% constants.MAX_FREETEXT_LENGTH FILTER none %]" [% IF field.type == constants.FIELD_TYPE_INTEGER %] pattern="\d+[% IF dontchange %]|[% dontchange FILTER html %][% END %]" [% END %] - [% ' aria-required="true" required' IF field.is_mandatory %]> + [% IF field.is_mandatory %] + data-required="true" [% 'aria-required="true" required' UNLESS field_hidden %] + [% END %]> [% CASE [constants.FIELD_TYPE_DATETIME, constants.FIELD_TYPE_DATE] %] [% size = (field.type == constants.FIELD_TYPE_DATE) ? 10 : 20 %] <input name="[% field.name FILTER html %]" size="[% size FILTER none %]" id="[% field.name FILTER html %]" value="[% value FILTER html %]" - [% ' aria-required="true" required' IF field.is_mandatory %] + [% IF field.is_mandatory %] + data-required="true" [% 'aria-required="true" required' UNLESS field_hidden %] + [% END %] onchange="updateCalendarFromField(this)"> <button type="button" class="calendar_button" id="button_calendar_[% field.name FILTER html %]" @@ -67,8 +71,9 @@ <span id="[% field.name FILTER html %]_input_area"> <input name="[% field.name FILTER html %]" id="[% field.name FILTER html %]" value="[% value FILTER html %]" size="7" - [% ' aria-required="true" required' IF field.is_mandatory %]> - + [% IF field.is_mandatory %] + data-required="true" [% 'aria-required="true" required' UNLESS field_hidden %] + [% END %]> </span> [% IF value %] @@ -90,14 +95,15 @@ <select id="[% field.name FILTER html %]" name="[% field.name FILTER html %]" [% IF field.type == constants.FIELD_TYPE_MULTI_SELECT %] - [% SET field_size = 5 %] - [% IF field.legal_values.size < 5 %] - [% SET field_size = field.legal_values.size %] - [% END %] - size="[% field_size FILTER html %]" multiple="multiple" - [% ' aria-required="true" required' IF field.is_mandatory %] - [% END %] - > + [% SET field_size = 5 %] + [% IF field.legal_values.size < 5 %] + [% SET field_size = field.legal_values.size %] + [% END %] + size="[% field_size FILTER html %]" multiple="multiple" + [% IF field.is_mandatory %] + data-required="true" [% 'aria-required="true" required' UNLESS field_hidden %] + [% END %] + [% END %]> [% IF allow_dont_change %] <option value="[% dontchange FILTER html %]" [% ' selected="selected"' IF value == dontchange %]> diff --git a/template/en/default/global/textarea.html.tmpl b/template/en/default/global/textarea.html.tmpl index f3e23dd3f..313329579 100644 --- a/template/en/default/global/textarea.html.tmpl +++ b/template/en/default/global/textarea.html.tmpl @@ -27,6 +27,8 @@ # defaultcontent: (optional) Default content for the textarea. # mandatory: (optional) Boolean specifying whether or not the textarea # is mandatory. + # field_hidden: (optional) True if the field is hidden. Only useful if + # the field is mandatory. #%] <textarea [% IF name %]name="[% name FILTER html %]"[% END %] @@ -46,7 +48,7 @@ onFocus="this.rows=[% maxrows FILTER html %]" [% END %] [% IF mandatory %] - aria-required="true" required + data-required="true" [% 'aria-required="true" required' UNLESS field_hidden %] [% END %] [% IF onchange %] onchange="[% onchange FILTER html %]" |