]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 281691: Misused <label>'s cause screen reader problems.
authorwurblzap%gmail.com <>
Tue, 18 Apr 2006 14:58:44 +0000 (14:58 +0000)
committerwurblzap%gmail.com <>
Tue, 18 Apr 2006 14:58:44 +0000 (14:58 +0000)
Patch by Marc Schumann <wurblzap@gmail.com>,
r=LpSolit, a=justdave

template/en/default/bug/comments.html.tmpl
template/en/default/bug/edit.html.tmpl
template/en/default/bug/summarize-time.html.tmpl
template/en/default/filterexceptions.pl
template/en/default/flag/list.html.tmpl
template/en/default/reports/create-chart.html.tmpl
template/en/default/reports/series-common.html.tmpl
template/en/default/search/form.html.tmpl
template/en/default/search/knob.html.tmpl

index 1ccf9904c0af73e8d5f6a94ee6432e29c1a025e4..55a84819f14ce01da6a3e099c5beaf6dfcc61f22 100644 (file)
           <input type="checkbox" name="isprivate-[% count %]" value="1"
                  onClick="updateCommentPrivacy(this, [% count %])"
                  id="isprivate-[% count %]"
-          [% " checked=\"checked\"" IF comment.isprivate %]> Private
+                 [% " checked=\"checked\"" IF comment.isprivate %]>
+          <label for="isprivate-[% count %]">Private</label>
         </i>
       [% END %]
       [% IF UserInGroup(Param('timetrackinggroup')) &&
index b08ce64328877a0c6934e81bc14125fa1ab60f24..c2bd1b50b988d00c8820ef2bb0b8c47009a5b484 100644 (file)
           [% IF Param("usebugaliases") %]
             <tr>
               <td align="right">
-                <b>Alias:</b>
+                <label for="alias" title="a name for the [% terms.bug %] that can be used in place of its ID number, f.e. when adding it to a list of dependencies"><b>Alias</b></label>:
               </td>
               <td>
-                <label for="alias" title="a name for the [% terms.bug %] that can be used in place of its ID number, f.e. when adding it to a list of dependencies">
-                  <input id="alias" name="alias" value="[% bug.alias FILTER html %]"
-                         size="20" maxlength="20">
-                </label>
+                <input id="alias" name="alias" value="[% bug.alias FILTER html %]"
+                       size="20" maxlength="20">
               </td>
             </tr>
           [% END %]
 
           <tr>
             <td align="right">
-              <b><u>P</u>roduct:</b>
+              <label for="product" accesskey="p"><b><u>P</u>roduct</b></label>:
             </td>
-            [% PROCESS select selname => "product" accesskey => "p" %]
+            [% PROCESS select selname => "product" %]
           </tr>
 
           [%# *** Component Version CC Priority Severity AssignedTo Milestone *** %]
 
           <tr>
             <td align="right">
-              <b>
-                <a href="describecomponents.cgi?product=[% bug.product FILTER url_quote %]">
-                  Co<u>m</u>ponent</a>:
-              </b>
+              <label for="component" accesskey="m"><b><a href="describecomponents.cgi?product=[% bug.product FILTER url_quote %]">Co<u>m</u>ponent</a></b></label>:
             </td>
-            [% PROCESS select selname => "component" accesskey => "m" %]
+            [% PROCESS select selname => "component" %]
           </tr>
 
           <tr>
 
           <tr>
             <td align="right">
-              <b><u>H</u>ardware:</b>
+              <label for="rep_platform" accesskey="h"><b><u>H</u>ardware</b></label>:
             </td>
-            [% PROCESS select selname => "rep_platform" accesskey => "h" %]
+            [% PROCESS select selname => "rep_platform" %]
           </tr>
 
           <tr>
             <td align="right">
-              <b><u>O</u>S:</b>
+              <label for="op_sys" accesskey="o"><b><u>O</u>S</b></label>:
             </td>
-            [% PROCESS select selname => "op_sys" accesskey => "o" %]
+            [% PROCESS select selname => "op_sys" %]
           </tr>
 
           <tr>
             <td align="right">
-              <b>Version:</b>
+              <label for="version"><b>Version</b></label>:
             </td>
             [% PROCESS select selname => "version" %]
           </tr>
 
           <tr>
             <td align="right">
-              <b><a href="page.cgi?id=fields.html#priority">Pr<u>i</u>ority</a>:</b>
+              <label for="priority" accesskey="i"><b><a href="page.cgi?id=fields.html#priority">Pr<u>i</u>ority</a></b></label>:
             </td>
-            [% PROCESS select selname => "priority" accesskey => "i" %]
+            [% PROCESS select selname => "priority" %]
           </tr>
 
           <tr>
             <td align="right">
-              <b><a href="page.cgi?id=fields.html#bug_severity">Severity</a>:</b>
+              <label for="bug_severity"><b><a href="page.cgi?id=fields.html#bug_severity">Severity</a></b></label>:
             </td>
             [% PROCESS select selname = "bug_severity" %]
           </tr>
           [% IF Param("usetargetmilestone") && bug.target_milestone %]
             <tr>
               <td align="right">
-                <b>
+                <label for="target_milestone"><b>
                   [% IF bug.milestoneurl %]
                     <a href="[% bug.milestoneurl FILTER html %]">
                   [% END %]
-                  Target Milestone[% "</a>" IF bug.milestoneurl %]:
-                </b>
+                  Target Milestone[% "</a>" IF bug.milestoneurl %]
+                [%%]</b></label>:
               </td>
               [% PROCESS select selname = "target_milestone" %]
             </tr>
 
           <tr>
             <td align="right" valign="top">
-              <b><u>A</u>dd&nbsp;CC:</b>
+              <label for="newcc" accesskey="a"><b><u>A</u>dd&nbsp;CC</b></label>:
             </td>
             <td>
                [% INCLUDE global/userselect.html.tmpl
+                  id => "newcc"
                   name => "newcc"
                   value => ""
-                  accesskey => "a"
                   size => 30
                   multiple => 5
                 %]
           </tr>
 
           <tr>
-            <td align="right" valign="top">
-              <b>CC:</b>
-            </td>
-            <td valign="top">
             [% IF bug.cc %]
-              <select name="cc" multiple="multiple" size="5">
-              [% FOREACH c = bug.cc %]
-                <option value="[% c FILTER html %]">[% c FILTER html %]</option>
-              [% END %]
-              </select>
-              <br>
-              <input type="checkbox" name="removecc">Remove selected CCs
-              <br>
+              <td align="right" valign="top">
+                <label for="cc"><b>CC</b></label>:
+              </td>
+              <td valign="top">
+                <select id="cc" name="cc" multiple="multiple" size="5">
+                [% FOREACH c = bug.cc %]
+                  <option value="[% c FILTER html %]">[% c FILTER html %]</option>
+                [% END %]
+                </select>
+                <br>
+                <input type="checkbox" id="removecc" name="removecc">
+                [%%]<label for="removecc">Remove selected CCs</label>
+                <br>
+              </td>
             [% ELSE %]
-              <input type="hidden" name="cc" value="">
+              <td colspan="2"><input type="hidden" name="cc" value=""></td>
             [% END %]
-            </td>
           </tr>
 
         </table>
          [% IF Param('useqacontact') %]
            <tr>
              <td align="right">
-             <b><u>Q</u>A Contact:</b>
+             <label for="qa_contact" accesskey="q"><b><u>Q</u>A Contact</b></label>:
              </td>
              <td colspan="7">
                [% INCLUDE global/userselect.html.tmpl
+                  id => "qa_contact"
                   name => "qa_contact"
                   value => bug.qa_contact.login
-                  accesskey => "q"
                   size => 60
                   emptyok => 1
                 %]
 
           <tr>
             <td align="right">
-              <b>
+              <label for="bug_file_loc" accesskey="u"><b>
                 [% IF bug.bug_file_loc 
                    AND NOT bug.bug_file_loc.match("^(javascript|data)") %]
-                  <a href="[% bug.bug_file_loc FILTER html %]"><u>U</u>RL</a>:
+                  <a href="[% bug.bug_file_loc FILTER html %]"><u>U</u>RL</a>
                 [% ELSE %]
-                  <u>U</u>RL:
+                  <u>U</u>RL
                 [% END %]
-              </b>
+              [%%]</b></label>:
             </td>
             <td colspan="5">
-              <input name="bug_file_loc" accesskey="u"
+              <input name="bug_file_loc" id="bug_file_loc"
                      value="[% bug.bug_file_loc FILTER html %]" size="60">
             </td>
           </tr>
 
           <tr>
             <td align="right">
-              <b><u>S</u>ummary:</b>
+              <label for="short_desc" accesskey="s"><b><u>S</u>ummary</b></label>:
             </td>
             <td colspan="5">
-              <input name="short_desc" accesskey="s"
+              <input name="short_desc" id="short_desc"
                      value="[% bug.short_desc FILTER html %]" size="60">
             </td>
           </tr>
           [% IF Param('usestatuswhiteboard') %]
             <tr>
               <td align="right">
-                <b>Status <u>W</u>hiteboard:</b>
+                <label for="status_whiteboard" accesskey="w"><b>Status
+                <u>W</u>hiteboard</b></label>:
               </td>
               <td colspan="5">
-                <input name="status_whiteboard" accesskey="w"
+                <input name="status_whiteboard" id="status_whiteboard"
                        value="[% bug.status_whiteboard FILTER html %]" size="60">
               </td>
             </tr>
           [% IF use_keywords %]
             <tr>
               <td align="right">
-                <b>
-                  <a href="describekeywords.cgi"><u>K</u>eywords</a>:
-                </b>
+                <label for="keywords" accesskey="k"><b><a href="describekeywords.cgi"><u>K</u>eywords</a></b></label>:
               <td colspan="5">
-                <input name="keywords" accesskey="k"
+                <input name="keywords" id="keywords"
                        value="[% bug.keywords.join(', ') FILTER html %]" size="60">
               </td>
             </tr>
     <table cellspacing="0" cellpadding="4" border="1">
       <tr>
         <th align="center" bgcolor="#cccccc">
-          Orig. Est.
+          <label for="estimated_time">Orig. Est.</label>
         </th>
         <th align="center" bgcolor="#cccccc">
           Current Est.
         </th>
         <th align="center" bgcolor="#cccccc">
-          Hours Worked
+          <label for="work_time">Hours Worked</label>
         </th>
         <th align="center" bgcolor="#cccccc">
-          Hours Left
+          <label for="remaining_time">Hours Left</label>
         </th>
         <th align="center" bgcolor="#cccccc">
           %Complete
           Gain
         </th>
         <th align="center" bgcolor="#cccccc">
-          Deadline
+          <label for="deadline">Deadline</label>
         </th>
       </tr>
       <tr>
         <td align="center">
-          <input name="estimated_time"
+          <input name="estimated_time" id="estimated_time"
                  value="[% PROCESS formattimeunit
                                    time_unit=bug.estimated_time %]"
                  size="6" maxlength="6">
         </td>
         <td align="center">
           [% PROCESS formattimeunit time_unit=bug.actual_time %] +
-          <input name="work_time" value="0" size="3" maxlength="6"
+          <input name="work_time" id="work_time"
+                 value="0" size="3" maxlength="6"
                  onchange="adjustRemainingTime();">
         </td>
         <td align="center">
-          <input name="remaining_time"
+          <input name="remaining_time" id="remaining_time"
                  value="[% PROCESS formattimeunit
                                    time_unit=bug.remaining_time %]"
                  size="6" maxlength="6" onchange="updateRemainingTime();">
           [% PROCESS formattimeunit time_unit=bug.estimated_time - (bug.actual_time + bug.remaining_time) %]
         </td>
          <td align="center">
