diff options
author | Max Kanat-Alexander <mkanat@bugzilla.org> | 2010-05-13 17:50:15 +0200 |
---|---|---|
committer | Max Kanat-Alexander <mkanat@bugzilla.org> | 2010-05-13 17:50:15 +0200 |
commit | 475abdfcbaa5609ccbc480afa2ab1670574387fd (patch) | |
tree | 185c6e22929efc13fcb2f70f5596990afe718080 | |
parent | d3259eebfeb070e2f67094060d4926e2e1e649a3 (diff) | |
download | bugzilla-475abdfcbaa5609ccbc480afa2ab1670574387fd.tar.gz bugzilla-475abdfcbaa5609ccbc480afa2ab1670574387fd.tar.xz |
Bug 555850: Make fields.html help on enter_bug happen when the user hovers
over the fields
r=timello, a=mkanat
-rwxr-xr-x | enter_bug.cgi | 26 | ||||
-rw-r--r-- | skins/standard/global.css | 3 | ||||
-rw-r--r-- | template/en/default/bug/create/create.html.tmpl | 107 | ||||
-rw-r--r-- | template/en/default/bug/field-help.none.tmpl | 17 | ||||
-rw-r--r-- | template/en/default/bug/field-label.html.tmpl | 53 | ||||
-rw-r--r-- | template/en/default/bug/field.html.tmpl | 14 | ||||
-rw-r--r-- | template/en/default/filterexceptions.pl | 2 | ||||
-rw-r--r-- | template/en/default/pages/fields.html.tmpl | 7 |
8 files changed, 141 insertions, 88 deletions
diff --git a/enter_bug.cgi b/enter_bug.cgi index 9c6a1c6b4..d85a9f060 100755 --- a/enter_bug.cgi +++ b/enter_bug.cgi @@ -534,38 +534,40 @@ if ( Bugzilla->params->{'usetargetmilestone'} ) { } # Construct the list of allowable statuses. -my $initial_statuses = Bugzilla::Status->can_change_to(); +my @statuses = @{ Bugzilla::Status->can_change_to() }; # Exclude closed states from the UI, even if the workflow allows them. # The back-end code will still accept them, though. -@$initial_statuses = grep { $_->is_open } @$initial_statuses; +@statuses = grep { $_->is_open } @statuses; -my @status = map { $_->name } @$initial_statuses; # UNCONFIRMED is illegal if allows_unconfirmed is false. if (!$product->allows_unconfirmed) { - @status = grep {$_ ne 'UNCONFIRMED'} @status; + @statuses = grep { $_->name ne 'UNCONFIRMED' } @statuses; } -scalar(@status) || ThrowUserError('no_initial_bug_status'); +scalar(@statuses) || ThrowUserError('no_initial_bug_status'); # If the user has no privs... unless ($has_editbugs || $has_canconfirm) { # ... use UNCONFIRMED if available, else use the first status of the list. - my $bug_status = (grep {$_ eq 'UNCONFIRMED'} @status) ? 'UNCONFIRMED' : $status[0]; - @status = ($bug_status); + my $bug_status = (grep { $_->name eq 'UNCONFIRMED' } @statuses) + ? 'UNCONFIRMED' : $statuses[0]->name; + @statuses = ($bug_status); } -$vars->{'bug_status'} = \@status; +$vars->{'bug_status'} = \@statuses; # Get the default from a template value if it is legitimate. # Otherwise, and only if the user has privs, set the default # to the first confirmed bug status on the list, if available. -if (formvalue('bug_status') && grep { $_ eq formvalue('bug_status') } @status) { +my $picked_status = formvalue('bug_status'); +if ($picked_status and grep($_->name eq $picked_status, @statuses)) { $default{'bug_status'} = formvalue('bug_status'); -} elsif (scalar @status == 1) { - $default{'bug_status'} = $status[0]; +} elsif (scalar @statuses == 1) { + $default{'bug_status'} = $statuses[0]->name; } else { - $default{'bug_status'} = ($status[0] ne 'UNCONFIRMED') ? $status[0] : $status[1]; + $default{'bug_status'} = ($statuses[0]->name ne 'UNCONFIRMED') + ? $statuses[0]->name : $statuses[1]->name; } my @groups = $cgi->param('groups'); diff --git a/skins/standard/global.css b/skins/standard/global.css index 8dcdb0ce9..a240f94f0 100644 --- a/skins/standard/global.css +++ b/skins/standard/global.css @@ -463,6 +463,9 @@ div.user_match { vertical-align: top; font-weight: bold; } +.field_help_link { + cursor: help; +} .field_value, form#Create th, form#Create td { vertical-align: top; } diff --git a/template/en/default/bug/create/create.html.tmpl b/template/en/default/bug/create/create.html.tmpl index e983b611b..983f12bb9 100644 --- a/template/en/default/bug/create/create.html.tmpl +++ b/template/en/default/bug/create/create.html.tmpl @@ -214,10 +214,13 @@ TUI_hide_default('expert_fields'); [%# We can't use the select block in these two cases for various reasons. %] <tr> - <th class="required"> - <a href="describecomponents.cgi?product=[% product.name FILTER url_quote %]"> - Component</a>: - </th> + [% component_desc_url = BLOCK -%] + describecomponents.cgi?product=[% product.name FILTER url_quote %] + [% END %] + [% INCLUDE "bug/field-label.html.tmpl" + field = bug_fields.component editable = 1 required = 1 + desc_url = component_desc_url + %] <td id="field_container_component"> <select name="component" id="component" onchange="set_assign_to();" size="7" aria-required="true" class="required"> @@ -272,8 +275,9 @@ TUI_hide_default('expert_fields'); </tr> <tr> - <th rowspan="3"><a href="page.cgi?id=fields.html#version"> - [%- field_descs.version FILTER html %]:</a></th> + [% INCLUDE "bug/field-label.html.tmpl" + field = bug_fields.version editable = 1 rowspan = 3 + %] <td rowspan="3"> <select name="version" size="5"> [%- FOREACH v = version %] @@ -321,8 +325,7 @@ TUI_hide_default('expert_fields'); <tbody class="expert_fields"> <tr> [% IF Param('usetargetmilestone') && Param('letsubmitterchoosemilestone') %] - [% sel = { description => 'Target Milestone', name => 'target_milestone' } %] - [% INCLUDE select %] + [% INCLUDE select field = bug_fields.target_milestone %] [% ELSE %] <td colspan="2"> </td> [% END %] @@ -343,15 +346,10 @@ TUI_hide_default('expert_fields'); </tr> <tr> -[% IF bug_status.size <= 1 %] - <input type="hidden" name="bug_status" - value="[% default.bug_status FILTER html %]"> - <th>Initial State:</th> - <td>[% display_value("bug_status", default.bug_status) FILTER html %]</td> -[% ELSE %] - [% sel = { description => 'Initial State', name => 'bug_status' } %] - [% INCLUDE select %] -[% END %] + [% INCLUDE bug/field.html.tmpl + bug = default, field = bug_fields.bug_status, + editable = (bug_status.size > 1), value = default.bug_status + override_legal_values = bug_status %] <td> </td> [%# Calculate the number of rows we can use for flags %] @@ -382,7 +380,9 @@ TUI_hide_default('expert_fields'); </tr> <tr> - <th><a href="page.cgi?id=fields.html#assigned_to">Assign To</a>:</th> + [% INCLUDE "bug/field-label.html.tmpl" + field = bug_fields.assigned_to editable = 1 + %] <td colspan="2"> [% INCLUDE global/userselect.html.tmpl id => "assigned_to" @@ -399,8 +399,9 @@ TUI_hide_default('expert_fields'); [% IF Param("useqacontact") %] <tr> - <th><a href="page.cgi?id=fields.html#qa_contact"> - [%- field_descs.qa_contact FILTER html %]:</a></th> + [% INCLUDE "bug/field-label.html.tmpl" + field = bug_fields.qa_contact editable = 1 + %] <td colspan="2"> [% INCLUDE global/userselect.html.tmpl id => "qa_contact" @@ -417,8 +418,9 @@ TUI_hide_default('expert_fields'); [% END %] <tr> - <th><a href="page.cgi?id=fields.html#cc"> - [%- field_descs.cc FILTER html %]:</a></th> + [% INCLUDE "bug/field-label.html.tmpl" + field = bug_fields.cc editable = 1 + %] <td colspan="2"> [% INCLUDE global/userselect.html.tmpl id => "cc" @@ -445,8 +447,9 @@ TUI_hide_default('expert_fields'); [% IF user.is_timetracker %] <tr> - <th><a href="page.cgi?id=fields.html#estimated_time">Estimated - Hours:</a></th> + [% INCLUDE "bug/field-label.html.tmpl" + field = bug_fields.estimated_time editable = 1 + %] <td colspan="2"> <input name="estimated_time" size="6" maxlength="6" value="[% estimated_time FILTER html %]"> </td> @@ -464,8 +467,9 @@ TUI_hide_default('expert_fields'); [% IF Param("usebugaliases") %] <tr> - <th><a href="page.cgi?id=fields.html#alias"> - [%- field_descs.alias FILTER html %]:</a></th> + [% INCLUDE "bug/field-label.html.tmpl" + field = bug_fields.alias editable = 1 + %] <td colspan="2"> <input name="alias" size="20" value="[% alias FILTER html %]"> </td> @@ -473,8 +477,9 @@ TUI_hide_default('expert_fields'); [% END %] <tr> - <th><a href="page.cgi?id=fields.html#bug_file_loc"> - [%- field_descs.bug_file_loc FILTER html %]:</a></th> + [% INCLUDE "bug/field-label.html.tmpl" + field = bug_fields.bug_file_loc editable = 1 + %] <td colspan="2"> <input name="bug_file_loc" size="40" value="[% bug_file_loc FILTER html %]"> @@ -499,8 +504,9 @@ TUI_hide_default('expert_fields'); <tbody> <tr> - <th class="required"><a href="page.cgi?id=fields.html#short_desc"> - [%- field_descs.short_desc FILTER html %]:</a></th> + [% INCLUDE "bug/field-label.html.tmpl" + field = bug_fields.short_desc editable = 1 required = 1 + %] <td colspan="3"> <input name="short_desc" size="70" value="[% short_desc FILTER html %]" maxlength="255" spellcheck="true" aria-required="true" @@ -590,7 +596,10 @@ TUI_hide_default('expert_fields'); [% IF user.in_group('editbugs', product.id) %] [% IF use_keywords %] <tr> - <th><a href="describekeywords.cgi">Keywords</a>:</th> + [% INCLUDE "bug/field-label.html.tmpl" + field = bug_fields.keywords editable = 1 + desc_url = "describekeywords.cgi" + %] <td colspan="3"> <input id="keywords" name="keywords" size="40" value="[% keywords FILTER html %]"> (optional) @@ -599,15 +608,17 @@ TUI_hide_default('expert_fields'); [% END %] <tr> - <th><a href="page.cgi?id=fields.html#dependson"> - [%- field_descs.dependson FILTER html %]:</a></th> + [% INCLUDE "bug/field-label.html.tmpl" + field = bug_fields.dependson editable = 1 + %] <td colspan="3"> <input name="dependson" accesskey="d" value="[% dependson FILTER html %]"> </td> </tr> <tr> - <th><a href="page.cgi?id=fields.html#blocked"> - [%- field_descs.blocked FILTER html %]:</a></th> + [% INCLUDE "bug/field-label.html.tmpl" + field = bug_fields.blocked editable = 1 + %] <td colspan="3"> <input name="blocked" accesskey="b" value="[% blocked FILTER html %]"> </td> @@ -678,30 +689,20 @@ TUI_hide_default('expert_fields'); [%############################################################################%] [% BLOCK select %] - [% IF sel.description %] - <th> - <a href="page.cgi?id=fields.html#[% sel.name %]">[% sel.description %]</a>: - </th> - [% END %] + [% INCLUDE "bug/field-label.html.tmpl" + field = field editable = 1 + %] <td> - <select name="[% sel.name %]" id="[% sel.name %]"> - [%- FOREACH x = ${sel.name} %] + <select name="[% field.name FILTER html %]" + id="[% field.name FILTER html %]"> + [%- FOREACH x = ${field.name} %] <option value="[% x FILTER html %]" - [% " selected=\"selected\"" IF x == default.${sel.name} %]> - [% display_value(sel.name, x) FILTER html %] + [% " selected=\"selected\"" IF x == default.${field.name} %]> + [% display_value(field.name, x) FILTER html %] </option> [% END %] </select> - - [% IF sel.name == "bug_status" %] - <script type="text/javascript"> - <!-- - [%+ INCLUDE "bug/field-events.js.tmpl" - field = bug_fields.bug_status %] - //--> - </script> - [% END %] </td> [% END %] diff --git a/template/en/default/bug/field-help.none.tmpl b/template/en/default/bug/field-help.none.tmpl index 549a89002..a8129a1e3 100644 --- a/template/en/default/bug/field-help.none.tmpl +++ b/template/en/default/bug/field-help.none.tmpl @@ -149,8 +149,8 @@ status_whiteboard => _ " adding tags and status information.", target_milestone => - "The target_milestone field is used to define when the engineer" - _ " the $terms.bug is assigned to expects to fix it.", + "The $field_descs.target_milestone field is used to define when the" + _ " engineer the $terms.bug is assigned to expects to fix it.", version => "The version field defines the version of the software the" @@ -215,6 +215,19 @@ email1 => [% END %] [% FOREACH help_field = bug_fields.keys %] + + [%# Add help for custom fields. %] + [% IF !help_html.${help_field}.defined %] + [% SET field_type = bug_fields.${help_field}.type %] + [% field_type_desc = BLOCK -%] + [% field_types.$field_type FILTER html %] + [%- END %] + [% help_html.${help_field} = + "A custom $field_type_desc field in this installation" + _ " of ${terms.Bugzilla}." %] + [% END %] + + [%# Add help for the search types, for query.cgi. %] [% type_desc = BLOCK %] The type of [% field_descs.${help_field} FILTER html %] search you would like. diff --git a/template/en/default/bug/field-label.html.tmpl b/template/en/default/bug/field-label.html.tmpl new file mode 100644 index 000000000..c3a282701 --- /dev/null +++ b/template/en/default/bug/field-label.html.tmpl @@ -0,0 +1,53 @@ +[%# The contents of this file are subject to the Mozilla Public + # License Version 1.1 (the "License"); you may not use this file + # except in compliance with the License. You may obtain a copy of + # the License at http://www.mozilla.org/MPL/ + # + # Software distributed under the License is distributed on an "AS + # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + # implied. See the License for the specific language governing + # rights and limitations under the License. + # + # The Original Code is the Bugzilla Bug Tracking System. + # + # The Initial Developer of the Original Code is Everything Solved, Inc. + # Portions created by the Initial Developer are Copyright (C) 2010 the + # Initial Developer. All Rights Reserved. + # + # Contributor(s): + # Max Kanat-Alexander <mkanat@bugzilla.org> + #%] + +[%# INTERFACE: + # field: a Bugzilla::Field object + # desc_url: An alternate link to help for the field. + # hidden: True if the field label should start hidden. + # required: True if this field must have a value. + # rowspan: a "rowspan" value for the label's <th>. + #%] + +[% PROCESS "bug/field-help.none.tmpl" %] + +<th class="field_label [% ' bz_hidden_field' IF hidden %] + [%- ' required' IF required %]" + id="field_label_[% field.name FILTER html %]" + [% IF rowspan %] rowspan="[% rowspan FILTER html %]"[% END %]> + + [% IF editable %] + <label for="[% field.name FILTER html %]"> + [% END %] + + <a + [% IF help_html.${field.name}.defined %] + title="[% help_html.${field.name} FILTER txt FILTER collapse FILTER html %]" + class="field_help_link" + [% END %] + [% IF desc_url %] + href="[% desc_url FILTER html %]" + [% ELSE %] + href="page.cgi?id=fields.html#[% field.name FILTER url_quote %]" + [% END %] + >[%- field_descs.${field.name} FILTER html %]:</a> + + [% '</label>' IF editable %] +</th> diff --git a/template/en/default/bug/field.html.tmpl b/template/en/default/bug/field.html.tmpl index 0656996bd..211f16b8e 100644 --- a/template/en/default/bug/field.html.tmpl +++ b/template/en/default/bug/field.html.tmpl @@ -47,19 +47,7 @@ [% END %] [% IF NOT no_tds %] - <th class="field_label [% ' bz_hidden_field' IF hidden %]" - id="field_label_[% field.name FILTER html %]"> - [% IF editable %] - <label for="[% field.name FILTER html %]"> - [% END %] - [% IF desc_url %] - <a href="[% desc_url FILTER html %]"> - [% ELSE %] - <a href="page.cgi?id=fields.html#[% field.name FILTER url_quote %]"> - [% END %] - [%- field_descs.${field.name} FILTER html %]:</a> - [% '</label>' IF editable %] - </th> + [% PROCESS "bug/field-label.html.tmpl" %] [% END %] [% IF NOT no_tds %] diff --git a/template/en/default/filterexceptions.pl b/template/en/default/filterexceptions.pl index 07bd4dead..46132c892 100644 --- a/template/en/default/filterexceptions.pl +++ b/template/en/default/filterexceptions.pl @@ -316,8 +316,6 @@ ], 'bug/create/create.html.tmpl' => [ - 'sel.name', - 'sel.description', 'cloned_bug_id', ], diff --git a/template/en/default/pages/fields.html.tmpl b/template/en/default/pages/fields.html.tmpl index bb1deb8ed..b3583b568 100644 --- a/template/en/default/pages/fields.html.tmpl +++ b/template/en/default/pages/fields.html.tmpl @@ -267,12 +267,7 @@ <dt id="[% field FILTER html %]">[% field_desc FILTER html %]</dt> <dd> [% SET help_text = field_help_map.${field_desc}.help %] - [% IF help_text %] - [% help_text FILTER none %] - [% ELSE %] - A custom [% field_types.${field_object.type} FILTER html %] field in - this installation of [% terms.Bugzilla %]. - [% END %] + [% help_text FILTER none %] </dd> [% END %] </dl> |