=== added file 'template/en/custom/bug/edit.html.tmpl'
--- template/en/custom/bug/edit.html.tmpl	1970-01-01 00:00:00 +0000
+++ template/en/custom/bug/edit.html.tmpl	2009-09-12 19:08:12 +0000
@@ -0,0 +1,1256 @@
+[%# 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 Netscape Communications
+  # Corporation. Portions created by Netscape are
+  # Copyright (C) 1998 Netscape Communications Corporation. All
+  # Rights Reserved.
+  #
+  # Contributor(s): Gervase Markham <gerv@gerv.net>
+  #                 Vaskin Kissoyan <vkissoyan@yahoo.com>
+  #                 Max Kanat-Alexander <mkanat@bugzilla.org>
+  #                 Frédéric Buclin <LpSolit@gmail.com>
+  #                 Olav Vitters <olav@bkor.dhs.org>
+  #                 Guy Pyrzak <guy.pyrzak@gmail.com>
+  #                 Elliotte Martin <emartin@everythingsolved.com>
+  #%]
+
+[% PROCESS global/variables.none.tmpl %]
+
+[% PROCESS "global/field-descs.none.tmpl" %]
+
+[% PROCESS bug/time.html.tmpl %]
+
+[% USE Bugzilla %]
+[% SET select_fields = {} %]
+[% FOREACH field = Bugzilla.get_fields(
+  { type => constants.FIELD_TYPE_SINGLE_SELECT, custom => 0 })
+%]
+  [% select_fields.${field.name} = field %]
+[% END %]
+
+  <script type="text/javascript">
+  <!--
+  
+  /* Outputs a link to call replyToComment(); used to reduce HTML output */
+  function addReplyLink(id, real_id) {
+      /* XXX this should really be updated to use the DOM Core's
+       * createElement, but finding a container isn't trivial.
+       */
+      [% IF user.settings.quote_replies.value != 'off' %]
+        document.write('[<a href="#add_comment" onclick="replyToComment(' + 
+                       id + ',' + real_id + ');">reply<' + '/a>]');
+      [% END %]
+  }
+
+  /* Adds the reply text to the `comment' textarea */
+  function replyToComment(id, real_id) {
+      var prefix = "(In reply to comment #" + id + ")\n";
+      var replytext = "";
+      [% IF user.settings.quote_replies.value == 'quoted_reply' %]
+        /* pre id="comment_name_N" */
+        var text_elem = document.getElementById('comment_text_'+id);
+        var text = getText(text_elem);
+
+        /* make sure we split on all newlines -- IE or Moz use \r and \n
+         * respectively.
+         */
+        text = text.split(/\r|\n/);
+
+        for (var i=0; i < text.length; i++) {
+            replytext += "> " + text[i] + "\n"; 
+        }
+
+        replytext = prefix + replytext + "\n";
+      [% ELSIF user.settings.quote_replies.value == 'simple_reply' %]
+        replytext = prefix;
+      [% END %]
+
+    [% IF Param("insidergroup") && user.in_group(Param("insidergroup")) %]
+      if (document.getElementById('isprivate_' + real_id).checked) {
+          document.getElementById('newcommentprivacy').checked = 'checked';
+      }
+    [% END %]
+
+      /* <textarea id="comment"> */
+      var textarea = document.getElementById('comment');
+      textarea.value += replytext;
+
+      textarea.focus();
+  }
+
+  if (typeof Node == 'undefined') {
+      /* MSIE doesn't define Node, so provide a compatibility object */
+      window.Node = {
+          TEXT_NODE: 3,
+          ENTITY_REFERENCE_NODE: 5
+      };
+  }
+
+  /* Concatenates all text from element's childNodes. This is used
+   * instead of innerHTML because we want the actual text (and
+   * innerText is non-standard).
+   */
+  function getText(element) {
+      var child, text = "";
+      for (var i=0; i < element.childNodes.length; i++) {
+          child = element.childNodes[i];
+          var type = child.nodeType;
+          if (type == Node.TEXT_NODE || type == Node.ENTITY_REFERENCE_NODE) {
+              text += child.nodeValue;
+          } else {
+              /* recurse into nodes of other types */
+              text += getText(child);
+          }
+      }
+      return text;
+  }
+
+[% IF user.in_group(Param('timetrackinggroup')) %]
+  var fRemainingTime = [% bug.remaining_time %]; // holds the original value
+  function adjustRemainingTime() {
+      // subtracts time spent from remaining time
+      var new_time;
+
+      // prevent negative values if work_time > fRemainingTime
+      new_time =
+          Math.max(fRemainingTime - document.changeform.work_time.value, 0.0);
+      // get upto 2 decimal places
+      document.changeform.remaining_time.value =
+          Math.round(new_time * 100)/100;
+  }
+
+  function updateRemainingTime() {
+      // if the remaining time is changed manually, update fRemainingTime
+      fRemainingTime = document.changeform.remaining_time.value;
+  }
+
+[% END %]
+
+  /* Adds the reply text to the `comment' textarea */
+  function addTextToComment(text, knob, resolve, crasher) {
+    /* pre id="comment_name_N" */
+    /* make sure we split on all newlines -- IE or Moz use \r and \n
+     * respectively */
+    text = text.split(/\r|\n/);
+
+    var replytext = "";
+    for (var i=0; i < text.length; i++) {
+        replytext += text[i] + "\n"; 
+    }
+
+    if (resolve && resolve != "") {
+      knob = 'resolve';
+      document.getElementsByName('resolution')[0].value = resolve;
+    }
+
+    if (knob && knob != "") {
+      var radiobutton = document.getElementById('knob-' + knob);
+      if (radiobutton) {radiobutton.checked = true;}
+    }
+
+    if (crasher == "1") {
+      document.getElementsByName('priority')[0].value = 'High';
+      document.getElementsByName('bug_severity')[0].value = 'critical';
+    }
+
+    var textarea = document.getElementById('comment');
+    textarea.value += replytext;
+
+    if (knob && knob == "duplicate") {
+      document.getElementsByName('dup_id')[0].focus();
+    } else {
+      textarea.focus();
+    }
+
+    return false;
+  }
+
+  /* Outputs a link to call addTextToComment(); used to reduce HTML output */
+  function addStockLink(text, shorttext, knob, resolve, crasher) {
+    document.write('[<a href="[% self_url FILTER html %]#add_comment" onclick="return addTextToComment(\'' +
+        text.replace(/'/g, "\\'").replace(/\n/g, "\\n") + "','" + knob + "','" + resolve + "','" + crasher + "');\">" + shorttext + '<' + '/a>] ');
+  }
+
+  //-->
+  </script>
+
+<form name="changeform" method="post" action="process_bug.cgi">
+
+  <input type="hidden" name="delta_ts" value="[% bug.delta_ts %]">
+  <input type="hidden" name="longdesclength" value="[% bug.longdescs.size %]">
+  <input type="hidden" name="id" value="[% bug.bug_id %]">
+  <input type="hidden" name="token" value="[% issue_hash_token([bug.id, bug.delta_ts]) FILTER html %]">
+
+  [% PROCESS section_title %]
+
+  [%# *** Bug Summary *** %]
+
+  <div id="bug_summary">
+    <table cellpadding="0" cellspacing="0" border="0">
+    <tr>
+      <td><b>Product:</b></td>
+      <td>
+        <a href="browse.cgi?product=[% bug.product FILTER url_quote %]">
+        [% bug.product FILTER html %]</a>
+      </td>
+    </tr>
+    <tr>
+      <td><b>Component:</b></td>
+      <td>[% bug.component FILTER html %]</td>
+    </tr>
+    <tr>
+      <td><b>Version:</b></td>
+      <td>[% bug.version FILTER html %]</td>
+    </tr>
+    <tr>
+      <td><b>Status:</b></td>
+      <td>[% bug.bug_status FILTER html %]</td>
+    </tr>
+    [% IF bug.resolution %]
+      <tr>
+        <td><b>Resolution:</b></td>
+        <td>[% bug.resolution FILTER html %]
+          [%~ IF bug.dup_id %]
+            of [% bug.dup_id FILTER bug_link(bug.dup_id) %]
+          [% END %]
+      </tr>
+    [% END %]
+    <tr>
+      <td><b>Priority:</b></td>
+      <td>[% bug.priority FILTER html %]</td>
+    </tr>
+    <tr>
+      <td><b>Severity:</b></td>
+      <td>[% bug.bug_severity FILTER html %]</td>
+    </tr>
+    </table>
+  </div>
+
+  [%# *** Comments *** %]
+
+  <table cellpadding="1" cellspacing="1">
+    <tr>
+      <td id="comment_status_commit">
+        [%# *** Additional Comments *** %]
+        <div id="comments">
+        [% PROCESS bug/comments.html.tmpl
+           comments = bug.longdescs
+           mode = user.id ? "edit" : "show"
+         %]
+        </div>
+
+        <!-- The table keeps the commit button aligned with the box. -->
+        <a name="add_comment"></a>
+        [% IF user.id %]
+        <table><tr><td>
+          <label for="comment" accesskey="c"><b>Additional <u>C</u>omments</b></label>:
+          [% IF Param("insidergroup") && user.in_group(Param("insidergroup")) %]
+            <input type="checkbox" name="commentprivacy" value="1"
+                   id="newcommentprivacy"
+                   onClick="updateCommentTagControl(this, form)">
+            <label for="newcommentprivacy">Private</label>
+          [% END %]
+          <br>
+          [% INCLUDE global/textarea.html.tmpl
+                     name      = 'comment'
+                     id        = 'comment'
+                     minrows   = 10
+                     maxrows   = 25
+                     cols      = constants.COMMENT_COLS
+          %]
+
+  [% IF bug.user.canedit %]
+  [% IF bug.bug_status == 'UNCONFIRMED' || bug.bug_status == 'NEW' || bug.bug_status == 'ASSIGNED' || bug.bug_status == 'REOPENED' %]
+  <div style="display: block" id="stocklinks" name="stocklinks">
+    <script type="text/javascript">
+      addStockLink("Thanks for taking the time to report this [% terms.bug %].\nWithout a stack trace from the crash it's very hard to determine what caused it.\nCan you get us a stack trace? Please see http://live.gnome.org/GettingTraces for more information on how to do so. Thanks in advance!", 'need_stacktrace', 'needinfo', '', '1');
+      addStockLink("Thanks for taking the time to report this [% terms.bug %].\nThis [% terms.bug %] report isn't very useful because it doesn't describe the [% terms.bug %] well. If you have time and can still reproduce the [% terms.bug %], please read http://bugzilla.gnome.org/bug-HOWTO.html and add a more useful description to this [% terms.bug %].", 'bad_description', 'needinfo', '', '');
+      addStockLink("Thanks for taking the time to report this [% terms.bug %].\nThis [% terms.bug %] report isn't very useful because it doesn't describe the [% terms.bug %] well. If you have time and can still reproduce the [% terms.bug %], please read http://bugzilla.gnome.org/bug-HOWTO.html and add a description of how to reproduce this [% terms.bug %].\n\nYou'll also need to add a stack trace; please see http://live.gnome.org/GettingTraces for more information about how to do so. Thanks in advance!", 'bad_description+crasher', 'needinfo', '', '1');
+      addStockLink("Thanks for taking the time to report this [% terms.bug %].\nUnfortunately, that stack trace is missing some elements that will help a lot to solve the problem, so it will be hard for the developers to fix that crash. Can you get us a stack trace with debugging symbols? Please see http://live.gnome.org/GettingTraces for more information on how to do so and reopen this bug or report a new one. Thanks in advance!", 'bad_stacktrace', '', 'INCOMPLETE', '1');
+      addStockLink("Thanks for taking the time to report this [% terms.bug %].\nHowever, you are using a version that is too old and not supported anymore. GNOME developers are no longer working on that version, so unfortunately there will not be any bug fixes for the version that you use.\n\nBy upgrading to a newer version of GNOME you could receive bug fixes and new functionality. You may need to upgrade your Linux distribution to obtain a newer version of GNOME.\nPlease feel free to reopen this [% terms.bug %] if the problem still occurs with a newer version of GNOME.", 'obsolete', '', 'OBSOLETE', '');
+      addStockLink("Thanks for taking the time to report this [% terms.bug %].\nThis trace indicates that Mozilla (which was being used by the program) was responsible for the crash, or alternatively that the program was compiled against a different version of Mozilla. Make sure the program was built against the most recent mozilla, and if you can duplicate the crash in mozilla itself, report the [% terms.bug %] to https://bugzilla.mozilla.org/", 'mozilla', '','NOTGNOME', '');
+      addStockLink("Thanks for taking the time to report this [% terms.bug %].\nHowever, this application does not track its [% terms.bugs %] in the GNOME [% terms.Bugzilla %]. We kindly ask you to report the [% terms.bug %] to the application authors. For a selective list of other bug tracking systems please consult http://live.gnome.org/Bugsquad/TriageGuide/NonGnome.\n\nIf the affected third party application has a [% terms.bug %] tracking system you should investigate whether a [% terms.bug %] for the reported issue is already filed in this system. If it has not been filed yet please do so. Also ensure that both [% terms.bug %] reports contain a link to each other.\nThanks in advance!", 'not_gnome', '', 'NOTGNOME', '');
+      addStockLink("Thanks for the [% terms.bug %] report. This particular [% terms.bug %] has already been reported into our [% terms.bug %] tracking system, but please feel free to report any further [% terms.bugs %] you find.", 'duplicate', 'duplicate', '', '');
+      addStockLink("Thanks for taking the time to report this [% terms.bug %].\nThis particular [% terms.bug %] has already been reported into our [% terms.bug %] tracking system, but the maintainers need more information to fix the [% terms.bug %]. Could you please answer the questions in the other report in order to help the developers?", 'dupe+needinfo', 'duplicate', '', '');
+      addStockLink("Thanks for taking the time to report this [% terms.bug %].\nThis particular [% terms.bug %] has already been reported into our [% terms.bug %] tracking system, but we are happy to tell you that the problem has already been fixed. It should be solved in the next software version. You may want to check for a software upgrade.", 'dupe+fixed', 'duplicate', '', '');
+      addStockLink("This problem has been fixed in our software repository. The fix will go into the next software release. Thank you for your [% terms.bug %] report.", 'fixed_in_stable', '', 'FIXED', '');
+      addStockLink("This problem has been fixed in the development version. The fix will be available in the next major software release. Thank you for your [% terms.bug %] report.", 'fixed_in_head', '', 'FIXED', '');
+
+    [% IF bug.product == 'evince' %]
+      addStockLink("Thanks for the [% terms.bug %] report. Unfortunately it lacks some information that may help us in finding the cause of the [% terms.bug %]. Can you, if possible, attach the file causing the crash? Also this may be a Poppler [% terms.Bug %] (the backend used by Evince to render PDF), could you please supply the poppler version and type? You can find it in the Help->About menu in Evince.", 'crash-evince', 'needinfo', '', '1');
+    [% ELSIF bug.product == 'metacity' %]
+      addStockLink("Thanks for the [% terms.bug %] report.  Unfortunately it lacks some information that may help us in finding the cause of the [% terms.bug %].  Can you provide a verbose debugging log?  To do so:\n\n  1. Reduce your desktop to as few windows as possible to reproduce the [% terms.bug %]\n  2. Run METACITY_VERBOSE=1 METACITY_USE_LOGFILE=1 metacity --replace\n  3. On stdout metacity will print the name of the logfile\n  4. Reproduce the [% terms.bug %] as quickly as possible\n  5. Kill the metacity you started above to stop the logfile from growing any longer\n  6. Attach the logfile here", 'metacity-verbose-log', 'needinfo', '', '');
+    [% ELSIF bug.product == 'epiphany' || bug.product == 'galeon' %]
+      addStockLink("Thanks for the [% terms.bug %] report.  However, the stack trace shows this to be a crash in the closed-source flash-plugin, which does not track its [% terms.bugs %] in the GNOME Bugzilla.  We kindly ask you to report the [% terms.bug %] to the application authors.", 'crash-flash-plugin', '','NOTGNOME', '');
+    [% END %]
+    [% IF bug.product == 'epiphany' || bug.product == 'yelp' || bug.product == 'devhelp' %]
+      addStockLink("Thanks for taking the time to report this [% terms.bug %]. This trace indicates that WebKit (which was being used by the program) might be responsible for the crash. Make sure the program was built against a recent version of WebKit, and if you can still duplicate the crash, report the [% terms.bug %] to http://bugs.webkit.org/ including a link to this [% terms.bug %] report and noting the WebKit version/revision number. When reporting the WebKit [% terms.bug %], be sure to include '[GTK]' in the summary and use the 'gtk' keyword.", 'webkit', '','NOTGNOME', '');
+    [% END %]
+    </script>
+    </div>
+  [% ELSIF bug.bug_status == 'NEEDINFO' %]
+  <div style="display: block" id="stocklinks" name="stocklinks">
+    <script type="text/javascript">
+      addStockLink("Closing this [% terms.bug %] report as no further information has been provided. Please feel free to reopen this [% terms.bug %] if you can provide the information asked for.\nThanks!", 'incomplete', '', 'INCOMPLETE', '')
+      addStockLink("Thanks for the [% terms.bug %] report. This particular [% terms.bug %] has already been reported into our [% terms.bug %] tracking system, but please feel free to report any further [% terms.bugs %] you find.", 'duplicate', 'duplicate', '', '');
+      addStockLink("Thanks for taking the time to report this [% terms.bug %].\nThis particular [% terms.bug %] has already been reported into our [% terms.bug %] tracking system, but the maintainers need more information to fix the [% terms.bug %]. Could you please answer the questions in the other report in order to help the developers?", 'dupe+needinfo', 'duplicate', '', '');
+      addStockLink("Thanks for taking the time to report this [% terms.bug %].\nThis particular [% terms.bug %] has already been reported into our [% terms.bug %] tracking system, but we are happy to tell you that the problem has already been fixed. It should be solved in the next software version. You may want to check for a software upgrade.", 'dupe+fixed', 'duplicate', '', '');
+    </script>
+  </div>
+  [% END %]
+  [% END %]
+
+          <br>
+          [% PROCESS commit_button id=""%]
+          <table class="status" cellspacing="0" cellpadding="0">
+            <tr>
+              <td class="field_label">
+                <b><a href="page.cgi?id=fields.html#status">Status</a></b>:
+              </td>
+              <td>
+                <a name="bug_status_bottom"></a>
+                [% PROCESS bug/knob.html.tmpl %]
+              </td>
+            </tr>
+          </table>
+        </td></tr></table>
+        [% ELSE %]
+          <fieldset>
+            <legend>Note</legend>
+            <p>
+              You need to
+              <a href="[% IF Param('ssl') != 'never' %][% Param('sslbase') %][% END %]show_bug.cgi?id=[% bug.bug_id %]&amp;GoAheadAndLogIn=1">log in</a>
+              before you can comment on or make changes to this [% terms.bug %].
+            </p>
+          </fieldset>
+        [% END %]
+      </td>
+    </tr>
+  </table>
+
+  [% PROCESS section_restrict_visibility %]
+  [% IF user.in_group(Param('timetrackinggroup')) %]
+    <br>
+    [% PROCESS section_timetracking %]
+  [% END %]
+
+  [%# *** Attachments *** %]
+
+  [% PROCESS attachment/list.html.tmpl
+             attachments = bug.attachments
+             bugid       = bug.bug_id
+             num_attachment_flag_types = bug.num_attachment_flag_types
+             show_attachment_flags = bug.show_attachment_flags
+             show_attachment_status = bug.show_attachment_status
+   %]
+
+  <table class="edit_form">
+    <tr>
+      <td colspan="3">
+          <hr id="bz_top_half_spacer">
+      </td>
+    </tr>
+    <tr>
+      [%# 1st Column %]
+      <td id="bz_show_bug_column_1" class="bz_show_bug_column">     
+        <table>
+          [%# *** ID, product, component, status, resolution, Hardware, and  OS *** %]
+          [% PROCESS section_status %]
+          
+          [% PROCESS section_spacer %]
+          
+          [% PROCESS section_details1 %]
+          
+          [% PROCESS section_spacer %]
+          
+          [%# *** severity, priority, version and milestone *** %]
+          [% PROCESS section_details2 %]            
+          
+          [%# *** assigned to and qa contact *** %]
+          [% PROCESS section_people %]
+          
+          [% PROCESS section_spacer %]
+          
+          [% PROCESS section_url_keyword_whiteboard %]
+          
+          [% PROCESS section_spacer %]
+          
+          [%# *** Dependencies *** %]
+          [% PROCESS section_dependson_blocks %]
+          
+        </table>
+      </td>
+      <td>
+        <div class="bz_column_spacer">&nbsp;</div>
+      </td>
+      [%# 2nd Column %]
+      <td id="bz_show_bug_column_2" class="bz_show_bug_column">
+        <table cellpadding="3" cellspacing="1">
+        [%# *** Reported and modified dates *** %]
+         [% PROCESS section_dates %]
+         
+         [% PROCESS section_cclist %]
+         
+         [% PROCESS section_spacer %]
+
+         [% PROCESS section_see_also %] 
+         
+         [% PROCESS section_customfields %]
+         
+         [% PROCESS section_spacer %]
+         
+         [% Hook.process("after_custom_fields") %]
+                
+         [% PROCESS section_flags %]
+
+        </table>
+      </td>
+    </tr>
+  </table>  
+</form>
+
+[%############################################################################%]
+[%# Block for the Title (alias and short desc)                               #%]
+[%############################################################################%]
+
+[% BLOCK section_title %]
+  [%# That's the main table, which contains all editable fields. %]
+  <div class="bz_alias_short_desc_container edit_form">
+      [% PROCESS commit_button id="_top"%]
+     <a href="show_bug.cgi?id=[% bug.bug_id %]">
+        <b>[% terms.Bug %]&nbsp;[% bug.bug_id FILTER html %]</b></a> - 
+     <span id="summary_alias_container" class="bz_default_hidden"> 
+      [% IF Param("usebugaliases") %]
+        [% IF bug.alias != "" %]
+          (<span id="alias_nonedit_display">[% bug.alias FILTER html %]</span>) 
+        [% END %]
+      [% END %]
+      <span id="short_desc_nonedit_display">[% bug.short_desc FILTER html %]</span>
+      [% IF bug.check_can_change_field('short_desc', 0, 1) || 
+            bug.check_can_change_field('alias', 0, 1)  %]
+        <small class="editme">(<a href="#" id="editme_action">edit</a>)</small>
+      [% END %]
+     </span>
+  
+       
+    <div id="summary_alias_input">
+      <table id="summary"> 
+        [% IF Param("usebugaliases") %]
+          <tr>
+          [% IF bug.check_can_change_field('alias', 0, 1) %]      
+            <td>
+              <label 
+                for="alias" 
+                title="a name for the 
+                       [% terms.bug %] that can be used in place of its ID number, 
+                       [%%] e.g. when adding it to a list of dependencies"
+                >Alias</label>:</td><td>
+          [% ELSIF bug.alias %]
+            <td colspan="2">(
+          [% ELSE %]
+            <td colspan="2">
+          [% END %]
+          [% PROCESS input inputname => "alias" 
+                     size => "20" 
+                     maxlength => "20"  
+                     no_td => 1 
+                     %][% ")" IF NOT bug.check_can_change_field('alias', 0, 1) 
+                                  && bug.alias %]
+          </td>
+        </tr>
+        [% END %] 
+        [%# *** Summary *** %]
+        <tr>
+          <td>
+            <label accesskey="s" for="short_desc"><u>S</u>ummary</label>:
+          </td>
+          <td>
+            [% PROCESS input inputname => "short_desc" size => "80" colspan => 2
+                             maxlength => 255 spellcheck => "true" no_td => 1 %]
+          </td>
+        </tr>
+      </table>
+    </div>
+  </div>
+  <script type="text/javascript">
+    hideAliasAndSummary('[% bug.short_desc FILTER js %]', '[% bug.alias FILTER js %]');
+  </script>
+[% END %]
+
+[%############################################################################%]
+[%# Block for the first table in the "Details" section                       #%]
+[%############################################################################%]
+
+[% BLOCK section_details1 %]
+
+    [%#############%]
+    [%#  PRODUCT  #%]
+    [%#############%]
+    
+    <tr>
+       [% IF bug.check_can_change_field('product', 0, 1) %]
+         [% prod_list = user.get_enterable_products %]
+         [% IF NOT user.can_enter_product(bug.product) %]
+           [% prod_list.unshift(bug.product_obj) %]
+         [% END %]
+       [% END %]
+
+       [% INCLUDE bug/field.html.tmpl
+            bug = bug, field = select_fields.product,
+            override_legal_values = prod_list
+            desc_url = 'describecomponents.cgi', value = bug.product
+            editable = bug.check_can_change_field('product', 0, 1) %]
+    </tr>
+    [%###############%]    
+    [%#  Component  #%]
+    [%###############%]
+    <tr>
+      <td class="field_label">
+        <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" %]
+    </tr>
+    <tr>
+      <td class="field_label">
+        <label for="version"><b>Version</b></label>:
+      </td>
+
+      [% PROCESS select selname => "version" %]
+    </tr>
+    [%############%]    
+    [%# PLATFORM #%]
+    [%############%]    
+    <tr>
+      <td class="field_label">
+        <label for="op_sys" accesskey="h"><b>OS</b></label>:
+      </td>
+      <td class="field_value">
+       [% INCLUDE bug/field.html.tmpl 
+            bug = bug, field = select_fields.op_sys, 
+            no_tds = 1, value = bug.op_sys
+            editable = bug.check_can_change_field('op_sys', 0, 1) %]
+       <script type="text/javascript">
+         assignToDefaultOnChange(['product', 'component']);
+       </script>
+      </td>
+    </tr>
+
+
+
+[% END %]
+
+[%############################################################################%]
+[%# Block for the status section                                             #%]
+[%############################################################################%]
+
+[% BLOCK section_status %]
+  <tr>
+    <td class="field_label">
+      <b><a href="page.cgi?id=fields.html#status">Status</a></b>:
+    </td>
+    <td id="bz_field_status">
+      <span id="static_bug_status">
+        [% get_status(bug.bug_status) FILTER html %]
+        [% IF bug.resolution %]
+          [%+ get_resolution(bug.resolution) FILTER html %]
+          [% IF bug.dup_id %]
+            of [% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %]
+          [% END %]
+        [% END %]
+        [% IF bug.user.canedit || (bug.user.isreporter && bug.resolution != 'WONTFIX') %]
+          (<a href="#add_comment" 
+              onclick="window.setTimeout(function() { document.getElementById('bug_status').focus(); }, 10)">edit</a>)
+        [% END %]
+      </span>
+    </td>
+  </tr>
+[% END %]
+
+[%############################################################################%]
+[%# Block for the second table in the "Details" section                      #%]
+[%############################################################################%]
+
+[% BLOCK section_details2 %]
+
+ [%###############################################################%]
+ [%# Importance (priority, severity and votes) #%]
+ [%###############################################################%]
+    <tr>
+      <td class="field_label">
+        <label for="priority" accesskey="i">
+          <b><a href="page.cgi?id=fields.html#importance"><u>I</u>mportance</a></b></label>:
+      </td>
+      <td>
+       [% INCLUDE bug/field.html.tmpl
+            bug = bug, field = select_fields.priority,
+            no_tds = 1, value = bug.priority
+            editable = bug.check_can_change_field('priority', 0, 1) %]
+       [%+ INCLUDE bug/field.html.tmpl
+            bug = bug, field = select_fields.bug_severity,
+            no_tds = 1, value = bug.bug_severity
+            editable = bug.check_can_change_field('bug_severity', 0, 1) %]
+        [% IF bug.use_votes %]
+          <span id="votes_container">
+          [% IF bug.votes %] 
+            with 
+            <a href="votes.cgi?action=show_bug&amp;bug_id=[% bug.bug_id %]">
+              [% bug.votes %] 
+              [% IF bug.votes == 1 %]
+                vote
+              [% ELSE %]
+                votes
+              [% END %]</a> 
+          [% END %]    
+          (<a href="votes.cgi?action=show_user&amp;bug_id=
+                  [% bug.bug_id %]#vote_[% bug.bug_id %]">vote</a>)
+          </span>  
+        [% END %]
+      </td>
+    </tr>
+
+    [% IF Param("usetargetmilestone") && bug.target_milestone %]
+      <tr>
+        <td class="field_label">
+          <label for="target_milestone"><b>
+            <a href="page.cgi?id=fields.html#target_milestone">
+            Target&nbsp;Milestone</a>
+          [%%]</b></label>:
+        </td>
+        [% PROCESS select selname = "target_milestone" %]
+      </tr>
+    [% END %]
+  
+[% END %]
+
+[%############################################################################%]
+[%# Block for the table in the "People" section                              #%]
+[%############################################################################%]
+
+[% BLOCK section_people %]
+
+    <tr>
+      <td class="field_label">
+        <b><a href="page.cgi?id=fields.html#assigned_to">Assigned To</a></b>:
+      </td>
+      <td>
+        [% IF bug.check_can_change_field("assigned_to", 0, 1) %]
+          <div id="bz_assignee_edit_container" class="bz_default_hidden">
+            <span>
+              [% INCLUDE global/user.html.tmpl who = bug.assigned_to %]
+              (<a href="#" id="bz_assignee_edit_action">edit</a>)
+            </span>
+          </div>
+          <div id="bz_assignee_input">
+            [% INCLUDE global/userselect.html.tmpl
+                 id => "assigned_to"
+                 name => "assigned_to"
+                 value => bug.assigned_to.login
+                 size => 30
+            %]
+            <br>
+            <input type="checkbox" id="set_default_assignee" name="set_default_assignee" value="1">
+            <label id="set_default_assignee_label" for="set_default_assignee">Reset Assignee to default</label>
+          </div>
+          <script type="text/javascript">
+           hideEditableField('bz_assignee_edit_container', 
+                             'bz_assignee_input', 
+                             'bz_assignee_edit_action', 
+                             'assigned_to', 
+                             '[% bug.assigned_to.login FILTER js %]' );
+           initDefaultCheckbox('assignee');                  
+          </script>
+        [% ELSE %]
+          [% INCLUDE global/user.html.tmpl who = bug.assigned_to %]
+        [% END %]
+      </td>
+    </tr>
+
+    [% IF Param('useqacontact') %]
+    <tr>
+      <td class="field_label">
+        <label for="qa_contact" accesskey="q"><b><u>Q</u>A Contact</b></label>:
+      </td>
+      <td>
+        [% IF bug.check_can_change_field("qa_contact", 0, 1) %]
+          [% IF bug.qa_contact != "" %]
+           <div id="bz_qa_contact_edit_container" class="bz_default_hidden">
+            <span>
+              <span id="bz_qa_contact_edit_display">
+              [% INCLUDE global/user.html.tmpl who = bug.qa_contact %]</span>
+              (<a href="#" id="bz_qa_contact_edit_action">edit</a>)
+            </span>
+          </div>
+          [% END %]
+          <div id="bz_qa_contact_input">
+            [% INCLUDE global/userselect.html.tmpl
+                id => "qa_contact"
+                name => "qa_contact"
+                value => bug.qa_contact.login
+                size => 30
+                emptyok => 1
+            %]
+            <br>
+            <input type="checkbox" id="set_default_qa_contact" name="set_default_qa_contact" value="1">
+            <label for="set_default_qa_contact" id="set_default_qa_contact_label">Reset QA Contact to default</label>
+          </div>
+          <script type="text/javascript">
+            [% IF bug.qa_contact != "" %]
+              hideEditableField('bz_qa_contact_edit_container', 
+                                 'bz_qa_contact_input', 
+                                 'bz_qa_contact_edit_action', 
+                                 'qa_contact', 
+                                 '[% bug.qa_contact.login FILTER js %]');
+            [% END %]
+            initDefaultCheckbox('qa_contact');
+          </script>
+        [% ELSE %]
+          [% INCLUDE global/user.html.tmpl who = bug.qa_contact %]
+        [% END %]
+      </td>
+    </tr>
+    [% END %]
+[% END %]
+
+[%############################################################################%]
+[%# Block for URL Keyword and Whiteboard                                     #%]
+[%############################################################################%]
+[% BLOCK section_url_keyword_whiteboard %]
+[%# URL field disabled %]
+[%# *** Whiteboard Keywords *** %]
+  [% IF Param('usestatuswhiteboard') %]
+    <tr>
+      <td class="field_label">
+        <label for="status_whiteboard" accesskey="w"><b><u>W</u>hiteboard</b></label>:
+      </td>
+      [% PROCESS input inputname => "status_whiteboard" size => "40" colspan => 2 %]
+    </tr>
+  [% END %]
+  
+  [% IF use_keywords %]
+    <tr>
+      <td class="field_label">
+        <label for="keywords" accesskey="k">
+          <b><a href="describekeywords.cgi"><u>K</u>eywords</a></b></label>:
+      </td>
+      [% PROCESS input inputname => "keywords" size => 40 colspan => 2
+                       value => bug.keywords.join(', ') %]
+    </tr>
+  [% END %]
+[% END %]
+
+[%############################################################################%]
+[%# Block for Depends On / Blocks                                              #%]
+[%############################################################################%]
+[% BLOCK section_dependson_blocks %]
+  <tr>
+    [% PROCESS dependencies
+               dep = { title => "Depends&nbsp;on", fieldname => "dependson" } %]
+  </tr>
+  
+  <tr>
+    [% PROCESS dependencies accesskey = "b"
+               dep = { title => "<u>B</u>locks", fieldname => "blocked" } %]
+  
+  <tr>
+    <th>&nbsp;</th>
+  
+    <td colspan="2" align="left" id="show_dependency_tree_or_graph">
+      Show dependency <a href="showdependencytree.cgi?id=[% bug.bug_id %]&amp;hide_resolved=1">tree</a>
+  
+      [% IF Param('webdotbase') %]
+        /&nbsp;<a href="showdependencygraph.cgi?id=[% bug.bug_id %]">graph</a>
+      [% END %]
+    </td>
+  </tr>
+[% END %]
+
+
+[%############################################################################%]
+[%# Block for Restricting Visibility                                         #%]
+[%############################################################################%]
+
+[% BLOCK section_restrict_visibility %]
+  [% RETURN UNLESS bug.groups.size %]
+
+  [% inallgroups = 1 %]
+  [% inagroup = 0 %]
+  [% emitted_description = 0 %]
+
+  [% FOREACH group = bug.groups %]
+    [% SET inallgroups = 0 IF NOT group.ingroup %]
+    [% SET inagroup = 1 IF group.ison %]
+
+    [% NEXT IF group.mandatory %]
+
+    [% IF NOT emitted_description %]
+      [% emitted_description = 1 %]
+      <table class="bz_group_visibility_section">
+        <tr>
+          <td class="field_label">
+            <label id="bz_restrict_group_visibility_label"><b>Restrict Group Visibility</b>:</label>
+          </td>
+          <td>
+            <div id="bz_restrict_group_visibility_help">
+              <b>Only users in all of the selected groups can view this [% terms.bug %]:</b>
+              <br>
+              <small>
+                (Unchecking all boxes makes this a more public [% terms.bug %].)
+              </small>
+            </div>
+    [% END %]
+
+    [% IF group.ingroup %]
+      <input type="hidden" name="defined_bit-[% group.bit %]" value="1">
+    [% END %]
+    <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 FILTER html_light %]</label>
+    <br>
+  [% END %]
+
+  [% IF emitted_description %]
+    [% IF NOT inallgroups %]
+      <b>Only members of a group can change the visibility of [% terms.abug %] for that group.</b>
+      <br>
+    [% END %]
+      </td>
+    </tr>
+    [% "</table>" IF NOT inagroup %]
+  [% END %]
+
+  [% IF inagroup %]
+    [% IF NOT emitted_description %]
+      [% emitted_description = 1 %]
+      <table class="bz_group_visibility_section">
+    [% END %]
+    <tr>
+      <td class="field_label">
+        <label id="bz_enable_role_visibility_label"><b>Enable Role Visibility</b>:</label>
+      </td>
+      <td>
+        <div id="bz_enable_role_visibility_help">
+          <b>Users in the roles selected below can always view this [% terms.bug %]:</b>
+          <br>
+          <small>
+            (The assignee
+            [% IF (Param('useqacontact')) %]
+               and QA contact
+            [% END %]
+            can always see [% terms.abug %], and this section does not take effect unless
+            the [% terms.bug %] is restricted to at least one group.)
+          </small>
+        </div>
+        <div>
+          <div>
+            [% user_can_edit_accessible = bug.check_can_change_field("reporter_accessible", 0, 1) %]
+            [% IF user_can_edit_accessible %]
+              <input type="hidden" name="defined_reporter_accessible" value="1">
+            [% END %]
+            <input type="checkbox" value="1"
+                   name="reporter_accessible" id="reporter_accessible"
+                   [% " checked" IF bug.reporter_accessible %]
+                   [% " disabled=\"disabled\"" UNLESS user_can_edit_accessible %]>
+            <label for="reporter_accessible">Reporter</label>
+          </div>
+          <div>
+            [% user_can_edit_accessible = bug.check_can_change_field("cclist_accessible", 0, 1) %]
+            [% IF user_can_edit_accessible %]
+              <input type="hidden" name="defined_cclist_accessible" value="1">
+            [% END %]
+            <input type="checkbox" value="1"
+                   name="cclist_accessible" id="cclist_accessible"
+                   [% " checked" IF bug.cclist_accessible %]
+                   [% " disabled=\"disabled\"" UNLESS user_can_edit_accessible %]>
+            <label for="cclist_accessible">CC List</label>
+          </div>
+        </div>
+      </td>
+    </tr>
+  </table>
+  [% END %]
+[% END %]
+
+[%############################################################################%]
+[%# Block for Dates                                                          #%]
+[%############################################################################%]
+
+[% BLOCK section_dates %]
+  <tr>
+    <td class="field_label">
+      <b>Reported</b>:
+    </td>
+    <td>
+     [% bug.creation_ts FILTER time %] by [% INCLUDE global/user.html.tmpl who = bug.reporter %]
+    </td>
+  </tr>
+  
+  <tr>
+    <td class="field_label">
+      <b> Modified</b>:
+    </td>
+    <td>
+      [% bug.delta_ts FILTER time FILTER replace(':\d\d$', '') FILTER replace(':\d\d ', ' ')%] 
+      (<a href="show_activity.cgi?id=[% bug.bug_id %]">[%# terms.Bug %]History</a>)
+    </td>
+  
+  </tr>
+[% END %]
+
+[%############################################################################%]
+[%# Block for CC LIST                                                        #%]
+[%############################################################################%]
+[% BLOCK section_cclist %]
+    <tr>
+      <td class="field_label">
+        <label for="newcc" accesskey="a"><b>CC List</b>:</label>
+      </td>
+      <td>
+        [% IF user.id %]
+          [% IF NOT bug.cc || NOT bug.cc.contains(user.login) %]
+            [% has_role = bug.user.isreporter
+                          || bug.assigned_to.id == user.id
+                          || (Param('useqacontact')
+                              && bug.qa_contact
+                              && bug.qa_contact.id == user.id) %]
+            <input type="checkbox" id="addselfcc" name="addselfcc"
+              [% " checked=\"checked\""
+                   IF user.settings.state_addselfcc.value == 'always'
+                      || (!has_role
+                          && user.settings.state_addselfcc.value == 'cc_unless_role') %]>
+            <label for="addselfcc">Add me to CC list</label>
+            <br> 
+          [% END %]
+        [% END %]
+        [% bug.cc.size || 0  FILTER html %] 
+        [% IF bug.cc.size == 1 %]
+          user
+        [% ELSE %]
+          users
+        [% END %]
+        [% IF user.id %]
+          [% IF bug.cc.contains( user.email ) %]
+            including you
+          [% END %]
+        [% END %]
+        <span id="cc_edit_area_showhide_container" class="bz_default_hidden">
+          (<a href="#" id="cc_edit_area_showhide">[% IF user.id %]edit[% ELSE %]show[% END %]</a>)
+        </span>
+        <div id="cc_edit_area">
+          <br>
+          [% IF user.id %]
+            <div>
+              <div><label for="cc"><b>Add</b></label></div>
+              [% INCLUDE global/userselect.html.tmpl
+                  id => "newcc"
+                  name => "newcc"
+                  value => ""
+                  size => 30
+                  multiple => 5
+                %]
+            </div>
+          [% END %]
+          [% IF bug.cc %]
+            <select id="cc" name="cc" multiple="multiple" size="5">
+              [% FOREACH c = bug.cc %]
+                <option value="[% c FILTER email FILTER html %]">
+                  [% c FILTER email FILTER html %]</option>
+              [% END %]
+            </select>
+            [% IF user.id %]
+              <br>
+              <input type="checkbox" id="removecc" name="removecc">
+              [%%]<label for="removecc">Remove selected CCs</label>
+              <br>
+            [% END %]
+          [% END %]
+        </div>
+        <script type="text/javascript">
+          hideEditableField( 'cc_edit_area_showhide_container', 
+                             'cc_edit_area', 
+                             'cc_edit_area_showhide', 
+                             '', 
+                             '');  
+        </script>
+      </td>
+    </tr>
+[% END %]
+
+[%############################################################################%]
+[%# Block for See Also                                                       #%]
+[%############################################################################%]
+[% BLOCK section_see_also %]
+  [% IF Param('use_see_also') || bug.see_also.size %]
+    <tr>
+      [% INCLUDE bug/field.html.tmpl 
+           field    = bug_fields.see_also
+           value    = bug.see_also
+           editable = bug.check_can_change_field('see_also', 0, 1)
+      %]
+    </tr>
+  [% END %]
+[% END %]
+
+[%############################################################################%]
+[%# Block for FLAGS                                                          #%]
+[%############################################################################%]
+
+[% BLOCK section_flags %]
+  [%# *** Flags *** %]
+  [% show_bug_flags = 0 %]
+  [% FOREACH type = bug.flag_types %]
+    [% IF (type.flags && type.flags.size > 0) || (user.id && type.is_active) %]
+      [% show_bug_flags = 1 %]
+      [% LAST %]
+    [% END %]
+  [% END %]
+  [% IF show_bug_flags %]
+    <tr>
+      <td class="field_label flags_label">
+        <label><b>Flags:</b></label>
+      </td>
+      <td></td>
+    </tr>
+    <tr>
+      <td colspan="2">
+        [% IF bug.flag_types.size > 0 %]
+          [% PROCESS "flag/list.html.tmpl" flag_no_header = 1
+                                           flag_types = bug.flag_types
+                                           any_flags_requesteeble = bug.any_flags_requesteeble %]
+        [% END %]
+      </td>
+    </tr>
+  [% END %]
+
+  <tr class="bottom_commit_container">
+    <td>&nbsp;</td>
+    <td>[% PROCESS commit_button id = "_gnome_form" %]</td>
+  </tr>
+[% END %]
+
+[%############################################################################%]
+[%# Block for Custom Fields                                                  #%]
+[%############################################################################%]
+
+[% BLOCK section_customfields %]
+[%# *** Custom Fields *** %]
+
+  [% FOREACH field = Bugzilla.active_custom_fields %]
+    <tr>
+      [% PROCESS bug/field.html.tmpl value=bug.${field.name}
+                                     editable = bug.check_can_change_field(field.name, 0, 1)
+                                     value_span = 2 %]
+    </tr>
+  [% END %]
+[% END %]
+
+[%############################################################################%]
+[%# Block for Section Spacer                                                 #%]
+[%############################################################################%]
+
+[% BLOCK section_spacer %]
+  <tr>
+    <td colspan="2" class="bz_section_spacer"></td>
+  </tr>
+[% END %]
+
+
+
+
+[%############################################################################%]
+[%# Block for dependencies                                                   #%]
+[%############################################################################%]
+
+[% BLOCK dependencies %]
+
+  <th class="field_label">
+    <label for="[% dep.fieldname %]"[% " accesskey=\"$accesskey\"" IF accesskey %]>
+    [% dep.title %]</label>:
+  </th>
+  <td>    
+    <span id="[% dep.fieldname %]_input_area">
+      [% IF bug.check_can_change_field(dep.fieldname, 0, 1) %]
+        <input name="[% dep.fieldname %]" id="[% dep.fieldname %]"
+               class="text_input"
+               value="[% bug.${dep.fieldname}.join(', ') %]">
+      [% END %]
+    </span>
+    
+    [% FOREACH depbug = bug.${dep.fieldname} %]
+      [% depbug FILTER bug_link(depbug, use_alias => 1) FILTER none %][% " " %]
+    [% END %]
+    [% IF bug.check_can_change_field(dep.fieldname, 0, 1) %]
+      <span id="[% dep.fieldname %]_edit_container" class="edit_me bz_default_hidden" >
+        (<a href="#" id="[% dep.fieldname %]_edit_action">edit</a>)
+      </span>
+      <script type="text/javascript">
+        hideEditableField('[% dep.fieldname %]_edit_container', 
+                          '[% dep.fieldname %]_input_area', 
+                          '[% dep.fieldname %]_edit_action', 
+                          '[% dep.fieldname %]', 
+                          "[% bug.${dep.fieldname}.join(', ') %]");
+      </script>
+    [% END %]
+  </td>
+  
+  [% accesskey = undef %]
+  
+[% END %]
+
+[%############################################################################%]
+[%# Block for Time Tracking Group                                            #%]
+[%############################################################################%]
+
+[% BLOCK section_timetracking %]
+  <table class="bz_time_tracking_table">
+    <tr>
+      <th>
+        <label for="estimated_time">Orig. Est.</label>
+      </th>
+      <th>
+        Current Est.
+      </th>
+      <th>
+        <label for="work_time">Hours Worked</label>
+      </th>
+      <th>
+        <label for="remaining_time">Hours Left</label>
+      </th>
+      <th>
+        %Complete
+      </th>
+      <th>
+        Gain
+      </th>
+      <th>
+        <label for="deadline">Deadline</label>
+      </th>
+    </tr>
+    <tr>
+      <td>
+        <input name="estimated_time" id="estimated_time"
+               value="[% PROCESS formattimeunit
+                                 time_unit=bug.estimated_time %]"
+               size="6" maxlength="6">
+      </td>
+      <td>
+        [% PROCESS formattimeunit
+                   time_unit=(bug.actual_time + bug.remaining_time) %]
+      </td>
+      <td>
+        [% PROCESS formattimeunit time_unit=bug.actual_time %] +
+        <input name="work_time" id="work_time"
+               value="0" size="3" maxlength="6"
+               onchange="adjustRemainingTime();">
+      </td>
+      <td>
+        <input name="remaining_time" id="remaining_time"
+               value="[% PROCESS formattimeunit
+                                 time_unit=bug.remaining_time %]"
+               size="6" maxlength="6" onchange="updateRemainingTime();">
+      </td>
+      <td>
+        [% PROCESS calculatepercentage act=bug.actual_time
+                                       rem=bug.remaining_time %]
+      </td>
+      <td>
+        [% PROCESS formattimeunit time_unit=bug.estimated_time - (bug.actual_time + bug.remaining_time) %]
+      </td>
+       <td>
+         <input name="deadline" id="deadline" value="[% bug.deadline %]"
+                size="10" maxlength="10"><br />
+         <small>(YYYY-MM-DD)</small>
+      </td>        
+    </tr>
+    <tr>
+      <td colspan="7" class="bz_summarize_time">
+        <a href="summarize_time.cgi?id=[% bug.bug_id %]&amp;do_depends=1">
+        Summarize time (including time for [% terms.bugs %]
+        blocking this [% terms.bug %])</a>
+      </td>
+    </tr>
+  </table> 
+[% END %]
+
+[%############################################################################%]
+[%# Block for SELECT fields                                                  #%]
+[%############################################################################%]
+
+[% BLOCK select %]
+  [% IF NOT no_td %]
+  <td>
+  [% END %]
+    [% IF bug.check_can_change_field(selname, 0, 1) AND bug.choices.${selname}.size > 1 %]
+      <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>
+    [% ELSE %]
+      [% bug.${selname} FILTER html %]
+    [% END %]
+  [% IF NOT no_td %]
+  </td>
+  [% END %]
+  [% no_td = 0 %]
+[% END %]
+
+[%############################################################################%]
+[%# Block for INPUT fields                                                   #%]
+[%############################################################################%]
+
+[% BLOCK input %]
+  [% IF no_td != 1 %]
+  <td[% " colspan=\"$colspan\"" IF colspan %]>
+  [% END %]
+    [% val = value ? value : bug.$inputname %]
+    [% IF bug.check_can_change_field(inputname, 0, 1) %]
+       <input id="[% inputname %]" name="[% inputname %]" class="text_input"
+              value="[% val FILTER html %]"[% " size=\"$size\"" IF size %]
+              [% " maxlength=\"$maxlength\"" IF maxlength %]
+              [% " spellcheck=\"$spellcheck\"" IF spellcheck %]>
+    [% ELSE %]
+      [% IF size && val.length > size %]
+        <span title="[% val FILTER html %]">
+          [% val FILTER truncate(size) FILTER html %]
+        </span>
+      [% ELSE %]
+        [% val FILTER html %]
+      [% END %]
+    [% END %]
+  [% IF no_td != 1 %]  
+  </td>
+  [% END %]
+  [% no_td = 0 %]
+  [% maxlength = 0 %]
+  [% colspan = 0 %]
+  [% size = 0 %]
+  [% value = undef %]
+  [% spellcheck = undef %]
+[% END %]
+[% BLOCK commit_button %]
+  [% IF user.id %]
+    <div class="knob-buttons">
+      <input type="submit" value="Commit" id="commit[% id FILTER css_class_quote %]">
+      [% IF bug.user.canmove %]
+        <input type="submit" name="action" id="action[% id FILTER css_class_quote %]" value="[% Param("move-button-text") %]">
+      [% END %]
+    </div>
+  [% END %]
+[% END %]