-           <input name="deadline" value="[% bug.deadline %]"
+           <input name="deadline" id="deadline" value="[% bug.deadline %]"
                   size="10" maxlength="10"><br />
            <small>(YYYY-MM-DD)</small>
         </td>        
 [%# *** Comments Groups *** %]
 
   <br>
-  <b>Additional <u>C</u>omments:</b>
+  <label for="comment" accesskey="c"><b>Additional <u>C</u>omments</b></label>:
   [% IF Param("insidergroup") && UserInGroup(Param("insidergroup")) %]
     <input type="checkbox" name="commentprivacy" value="1"
            id="newcommentprivacy"
-           onClick="updateCommentTagControl(this, form)"> Private
+           onClick="updateCommentTagControl(this, form)">
+    <label for="newcommentprivacy">Private</label>
   [% END %]
   <br>
   <a name="add_comment"></a>
     minrows   = 10
     maxrows   = 25
     cols      = constants.COMMENT_COLS
-    accesskey = 'c'
   %]
 
   [% IF NOT bug.cc || NOT bug.cc.contains(user.login) %]
     <br>
-    <label for="addselfcc">
-      <input type="checkbox" id="addselfcc" name="addselfcc">
-      Add [% user.login FILTER html %] to CC list
-    </label>
+    <input type="checkbox" id="addselfcc" name="addselfcc">
+    <label for="addselfcc">Add [% user.login FILTER html %] to CC list</label>
   [% END %]
   <br>
 
         [% END %]
 
       &nbsp;&nbsp;&nbsp;&nbsp;
