]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 555850: Make fields.html help on enter_bug happen when the user hovers
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Thu, 13 May 2010 15:50:15 +0000 (08:50 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Thu, 13 May 2010 15:50:15 +0000 (08:50 -0700)
over the fields
r=timello, a=mkanat

enter_bug.cgi
skins/standard/global.css
template/en/default/bug/create/create.html.tmpl
template/en/default/bug/field-help.none.tmpl
template/en/default/bug/field-label.html.tmpl [new file with mode: 0644]
template/en/default/bug/field.html.tmpl
template/en/default/filterexceptions.pl
template/en/default/pages/fields.html.tmpl

index 9c6a1c6b4aac3ac498d830651cfc0e1b34767808..d85a9f060ea097477b6e0e62c0a6ecb703341b8a 100755 (executable)
@@ -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');
index 8dcdb0ce93e1bf4b8a5743a2b7bbff0154941487..a240f94f003672cb983ffac7cd03c6d1d0631823 100644 (file)
@@ -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;
 }
index e983b611b81c0b58329c621c2f6861b58cbf86b6..983f12bb9fa16d6c94f2fc58b41c57b37354062f 100644 (file)
@@ -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">&nbsp;</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>&nbsp;</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 %]
 
index 549a89002b74b734c23b8da22751caab1f8d320e..a8129a1e3e5b0698319f9464823696aa80f6f746 100644 (file)
@@ -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 (file)
index 0000000..c3a2827
--- /dev/null
@@ -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>
index 0656996bdd4cf2ed39a39bf0208628e837dfe597..211f16b8e31d226d3c4f67b97864c1aeae455501 100644 (file)
 [% 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 %]
index 07bd4dead4485254b747ebe71327b501c9707895..46132c8923cd22d9f3c3de3110262f139c8db4ee 100644 (file)
 ],
 
 'bug/create/create.html.tmpl' => [
-  'sel.name',
-  'sel.description',
   'cloned_bug_id',
 ],
 
index bb1deb8ed2a2c3f8e083c2bc0f928332d0a58b5b..b3583b5686090906fad9dda055c690d4148e124d 100644 (file)
   <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>