summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrédéric Buclin <LpSolit@gmail.com>2015-08-06 16:56:24 +0200
committerFrédéric Buclin <LpSolit@gmail.com>2015-08-06 16:56:24 +0200
commit684bee48e1356c46aee7c1366c6ac03629528231 (patch)
treea547bdbe2e0802ffaa007b41811a5ebd6da3490a
parentbaed5713d175eee3fe2aed9ee3afef916b4641d4 (diff)
downloadbugzilla-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.js13
-rw-r--r--template/en/default/bug/field.html.tmpl30
-rw-r--r--template/en/default/global/textarea.html.tmpl4
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 %]"