-      <input type="checkbox" name="bit-[% group.bit %]" value="1"
-        [% " checked=\"checked\"" IF group.ison %]
-        [% " disabled=\"disabled\"" IF NOT group.ingroup %]>
-      [% group.description %]
+      <input type="checkbox" value="1"
+             name="bit-[% group.bit %]" id="bit-[% group.bit %]"
+             [% " checked=\"checked\"" IF group.ison %]
+             [% " disabled=\"disabled\"" IF NOT group.ingroup %]>
+      <label for="bit-[% group.bit %]">[% group.description %]</label>
       <br>
       [% END %]
     [% END %]
       </p>
 
       <p>
-        <input type="checkbox" name="reporter_accessible" value="1"
-          [% " checked" IF bug.reporter_accessible %]>Reporter
-        <input type="checkbox" name="cclist_accessible" value="1"
-          [% " checked" IF bug.cclist_accessible %]>CC List
+        <input type="checkbox" value="1"
+               name="reporter_accessible" id="reporter_accessible"
+               [% " checked" IF bug.reporter_accessible %]>
+        <label for="reporter_accessible">Reporter</label>
+        <input type="checkbox" value="1"
+               name="cclist_accessible" id="cclist_accessible"
+               [% " checked" IF bug.cclist_accessible %]>
+        <label for="cclist_accessible">CC List</label>
       </p>
     [% END %]
   [% END %]
 [%############################################################################%]
 
 [% BLOCK dependencies %]
-  <th align="right">[% terms.Bug %] [%+ bug.bug_id %] [%+ dep.title %]:</th>
+  <th align="right">
+    <label for="[% dep.fieldname %]"[% " accesskey=\"$accesskey\"" IF accesskey %]>
+    [% terms.Bug %] [%+ bug.bug_id %] [%+ dep.title %]</label>:
+  </th>
   <td>
   [% FOREACH depbug = bug.${dep.fieldname} %]
     [% depbug FILTER bug_link(depbug) %][% " " %]
   [% END %]
   </td>
   <td>
-    <input name="[% dep.fieldname %]" accesskey="[% accesskey %]"
+    <input name="[% dep.fieldname %]" id="[% dep.fieldname %]"
            value="[% bug.${dep.fieldname}.join(', ') %]">
   </td>
 [% END %]
 
 [% BLOCK select %]
   <td>
-    <label for="[% selname %]" accesskey="[% accesskey %]">
-      <select name="[% selname %]" id="[% selname %]">
-        [% FOREACH x = bug.choices.${selname} %]
-          <option value="[% x FILTER html %]"
-            [% " selected" IF x == bug.${selname} %]>[% x FILTER html %]
-          </option>
-        [% END %]
-      </select>
-    </label>
+    <select id="[% selname %]" name="[% selname %]">
+      [% FOREACH x = bug.choices.${selname} %]
+        <option value="[% x FILTER html %]"
+          [% " selected" IF x == bug.${selname} %]>[% x FILTER html %]
+        </option>
+      [% END %]
+    </select>
   </td>
 [% END %]
index 35808f9514a2d6c3ee9b8a7bd44ab6694afaf18c..bf48501538ceb2911ff98f804313d3dc3b7662d6 100644 (file)
 <table>
 <tr>
 <td align="right">
-  <b>Period <label accesskey="s" 
-             for="start_date"><u>s</u>tarting</label></b>: 
+  <b><label accesskey="s" 
+             for="start_date">Period <u>s</u>tarting</label></b>: 
 </td><td colspan="3">
   <input type="text" id="start_date" name="start_date" size="11"
   align="right" value="[% start_date FILTER html %]" maxlength="10">
   %]><label 
   for="owner" accesskey="d"><u>D</u>eveloper</label>
 </td><td colspan="2">
-  <b>Format</b>: <select name="ctype">
+  <label for="ctype"><b>Format</b></label>: <select name="ctype" id="ctype">
     <option value="html">HTML Report</option>
   </select>
 </td></tr><tr>
 <td>&nbsp;</td><td colspan="4">
-  <label for="monthly" accesskey="m">
   <input type="checkbox" name="monthly" [% 'checked="checked"' IF
       monthly %] id="monthly">
-  Split by <u>m</u>onth</label>
+  <label for="monthly" accesskey="m">Split by <u>m</u>onth</label>
   [%# XXX: allow splitting by other intervals %]
   &nbsp;
-  <label for="detailed" accesskey="t">
   <input type="checkbox" name="detailed" [% 'checked="checked"' IF
       detailed %] id="detailed">
-  De<u>t</u>ailed summaries</label>
+  <label for="detailed" accesskey="t">De<u>t</u>ailed summaries</label>
   &nbsp;
-  <label for="inactive" accesskey="i">
   <input type="checkbox" name="inactive" [% 'checked="checked"' IF
       inactive %] id="inactive">
-  Also show <u>i</u>nactive [% terms.bugs %]</label>
+  <label for="inactive" accesskey="i">Also show <u>i</u>nactive
+  [%+ terms.bugs %]</label>
 </td>
 </tr></table>
 
index b7e43c3c661146675d93b75dcf16cb3bc4b39e8b..bb139e2de8e3011145b5eb9e03dd9983873196c8 100644 (file)
@@ -79,7 +79,6 @@
   'field.description',
   'field.accesskey',
   'sel.name',
-  'sel.accesskey',
 ],
 
 'search/search-specific.html.tmpl' => [
 
 'reports/series-common.html.tmpl' => [
   'sel.name', 
-  'sel.accesskey', 
   '"onchange=\"$sel.onchange\"" IF sel.onchange', 
 ],
 
   'group.description', 
   'dep.title', 
   'dep.fieldname', 
-  'accesskey', 
   'bug.${dep.fieldname}.join(\', \')', 
   'selname',
   'depbug FILTER bug_link(depbug)',
   '"${bug.dup_id}" FILTER bug_link(bug.dup_id)',
+  '" accesskey=\"$accesskey\"" IF accesskey',
 ],
 
 'bug/knob.html.tmpl' => [
index 83992617a15ddfabcf0d12cdb736e54e391e1ad1..7a92f127776ed55f4c0597982359fa128933e353 100644 (file)
@@ -98,8 +98,9 @@
           [% flag.setter.nick FILTER html %]:
         </td>
         <td>
-          <label title="[% type.description FILTER html %]">
-            [%- type.name FILTER html FILTER no_break %]</label>
+          <label title="[% type.description FILTER html %]"
+                 for="flag-[% flag.id %]">
+            [%- type.name FILTER html FILTER no_break -%]</label>
         </td>
         <td>
           <select id="flag-[% flag.id %]" name="flag-[% flag.id %]" 
       <tr>
         <td>&nbsp;</td>
         <td>
-          <label title="[% type.description FILTER html %]">
+          <label title="[% type.description FILTER html %]"
+                 for="flag_type-[% type.id %]">
             [%- type.name FILTER html FILTER no_break %]</label>
         </td>
         <td>
     [% END %]
     <tr>
       <td colspan="2">
-        addl. <label title="[% type.description FILTER html %]">
+        addl. <label title="[% type.description FILTER html %]"
+                     for="flag_type-[% type.id %]">
           [%- type.name FILTER html FILTER no_break %]</label>
       </td>
       <td>
index 005d14752026cc34ecf5367833258d95264babd0..c02e8db049844c6efe358020502b2bb759599f0e 100644 (file)
@@ -70,11 +70,11 @@ function subcatSelected() {
       </tr>
     [% ELSE %]
       <tr>
-        <th>Category:</th>
+        <th><label for="category">Category</label>:</th>
         <th></th>
-        <th>Sub-category:</th>
+        <th><label for="subcategory">Sub-category</label>:</th>
         <th></th>
-        <th>Name:</th>
+        <th><label for="name" accesskey="N">Name</label>:</th>
         <th><br>
         </th>
       </tr>
@@ -102,19 +102,17 @@ function subcatSelected() {
         </td>
         
         <td align="left">
-          <label for="name" accesskey="N">
-            <select name="name" id="name" style="width: 15em"
-                    size="5" multiple="multiple"
-                    [%+ "disabled=\"disabled\"" UNLESS name.keys.size %]>
-              [% FOREACH x = name.keys.sort %]
-                <option value="[% name.$x FILTER html %]">
-                  [% x FILTER html %]</option>
-              [% END %]
-              [% UNLESS name.keys.size %]
-                <option value="" disabled="disabled"></option>
-              [% END %]
-            </select>
-          </label>
+          <select name="name" id="name" style="width: 15em"
+                  size="5" multiple="multiple"
+                  [%+ "disabled=\"disabled\"" UNLESS name.keys.size %]>
+            [% FOREACH x = name.keys.sort %]
+              <option value="[% name.$x FILTER html %]">
+                [% x FILTER html %]</option>
+            [% END %]
+            [% UNLESS name.keys.size %]
+              <option value="" disabled="disabled"></option>
+            [% END %]
+          </select>
         </td>
 
         <td align="center" valign="middle"> 
@@ -233,18 +231,18 @@ function subcatSelected() {
         </td>
 
         <td style="text-align: right; vertical-align: bottom;">
-          <b>Cumulate:</b> 
-          <input type="checkbox" name="cumulate" value="1"
+          <label for="cumulate"><b>Cumulate</b></label>:
+          <input type="checkbox" name="cumulate" id="cumulate" value="1"
           [% " checked" IF chart.cumulate %]>
         </td>
 
         <td></td>
-        <td valign="bottom"> 
-          <b>Date Range:</b> 
-          <input type="text" size="12" name="datefrom" 
+        <td valign="bottom">
+          <label for="datefrom"><b>Date Range</b></label>:
+          <input type="text" size="12" name="datefrom" id="datefrom"
             value="[% time2str("%Y-%m-%d", chart.datefrom) IF chart.datefrom%]">
-          <b>to</b> 
-          <input type="text" size="12" name="dateto" 
+          <label for="dateto"><b>to</b></label>
+          <input type="text" size="12" name="dateto" id="dateto"
             value="[% time2str("%Y-%m-%d", chart.dateto) IF chart.dateto %]">
         </td>
 
index 06b6af87098a45bafe92dfd1a6de1357f979b0f2..42bf0b7ba1000a188b36e97d5ebde7f8219521a6 100644 (file)
@@ -99,22 +99,20 @@ function checkNewState() {
 
 [% BLOCK series_select %]
   <td align="left">
-    <label for="[% sel.name %]" accesskey="[% sel.accesskey %]">
-      <select name="[% sel.name %]" id="[% sel.name %]"
-              size="[% sel.size %]" style="width: 15em"
-              [%+ "disabled=\"disabled\"" UNLESS ${sel.name}.keys.size || newtext %]
-              [%+ "onchange=\"$sel.onchange\"" IF sel.onchange %]>
-        [% FOREACH x = ${sel.name}.keys.sort %]
-          <option value="[% x FILTER html %]"
-            [% " selected" IF default.${sel.name} == x %]>
-            [% x FILTER html %]</option>
-        [% END %]
-        [% IF newtext %]
-          <option value="">[% newtext FILTER html %]</option>
-        [% ELSIF NOT ${sel.name}.keys.size %]
-          <option value="" disabled="disabled"></option>
-        [% END %]
-      </select>
-    </label>
+    <select name="[% sel.name %]" id="[% sel.name %]"
+            size="[% sel.size %]" style="width: 15em"
+            [%+ "disabled=\"disabled\"" UNLESS ${sel.name}.keys.size || newtext %]
+            [%+ "onchange=\"$sel.onchange\"" IF sel.onchange %]>
+      [% FOREACH x = ${sel.name}.keys.sort %]
+        <option value="[% x FILTER html %]"
+          [% " selected" IF default.${sel.name} == x %]>
+          [% x FILTER html %]</option>
+      [% END %]
+      [% IF newtext %]
+        <option value="">[% newtext FILTER html %]</option>
+      [% ELSIF NOT ${sel.name}.keys.size %]
+        <option value="" disabled="disabled"></option>
+      [% END %]
+    </select>
   </td>
 [% END %]
index 6b0a5a2c8cbfbc3443a4ad917d89c02ffaa2e25e..5fa3055b27db12b0352bbc3e624a86add139e62d 100644 (file)
@@ -124,7 +124,9 @@ function doOnSelectProduct(selectmode) {
 
 <table>
   <tr>
-    <th align="right"><u>S</u>ummary:</th>
+    <th align="right">
+      <label for="short_desc" accesskey="s"><u>S</u>ummary</label>:
+    </th>
     <td>
       <select name="short_desc_type">
       [% FOREACH qv = query_variants %]
@@ -134,7 +136,7 @@ function doOnSelectProduct(selectmode) {
       </select>
     </td>
     <td>
-      <input name="short_desc" size="40" accesskey="s"
+      <input name="short_desc" id="short_desc" size="40"
              value="[% default.short_desc.0 FILTER html %]">
       <script type="text/javascript"> <!--
           document.forms[queryform].short_desc.focus(); 
@@ -157,21 +159,21 @@ function doOnSelectProduct(selectmode) {
           <td valign="top">
             <table>
               <tr valign="bottom">
-                <th align="left"><u>C</u>lassification:</th>
+                <th align="left">
+                  <label for="classification">Classification</label>:
+                </th>
               </tr>
               <tr valign="top">
                 <td align="left">
-                  <label for="classification">
-                    <select name="classification" multiple="multiple" size="5" id="classification"
-                            onchange="doOnSelectProduct(1);">
+                  <select name="classification" multiple="multiple" size="5" id="classification"
+                          onchange="doOnSelectProduct(1);">
                     [% FOREACH cat = classification %]
                       <option value="[% cat.name FILTER html %]"
                         [% " selected" IF lsearch(default.classification, cat.name) != -1 %]>
                         [% cat.name FILTER html %]
                       </option>
                     [% END %]
-                    </select>
-                  </label>
+                  </select>
                 </td>
               </tr>
             </table>
@@ -180,21 +182,21 @@ function doOnSelectProduct(selectmode) {
           <td valign="top">
             <table>
               <tr valign="bottom">
-                <th align="left"><u>P</u>roduct:</th>
+                <th align="left">
+                  <label for="product" accesskey="p"><u>P</u>roduct</label>:
+                </th>
               </tr>
               <tr valign="top">
                 [%# Can't use the select block here because of the onChange %]
                 <td align="left">
-                  <label for="product" accesskey="p">
-                    <select name="product" multiple="multiple" size="5" id="product"
-                            onchange="doOnSelectProduct(2);">
+                  <select name="product" multiple="multiple" size="5" id="product"
+                          onchange="doOnSelectProduct(2);">
                     [% FOREACH p = product %]
                       <option value="[% p.name FILTER html %]"
                         [% " selected" IF lsearch(default.product, p.name) != -1 %]>
                         [% p.name FILTER html %]</option>
                     [% END %]
-                    </select>
-                  </label>
+                  </select>
                 </td>
               </tr>
             </table>
@@ -203,23 +205,21 @@ function doOnSelectProduct(selectmode) {
             <table>
               <tr valign="bottom">
                 <th align="left">
-                  <a href="describecomponents.cgi">Co<u>m</u>ponent</a>:
+                  <label for="component" accesskey="m"><a href="describecomponents.cgi">Co<u>m</u>ponent</a></label>:
                 </th>
               </tr>
               <tr valign="top">
                 [%# Can't use the select block here because 'component' is a toolkit
                     reserved word - we use 'component_' instead. %]
                 <td align="left">
-                  <label for="component" accesskey="m">
-                    <select name="component" id="component"
-                            multiple="multiple" size="5">
+                  <select name="component" id="component"
+                          multiple="multiple" size="5">
                     [% FOREACH c = component_ %]
                       <option value="[% c FILTER html %]"
                         [% " selected" IF lsearch(default.component, c) != -1 %]>
                         [% c FILTER html %]</option>
                     [% END %]
-                    </select>
-                  </label>
+                  </select>
                 </td>
               </tr>
             </table>
@@ -227,12 +227,13 @@ function doOnSelectProduct(selectmode) {
           <td valign="top">
             <table>
               <tr valign="bottom">
-                <th align="left"><u>V</u>ersion:</th>
+                <th align="left">
+                  <label for="version">Version</label>:
+                </th>
               </tr>
               <tr valign="top">
                 [% PROCESS select sel = { name => 'version',
-                                          size => 5,
-                                          accesskey => 'v' } %]
+                                          size => 5 } %]
               </tr>
             </table>
           </td>
@@ -240,12 +241,13 @@ function doOnSelectProduct(selectmode) {
           <td valign="top">
             <table>
               <tr valign="bottom">
-                <th align="left"><u>T</u>arget:</th>
+                <th align="left">
+                  <label for="target_milestone">Target</label>:
+                </th>
               </tr>
               <tr valign="top">
                 [% PROCESS select sel = { name => 'target_milestone',
-                                          size => 5,
-                                          accesskey => 't' } %]
+                                          size => 5 } %]
               </tr>
             </table>
           </td>
@@ -267,7 +269,9 @@ function doOnSelectProduct(selectmode) {
 
     [% UNLESS field.name == 'status_whiteboard' AND NOT Param('usestatuswhiteboard') %]
     <tr>
-      <th align="right">[% field.description %]:</th>
+      <th align="right">
+        <label for="[% field.name %]" accesskey="[% field.accesskey %]">[% field.description %]</label>:
+      </th>
       <td>
         <select name="[% field.name %]_type">
         [% FOREACH qv = query_variants %]
@@ -277,8 +281,7 @@ function doOnSelectProduct(selectmode) {
         [% END %]
         </select>
       </td>
-      <td><input name="[% field.name %]" size="40"
-                 accesskey="[% field.accesskey %]"
+      <td><input name="[% field.name %]" id="[% field.name %]" size="40"
                  value="[% default.${field.name}.0 FILTER html %]">
       </td>
       <td></td>
@@ -289,7 +292,7 @@ function doOnSelectProduct(selectmode) {
   [% IF have_keywords %]
     <tr>
       <th align="right">
-        <a href="describekeywords.cgi"><u>K</u>eywords</a>:
+        <label for="keywords" accesskey="k"><a href="describekeywords.cgi"><u>K</u>eywords</a></label>:
       </th>
       <td>
         <select name="keywords_type">
@@ -305,7 +308,7 @@ function doOnSelectProduct(selectmode) {
         </select>
       </td>
       <td>
-        <input name="keywords" size="40" accesskey="k"
+        <input name="keywords" id="keywords" size="40"
                value="[% default.keywords.0 FILTER html %]">
       </td>
     </tr>
@@ -315,11 +318,11 @@ function doOnSelectProduct(selectmode) {
   [% IF UserInGroup(Param("timetrackinggroup")) %]
     <tr>
       <th align="right">
-        Dead<u>l</u>ine:
+        <label for="deadlinefrom" accesskey="l">Dead<u>l</u>ine</label>:
       </th>
       <td>
         from&nbsp;
-        <input name="deadlinefrom" size="10" maxlength="10" accesskey="l">&nbsp;
+        <input name="deadlinefrom" id="deadlinefrom" size="10" maxlength="10">&nbsp;
         to&nbsp;
         <input name="deadlineto" size="10" maxlength="10">
       </td>
@@ -340,12 +343,13 @@ function doOnSelectProduct(selectmode) {
     <td>
       <table>
         <tr>
-          <th align="left">St<u>a</u>tus:</th>
+          <th align="left">
+            <label for="bug_status" accesskey="a">St<u>a</u>tus</label>:
+          </th>
         </tr>
         <tr valign="top">
           [% PROCESS select sel = { name => 'bug_status',
-                                    size => 7,
-                                    accesskey => 'a' } %]
+                                    size => 7 } %]
         </tr>
       </table>
     </td>
@@ -353,61 +357,64 @@ function doOnSelectProduct(selectmode) {
       <table>
         <tr>
           <th align="left">
-            <u>R</u>esolution:
+            <label for="resolution" accesskey="r"><u>R</u>esolution</label>:
           </th>
         </tr>
         <tr valign="top">
           [% PROCESS select sel = { name => 'resolution',
-                                    size => 7,
-                                    accesskey => 'r' } %]
+                                    size => 7 } %]
         </tr>
       </table>
     </td>
     <td>
       <table>
         <tr>
-          <th align="left">S<u>e</u>verity:</th>
+          <th align="left">
+            <label for="bug_severity">Severity</label>:
+          </th>
         </tr>
         <tr valign="top">
           [% PROCESS select sel = { name => 'bug_severity',
-                                    size => 7,
-                                    accesskey => 'e' } %]
+                                    size => 7 }%]
         </tr>
       </table>
     </td>
     <td>
       <table>
         <tr>
-          <th align="left">Pr<u>i</u>ority:</th>
+          <th align="left">
+            <label for="priority" accesskey="i">Pr<u>i</u>ority</label>:
+          </th>
         </tr>
         <tr valign="top">
           [% PROCESS select sel = { name => 'priority',
-                                    size => 7,
-                                    accesskey => 'i' } %]
+                                    size => 7 } %]
         </tr>
       </table>
     </td>
     <td>
       <table>
         <tr>
-          <th align="left"><u>H</u>ardware:</th>
+          <th align="left">
+            <label for="rep_platform" accesskey="h"><u>H</u>ardware</label>:
+          </th>
         </tr>
         <tr valign="top">
           [% PROCESS select sel = { name => 'rep_platform',
-                                    size => 7,
-                                    accesskey => 'h' } %]
+                                    size => 7 } %]
         </tr>
       </table>
     </td>
     <td>
       <table>
         <tr>
-          <th align="left"><u>O</u>S:</th>
+          <th align="left">
+            <label for="op_sys" accesskey="o"><u>O</u>S</label>:
+          </th>
         </tr>
         <tr valign="top">
           [% PROCESS select sel = { name => 'op_sys',
-                                    size => 7,
-                                    accesskey => 'o' } %]
+                                    size => 7 } %]
         </tr>
       </table>
     </td>
@@ -528,10 +535,11 @@ function doOnSelectProduct(selectmode) {
         <option value="include"[% " selected" IF default.bugidtype.0 == "include" %]>Only include</option>
         <option value="exclude"[% " selected" IF default.bugidtype.0 == "exclude" %]>Exclude</option>
       </select>
-      [% terms.bugs %] numbered:
+      <label for="bug_id">[% terms.bugs %] numbered</label>:
     </td>
     <td>
-      <input type="text" name="bug_id" value="[% default.bug_id.0 FILTER html %]" size="20">
+      <input type="text" name="bug_id" id="bug_id"
+             value="[% default.bug_id.0 FILTER html %]" size="20">
     </td>
   </tr>
   <tr>
@@ -541,10 +549,12 @@ function doOnSelectProduct(selectmode) {
   [% IF Param('usevotes') %]
     <tr>
       <td align="right">
-        Only [% terms.bugs %] with at least:
+        <label for="votes">Only [% terms.bugs %] with at least</label>:
       </td>
       <td>
-        <input name="votes" size="3" value="[% default.votes.0 FILTER html %]"> votes
+        <input name="votes" id="votes" size="3"
+               value="[% default.votes.0 FILTER html %]">
+        votes
       </td>
     </tr>
   [% END %]
@@ -562,15 +572,20 @@ function doOnSelectProduct(selectmode) {
 
 
 <dl class="bug_changes">
-  <dt>Only [% terms.bugs %] changed between:</dt>
+  <dt>
+    <label for="chfieldfrom">Only [% terms.bugs %] changed between</label>:
+  </dt>
   <dd>
-    <input name="chfieldfrom" size="10" value="[% default.chfieldfrom.0 FILTER html %]">
+    <input name="chfieldfrom" id="chfieldfrom"
+           size="10" value="[% default.chfieldfrom.0 FILTER html %]">
     and <input name="chfieldto" size="10" value="[% default.chfieldto.0 FILTER html %]">
     <br>(YYYY-MM-DD or relative dates)
   </dd>
-  <dt>where one or more of the following changed:</dt>
+  <dt>
+    <label for="chfield">where one or more of the following changed</label>:
+  </dt>
   <dd>
-    <select name="chfield" multiple="multiple" size="4">
+    <select name="chfield" id="chfield" multiple="multiple" size="4">
     [% FOREACH field = chfield %]
       <option value="[% field FILTER html %]"
         [% " selected" IF lsearch(default.chfield, field) != -1 %]>
@@ -578,9 +593,10 @@ function doOnSelectProduct(selectmode) {
     [% END %]
     </select>
   </dd>
-  <dt>and the new value was:</dt>
+  <dt>and <label for="chfieldvalue">the new value was</label>:</dt>
   <dd>
-    <input name="chfieldvalue" size="20" value="[% default.chfieldvalue.0 FILTER html %]">
+    <input name="chfieldvalue" id="chfieldvalue"
+           size="20" value="[% default.chfieldvalue.0 FILTER html %]">
   </dd>
 </dl>
 
@@ -595,9 +611,8 @@ function doOnSelectProduct(selectmode) {
 
 [% BLOCK select %]
   <td align="left">
-    <label for="[% sel.name %]" accesskey="[% sel.accesskey %]">
-      <select name="[% sel.name %]" id="[% sel.name %]"
-              multiple="multiple" size="[% sel.size %]">
+    <select name="[% sel.name %]" id="[% sel.name %]"
+            multiple="multiple" size="[% sel.size %]">
       [% FOREACH name = ${sel.name} %]
         <option value="[% name FILTER html %]"
           [% " selected" IF lsearch(default.${sel.name}, name) != -1 %]>
@@ -609,7 +624,6 @@ function doOnSelectProduct(selectmode) {
             [% name FILTER html %]</option>
           [% END %]
       [% END %]
-      </select>
-    </label>
+    </select>
   </td>
 [% END %]
index 68d279047ff5c4acc7752bd322555b0f408d244d..833e37f558b70f4e3aab5e23f9587d85a9d85812 100644 (file)
@@ -43,8 +43,8 @@
 <input type="hidden" name="cmdtype" value="doit">
 
 <p>
-  Sort results by:
-  <select name="order">
+  <label for="order">Sort results by</label>:
+  <select name="order" id="order">
   [% FOREACH order = orders %]
     <option value="[% order FILTER html %]"
       [% " selected" IF default.order.0 == order %]>