[Xfce4-commits] [www/bugzilla.xfce.org] 01/01: More initial work for the Xfce skin and custom templates

noreply at xfce.org noreply at xfce.org
Wed Jun 7 21:53:00 CEST 2017


This is an automated email from the git hooks/post-receive script.

k   n   o   m   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository www/bugzilla.xfce.org.

commit dedc883d2de11dafc7bb16c3b24000564febed80
Author: Pasi Lallinaho <pasi at shimmerproject.org>
Date:   Wed Jun 7 22:51:57 2017 +0300

    More initial work for the Xfce skin and custom templates
---
 .../en/custom/attachment/list_DEFAULT.html.tmpl    |  166 ++-
 template/en/custom/bug/comments_DEFAULT.html.tmpl  |  239 +++-
 .../en/custom/bug/create/create_DEFAULT.html.tmpl  |  673 ++++++++++-
 template/en/custom/bug/edit_DEFAULT.html.tmpl      | 1253 +++++++++++++++++++-
 template/en/custom/bug/field_DEFAULT.html.tmpl     |  290 ++++-
 template/en/custom/bug/knob_DEFAULT.html.tmpl      |   85 +-
 template/en/custom/bug/knob_XFCE.html.tmpl         |    2 +-
 template/en/custom/bug/navigate_DEFAULT.html.tmpl  |   73 +-
 template/en/custom/bug/show_DEFAULT.html.tmpl      |   37 +-
 .../custom/global/choose-product_DEFAULT.html.tmpl |   66 +-
 .../custom/global/common-links_DEFAULT.html.tmpl   |  110 +-
 template/en/custom/global/footer_DEFAULT.html.tmpl |   28 +-
 .../custom/global/useful-links_DEFAULT.html.tmpl   |   73 +-
 template/en/custom/index.html.tmpl                 |    2 +
 template/en/custom/list/list_XFCE.html.tmpl        |   18 +-
 template/en/custom/list/table.html.tmpl            |  270 +----
 .../list/{table.html.tmpl => table.html.tmpl.OLD}  |    0
 .../{table.html.tmpl => table_DEFAULT.html.tmpl}   |    4 +-
 .../list/{table.html.tmpl => table_XFCE.html.tmpl} |   18 +-
 19 files changed, 3122 insertions(+), 285 deletions(-)

diff --git a/template/en/custom/attachment/list_DEFAULT.html.tmpl b/template/en/custom/attachment/list_DEFAULT.html.tmpl
deleted file mode 120000
index b32bb46..0000000
--- a/template/en/custom/attachment/list_DEFAULT.html.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-../../default/attachment/list.html.tmpl
\ No newline at end of file
diff --git a/template/en/custom/attachment/list_DEFAULT.html.tmpl b/template/en/custom/attachment/list_DEFAULT.html.tmpl
new file mode 100644
index 0000000..9676dd6
--- /dev/null
+++ b/template/en/custom/attachment/list_DEFAULT.html.tmpl
@@ -0,0 +1,165 @@
+[%# This Source Code Form is subject to the terms of the Mozilla Public
+  # License, v. 2.0. If a copy of the MPL was not distributed with this
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  #
+  # This Source Code Form is "Incompatible With Secondary Licenses", as
+  # defined by the Mozilla Public License, v. 2.0.
+  #%]
+
+[% RETURN UNLESS attachments.size || Param("maxattachmentsize") || Param("maxlocalattachment") %]
+
+<script type="text/javascript">
+<!--
+function toggle_display(link) {
+    var table = document.getElementById("attachment_table");
+    var view_all = document.getElementById("view_all");
+    var hide_obsolete_url_parameter = "&hide_obsolete=1";
+    // Store current height for scrolling later
+    var originalHeight = table.offsetHeight;
+    var rows = YAHOO.util.Dom.getElementsByClassName(
+        'bz_tr_obsolete', 'tr', table);
+
+    for (var i = 0; i < rows.length; i++) {
+        bz_toggleClass(rows[i], 'bz_default_hidden');
+    }
+
+    if (YAHOO.util.Dom.hasClass(rows[0], 'bz_default_hidden')) {
+        link.innerHTML = "Show Obsolete";
+        view_all.href = view_all.href + hide_obsolete_url_parameter 
+    }
+    else {
+        link.innerHTML = "Hide Obsolete";
+        view_all.href = view_all.href.replace(hide_obsolete_url_parameter,"");
+    }
+
+    var newHeight = table.offsetHeight;
+    // This scrolling makes the window appear to not move at all.
+    window.scrollBy(0, newHeight - originalHeight);
+
+    return false;
+}
+//-->
+</script>
+
+<br>
+<table id="attachment_table">
+  <tr id="a0">
+    <th colspan="[% show_attachment_flags ? 3 : 2 %]" class="left">
+      Attachments
+    </th>
+  </tr>
+
+  [% count = 0 %]
+  [% obsolete_attachments = 0 %]
+  [% user_cache = template_cache.users %]
+
+  [% FOREACH attachment = attachments %]
+    [% count = count + 1 %]
+    [% IF !attachment.isprivate || user.is_insider || attachment.attacher.id == user.id %]
+      [% IF attachment.isobsolete %]
+        [% obsolete_attachments = obsolete_attachments + 1 %]
+      [% END %]
+      <tr id="a[% count %]" class="[% "bz_contenttype_" _ attachment.contenttype
+                     FILTER css_class_quote %]
+                 [% " bz_patch" IF attachment.ispatch %]
+                 [% " bz_private" IF attachment.isprivate %]
+                 [% " bz_tr_obsolete bz_default_hidden" 
+                     IF attachment.isobsolete %]">
+        <td>
+          [% IF attachment.datasize %]
+            <a href="attachment.cgi?id=[% attachment.id %]"
+               title="View the content of the attachment">
+          [% END %]
+          <b>[% attachment.description FILTER html FILTER obsolete(attachment.isobsolete) %]</b>
+          [% "</a>" IF attachment.datasize %]
+
+          <span class="bz_attach_extra_info">
+            [% IF attachment.datasize %]
+              ([% attachment.datasize FILTER unitconvert %],
+              [% IF attachment.ispatch %]
+                patch)
+              [% ELSE %]
+                [%+ attachment.contenttype FILTER html %])
+              [% END %]
+            [% ELSE %]
+              (<em>deleted</em>)
+            [% END %]
+
+            <br>
+            <a href="#attach_[% attachment.id %]"
+               title="Go to the comment associated with the attachment">
+              [%- attachment.attached FILTER time("%Y-%m-%d %H:%M %Z") %]</a>,
+
+            [%# No need to recreate the exact same template if we already have it. %]
+            [% attacher_id = attachment.attacher.id %]
+            [% UNLESS user_cache.$attacher_id %]
+              [% user_cache.$attacher_id = BLOCK %]
+                [% INCLUDE global/user.html.tmpl who = attachment.attacher %]
+              [% END %]
+            [% END %]
+            [% user_cache.$attacher_id FILTER none %]
+          </span>
+        </td>
+
+        [% IF show_attachment_flags %]
+          <td class="bz_attach_flags">
+            [% IF attachment.flags.size == 0 %]
+              <i>no flags</i>
+            [% ELSE %]
+              [% FOREACH flag = attachment.flags %]
+                [% IF user.id %]
+                  <span title="[% flag.setter.identity FILTER html %]">[% flag.setter.nick FILTER html %]</span>:
+                [% ELSIF flag.setter.name %]
+                  <span title="[% flag.setter.name FILTER html %]">[% flag.setter.nick FILTER html %]</span>:
+                [% ELSE %]
+                  [% flag.setter.nick FILTER html %]:
+                [% END %]
+                [%+ flag.type.name FILTER html %][% flag.status %]
+                [%+ IF flag.status == "?" && flag.requestee %]
+                  [% IF user.id %]
+                    (<span title="[% flag.requestee.identity FILTER html %]">[% flag.requestee.nick FILTER html %]</span>)
+                  [% ELSIF flag.requestee.name %]
+                    (<span title="[% flag.requestee.name FILTER html %]">[% flag.requestee.nick FILTER html %]</span>)
+                  [% ELSE %]
+                    ([% flag.requestee.nick FILTER html %])
+                  [% END %]
+                [% END %]<br>
+              [% END %]
+            [% END %]
+          </td>
+        [% END %]
+
+        <td>
+          <a href="attachment.cgi?id=[% attachment.id %]&action=edit">Details</a>
+          [% IF attachment.ispatch && feature_enabled('patch_viewer') %]
+            | <a href="attachment.cgi?id=[% attachment.id %]&action=diff">Diff</a>
+          [% END %]
+          [% Hook.process("action") %]
+        </td>
+      </tr>
+    [% END %]
+  [% END %]
+
+  <tr class="bz_attach_footer">
+    <td colspan="[% show_attachment_flags ? 3 : 2 %]">
+      [% IF attachments.size %]
+        <span class="bz_attach_view_hide">
+          [% IF obsolete_attachments %]
+            <a href="#a0" onclick="return toggle_display(this);">Show
+              Obsolete</a> ([% obsolete_attachments %])
+          [% END %]
+          [% IF Param("allow_attachment_display") %]
+            <a id="view_all" href="attachment.cgi?bugid=
+                  [%- bugid %]&action=viewall
+                  [%- "&hide_obsolete=1" IF obsolete_attachments %]">View All</a>
+          [% END %]
+        </span>
+      [% END %]
+      [% IF Param("maxattachmentsize") || Param("maxlocalattachment") %]
+        <a href="attachment.cgi?bugid=[% bugid %]&action=enter">Add an attachment</a>
+        (proposed patch, testcase, etc.)
+      [% END %]
+    </td>
+  </tr>
+</table>
+<br>
diff --git a/template/en/custom/bug/comments_DEFAULT.html.tmpl b/template/en/custom/bug/comments_DEFAULT.html.tmpl
deleted file mode 120000
index be5d57e..0000000
--- a/template/en/custom/bug/comments_DEFAULT.html.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-../../default/bug/comments.html.tmpl
\ No newline at end of file
diff --git a/template/en/custom/bug/comments_DEFAULT.html.tmpl b/template/en/custom/bug/comments_DEFAULT.html.tmpl
new file mode 100644
index 0000000..931716f
--- /dev/null
+++ b/template/en/custom/bug/comments_DEFAULT.html.tmpl
@@ -0,0 +1,238 @@
+[%# This Source Code Form is subject to the terms of the Mozilla Public
+  # License, v. 2.0. If a copy of the MPL was not distributed with this
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  #
+  # This Source Code Form is "Incompatible With Secondary Licenses", as
+  # defined by the Mozilla Public License, v. 2.0.
+  #%]
+
+[% PROCESS bug/time.html.tmpl %]
+
+<script src="[% 'js/comments.js' FILTER mtime %]" type="text/javascript">
+</script>
+
+<script type="text/javascript">
+<!--
+  /* Adds the reply text to the 'comment' textarea */
+  function replyToComment(id, real_id, name) {
+      var prefix = "(In reply to " + name + " from 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);
+        replytext = prefix + wrapReplyText(text);
+      [% ELSIF user.settings.quote_replies.value == 'simple_reply' %]
+        replytext = prefix;
+      [% END %]
+
+      [% IF user.is_insider %]
+        if (document.getElementById('isprivate_' + real_id).checked) {
+            document.getElementById('newcommentprivacy').checked = 'checked';
+            updateCommentTagControl(document.getElementById('newcommentprivacy'), 'comment'); 
+        }
+      [% END %]
+
+      /* <textarea id="comment"> */
+      var textarea = document.getElementById('comment');
+      if (textarea.value != replytext) {
+          textarea.value += replytext;
+      }
+
+      textarea.focus();
+  } 
+//-->
+</script>
+
+[% DEFAULT mode = "show" %]
+[% user_cache = template_cache.users %]
+[% can_edit_comments = bug.check_can_change_field('longdesc', 0, 1) %]
+[% can_tag_comments = feature_enabled('jsonrpc') AND user.can_tag_comments %]
+
+<!-- This auto-sizes the comments and positions the collapse/expand links 
+     to the right. -->
+<table class="bz_comment_table">
+<tr>
+<td>
+
+[% PROCESS display_comments %]
+
+[% IF mode == "edit" && user.id
+      && user.settings.comment_box_position.value == "before_comments" %]
+  <div class="bz_add_comment">
+    <a href="#" 
+       onclick="return goto_add_comments();">
+       Add Comment</a>
+  </div>
+[% END %]
+
+[%# Note: this template is used in multiple places; if you use this hook,
+  # make sure you are aware of this fact.
+  #%]  
+[% Hook.process("aftercomments") %]
+
+</td>
+<td>
+  [% IF mode == "edit" %]
+    <ul class="bz_collapse_expand_comments">
+      <li><a href="#" onclick="toggle_all_comments('collapse');
+                               return false;">Collapse All Comments</a></li>
+      <li><a href="#" onclick="toggle_all_comments('expand');
+                               return false;">Expand All Comments</a></li>
+      [% IF Param('comment_taggers_group') %]
+        <li><div id="comment_tags_collapse_expand_container"></div></li>
+      [% END %]
+      [% IF user.settings.comment_box_position.value == "after_comments" && user.id %]
+        <li class="bz_add_comment"><a href="#" 
+            onclick="return goto_add_comments('bug_status_bottom');">
+            Add Comment</a></li>
+      [% END %]
+    </ul>
+  [% END %]
+</td>
+</tr></table>
+
+[%############################################################################%]
+[%# Block for individual comments                                            #%]
+[%############################################################################%]
+
+[% BLOCK display_comments %]
+  [% FOREACH comment = comments %]
+    [% NEXT IF comment.is_private AND NOT (user.is_insider || user.id == comment.author.id) %]
+    [% comment_text = comment.body_full %]
+    [% NEXT IF comment_text == '' AND (comment.work_time - 0) != 0 AND !user.is_timetracker %]
+
+    <div id="c[% comment.count %]" class="bz_comment[% " bz_private" IF comment.is_private %]
+                [% " bz_default_collapsed" IF comment.collapsed %]
+                [% " bz_comment_hilite" IF marks.${comment.count} %]
+                [% " bz_first_comment" IF comment.count == 0 %]">
+      [% IF comment.count == 0 %]
+        [% class_name = "bz_first_comment_head" %]
+        [% comment_label = "Description" %]
+      [% ELSE %]
+        [% class_name = "bz_comment_head" %]
+        [% comment_label = "Comment " _ comment.count %]
+      [% END %]
+
+      <div class="[% class_name FILTER html %]">
+        [% IF mode == "edit" %]
+          <span class="bz_comment_actions">
+            [% IF comment.collapsed %]
+              <span class="bz_collapsed_actions">
+            [% END %]
+            [% IF can_edit_comments %]
+              [% IF can_tag_comments %]
+                [<a href="#"
+                    onclick="YAHOO.bugzilla.commentTagging.toggle([% comment.id %], [% comment.count %]);return false">tag</a>]
+              [% END %]
+              [<a class="bz_reply_link" href="#add_comment"
+                [% IF user.settings.quote_replies.value != 'off' %]
+                  onclick="replyToComment('[% comment.count %]', '[% comment.id %]', '[% comment.author.name || comment.author.nick FILTER html FILTER js %]'); return false;"
+                [% END %]
+              >reply</a>]
+            [% END %]
+            [% IF comment.collapsed %]
+              </span>
+            [% END %]
+            <script type="text/javascript">
+              addCollapseLink([% comment.count %], [% comment.collapsed FILTER js %], 'Toggle comment display');
+            </script>
+          </span>
+        [% ELSIF comment.collapsed %]
+          <span class="bz_comment_actions">
+            <script type="text/javascript">
+              addCollapseLink([% comment.count %], [% comment.collapsed FILTER js %], 'Toggle comment display');
+            </script>
+          </span>
+        [% END %]
+
+        [% IF mode == "edit" && can_edit_comments && user.is_insider %]
+          <div class="bz_private_checkbox">
+            <input type="hidden" value="1"
+                   name="defined_isprivate_[% comment.id %]">
+            <input type="checkbox"
+                   name="isprivate_[% comment.id %]" value="1"
+                   id="isprivate_[% comment.id %]"
+                   onClick="updateCommentPrivacy(this, [% comment.count %])"
+                   [% " checked=\"checked\"" IF comment.is_private %]>
+            <label for="isprivate_[% comment.id %]">Private</label>
+          </div>
+        [% END %]
+
+        <span class="bz_comment_number">
+          <a 
+             href="show_bug.cgi?id=[% bug.bug_id %]#c[% comment.count %]">
+            [%- comment_label FILTER html %]</a>
+        </span>
+
+        <span class="bz_comment_user">
+          [%# No need to recreate the exact same template if we already have it. %]
+          [% commenter_id = comment.author.id %]
+          [% UNLESS user_cache.$commenter_id %]
+            [% user_cache.$commenter_id = BLOCK %]
+              [% INCLUDE global/user.html.tmpl who = comment.author %]
+            [% END %]
+          [% END %]
+          [% user_cache.$commenter_id FILTER none %]
+        </span>
+
+        <span class="bz_comment_user_images">
+          [% FOREACH group = comment.author.groups_with_icon %]
+            <img src="[% group.icon_url FILTER html %]"
+                 alt="[% group.name FILTER html %]"
+                 title="[% group.name FILTER html %] - [% group.description FILTER html %]">
+          [% END %]
+        </span>
+
+        <span class="bz_comment_time">
+          [%+ comment.creation_ts FILTER time %]
+        </span>
+
+        [% IF comment.collapsed %]
+          <span id="cr[% comment.count %]" class="bz_comment_collapse_reason"
+             title="[% comment.author.name || comment.author.login FILTER html %]
+                    [%~ %] [[% comment.creation_ts FILTER time %]]">
+            Comment hidden ([% comment.tags.join(', ') FILTER html %])
+          </span>
+        [% END %]
+      </div>
+
+      [% IF user.is_timetracker &&
+            (comment.work_time > 0 || comment.work_time < 0) %]
+         <br>
+         Additional hours worked: 
+         [% PROCESS formattimeunit time_unit=comment.work_time %]
+      [% END %]
+
+      [% IF user.id && Param('comment_taggers_group') %]
+        <div id="comment_tag_[% comment.count FILTER html %]"
+             class="bz_comment_tags">
+          <span id="ct_[% comment.count %]"
+                class="[% 'bz_default_hidden' UNLESS comment.tags.size %]">
+            [% IF comment.tags.size %]
+              <script>
+                YAHOO.bugzilla.commentTagging.showTags([% comment.id FILTER none %],
+                  [% comment.count FILTER none %], [
+                [% FOREACH tag = comment.tags %]
+                  [%~%]'[% tag FILTER js %]'[% "," UNLESS loop.last %]
+                [% END %]
+                [%~%]]);
+              </script>
+            [% END %]
+          </span>
+        </div>
+      [% END %]
+
+[%# Don't indent the <pre> block, since then the spaces are displayed in the
+  # generated HTML
+  #%]
+<pre class="bz_comment_text[% " collapsed" IF comment.collapsed %]"
+  [% IF mode == "edit" || comment.collapsed %]
+    id="comment_text_[% comment.count FILTER none %]"
+  [% END %]>
+  [%- comment_text FILTER quoteUrls(bug, comment) -%]
+</pre>
+    [% Hook.process('a_comment-end', 'bug/comments.html.tmpl') %]
+    </div>
+  [% END %]
+[% END %]
diff --git a/template/en/custom/bug/create/create_DEFAULT.html.tmpl b/template/en/custom/bug/create/create_DEFAULT.html.tmpl
deleted file mode 120000
index 97b771a..0000000
--- a/template/en/custom/bug/create/create_DEFAULT.html.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-../../../default/bug/create/create.html.tmpl
\ No newline at end of file
diff --git a/template/en/custom/bug/create/create_DEFAULT.html.tmpl b/template/en/custom/bug/create/create_DEFAULT.html.tmpl
new file mode 100644
index 0000000..61faf1c
--- /dev/null
+++ b/template/en/custom/bug/create/create_DEFAULT.html.tmpl
@@ -0,0 +1,672 @@
+[%# This Source Code Form is subject to the terms of the Mozilla Public
+  # License, v. 2.0. If a copy of the MPL was not distributed with this
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  #
+  # This Source Code Form is "Incompatible With Secondary Licenses", as
+  # defined by the Mozilla Public License, v. 2.0.
+  #%]
+
+[% title = BLOCK %]Enter [% terms.Bug %]: [% product.name FILTER html %][% END %]
+[% use_qa_contact = Param("useqacontact") %]
+
+[% PROCESS global/header.html.tmpl
+  title = title
+  generate_api_token = 1
+  yui = [ 'autocomplete', 'calendar', 'datatable', 'button' ]
+  style_urls = ['skins/standard/bug.css']
+  javascript_urls = [ "js/attachment.js", "js/util.js",
+                      "js/field.js", "js/TUI.js", "js/bug.js" ]
+  onload = "set_assign_to($use_qa_contact); hideElementById('attachment_true');
+            showElementById('attachment_false'); showElementById('btn_no_attachment');"
+%]
+
+<script type="text/javascript">
+<!--
+
+var initialowners = new Array([% product.components.size %]);
+var last_initialowner;
+var initialccs = new Array([% product.components.size %]);
+var components = new Array([% product.components.size %]);
+var comp_desc = new Array([% product.components.size %]);
+var flags = new Array([% product.components.size %]);
+[% IF Param("useqacontact") %]
+    var initialqacontacts = new Array([% product.components.size %]);
+    var last_initialqacontact;
+[% END %]
+[% count = 0 %]
+[%- FOREACH c = product.components %]
+    [% NEXT IF NOT c.is_active %]
+    components[[% count %]] = "[% c.name FILTER js %]";
+    comp_desc[[% count %]] = "[% c.description FILTER html_light FILTER js %]";
+    initialowners[[% count %]] = "[% c.default_assignee.login FILTER js %]";
+    [% flag_list = [] %]
+    [% FOREACH f = c.flag_types.bug %]
+      [% NEXT UNLESS f.is_active %]
+      [% flag_list.push(f.id) %]
+    [% END %]
+    [% FOREACH f = c.flag_types.attachment %]
+      [% NEXT UNLESS f.is_active %]
+      [% flag_list.push(f.id) %]
+    [% END %]
+    flags[[% count %]] = [[% flag_list.join(",") FILTER js %]];
+    [% IF Param("useqacontact") %]
+        initialqacontacts[[% count %]] = "[% c.default_qa_contact.login FILTER js %]";
+    [% END %]
+
+    [% SET initial_cc_list = [] %]
+    [% FOREACH cc_user = c.initial_cc %]
+      [% initial_cc_list.push(cc_user.login) %]
+    [% END %]
+    initialccs[[% count %]] = "[% initial_cc_list.join(', ') FILTER js %]";
+
+    [% count = count + 1 %]
+[%- END %]
+
+var status_comment_required = new Array();
+[% FOREACH status = bug_status %]
+  status_comment_required['[% status.name FILTER js %]'] = 
+    [% status.comment_required_on_change_from() ? 'true' : 'false' %]
+[% END %]
+
+TUI_alternates['expert_fields'] = 'Show Advanced Fields';
+// Hide the Advanced Fields by default, unless the user has a cookie
+// that specifies otherwise.
+TUI_hide_default('expert_fields');
+// Also hide the "Paste text as attachment" textarea by default.
+TUI_hide_default('attachment_text_field');
+-->
+</script>
+
+<form name="Create" id="Create" method="post" action="post_bug.cgi"
+      class="enter_bug_form" enctype="multipart/form-data"
+      onsubmit="return validateEnterBug(this)">
+<input type="hidden" name="product" value="[% product.name FILTER html %]">
+<input type="hidden" name="token" value="[% token FILTER html %]">
+
+<table>
+<tbody>
+  <tr>
+    <td colspan="4">
+    [%# Migration note: The following file corresponds to the old Param
+      # 'entryheaderhtml'
+      #%]
+    [% PROCESS 'bug/create/user-message.html.tmpl' %]
+    </td>
+  </tr>
+
+  <tr>
+    <td colspan="2">
+      <a id="expert_fields_controller" class="controller bz_default_hidden"
+         href="javascript:TUI_toggle_class('expert_fields')">Hide
+        Advanced Fields</a>
+      [%# Show the link if the browser supports JS %]
+      <script type="text/javascript">
+        YAHOO.util.Dom.removeClass('expert_fields_controller', 
+                                   'bz_default_hidden');
+      </script>
+    </td>
+    <td colspan="2">
+      (<span class="required_star">*</span> =
+      <span class="required_explanation">Required Field</span>)
+   </td>
+  </tr>
+
+  <tr>
+    [% INCLUDE bug/field.html.tmpl
+      bug = default, field = bug_fields.product, editable = 0,
+      value = product.name %]
+    [% INCLUDE bug/field.html.tmpl
+      bug = default, field = bug_fields.reporter, editable = 0,
+      value = user.login %]
+  </tr>
+
+  [%# We can't use the select block in these two cases for various reasons. %]
+  <tr>
+    [% component_desc_url = BLOCK -%]
+      describecomponents.cgi?product=[% product.name FILTER uri %]
+    [% END %]
+    [% INCLUDE "bug/field-label.html.tmpl"
+      field = bug_fields.component editable = 1
+      desc_url = component_desc_url
+    %]      
+    <td id="field_container_component">
+      <select name="component" id="component" onchange="set_assign_to([% Param("useqacontact") %]);"
+              size="7" aria-required="true" class="required">
+        [%# Build the lists of assignees and QA contacts if "usemenuforusers" is enabled. %]
+        [% IF Param("usemenuforusers") %]
+          [% assignees_list = user.get_userlist.clone %]
+          [% qa_contacts_list = user.get_userlist.clone %]
+        [% END %]
+
+        [%- FOREACH c = product.components %]
+          [% NEXT IF NOT c.is_active %]
+          <option value="[% c.name FILTER html %]"
+                  id="v[% c.id FILTER html %]_component"
+            [% IF c.name.lower == default.component_.lower %]
+              [%# This is for bug/field.html.tmpl, for visibility-related
+                # controls. %]
+              [% default.component_id = c.id %]
+              selected="selected"
+            [% END %]>
+            [% c.name FILTER html -%]
+          </option>
+          [% IF Param("usemenuforusers") %]
+            [% INCLUDE build_userlist default_user = c.default_assignee,
+                                      userlist = assignees_list %]
+            [% INCLUDE build_userlist default_user = c.default_qa_contact,
+                                      userlist = qa_contacts_list %]
+          [% END %]
+        [%- END %]
+      </select>
+
+      <script type="text/javascript">
+       <!--
+         [%+ INCLUDE "bug/field-events.js.tmpl" 
+                     field = bug_fields.component, product = product %]
+       //-->
+       </script>
+    </td>
+
+    <td colspan="2" id="comp_desc_container">
+      [%# Enclose the fieldset in a nested table so that its width changes based
+        # on the length on the component description. %]
+      <table>
+        <tr>
+          <td>
+            <fieldset>
+              <legend>Component Description</legend>
+              <div id="comp_desc" class="comment">Select a component to read its description.</div>
+            </fieldset>
+          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+
+  <tr>
+    [% INCLUDE "bug/field-label.html.tmpl"
+      field = bug_fields.version editable = 1 rowspan = 4
+    %]
+    <td rowspan="4">
+      <select name="version" id="version" size="5" aria-required="true"
+              class="required">
+        [%- FOREACH v = version %]
+          [% NEXT IF NOT v.is_active %]
+          <option value="[% v.name FILTER html %]"
+            [% ' selected="selected"' IF v.name == default.version %]>[% v.name FILTER html -%]
+          </option>
+        [%- END %]
+      </select>
+    </td>
+
+    [% INCLUDE bug/field.html.tmpl
+      bug = default, field = bug_fields.bug_severity, editable = 1, 
+      value = default.bug_severity %]
+  </tr>
+
+  <tr class="expert_fields">
+    [% IF Param('letsubmitterchoosepriority') %]
+      [% INCLUDE bug/field.html.tmpl
+        bug = default, field = bug_fields.priority, editable = 1, 
+        value = default.priority %]
+    [% ELSE %]
+      <td colspan="2"> </td>
+    [% END %]
+  </tr>
+
+  <tr>
+    [% INCLUDE bug/field.html.tmpl
+      bug = default, field = bug_fields.rep_platform, editable = 1,
+      value = default.rep_platform %]
+  </tr>
+
+  <tr>
+    [% INCLUDE bug/field.html.tmpl 
+       bug = default, field = bug_fields.op_sys, editable = 1, 
+       value = default.op_sys %]
+  </tr>
+  [% IF (!Param('defaultplatform') || !Param('defaultopsys')) && !cloned_bug_id %]
+    <tr>
+      <td colspan="2" class="expert_fields"> </td>
+      <td> </td>
+      <td id="os_guess_note" class="comment">
+        <div>We've made a guess at your
+        [% IF Param('defaultplatform') %]
+          operating system. Please check it
+        [% ELSIF Param('defaultopsys') %]
+          platform. Please check it
+        [% ELSE %]
+          operating system and platform. Please check them
+        [% END %]
+        and make any corrections if necessary.</div>
+      </td>
+    </tr>
+  [% END %]
+</tbody>
+
+<tbody class="expert_fields">
+  <tr>
+    [% IF Param('usetargetmilestone') && Param('letsubmitterchoosemilestone') %]
+      [% INCLUDE select field = bug_fields.target_milestone %]
+    [% ELSE %]
+      <td colspan="2"> </td>
+    [% END %]
+
+    <td colspan="2"> </td>
+  </tr>
+</tbody>
+
+<tbody class="expert_fields">
+  <tr>
+    <td colspan="4"> </td>
+  </tr>
+
+  <tr>
+    [% INCLUDE bug/field.html.tmpl
+      bug = default, field = bug_fields.bug_status,
+      editable = (bug_status.size > 1), value = default.bug_status
+      override_legal_values = bug_status %]
+
+    <td> </td>
+    [%# Calculate the number of rows we can use for flags %]
+    [% num_rows = 6 + (Param("useqacontact") ? 1 : 0) +
+                      (user.is_timetracker ? 3 : 0)
+    %]
+
+    <td rowspan="[% num_rows FILTER html %]">
+      [% IF product.flag_types.bug.size > 0 %]
+        [% display_flag_headers = 0 %]
+        [% any_flags_requesteeble = 0 %]
+
+        [% FOREACH flag_type = product.flag_types.bug %]
+          [% NEXT UNLESS flag_type.is_active %]
+          [% display_flag_headers = 1 %]
+          [% SET any_flags_requesteeble = 1 IF flag_type.is_requestable && flag_type.is_requesteeble %]
+        [% END %]
+
+        [% IF display_flag_headers %]
+          [% PROCESS "flag/list.html.tmpl" flag_types = product.flag_types.bug
+                                           any_flags_requesteeble = any_flags_requesteeble
+                                           flag_table_id = "bug_flags"
+          %]
+        [% END %]
+      [% END %]
+    </td>
+  </tr>
+
+  <tr>
+    [% INCLUDE "bug/field-label.html.tmpl"
+      field = bug_fields.assigned_to editable = 1
+    %]
+    <td colspan="2">
+      [% INCLUDE global/userselect.html.tmpl
+         id => "assigned_to"
+         name => "assigned_to"
+         value => assigned_to
+         disabled => assigned_to_disabled
+         size => 30
+         emptyok => 1
+         custom_userlist => assignees_list
+       %]
+      <noscript>(Leave blank to assign to component's default assignee)</noscript>
+    </td>
+  </tr>
+  
+[% IF Param("useqacontact") %]
+    <tr>
+      [% INCLUDE "bug/field-label.html.tmpl"
+        field = bug_fields.qa_contact editable = 1
+      %]
+      <td colspan="2">
+      [% INCLUDE global/userselect.html.tmpl
+         id => "qa_contact"
+         name => "qa_contact"
+         value => qa_contact
+         disabled => qa_contact_disabled
+         size => 30
+         emptyok => 1
+         custom_userlist => qa_contacts_list
+       %]
+        <noscript>(Leave blank to assign to default qa contact)</noscript>
+      </td>
+    </tr>
+[% END %]
+
+  <tr>
+    [% INCLUDE "bug/field-label.html.tmpl"
+      field = bug_fields.cc editable = 1 
+    %]
+    <td colspan="2">
+      [% INCLUDE global/userselect.html.tmpl
+         id => "cc"
+         name => "cc"
+         value => cc
+         disabled => cc_disabled
+         size => 30
+         multiple => 5
+       %]
+    </td>
+  </tr>
+
+  <tr>
+    <th>Default [% field_descs.cc FILTER html %]:</th>
+    <td colspan="2">
+      <div id="initial_cc">
+      </div>
+   </td>
+  </tr>
+  
+  <tr>
+    <td colspan="3"> </td>
+  </tr>
+
+[% IF user.is_timetracker %]
+  <tr>
+    [% INCLUDE "bug/field-label.html.tmpl"
+      field = bug_fields.estimated_time editable = 1
+    %]
+    <td colspan="2">
+      <input name="estimated_time" size="6" maxlength="6" value="[% estimated_time FILTER html %]">
+    </td>
+  </tr>
+  <tr>
+    [% INCLUDE bug/field.html.tmpl
+      bug = default, field = bug_fields.deadline, value = deadline,
+      editable = 1, value_span = 2 %] 
+  </tr>
+
+  <tr>
+    <td colspan="3"> </td>
+  </tr>
+[% END %]
+
+  <tr>
+    [% INCLUDE "bug/field-label.html.tmpl"
+      field = bug_fields.alias editable = 1
+    %]
+    <td colspan="2">
+      <input name="alias" size="20" value="[% alias FILTER html %]">
+    </td>
+  </tr>
+
+  <tr>
+    [% INCLUDE "bug/field-label.html.tmpl"
+      field = bug_fields.bug_file_loc editable = 1
+    %]
+    <td colspan="3" class="field_value">
+      <input name="bug_file_loc" id="bug_file_loc" class="text_input"
+             size="40" value="[% bug_file_loc FILTER html %]">
+    </td>
+  </tr>
+</tbody>
+
+<tbody>
+  [% USE Bugzilla %]
+
+  [% FOREACH field = Bugzilla.active_custom_fields %]
+    [% NEXT UNLESS field.enter_bug %]
+    [% SET value = ${field.name}.defined ? ${field.name} : "" %]
+    <tr [% 'class="expert_fields"' IF !field.is_mandatory %]>
+      [% INCLUDE bug/field.html.tmpl 
+        bug = default, field = field, value = value, editable = 1, 
+        value_span = 3 %]
+    </tr>
+  [% END %]
+</tbody>
+
+<tbody>
+
+  <tr>
+    [% INCLUDE "bug/field-label.html.tmpl"
+      field = bug_fields.short_desc editable = 1
+    %]
+    <td colspan="3" class="field_value">
+      <input name="short_desc" size="70" value="[% short_desc FILTER html %]"
+             maxlength="255" spellcheck="true" aria-required="true"
+             class="required text_input" id="short_desc">
+    </td>
+  </tr>
+
+  [% IF feature_enabled('jsonrpc') AND !cloned_bug_id
+        AND user.settings.possible_duplicates.value == 'on' %]
+    <tr id="possible_duplicates_container" class="bz_default_hidden">
+      <th>Possible<br>Duplicates:</th>
+      <td colspan="3">
+        <div id="possible_duplicates"></div>
+        <script type="text/javascript">
+          var dt_columns = [ 
+              { key: "id", label: "[% field_descs.bug_id FILTER js %]",
+                formatter: YAHOO.bugzilla.dupTable.formatBugLink },
+              { key: "summary", 
+                label: "[% field_descs.short_desc FILTER js %]",
+                formatter: "text" },
+              { key: "status",
+                label: "[% field_descs.bug_status FILTER js %]",
+                formatter: YAHOO.bugzilla.dupTable.formatStatus },
+              { key: "update_token", label: '',
+                formatter: YAHOO.bugzilla.dupTable.formatCcButton }
+          ];
+          YAHOO.bugzilla.dupTable.addCcMessage = "Add Me to the CC List";
+          YAHOO.bugzilla.dupTable.init({
+            container: 'possible_duplicates',
+            columns: dt_columns,
+            product_name: '[% product.name FILTER js %]',
+            summary_field: 'short_desc',
+            options: {
+              MSG_LOADING: 'Searching for possible duplicates...',
+              MSG_EMPTY:   'No possible duplicates found.',
+              SUMMARY:     'Possible Duplicates'
+            }
+          });
+        </script>
+      </td>
+    </tr>
+  [% END %]
+
+  <tr>
+    <th>Description:</th>
+    <td colspan="3">
+
+      [% defaultcontent = BLOCK %]
+        [% IF cloned_bug_id %]
++++ This [% terms.bug %] was initially created as a clone of [% terms.Bug %] #[% cloned_bug_id %] +++
+
+
+        [% END %]
+        [%-# We are within a BLOCK. The comment will be correctly HTML-escaped
+          # by global/textarea.html.tmpl. So we must not escape the comment here. %]
+        [% comment FILTER none %]
+      [%- END %]
+      [% INCLUDE bug/comment.html.tmpl
+         minrows        = 10
+         maxrows        = 25
+         cols           = constants.COMMENT_COLS
+         defaultcontent = defaultcontent
+       %]
+      <br>
+    </td>
+  </tr>
+
+  [% IF user.is_insider %]
+    <tr class="expert_fields">
+      <th> </th>
+      <td colspan="3">
+          
+        <input type="checkbox" id="comment_is_private" name="comment_is_private"
+          [% ' checked="checked"' IF comment_is_private %]
+               onClick="updateCommentTagControl(this, 'comment')">
+        <label for="comment_is_private">
+          Make description and any new attachment private (visible only to members 
+          of the <strong>[% Param('insidergroup') FILTER html %]</strong> group)
+        </label>
+      </td>
+    </tr>
+    <script>
+      updateCommentTagControl(document.getElementById('comment_is_private'), 'comment');
+    </script>
+  [% END %]
+
+  [% IF Param("maxattachmentsize") || Param("maxlocalattachment") %]
+  <tr>
+    <th>Attachment:</th>
+    <td colspan="3">
+      <div id="attachment_false" class="bz_default_hidden">
+        <input type="button" value="Add an attachment" onClick="handleWantsAttachment(true)">
+      </div>
+
+      <div id="attachment_true">
+        <input type="button" id="btn_no_attachment" value="Don't add an attachment"
+               class="bz_default_hidden"  onClick="handleWantsAttachment(false)">
+        <fieldset>
+          <legend>Add an attachment</legend>
+          <table class="attachment_entry">
+            [% PROCESS attachment/createformcontents.html.tmpl
+                       flag_types = product.flag_types.attachment
+                       any_flags_requesteeble = 1
+                       flag_table_id ="attachment_flags" %]
+          </table>
+        </fieldset>
+      </div>
+    </td>
+  </tr>
+  [% END %]
+</tbody>
+
+<tbody class="expert_fields">
+  [% IF use_keywords %]
+    <tr>
+      [% INCLUDE bug/field.html.tmpl
+        bug = default, field = bug_fields.keywords, editable = 1,
+        value = keywords, possible_values = all_keywords,
+        desc_url = "describekeywords.cgi", value_span = 3
+      %]
+    </tr>
+  [% END %]
+  
+  [% IF user.in_group('editbugs', product.id) %]
+    <tr>
+      [% INCLUDE "bug/field-label.html.tmpl"
+        field = bug_fields.dependson editable = 1
+      %]
+      <td colspan="3">
+        <input name="dependson" accesskey="d" value="[% dependson FILTER html %]">
+      </td>
+    </tr>
+    <tr>
+      [% INCLUDE "bug/field-label.html.tmpl"
+        field = bug_fields.blocked editable = 1
+      %]
+      <td colspan="3">
+        <input name="blocked" accesskey="b" value="[% blocked FILTER html %]">
+      </td>
+    </tr>
+  [% END %]
+
+  [% IF Param('use_see_also') %]
+    <tr>
+      [% INCLUDE bug/field.html.tmpl
+         bug            = default
+         field          = bug_fields.see_also
+         editable       = 1
+         value          = see_also
+      %]
+    </tr>
+  [% END %]
+</tbody>
+
+<tbody class="expert_fields">
+  [% IF product.groups_available.size %]
+  <tr>
+    <th> </th>
+    <td colspan="3">
+      <br>
+        <strong>
+          Only users in [%+ IF Param('or_groups') %]at least one[% ELSE %]all[% END %] of the selected groups can view this 
+          [%+ terms.bug %]:
+        </strong>
+      <br>
+      <span class="bz_info">
+        (Leave all boxes unchecked to make this a public [% terms.bug %].)
+      </span>
+      <br>
+      <br>
+
+      <!-- Checkboxes -->
+      <input type="hidden" name="defined_groups" value="1">
+      [% FOREACH group = product.groups_available %]
+        <input type="checkbox" id="group_[% group.id FILTER html %]"
+               name="groups" value="[% group.name FILTER html %]"
+               [% ' checked="checked"' IF default.groups.contains(group.name)
+                                          OR group.is_default %]>
+        <label for="group_[% group.id FILTER html %]">
+          [%- group.description FILTER html_light %]</label><br>
+      [% END %]
+    </td>
+  </tr>
+  [% END %]
+</tbody>
+
+<tbody>
+  [%# Form controls for entering additional data about the bug being created. %]
+  [% Hook.process("form") %]
+
+  <tr>
+    <th> </th>
+    <td colspan="3">
+      <input type="submit" id="commit" value="Submit [% terms.Bug %]">
+          
+      <input type="submit" name="maketemplate" id="maketemplate"
+             value="Remember values as bookmarkable template"
+             onclick="bz_no_validate_enter_bug=true" class="expert_fields">
+    </td>
+  </tr>
+</tbody>
+  </table>
+  <input type="hidden" name="form_name" value="enter_bug">
+</form>
+
+[%# Links or content with more information about the bug being created. %]
+[% Hook.process("end") %]
+
+[% PROCESS global/footer.html.tmpl %]
+
+[%############################################################################%]
+[%# Block for SELECT fields                                                  #%]
+[%############################################################################%]
+
+[% BLOCK select %]
+
+  [% INCLUDE "bug/field-label.html.tmpl"
+    field = field editable = 1
+  %]
+  <td>
+    <select name="[% field.name FILTER html %]" 
+            id="[% field.name FILTER html %]">
+    [%- FOREACH x = ${field.name} %]
+      [% NEXT IF NOT x.is_active %]
+      <option value="[% x.name FILTER html %]"
+        [% " selected=\"selected\"" IF x.name == default.${field.name} %]>
+        [% display_value(field.name, x.name) FILTER html %]
+      </option>
+    [% END %]
+    </select>
+  </td>
+[% END %]
+
+[% BLOCK build_userlist %]
+  [% user_found = 0 %]
+  [% default_login = default_user.login %]
+  [% RETURN UNLESS default_login %]
+
+  [% FOREACH user = userlist %]
+    [% IF user.login == default_login %]
+      [% user_found = 1 %]
+      [% LAST %]
+    [% END %]
+  [% END %]
+
+  [% userlist.push({login    => default_login,
+                    identity => default_user.identity,
+                    visible  => 1})
+     UNLESS user_found %]
+[% END %]
diff --git a/template/en/custom/bug/edit_DEFAULT.html.tmpl b/template/en/custom/bug/edit_DEFAULT.html.tmpl
deleted file mode 120000
index 120cff3..0000000
--- a/template/en/custom/bug/edit_DEFAULT.html.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-../../default/bug/edit.html.tmpl
\ No newline at end of file
diff --git a/template/en/custom/bug/edit_DEFAULT.html.tmpl b/template/en/custom/bug/edit_DEFAULT.html.tmpl
new file mode 100644
index 0000000..b8abe6b
--- /dev/null
+++ b/template/en/custom/bug/edit_DEFAULT.html.tmpl
@@ -0,0 +1,1252 @@
+[%# This Source Code Form is subject to the terms of the Mozilla Public
+  # License, v. 2.0. If a copy of the MPL was not distributed with this
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  #
+  # This Source Code Form is "Incompatible With Secondary Licenses", as
+  # defined by the Mozilla Public License, v. 2.0.
+  #%]
+
+[% PROCESS bug/time.html.tmpl %]
+
+[% IF Param('comment_taggers_group') %]
+  [% IF user.can_tag_comments %]
+    <div id="bz_ctag_div" class="bz_default_hidden">
+      <a href="javascript:void(0)" onclick="YAHOO.bugzilla.commentTagging.hideInput()">x</a>
+      <div>
+        <input id="bz_ctag_add" size="10" placeholder="add tag"
+              maxlength="[% constants.MAX_COMMENT_TAG_LENGTH FILTER html %]">
+        <span id="bz_ctag_autocomp"></span>
+      </div>
+       
+    </div>
+    <div id="bz_ctag_error" class="bz_default_hidden">
+      <a href="javascript:void(0)" onclick="YAHOO.bugzilla.commentTagging.hideError()">x</a>
+      <span id="bz_ctag_error_msg"></span>
+    </div>
+  [% END %]
+  [% IF user.id %]
+    <script type="text/javascript">
+      YAHOO.bugzilla.commentTagging.init([% user.can_tag_comments ? 'true' : 'false' %]);
+      YAHOO.bugzilla.commentTagging.min_len = [% constants.MIN_COMMENT_TAG_LENGTH FILTER js %];
+      YAHOO.bugzilla.commentTagging.max_len = [% constants.MAX_COMMENT_TAG_LENGTH FILTER js %];
+      YAHOO.bugzilla.commentTagging.label = 'Comment Tags:';
+      YAHOO.bugzilla.commentTagging.min_len_error =
+        'Comment tags must be at least
+        [%~ " " _ constants.MIN_COMMENT_TAG_LENGTH FILTER js %] characters.';
+      YAHOO.bugzilla.commentTagging.max_len_error =
+        'Comment tags cannot be longer than
+        [%~ " " _ constants.MAX_COMMENT_TAG_LENGTH FILTER js %] characters.';
+    </script>
+  [% END %]
+[% END %]
+
+<script type="text/javascript">
+<!--
+[% IF user.is_timetracker %]
+  var bz_remaining_time = [% bug.remaining_time %];
+[% END %]
+
+[% IF user.id %]
+  /* Index all classifications so we can keep track of the classification
+   * for the selected product, which could control field visibility.
+   */
+  var all_classifications = new Array([% bug.choices.product.size %]);
+  [%- FOREACH product = bug.choices.product %]
+      all_classifications['[% product.name FILTER js %]'] = '
+          [%- product.classification.name FILTER js %]';
+  [%- END %]
+[% END %]
+//-->
+</script>
+
+<form name="changeform" id="changeform" method="post" action="process_bug.cgi">
+
+  <input type="hidden" name="delta_ts" value="[% bug.delta_ts %]">
+  <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 %]
+  <table class="edit_form">
+    <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_aliases %]
+
+          [% PROCESS section_spacer %]
+
+          [% PROCESS section_details1 %]
+          
+          [% PROCESS section_spacer %]
+          
+          [%# *** severity, priority, version, milestone, and deadline *** %]
+          [% PROCESS section_details2 %]
+          
+          [%# *** assigned to and qa contact *** %]
+          [% PROCESS section_people %]
+          
+          [% PROCESS section_spacer %]
+          
+          [% PROCESS section_url_keyword_whiteboard %]
+          
+          [% PROCESS section_spacer %]
+
+          [%# *** Dependencies and duplicates *** %]
+          [% PROCESS section_duplicates %]
+
+          [% PROCESS section_dependson_blocks %]
+          
+        </table>
+      </td>
+      <td>
+        <div class="bz_column_spacer"> </div>
+      </td>
+      [%# 2nd Column %]
+      <td id="bz_show_bug_column_2" class="bz_show_bug_column">
+        <table>
+        [%# *** Reported and modified dates *** %]
+         [% PROCESS section_dates %]
+
+         [% PROCESS section_cclist %]
+
+         [% PROCESS section_bug_ignored %]
+
+         [% PROCESS section_spacer %]
+
+         [% PROCESS section_see_also %] 
+
+         [% PROCESS section_customfields %]
+
+         [% PROCESS section_spacer %]
+
+         [% Hook.process("after_custom_fields") %]
+
+         [% PROCESS section_flags %]
+
+        </table>
+      </td>
+    </tr>
+    <tr>
+      <td colspan="3">
+          <hr id="bz_top_half_spacer">
+      </td>
+    </tr>
+  </table>
+
+  <table id="bz_big_form_parts">
+  <tr>
+  <td>
+    [% IF user.is_timetracker %]
+      [% 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
+    %]
+
+    [% IF user.settings.comment_box_position.value == 'before_comments' %]
+      [% PROCESS comment_box %]
+    [% END %]
+  </td>
+  <td>
+    [% PROCESS section_restrict_visibility %]
+  </td>
+  </tr></table>
+
+  [%# *** Additional Comments *** %]
+  <div id="comments">
+    [% PROCESS bug/comments.html.tmpl
+      comments = bug.comments
+      mode = user.id ? "edit" : "show"
+    %]
+  </div>
+
+  [% IF user.settings.comment_box_position.value == 'after_comments' %]
+    <hr>
+    [% PROCESS comment_box %]
+  [% END %]        
+
+</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_short_desc_container edit_form">
+      [% PROCESS commit_button id="_top"%]
+     <a href="show_bug.cgi?id=[% bug.bug_id %]">
+        [%-# %]<b>[% terms.Bug %] [% bug.bug_id FILTER html %]</b>
+     [%-# %]</a> <span id="summary_container" class="bz_default_hidden">
+      [% IF bug.alias.size > 0 %]
+        (<span id="alias_nonedit_display">[% bug.alias.join(', ') FILTER html %]</span>)
+      [% END %]
+      - <span id="short_desc_nonedit_display">[% bug.short_desc FILTER quoteUrls(bug) %]</span>
+      [% can_edit_short_desc = bug.check_can_change_field('short_desc', 0, 1) %]
+      [% IF can_edit_short_desc %]
+        <small>(<a href="#" id="summary_edit_action">edit</a>)</small>
+      [% END %]
+     </span>
+
+    <div id="summary_input">
+      [% INCLUDE "bug/field-label.html.tmpl"
+        field = bug_fields.short_desc
+        editable = can_edit_short_desc
+        accesskey = "s"
+        tag_name = 'span'
+      %]
+      [% PROCESS input inputname => "short_desc" size => "80"
+                       maxlength => 255 spellcheck => "true" no_td => 1 %]
+    </div>
+  </div>
+  <script type="text/javascript">
+    hideEditableField('summary_container',
+                      'summary_input',
+                      'summary_edit_action',
+                      'short_desc',
+                      '[% bug.short_desc FILTER js %]' );
+  </script>
+[% END %]
+
+[%############################################################################%]
+[%# Block for the first table in the "Details" section                       #%]
+[%############################################################################%]
+
+[% BLOCK section_details1 %]
+
+    [%#############%]
+    [%#  PRODUCT  #%]
+    [%#############%]
+    <tr>
+      [% INCLUDE bug/field.html.tmpl
+          bug = bug, field = bug_fields.product, value = bug.product
+          override_legal_values = bug.choices.product
+          desc_url = "describecomponents.cgi"
+          editable = bug.check_can_change_field('product', 0, 1)
+      %]
+    </tr>
+
+    [%# Classification is here so that it can be used in value controllers
+      # and visibility controllers. It comes after product because
+      # it uses some javascript that depends on the existence of the
+      # product field.
+      #%]
+    <tr class="bz_default_hidden">
+       [% INCLUDE bug/field.html.tmpl
+            bug = bug field = bug_fields.classification
+            override_legal_values = bug.choices.classification
+            value = bug.classification
+            editable = bug.check_can_change_field('product', 0, 1) %]
+    </tr>
+    [%###############%]    
+    [%#  Component  #%]
+    [%###############%]
+    <tr>
+      [% INCLUDE bug/field.html.tmpl
+          bug = bug, field = bug_fields.component, value = bug.component
+          override_legal_values = bug.choices.component
+          desc_url = "describecomponents.cgi?product=$bug.product"
+          editable = bug.check_can_change_field('component', 0, 1)
+      %]
+    </tr>
+    <tr>
+      [% INCLUDE "bug/field-label.html.tmpl"
+          field = bug_fields.version
+          editable = bug.check_can_change_field('version', 0, 1) %]
+
+      [% PROCESS select selname => "version" %]
+    </tr>
+    [%############%]    
+    [%# PLATFORM #%]
+    [%############%]    
+    <tr>
+      [% can_edit_rep_platform = bug.check_can_change_field('rep_platform', 0, 1) %]
+      [% INCLUDE "bug/field-label.html.tmpl"
+           field = bug_fields.rep_platform,
+           editable = can_edit_rep_platform,
+           accesskey = "h" %]
+      <td class="field_value">
+        [% INCLUDE bug/field.html.tmpl
+            bug = bug, field = bug_fields.rep_platform,
+            no_tds = 1, value = bug.rep_platform
+            editable = can_edit_rep_platform %]
+        [%+ INCLUDE bug/field.html.tmpl
+            bug = bug, field = bug_fields.op_sys, 
+            no_tds = 1, value = bug.op_sys
+            editable = bug.check_can_change_field('op_sys', 0, 1) %]
+      </td>
+    </tr>
+
+
+
+[% END %]
+
+[%############################################################################%]
+[%# Block for the status section                                             #%]
+[%############################################################################%]
+
+[% BLOCK section_status %]
+  <tr>
+    <th class="field_label">
+      <a href="page.cgi?id=fields.html#bug_status">Status</a>:
+    </th>
+    <td id="bz_field_status">
+      <span id="static_bug_status">
+        [% display_value("bug_status", bug.bug_status) FILTER html %]
+        [% IF bug.resolution %]
+          [%+ display_value("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 %]
+          (<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 and severity) #%]
+ [%###############################################################%]
+    <tr>
+      <th class="field_label">
+        [% can_edit_priority = bug.check_can_change_field('priority', 0, 1) %]
+        <label [% IF can_edit_priority %]for="priority"[% END %] accesskey="i">
+          <a href="page.cgi?id=fields.html#importance"><u>I</u>mportance</a></label>:
+      </th>
+      <td>
+       [% INCLUDE bug/field.html.tmpl
+            bug = bug, field = bug_fields.priority,
+            no_tds = 1, value = bug.priority
+            editable = can_edit_priority %]
+       [%+ INCLUDE bug/field.html.tmpl
+            bug = bug, field = bug_fields.bug_severity,
+            no_tds = 1, value = bug.bug_severity
+            editable = bug.check_can_change_field('bug_severity', 0, 1) %]
+        [% Hook.process('after_importance', 'bug/edit.html.tmpl') %]
+      </td>
+    </tr>
+
+    [% IF Param("usetargetmilestone") && bug.target_milestone %]
+      <tr>
+        [% INCLUDE "bug/field-label.html.tmpl"
+          field = bug_fields.target_milestone
+          editable = bug.check_can_change_field('target_milestone', 0, 1)
+        %]
+        [% PROCESS select selname = "target_milestone" %]
+      </tr>
+    [% END %]
+
+    [% IF Param("timetrackinggroup") && bug.deadline %]
+      <tr>
+        <th class="field_label">
+          <a href="page.cgi?id=fields.html#deadline">Deadline</a>:
+        </th>
+        <td>[% bug.deadline FILTER html %]</td>
+      </tr>
+    [% END %]
+[% END %]
+
+[%############################################################################%]
+[%# Block for the table in the "People" section                              #%]
+[%############################################################################%]
+
+[% BLOCK section_people %]
+
+    <tr>
+      [% can_edit_assigned_to = bug.check_can_change_field("assigned_to", 0, 1) %]
+      [% INCLUDE "bug/field-label.html.tmpl"
+          field = bug_fields.assigned_to
+          editable = can_edit_assigned_to
+      %]
+      <td>
+        [% IF can_edit_assigned_to %]
+          <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>)
+              [% IF bug.assigned_to.id != user.id %]
+                (<a title="Reassign to yourself" 
+                    href="#" id="bz_assignee_take_action">take</a>)
+              [% END %]
+            </span>
+          </div>
+          <div id="bz_assignee_input">
+            [% INCLUDE global/userselect.html.tmpl
+                 id => "assigned_to"
+                 name => "assigned_to"
+                 value => bug.assigned_to.login
+                 classes => ["bz_userfield"]
+                 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 %]' );
+           hideEditableField('bz_assignee_edit_container',
+                             'bz_assignee_input',
+                             'bz_assignee_take_action',
+                             'assigned_to',
+                             '[% bug.assigned_to.login FILTER js %]',
+                             '[% user.login FILTER js %]' );
+           initDefaultCheckbox('assignee');                  
+          </script>
+        [% ELSE %]
+          [% INCLUDE global/user.html.tmpl who = bug.assigned_to %]
+        [% END %]
+      </td>
+    </tr>
+
+    [% IF Param('useqacontact') %]
+    <tr>
+      [% can_edit_qa_contact = bug.check_can_change_field("qa_contact", 0, 1) %]
+      [% INCLUDE "bug/field-label.html.tmpl"
+        field = bug_fields.qa_contact
+        editable = can_edit_qa_contact
+        accesskey = "q"
+      %]
+      <td>
+        [% IF can_edit_qa_contact %]
+          <div id="bz_qa_contact_edit_container" class="bz_default_hidden">
+            <span>
+              [% INCLUDE global/user.html.tmpl who = bug.qa_contact %]
+              (<a href="#" id="bz_qa_contact_edit_action">edit</a>)
+              [% IF bug.qa_contact.id != user.id %]
+                (<a title="Change QA contact to yourself" 
+                    href="#" id="bz_qa_contact_take_action">take</a>)
+              [% END %]
+            </span>
+          </div>
+          <div id="bz_qa_contact_input">
+            [% INCLUDE global/userselect.html.tmpl
+               id      => "qa_contact"
+               name    => "qa_contact"
+               value   => bug.qa_contact.login
+               size    => 30
+               classes => ["bz_userfield"]
+               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">
+            hideEditableField('bz_qa_contact_edit_container', 
+                              'bz_qa_contact_input', 
+                              'bz_qa_contact_edit_action', 
+                              'qa_contact', 
+                              '[% bug.qa_contact.login FILTER js %]');
+            hideEditableField('bz_qa_contact_edit_container', 
+                              'bz_qa_contact_input', 
+                              'bz_qa_contact_take_action', 
+                              'qa_contact', 
+                              '[% bug.qa_contact.login FILTER js %]',
+                              '[% user.login FILTER js %]');
+            initDefaultCheckbox('qa_contact');
+          </script>
+        [% ELSE %]
+          [% INCLUDE global/user.html.tmpl who = bug.qa_contact %]
+        [% END %]
+      </td>
+    </tr>
+    [% END %]
+    <script type="text/javascript">
+      assignToDefaultOnChange(['product', 'component'],
+        '[% bug.component_obj.default_assignee.login FILTER js %]',
+        '[% bug.component_obj.default_qa_contact.login FILTER js %]');
+    </script>
+[% END %]
+
+[%############################################################################%]
+[%# Block for URL Keyword and Whiteboard                                     #%]
+[%############################################################################%]
+[% BLOCK section_url_keyword_whiteboard %]
+  <tr>
+    [% can_edit_bug_file_loc = bug.check_can_change_field("bug_file_loc", 0, 1) %]
+    [% INCLUDE "bug/field-label.html.tmpl"
+      field = bug_fields.bug_file_loc
+      editable = can_edit_bug_file_loc
+      accesskey = "u"
+    %]
+    <td>
+      [% IF can_edit_bug_file_loc %]
+        <span id="bz_url_edit_container" class="bz_default_hidden"> 
+        [% IF is_safe_url(bug.bug_file_loc) %]
+           <a href="[% bug.bug_file_loc FILTER html %]" target="_blank"
+              rel="noreferrer" title="[% bug.bug_file_loc FILTER html %]">
+             [% bug.bug_file_loc FILTER truncate(40) FILTER html %]</a>
+        [% ELSE %]
+          [% bug.bug_file_loc FILTER html %]
+        [% END %]
+        (<a href="#" id="bz_url_edit_action">edit</a>)</span>
+      [% END %]
+      <span id="bz_url_input_area">
+        [% url_output = INCLUDE input no_td = 1 inputname = "bug_file_loc" size = 40 %]
+        [% IF NOT bug.check_can_change_field("bug_file_loc", 0, 1)
+              AND is_safe_url(bug.bug_file_loc) %]
+          <a href="[% bug.bug_file_loc FILTER html %]"
+             rel="noreferrer">[% url_output FILTER none %]</a>
+        [% ELSE %]
+          [% url_output FILTER none %]
+        [% END %]
+      </span>
+      [% IF bug.check_can_change_field("bug_file_loc", 0, 1) %]
+        <script type="text/javascript">
+          hideEditableField('bz_url_edit_container', 
+                            'bz_url_input_area', 
+                            'bz_url_edit_action', 
+                            'bug_file_loc', 
+                            "[% bug.bug_file_loc FILTER js %]");
+        </script>
+      [% END %]
+    </td>
+  </tr>
+
+  [% IF Param('usestatuswhiteboard') %]
+    <tr>
+      [% INCLUDE "bug/field-label.html.tmpl"
+        field = bug_fields.status_whiteboard
+        editable = bug.check_can_change_field("status_whiteboard", 0, 1)
+        accesskey = "w"
+      %]
+      [% INCLUDE input inputname = "status_whiteboard" size = 40 %]
+    </tr>
+  [% END %]
+
+  [% IF use_keywords %]
+    <tr>
+        [% INCLUDE bug/field.html.tmpl
+          bug = bug, field = bug_fields.keywords, value = bug.keywords
+          editable = bug.check_can_change_field("keywords", 0, 1),
+          desc_url = "describekeywords.cgi", possible_values = all_keywords
+        %]
+    </tr>
+  [% END %]
+
+  [% IF user.id %]
+    <tr>
+      [% INCLUDE bug/field.html.tmpl
+         bug = bug, field = bug_fields.tag, value = bug.tags.join(", "),
+         editable = 1, possible_values = user.tags.keys
+      %]
+    </tr>
+  [% END %]
+[% END %]
+
+[%############################################################################%]
+[%# Block for Duplicates                                                     #%]
+[%############################################################################%]
+
+[% BLOCK section_duplicates %]
+  [% RETURN UNLESS bug.duplicates.size %]
+  <tr>
+    <th class="field_label">
+      <label>Duplicates ([% bug.duplicates.size %])</label>:
+    </th>
+    <td class="field_value">
+      <span id="duplicates">
+        [% FOREACH dupe = bug.duplicates %]
+          [% INCLUDE bug/link.html.tmpl bug = dupe, link_text = dupe.id, use_alias = 1 %][% " " %]
+        [% END %]
+      </span>
+      (<a href="buglist.cgi?bug_id=[% bug.duplicate_ids.join(",") FILTER html %]">
+       [%-%]view as [% terms.bug %] list</a>)
+    </td>
+  </tr>
+[% END %]
+
+[%############################################################################%]
+[%# Block for Depends On / Blocks                                            #%]
+[%############################################################################%]
+
+[% BLOCK section_dependson_blocks %]
+  <tr>
+    [% INCLUDE dependencies 
+         field = bug_fields.dependson deps = bug.depends_on_obj %]
+  </tr>
+  
+  <tr>
+    [% INCLUDE dependencies 
+         field = bug_fields.blocked deps = bug.blocks_obj %]
+  </tr>
+
+  [% IF bug.dependson.size || bug.blocked.size %]
+    <tr>
+      <th> </th>
+
+      <td id="show_dependency_tree_or_graph">
+        Show dependency <a href="showdependencytree.cgi?id=[% bug.bug_id %]&hide_resolved=1">tree</a>
+
+        [% IF Param('webdotbase') %]
+          / <a href="showdependencygraph.cgi?id=[% bug.bug_id %]">graph</a>
+        [% END %]
+      </td>
+    </tr>
+  [% END %]
+[% END %]
+
+
+[%############################################################################%]
+[%# Block for Restricting Visibility                                         #%]
+[%############################################################################%]
+
+[% BLOCK section_restrict_visibility %]
+  [% RETURN UNLESS bug.groups.size %]
+
+  <div class="bz_group_visibility_section">
+    [% 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 %]
+          <div id="bz_restrict_group_visibility_help">
+            <b>Only users in
+              [%+ IF Param('or_groups') %]at least one[% ELSE %]all[% END %]
+              of the selected groups can view this [% terms.bug %]:</b>
+             <p class="instructions">
+               Unchecking all boxes makes this a more public [% terms.bug %].
+             </p>
+          </div>
+      [% END %]
+
+      [% IF group.ingroup %]
+        <input type="hidden" name="defined_groups" 
+               value="[% group.name FILTER html %]">
+      [% END %]
+
+      <input type="checkbox" value="[% group.name FILTER html %]"
+             name="groups" id="group_[% group.bit %]"
+             [% ' checked="checked"' IF group.ison %]
+             [% ' disabled="disabled"' IF NOT group.ingroup %]>
+      <label for="group_[% group.bit %]">
+      [%- group.description FILTER html_light %]</label>
+      <br>
+    [% END %]
+
+    [% IF emitted_description %]
+      [% IF NOT inallgroups %]
+        <p class="instructions">Only members of a group can change the 
+          visibility of [% terms.abug %] for that group.</p>
+      [% END %]
+    [% END %]
+
+    [% IF inagroup %]
+      <div id="bz_enable_role_visibility_help">
+        <b>Users in the roles selected below can always view 
+          this [% terms.bug %]:</b>
+      </div>
+      <div id="bz_enable_role_visibility">
+        <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>
+        <p class="instructions">
+          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.
+        </p>
+      </div>
+    [% END %]
+  </div> [%# bz_group_visibility_section %]
+[% END %]
+
+[%############################################################################%]
+[%# Block for Dates                                                          #%]
+[%############################################################################%]
+
+[% BLOCK section_dates %]
+  <tr>
+    <th class="field_label">
+      Reported:
+    </th>
+    <td>
+     [% bug.creation_ts FILTER time("%Y-%m-%d %H:%M %Z") %] by [% INCLUDE global/user.html.tmpl who = bug.reporter %]
+    </td>
+  </tr>
+  
+  <tr>
+    <th class="field_label">
+      Modified:
+    </th>
+    <td>
+      [% bug.delta_ts FILTER time("%Y-%m-%d %H:%M %Z") %]
+      (<a href="show_activity.cgi?id=[% bug.bug_id %]">[%# terms.Bug %]History</a>)
+    </td>
+  
+  </tr>
+[% END %]
+
+[%############################################################################%]
+[%# Block for CC LIST                                                        #%]
+[%############################################################################%]
+[% BLOCK section_cclist %]
+    <tr>
+      <th class="field_label">
+        <label [% IF user.id %]for="newcc"[% END %] accesskey="a">
+          CC List:
+        </label>
+      </th>
+      <td>
+        [% IF user.id %]
+          [% IF NOT bug.cc.contains(user.login) %]
+            <input type="checkbox" id="addselfcc" name="addselfcc"
+              [% " checked=\"checked\""
+                   IF user.settings.state_addselfcc.value == 'always'
+                      || (!bug.user.has_any_role
+                          && user.settings.state_addselfcc.value == 'cc_unless_role') %]>
+            <label for="addselfcc">Add me to CC list</label>
+            <br> 
+          [% END %]
+        [% END %]
+        [% bug.cc.size FILTER html %] 
+        [% IF bug.cc.size == 1 %]
+          user
+        [% ELSE %]
+          users
+        [% END %]
+        [% IF user.id %]
+          [% IF bug.cc.contains( user.email ) %]
+            including you
+          [% END %]
+        [% END %]
+        [% IF user.id || bug.cc.size %]
+          <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>
+        [% END %]
+        <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
+                  classes => ["bz_userfield"]
+                  multiple => 5
+                %]
+            </div>
+          [% END %]
+          [% IF bug.cc.size %]
+            <select id="cc" multiple="multiple" size="5" [% 'name="cc"' IF bug.user.canedit %]>
+              [% FOREACH c = bug.cc %]
+                <option value="[% c FILTER email FILTER html %]">
+                  [% c FILTER email FILTER html %]</option>
+              [% END %]
+            </select>
+            [% IF user.id && !bug.user.canedit %]
+              <input type="hidden" name="cc" value="[% user.login FILTER email FILTER html %]">
+            [% END %]
+            [% IF user.id AND (bug.user.canedit OR bug.cc.contains(user.login)) %]
+              <br>
+              <input type="checkbox" id="removecc" name="removecc">
+              <label for="removecc">
+                [% IF bug.user.canedit %]
+                  Remove selected CCs
+                [% ELSE %]
+                  Remove me from the CC list
+                [% END %]
+              </label>
+              <br>
+            [% END %]
+          [% END %]
+        </div>
+        [% IF user.id || bug.cc.size %]
+          <script type="text/javascript">
+            hideEditableField( 'cc_edit_area_showhide_container', 
+                               'cc_edit_area', 
+                               'cc_edit_area_showhide', 
+                               '', 
+                               '');  
+          </script>
+        [% END %]
+      </td>
+    </tr>
+[% END %]
+
+[%############################################################################%]
+[%# Block for Bug Ignored                                                    #%]
+[%############################################################################%]
+[% BLOCK section_bug_ignored %]
+  [% IF user.id %]
+    <tr>
+      <th class="field_label">
+        <label for="bug_ignored" title="Ignore all email for this [% terms.bug %]">
+          Ignore [% terms.Bug %] Mail:
+        </label>
+      </th>
+      <td>
+        <input type="hidden" name="defined_bug_ignored" value="1">
+        <span title="You will still receive emails for flag requests directed at you.">
+          <input type="checkbox" name="bug_ignored" id="bug_ignored" value="1"
+                 [% ' checked="checked"' IF user.is_bug_ignored(bug.id) %]>
+          (never email me about this [% terms.bug %])
+        </span>
+      </td>
+    </tr>
+  [% END %]
+[% 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 section_aliases %]
+  <tr>
+    [% INCLUDE "bug/field-label.html.tmpl" field = bug_fields.alias %]
+    <td>
+      [% IF bug.alias.size %]
+        [% bug.alias.join(', ') FILTER html %]
+      [% ELSE %]
+        None
+      [% END %]
+      [% IF bug.check_can_change_field('alias', 0, 1) %]
+        <span id="alias_edit_area_showhide_container" class="bz_default_hidden">
+          (<a href="#" id="alias_edit_area_showhide">edit</a>)
+        </span>
+        <br>
+        <div id="alias_edit_area">
+          <div>
+            <label for="newalias" class="field_label">Add</label>
+            <br>
+            <input name="newalias" id="newalias" size="20">
+          </div>
+          [% IF bug.alias.size %]
+            <select id="alias" name="alias" multiple="multiple" size="5">
+              [% FOREACH a = bug.alias %]
+                <option value="[% a FILTER html %]">[% a FILTER html %]</option>
+              [% END %]
+            </select>
+            <br>
+
+            <input type="checkbox" id="removealias" name="removealias">
+            <label for="removealias">Remove selected aliases</label>
+          [% END %]
+        </div>
+        <script type="text/javascript">
+          hideEditableField( 'alias_edit_area_showhide_container',
+                             'alias_edit_area',
+                             'alias_edit_area_showhide',
+                             '',
+                             '');
+        </script>
+      [% END %]
+    </td>
+  </tr>
+[% END %]
+
+[%############################################################################%]
+[%# Block for FLAGS                                                          #%]
+[%############################################################################%]
+
+[% BLOCK section_flags %]
+  [%# *** Flags *** %]
+  [% show_bug_flags = 0 %]
+  [% bug_flags_set = 0 %]
+  [% show_more_flags = 0 %]
+  [% FOREACH type = bug.flag_types %]
+    [% IF type.flags.size || (user.id && type.is_active && user.can_request_flag(type)) %]
+      [% show_bug_flags = 1 %]
+    [% END %]
+    [% IF user.id && type.is_active && (!type.flags.size || type.is_multiplicable) %]
+      [% show_more_flags = 1 %]
+    [% END %]
+    [% IF type.flags.size %]
+      [% bug_flags_set = 1 %]
+    [% END %]
+    [% LAST IF show_bug_flags && show_more_flags && bug_flags_set %]
+  [% END %]
+  [% IF show_bug_flags %]
+    <tr>
+      <th class="field_label">
+        <label>Flags:</label>
+      </th>
+      <td>
+        [% IF bug.flag_types.size %]
+          [% PROCESS "flag/list.html.tmpl" flag_no_header = 1
+                                           flag_types = bug.flag_types
+                                           any_flags_requesteeble = bug.any_flags_requesteeble %]
+        [% END %]
+        [% IF show_more_flags %]
+          <span id="bz_flags_more_container" class="bz_default_hidden">
+            [% IF !bug_flags_set %]<em>None yet set</em>[% END %]
+            (<a href="#" id="bz_flags_more_action">[% IF !bug_flags_set %]set[% ELSE %]more[% END %] flags</a>)
+          </span>
+          <script type="text/javascript">
+            YAHOO.util.Dom.removeClass('bz_flags_more_container', 'bz_default_hidden');
+            var table = YAHOO.util.Dom.get("flags");
+            var rows = YAHOO.util.Dom.getElementsByClassName('bz_flag_type', 'tbody', table);
+            for (var i = 0; i < rows.length; i++) {
+                YAHOO.util.Dom.addClass(rows[i], 'bz_default_hidden');
+            }
+            YAHOO.util.Event.addListener('bz_flags_more_action', 'click', function (e) {
+                YAHOO.util.Dom.addClass('bz_flags_more_container', 'bz_default_hidden');
+                for (var i = 0; i < rows.length; i++) {
+                    YAHOO.util.Dom.removeClass(rows[i], 'bz_default_hidden');
+                }
+                YAHOO.util.Event.preventDefault(e);
+            }); 
+          </script>
+        [% END %]
+      </td>
+    </tr>
+  [% END %]
+[% END %]
+
+[%############################################################################%]
+[%# Block for Custom Fields                                                  #%]
+[%############################################################################%]
+
+[% BLOCK section_customfields %]
+[%# *** Custom Fields *** %]
+  [% USE Bugzilla %]
+  [% FOREACH field = Bugzilla.active_custom_fields %]
+    <tr>
+      [%# Use PROCESS instead of INCLUDE, because extra_field_item is defined
+        # in the template and must be returned back. INCLUDE cannot do that. %]
+      [% PROCESS bug/field.html.tmpl value = bug.${field.name}
+                                     editable = bug.check_can_change_field(field.name, 0, 1) %]
+    </tr>
+    [% IF extra_field_item %]
+      <tr>
+        <th class="field_label">[% extra_field_item.header FILTER none %]</th>
+        <td>[% extra_field_item.data FILTER none %]</td>
+      </tr>
+    [% END %]
+  [% 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 %]
+
+  [% INCLUDE "bug/field-label.html.tmpl" %]
+
+  <td>
+    <span id="[% field.name FILTER html %]_input_area">
+      [% IF bug.check_can_change_field(field.name, 0, 1) %]
+        <input name="[% field.name FILTER html %]" 
+               id="[% field.name FILTER html %]" class="text_input"
+               value="[% bug.${field.name}.join(', ') FILTER html %]">
+      [% END %]
+    </span>
+
+    [% FOREACH dep_bug = deps %]
+      [% INCLUDE bug/link.html.tmpl bug = dep_bug, link_text = dep_bug.id, use_alias = 1 %][% " " %]
+    [% END %]
+    [% IF bug.check_can_change_field(field.name, 0, 1) %]
+      <span id="[% field.name FILTER html %]_edit_container" 
+            class="edit_me bz_default_hidden">
+        (<a href="#" id="[% field.name FILTER html %]_edit_action">edit</a>)
+      </span>
+      <script type="text/javascript">
+        hideEditableField('[% field.name FILTER js %]_edit_container', 
+                          '[% field.name FILTER js %]_input_area', 
+                          '[% field.name FILTER js %]_edit_action', 
+                          '[% field.name FILTER js %]', 
+                          '[% bug.${field.name}.join(', ') FILTER js %]');
+      </script>
+    [% END %]
+  </td>
+  
+[% END %]
+
+[%############################################################################%]
+[%# Block for Time Tracking Group                                            #%]
+[%############################################################################%]
+
+[% BLOCK section_timetracking %]
+  <table class="bz_time_tracking_table">
+    <tr>
+      [% INCLUDE "bug/field-label.html.tmpl"
+         field = bug_fields.estimated_time, editable = 1
+      %]
+      <th>
+        Current Est.:
+      </th>
+      [% INCLUDE "bug/field-label.html.tmpl"
+         field = bug_fields.work_time, editable = 1
+      %]
+      [% INCLUDE "bug/field-label.html.tmpl"
+         field = bug_fields.remaining_time, editable = 1
+      %]
+      [% INCLUDE "bug/field-label.html.tmpl"
+         field = bug_fields.percentage_complete
+      %]
+      <th>
+        Gain:
+      </th>
+      [% INCLUDE "bug/field-label.html.tmpl"
+         field = bug_fields.deadline, editable = 1
+      %]
+    </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>
+         [% INCLUDE bug/field.html.tmpl
+           field = bug_fields.deadline, value = bug.deadline, no_tds = 1
+           editable = bug.check_can_change_field('deadline', 0, 1) %]
+      </td>        
+    </tr>
+    <tr>
+      <td colspan="7" class="bz_summarize_time">
+        <a href="summarize_time.cgi?id=[% bug.bug_id %]&do_depends=1">
+        Summarize time (including time for [% terms.bugs %]
+        blocking this [% terms.bug %])</a>
+      </td>
+    </tr>
+  </table> 
+[% END %]
+
+[%############################################################################%]
+[%# Block for the Additional Comments box                                    #%]
+[%############################################################################%]
+
+[% BLOCK comment_box %]
+  <div id="add_comment" class="bz_section_additional_comments">
+    [% IF user.id %]
+      <label for="comment" accesskey="c"><b>Additional 
+        <u>C</u>omments</b></label>:
+
+      [% IF user.is_insider && bug.check_can_change_field('longdesc', 0, 1) %]
+        <input type="checkbox" name="comment_is_private" value="1"
+               id="newcommentprivacy"
+               onClick="updateCommentTagControl(this, 'comment')">
+        <label for="newcommentprivacy">
+          Make comment private (visible only to members of the
+          <strong>[% Param('insidergroup') FILTER html %]</strong> group)
+        </label>
+      [% END %]
+
+      <!-- This table keeps the submit button aligned with the box. -->
+      <table><tr><td>
+        [% IF bug.check_can_change_field('longdesc', 0, 1) %]
+          [% INCLUDE bug/comment.html.tmpl
+                     minrows   = 10
+                     maxrows   = 25
+                     cols      = constants.COMMENT_COLS
+          %]
+          [% IF user.is_insider %]
+            <script>
+               updateCommentTagControl(document.getElementById('newcommentprivacy'), 'comment');
+            </script>
+          [% END %]
+          [% Hook.process("after_comment_textarea", 'bug/edit.html.tmpl') %]
+        [% ELSE %]
+          You are not allowed to make an additional comment on this [% terms.bug %].
+        [% END %]
+        <br>
+        [% PROCESS commit_button id=""%]
+
+        [% Hook.process("after_comment_commit_button", 'bug/edit.html.tmpl') %]
+
+        <table id="bug_status_bottom" class="status">
+          <tr>
+            <th class="field_label">
+              <a href="page.cgi?id=fields.html#bug_status">Status</a>:
+            </th>
+            <td>
+              [% PROCESS bug/knob.html.tmpl %]
+            </td>
+          </tr>
+        </table>
+      </td></tr></table>
+
+    [%# For logged-out users %]
+    [% ELSE %]
+      <table>
+        <tr>
+          <td>
+            <fieldset>
+              <legend>Note</legend>
+              You need to
+              <a href="show_bug.cgi?id=
+                      [%- bug.bug_id %]&GoAheadAndLogIn=1">log in</a>
+              before you can comment on or make changes to this [% terms.bug %].
+            </fieldset>
+          </td>
+        </tr> 
+      </table>
+    [% END %]
+  </div>
+[% END %]
+
+[%############################################################################%]
+[%# Block for SELECT fields                                                  #%]
+[%############################################################################%]
+
+[% BLOCK select %]
+  <td>
+    [% IF bug.check_can_change_field(selname, 0, 1) 
+          AND bug.choices.${selname}.size > 1 %]
+      <input type="hidden" id="[% selname %]_dirty">
+      <select id="[% selname %]" name="[% selname %]">
+        [% FOREACH x = bug.choices.${selname} %]
+          <option value="[% x.name FILTER html %]"
+            [% " selected" IF x.name == bug.${selname} %]>
+            [%- x.name FILTER html %]
+          </option>
+        [% END %]
+      </select>
+    [% ELSE %]
+      [% bug.${selname} FILTER html %]
+    [% END %]
+  </td>
+[% 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="Save Changes" 
+             id="commit[% id FILTER css_class_quote %]">
+    </div>
+  [% END %]
+[% END %]
diff --git a/template/en/custom/bug/field_DEFAULT.html.tmpl b/template/en/custom/bug/field_DEFAULT.html.tmpl
deleted file mode 120000
index 1587a55..0000000
--- a/template/en/custom/bug/field_DEFAULT.html.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-../../default/bug/field.html.tmpl
\ No newline at end of file
diff --git a/template/en/custom/bug/field_DEFAULT.html.tmpl b/template/en/custom/bug/field_DEFAULT.html.tmpl
new file mode 100644
index 0000000..cdf15fb
--- /dev/null
+++ b/template/en/custom/bug/field_DEFAULT.html.tmpl
@@ -0,0 +1,289 @@
+[%# This Source Code Form is subject to the terms of the Mozilla Public
+  # License, v. 2.0. If a copy of the MPL was not distributed with this
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  #
+  # This Source Code Form is "Incompatible With Secondary Licenses", as
+  # defined by the Mozilla Public License, v. 2.0.
+  #%]
+
+[%# INTERFACE:
+  #   field: a Bugzilla::Field object
+  #   value: The value of the field for this bug.
+  #   field_hidden (optional): boolean; if true, the field is hidden by default.
+  #   override_legal_values (optional): The list of legal values, for select fields.
+  #   editable: Whether the field should be displayed as an editable
+  #             <input> or as just the plain text of its value.
+  #   allow_dont_change: display the --do_not_change-- option for select fields.
+  #   value_span: A colspan for the table cell containing
+  #               the field value.
+  #   no_tds: boolean; if true, don't display the label <th> or the 
+  #           wrapping <td> for the field.
+  #   bug (optional): The current Bugzilla::Bug being displayed, or a hash 
+  #                   with default field values being displayed on a page.
+  #%]
+
+[% IF NOT no_tds %]
+  [% field_hidden = 0 %]
+  [% IF bug AND !field.is_visible_on_bug(bug) %]
+    [% field_hidden = 1 %]
+  [% END %]
+
+  [% INCLUDE "bug/field-label.html.tmpl" hidden = field_hidden %]
+  <td class="field_value [% ' bz_hidden_field' IF field_hidden %]"
+      id="field_container_[% field.name FILTER html %]" 
+      [% " colspan=\"$value_span\"" FILTER none IF value_span %]>
+[% END %]
+[% Hook.process('start_field_column') %]
+[% IF editable %]
+  [% SWITCH field.type %]
+    [% CASE [ constants.FIELD_TYPE_FREETEXT
+              constants.FIELD_TYPE_INTEGER ] %]
+        <input id="[% field.name FILTER html %]" class="text_input"
+               name="[% field.name FILTER html %]"
+               value="[% value FILTER html %]" size="40"
+               maxlength="[% constants.MAX_FREETEXT_LENGTH FILTER none %]"
+               [% IF field.type == constants.FIELD_TYPE_INTEGER %]
+                 pattern="-?\d+[% IF dontchange %]|[% dontchange FILTER html %][% END %]"
+                 title="The value must be a valid positive or negative integer"
+               [% END %]
+               [% IF field.is_mandatory %]
+                 data-required="true" [% 'aria-required="true" required' UNLESS field_hidden %]
+               [% END %]>
+    [% CASE [constants.FIELD_TYPE_DATETIME, constants.FIELD_TYPE_DATE] %]
+      [% size = (field.type == constants.FIELD_TYPE_DATE) ? 10 : 20 %]
+      <input name="[% field.name FILTER html %]" size="[% size FILTER none %]"
+             id="[% field.name FILTER html %]"
+             value="[% value FILTER html %]"
+             [% IF field.is_mandatory %]
+               data-required="true" [% 'aria-required="true" required' UNLESS field_hidden %]
+             [% END %]
+             onchange="updateCalendarFromField(this)">
+      <button type="button" class="calendar_button"
+              id="button_calendar_[% field.name FILTER html %]"
+              onclick="showCalendar('[% field.name FILTER js %]')">
+        <span>Calendar</span>
+      </button>
+
+      <div id="con_calendar_[% field.name FILTER html %]"></div>
+
+      <script type="text/javascript">
+        <!--
+          [%+ PROCESS "global/calendar.js.tmpl" id = field.name %]
+        //--></script>
+    [% CASE constants.FIELD_TYPE_BUG_ID %]
+        <span id="[% field.name FILTER html %]_input_area">
+          <input name="[% field.name FILTER html %]" id="[% field.name FILTER html %]"
+                 value="[% value FILTER html %]" size="7"
+                 [% IF field.is_mandatory %]
+                   data-required="true" [% 'aria-required="true" required' UNLESS field_hidden %]
+                 [% END %]>
+        </span>
+
+        [% IF value %]  
+          [% value FILTER bug_link(value, use_alias => 1) FILTER none %]
+        [% END %]
+        <span id="[% field.name FILTER html %]_edit_container" class="edit_me bz_default_hidden">
+          (<a href="#" id="[% field.name FILTER html %]_edit_action">edit</a>)
+        </span>
+        <script type="text/javascript">
+        hideEditableField('[% field.name FILTER js %]_edit_container',
+                          '[% field.name FILTER js %]_input_area',
+                          '[% field.name FILTER js %]_edit_action',
+                          '[% field.name FILTER js %]',
+                          "[% value FILTER js %]");
+        </script>
+    [% CASE [ constants.FIELD_TYPE_SINGLE_SELECT 
+              constants.FIELD_TYPE_MULTI_SELECT ] %]
+      [%# The 'product' field needs its own template if classifications are enabled. %]
+      [% IF field.name == "product" AND Param('useclassification') %]
+        [% INCLUDE "global/product-select.html.tmpl"
+                   id = "product", name = "product", value = value
+                   products = override_legal_values %]
+      [% ELSE %]
+        <input type="hidden" id="[% field.name FILTER html %]_dirty">
+        <select id="[% field.name FILTER html %]" 
+                name="[% field.name FILTER html %]" 
+                [% IF field.type == constants.FIELD_TYPE_MULTI_SELECT %]
+                  [% SET field_size = 5 %]
+                  [% IF field.legal_values.size < 5 %]
+                    [% SET field_size = field.legal_values.size %]
+                  [% END %]
+                  size="[% field_size FILTER html %]" multiple="multiple"
+                  [% IF field.is_mandatory %]
+                    data-required="true" [% 'aria-required="true" required' UNLESS field_hidden %]
+                  [% END %]
+                [% END %]>
+          [% IF allow_dont_change %]
+            <option value="[% dontchange FILTER html %]"
+                   [% ' selected="selected"' IF value == dontchange %]>
+              [% dontchange FILTER html %]
+            </option>
+          [% END %]
+          [% IF override_legal_values %]
+            [% legal_values = override_legal_values %]
+          [% ELSE %]
+            [% legal_values = field.legal_values %]
+          [% END %]
+          [% FOREACH legal_value = legal_values %]
+            [% NEXT IF NOT legal_value.is_active AND NOT value.contains(legal_value.name).size %]
+            <option value="[% legal_value.name FILTER html %]"
+                    id="v[% legal_value.id FILTER html %]_
+                        [%- field.name FILTER html %]"
+              [%# We always show selected values, even if they should be
+                # hidden %]
+              [% IF value.contains(legal_value.name).size %]
+                selected="selected"
+              [% ELSIF bug AND !legal_value.is_visible_on_bug(bug) %]
+                class="bz_hidden_option" disabled="disabled"
+              [% END %]>
+              [%- display_value(field.name, legal_value.name) FILTER html ~%]
+            </option>
+          [% END %]
+        </select>
+        [%# When you pass an empty multi-select in the web interface,
+          # it doesn't appear at all in the CGI object. Instead of
+          # forcing all users of process_bug to always specify every
+          # multi-select, we have this field defined if the multi-select
+          # field is defined, and then if this is passed but the multi-select
+          # isn't, we know that the multi-select was emptied.
+        %]
+        [% IF field.type == constants.FIELD_TYPE_MULTI_SELECT %]
+          <input type="hidden" name="defined_[% field.name FILTER html %]">
+        [% END %]
+      [% END %]
+
+      <script type="text/javascript">
+        <!--
+          initHidingOptionsForIE('[% field.name FILTER js %]');
+          [%+ INCLUDE "bug/field-events.js.tmpl"
+                      field = field, product = bug.product_obj %]
+        //-->
+      </script>
+
+    [% CASE constants.FIELD_TYPE_TEXTAREA %]
+       <div id="[% field.name FILTER html %]_edit_container" class="bz_default_hidden">
+         <div>
+             (<a href="#" id="[% field.name FILTER html %]_edit_action">edit</a>)
+         </div>
+         [% IF value %]
+           <pre id="[% field.name FILTER html %]_readonly"
+                class="field_textarea_readonly">[% value FILTER html %]</pre>
+         [% END %]
+       </div>
+       <div id="[% field.name FILTER html %]_input">
+         [% INCLUDE global/textarea.html.tmpl
+            id = field.name name = field.name minrows = 4 maxrows = 8
+            cols = 60 defaultcontent = value mandatory = field.is_mandatory %]
+       </div>
+       <script type="text/javascript">
+         hideEditableField('[% field.name FILTER js %]_edit_container',
+                           '[% field.name FILTER js %]_input',
+                           '[% field.name FILTER js %]_edit_action',
+                           '[% field.name FILTER js %]',
+                           '[% value FILTER js %]',
+                           '',
+                           true);
+       </script>
+    [% CASE constants.FIELD_TYPE_BUG_URLS %]
+       [% IF bug.id && value.size %]
+         <ul class="bug_urls">
+         [% FOREACH bug_url = value %]
+           <li>
+             [% PROCESS bug_url_link bug_url = bug_url %]
+             <label><input type="checkbox" value="[% bug_url.name FILTER html %]"
+                           name="remove_[% field.name FILTER html %]">
+               Remove</label>
+           </li>
+         [% END %]
+         </ul>
+       [% END %]
+       [% IF Param('use_see_also') %]
+         <span id="container_showhide_[% field.name FILTER html %]"
+               class="bz_default_hidden">
+           (<a href="#" id="showhide_[% field.name FILTER html %]">add</a>)
+         </span>
+         <div id="container_[% field.name FILTER html %]">
+           <input type="text" id="[% field.name FILTER html %]" size="40"
+                  class="text_input" name="[% field.name FILTER html %]"
+                  [% IF !bug.id %]value="[% value FILTER html %]"[% END %]>
+         </div>
+         [% IF bug.id %]
+           <script type="text/javascript">
+             setupEditLink('[% field.name FILTER js %]');
+           </script>
+         [% END %]
+       [% END %]
+     [% CASE constants.FIELD_TYPE_KEYWORDS %]
+       <div id="[% field.name FILTER html %]_container">
+         <input type="text" id="[% field.name FILTER html %]" size="40"
+                class="text_input" name="[% field.name FILTER html %]"
+                value="[% value FILTER html %]">
+         <div id="[% field.name FILTER html %]_autocomplete"></div>
+       </div>
+       <script type="text/javascript">
+         if (typeof YAHOO.bugzilla.field_array === "undefined")
+           YAHOO.bugzilla.field_array = [];
+         YAHOO.bugzilla.field_array["[% field.name FILTER js %]"] = [
+           [%- FOREACH val = possible_values %]
+             [%-# %]"[% val FILTER js %]"
+             [%- "," IF NOT loop.last %][% END %]];
+         YAHOO.bugzilla.fieldAutocomplete.init('[% field.name FILTER js %]',
+                                               '[% field.name FILTER js %]_autocomplete');
+       </script>
+  [% END %]
+[% ELSE %]
+  [% SWITCH field.type %]
+    [% CASE constants.FIELD_TYPE_TEXTAREA %]
+      <div class="uneditable_textarea">[% value FILTER html %]</div>
+    [% CASE constants.FIELD_TYPE_BUG_ID %]
+      [% IF value %]  
+          [% value FILTER bug_link(value, use_alias => 1) FILTER none %]
+      [% END %]
+    [% CASE [ constants.FIELD_TYPE_SINGLE_SELECT 
+              constants.FIELD_TYPE_MULTI_SELECT ] %]
+      [% FOREACH val = value %]
+        [% display_value(field.name, val) FILTER html %]
+        [% ', ' UNLESS loop.last() %]
+      [% END %]
+    [% CASE constants.FIELD_TYPE_BUG_URLS %]
+      [% '<ul class="bug_urls">' IF value.size %]
+        [% FOREACH bug_url = value %]
+          <li>
+            [% PROCESS bug_url_link bug_url = bug_url %]
+          </li>
+        [% END %]
+      [% '</ul>' IF value.size %]
+    [% CASE %]
+      [% value.join(', ') FILTER html %]
+  [% END %]
+[% END %]
+
+[% IF bug && field.name == 'component' %]
+  (<a href="buglist.cgi?component=[% bug.component FILTER uri %]&product=[% bug.product FILTER uri %]&bug_status=__open__"
+      target="_blank">show other [% terms.bugs %]</a>)
+[% END %]
+
+[% Hook.process('end_field_column') %]
+[% '</td>' IF NOT no_tds %]
+
+[%# for reverse relationships, we show this pseudo-field after the main field %]
+[% IF bug.id && field.is_relationship %]
+    [% extra_field_item = {} %]
+    [% extra_field_item.header = field.reverse_desc _ ":" FILTER html %]
+    [% extra_field_item.data = BLOCK %]
+        [% FOREACH depbug = bug.related_bugs(field) %]
+            [% depbug.id FILTER bug_link(depbug, use_alias => 1) FILTER none %][% " " %]
+        [% END %]
+    [% END %]
+[% ELSE %]
+    [% extra_field_item = '' %]
+[% END %]
+
+[% BLOCK bug_url_link %]
+  [% IF bug_url.isa('Bugzilla::BugUrl::Bugzilla::Local') %]
+    [% bug_url.target_bug_id FILTER bug_link(bug_url.target_bug_id, use_alias => 1) FILTER none %]
+  [% ELSE %]
+    <a href="[% bug_url.name FILTER html %]">
+      [% bug_url.name FILTER html %]</a>
+  [% END %]
+[% END %]
diff --git a/template/en/custom/bug/knob_DEFAULT.html.tmpl b/template/en/custom/bug/knob_DEFAULT.html.tmpl
deleted file mode 120000
index dd89fea..0000000
--- a/template/en/custom/bug/knob_DEFAULT.html.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-../../default/bug/knob.html.tmpl
\ No newline at end of file
diff --git a/template/en/custom/bug/knob_DEFAULT.html.tmpl b/template/en/custom/bug/knob_DEFAULT.html.tmpl
new file mode 100644
index 0000000..7046472
--- /dev/null
+++ b/template/en/custom/bug/knob_DEFAULT.html.tmpl
@@ -0,0 +1,84 @@
+[%# This Source Code Form is subject to the terms of the Mozilla Public
+  # License, v. 2.0. If a copy of the MPL was not distributed with this
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  #
+  # This Source Code Form is "Incompatible With Secondary Licenses", as
+  # defined by the Mozilla Public License, v. 2.0.
+  #%]
+
+<div id="status">
+  [% PROCESS bug/field.html.tmpl
+      no_tds = 1
+      field  = bug_fields.bug_status
+      value  = bug.bug_status
+      override_legal_values = bug.choices.bug_status
+      editable = bug.choices.bug_status.size > 1
+  %]
+
+  [% IF bug.resolution 
+        OR bug.check_can_change_field('resolution', bug.resolution, 1)
+  %]
+    <noscript><br>resolved as </noscript>
+  [% END %]
+
+  <span id="resolution_settings">
+  [% PROCESS bug/field.html.tmpl
+      no_tds = 1
+      field  = bug_fields.resolution
+      value  = bug.resolution
+      override_legal_values = bug.choices.resolution
+      editable = bug.check_can_change_field('resolution', bug.resolution, 1)
+  %]
+  </span>
+
+  [% IF bug.check_can_change_field('dup_id', 0, 1) %]
+    <noscript><br> duplicate</noscript>
+    <span id="duplicate_settings">of
+      <span id="dup_id_container" class="bz_default_hidden">
+        [% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %]
+        (<a href="#" id="dup_id_edit_action">edit</a>)
+      </span
+      ><input id="dup_id" name="dup_id" size="6"
+              value="[% bug.dup_id FILTER html %]">
+    </span>
+    [% IF bug.dup_id %]
+        <noscript>[% bug.dup_id FILTER bug_link(bug.dup_id) FILTER none %]</noscript>
+    [% END %]
+    <div id="dup_id_discoverable" class="bz_default_hidden">
+      <a href="#" id="dup_id_discoverable_action">Mark as Duplicate</a>
+    </div>
+  [% ELSIF bug.dup_id %]
+    <noscript><br> duplicate</noscript>
+    <span id="duplicate_display">of 
+      [% "${terms.bug} ${bug.dup_id}" FILTER bug_link(bug.dup_id) FILTER none %]</span>
+  [% END %]
+</div>
+
+<script type="text/javascript">
+  var close_status_array = [
+    [% FOREACH status = bug.choices.bug_status %]
+      [% NEXT IF status.is_open %]
+      '[% status.name FILTER js %]'[% ',' UNLESS loop.last %]
+    [% END %]
+  ];
+  YAHOO.util.Dom.removeClass('dup_id_discoverable', 'bz_default_hidden');
+  hideEditableField( "dup_id_container", "dup_id", 'dup_id_edit_action',
+                     'dup_id', '[% bug.dup_id FILTER js %]' )
+  showHideStatusItems( "",  ['[% "is_duplicate" IF bug.dup_id %]',
+                             '[% bug.bug_status FILTER js %]']);
+  YAHOO.util.Event.addListener( 'bug_status', "change", showHideStatusItems,
+                                ['[% "is_duplicate" IF bug.dup_id %]',
+                                 '[% bug.bug_status FILTER js %]']);
+  YAHOO.util.Event.addListener( 'resolution', "change", showDuplicateItem);
+  YAHOO.util.Event.addListener( 'dup_id_discoverable_action',
+                                'click',
+                                setResolutionToDuplicate,
+                                '[% Param('duplicate_or_move_bug_status')
+                                                                FILTER js %]');
+  YAHOO.util.Event.addListener( window, 'load',  showHideStatusItems,
+                              ['[% "is_duplicate" IF bug.dup_id %]',
+                               '[% bug.bug_status FILTER js %]'] );
+
+  [% INCLUDE "bug/field-events.js.tmpl" field = select_fields.bug_status %]
+  [% INCLUDE "bug/field-events.js.tmpl" field = select_fields.resolution %]
+</script>
diff --git a/template/en/custom/bug/knob_XFCE.html.tmpl b/template/en/custom/bug/knob_XFCE.html.tmpl
index 7976fb3..d87ad7c 100644
--- a/template/en/custom/bug/knob_XFCE.html.tmpl
+++ b/template/en/custom/bug/knob_XFCE.html.tmpl
@@ -45,7 +45,7 @@
   />
 
   <input type="hidden" name="bug_status" id="bug_status" value="[% bug.bug_status %]" />
-  <input type="hidden" name="resolution" id="resolution" value="[% bug.bug_resolution %]" />
+  <input type="hidden" name="resolution" id="resolution" value="[% bug.resolution %]" />
 </div>
 
 <script type="text/javascript">
diff --git a/template/en/custom/bug/navigate_DEFAULT.html.tmpl b/template/en/custom/bug/navigate_DEFAULT.html.tmpl
deleted file mode 120000
index 244ac19..0000000
--- a/template/en/custom/bug/navigate_DEFAULT.html.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-../../default/bug/navigate.html.tmpl
\ No newline at end of file
diff --git a/template/en/custom/bug/navigate_DEFAULT.html.tmpl b/template/en/custom/bug/navigate_DEFAULT.html.tmpl
new file mode 100644
index 0000000..b5e3ba7
--- /dev/null
+++ b/template/en/custom/bug/navigate_DEFAULT.html.tmpl
@@ -0,0 +1,72 @@
+[%# This Source Code Form is subject to the terms of the Mozilla Public
+  # License, v. 2.0. If a copy of the MPL was not distributed with this
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  #
+  # This Source Code Form is "Incompatible With Secondary Licenses", as
+  # defined by the Mozilla Public License, v. 2.0.
+  #%]
+
+[% RETURN IF !bug %]
+
+[% IF bottom_navigator == 1 %]
+  <ul class="related_actions">
+    <li><a href="show_bug.cgi?format=multiple&id=
+                [% bug.bug_id FILTER uri %]">Format For Printing</a></li>
+    <li> - <a href="show_bug.cgi?ctype=xml&id=
+                        [% bug.bug_id  FILTER uri %]">XML</a></li>
+    <li> - <a href="enter_bug.cgi?cloned_bug_id=
+                        [% bug.bug_id  FILTER uri %]">Clone This 
+                        [% terms.Bug %]</a></li>
+    [%# Links to more things users can do with this bug. %]
+    [% Hook.process("links") %]
+    <li> - <a href="#">Top of page </a></li>
+    </ul>
+[% END %]
+
+[% SET my_search = user.recent_search_for(bug) %]
+[% IF my_search %]
+  <div class="navigation">
+  [% SET last_bug_list = my_search.bug_list %]
+  [% SET this_bug_idx = lsearch(last_bug_list, bug.id) %]
+  <b>[% terms.Bug %] List:</b>
+
+  ([% this_bug_idx + 1 %] of [% last_bug_list.size %])
+
+  [% IF this_bug_idx > 0 %]
+    <a href="show_bug.cgi?id=
+             [%- last_bug_list.first FILTER uri %]&list_id=
+             [%- my_search.id FILTER uri %]">First</a>
+  [% ELSE %]
+    <span class="navigation_link">First</span>
+  [% END %]
+
+  [% IF this_bug_idx + 1 < last_bug_list.size %]
+    <a href="show_bug.cgi?id=
+             [%- last_bug_list.last FILTER uri %]&list_id=
+             [%- my_search.id FILTER uri %]">Last</a>
+  [% ELSE %]
+    <span class="navigation_link">Last</span>
+  [% END %]
+
+  [% IF this_bug_idx > 0 %]
+    [% prev_bug = this_bug_idx - 1 %]
+    <a href="show_bug.cgi?id=
+             [%- last_bug_list.$prev_bug FILTER uri %]&list_id=
+             [%- my_search.id FILTER uri %]">Prev</a>
+  [% ELSE %]
+    <span class="navigation_link">Prev</span>
+  [% END %]
+
+  [% IF this_bug_idx + 1 < last_bug_list.size %]
+    [% next_bug = this_bug_idx + 1 %]
+    <a href="show_bug.cgi?id=
+             [%- last_bug_list.$next_bug FILTER uri %]&list_id=
+             [%- my_search.id FILTER uri %]">Next</a>
+  [% ELSE %]
+    <span class="navigation_link">Next</span>
+  [% END %]
+
+    <a href="buglist.cgi?regetlastlist=
+              [%- my_search.id FILTER uri %]">Show last search results</a>
+  </div>
+[% END %]
diff --git a/template/en/custom/bug/show_DEFAULT.html.tmpl b/template/en/custom/bug/show_DEFAULT.html.tmpl
deleted file mode 120000
index aea9f73..0000000
--- a/template/en/custom/bug/show_DEFAULT.html.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-../../default/bug/show.html.tmpl
\ No newline at end of file
diff --git a/template/en/custom/bug/show_DEFAULT.html.tmpl b/template/en/custom/bug/show_DEFAULT.html.tmpl
new file mode 100644
index 0000000..b890511
--- /dev/null
+++ b/template/en/custom/bug/show_DEFAULT.html.tmpl
@@ -0,0 +1,36 @@
+[%# This Source Code Form is subject to the terms of the Mozilla Public
+  # License, v. 2.0. If a copy of the MPL was not distributed with this
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  #
+  # This Source Code Form is "Incompatible With Secondary Licenses", as
+  # defined by the Mozilla Public License, v. 2.0.
+  #%]
+
+[%# This script/template only handles one bug #%]
+[% bug = bugs.0 %]
+
+[% IF !header_done %]
+  [% PROCESS "bug/show-header.html.tmpl" %]
+  [% PROCESS global/header.html.tmpl %]
+[% END %]
+
+[% IF nextbug %]
+  <hr>
+  <p>
+    The next [% terms.bug %] in your list is [% terms.bug %]
+    <a href="show_bug.cgi?id=[% bug.bug_id %]">[% bug.bug_id %]</a>:
+  </p>
+  <hr>
+[% END %]
+
+[% PROCESS bug/navigate.html.tmpl %]
+
+[% PROCESS bug/edit.html.tmpl %]
+
+<hr>
+
+[% PROCESS bug/navigate.html.tmpl bottom_navigator => 1%]
+
+<br>
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/custom/global/choose-product_DEFAULT.html.tmpl b/template/en/custom/global/choose-product_DEFAULT.html.tmpl
deleted file mode 120000
index ed5d9ea..0000000
--- a/template/en/custom/global/choose-product_DEFAULT.html.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-../../default/global/choose-product.html.tmpl
\ No newline at end of file
diff --git a/template/en/custom/global/choose-product_DEFAULT.html.tmpl b/template/en/custom/global/choose-product_DEFAULT.html.tmpl
new file mode 100644
index 0000000..a158253
--- /dev/null
+++ b/template/en/custom/global/choose-product_DEFAULT.html.tmpl
@@ -0,0 +1,65 @@
+[%# This Source Code Form is subject to the terms of the Mozilla Public
+  # License, v. 2.0. If a copy of the MPL was not distributed with this
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  #
+  # This Source Code Form is "Incompatible With Secondary Licenses", as
+  # defined by the Mozilla Public License, v. 2.0.
+  #%]
+
+[%# INTERFACE:
+  # classifications: array of hashes, with an 'object' key representing a
+  #                  classification object and 'products' the list of
+  #                  product objects the user can enter bugs into.
+  # target:   the script that displays this template.
+  #%]
+
+[% IF target == "enter_bug.cgi" %]
+  [% title = "Enter $terms.Bug" %]
+  [% subheader = "Select Product" %]
+  [% h2 = BLOCK %]
+    [% IF Param('useclassification') %]Next[% ELSE %]First[% END %],
+    you must pick a product on which to enter [% terms.abug %]:
+  [% END %]
+[% ELSIF target == "describecomponents.cgi" %]
+  [% title = "Browse" %]
+  [% h2 = "Select a product category to browse:" %]
+[% END %]
+
+[% DEFAULT title = "Choose a Product" %]
+[% PROCESS global/header.html.tmpl %]
+
+[% USE Bugzilla %]
+[% previous_params = Bugzilla.cgi.canonicalise_query('classification', 'product') %]
+
+<h2>[% h2 FILTER html %]</h2>
+
+<table id="choose_product">
+
+[% FOREACH c = classifications %]
+  [% IF c.object %]
+    <tr>
+      <th colspan="2" class="left">[% c.object.name FILTER html %]:
+      [%+ c.object.description FILTER html_light %]</th>
+    </tr>
+  [% END %]
+
+  [% FOREACH p = c.products %]
+    <tr>
+      <th class="right nowrap">
+        <a href="[% target %]?product=[% p.name FILTER uri -%]
+              [%- IF previous_params %]&[% previous_params FILTER none %][% END -%]">
+        [% p.name FILTER html %]</a>:
+      </th>
+
+      <td>[% p.description FILTER html_light %]</td>
+    </tr>
+  [% END %]
+
+  <tr>
+    <th colspan="2"> </th>
+  </tr>
+[% END %]
+
+</table>
+
+[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/custom/global/common-links_DEFAULT.html.tmpl b/template/en/custom/global/common-links_DEFAULT.html.tmpl
deleted file mode 120000
index 38dff31..0000000
--- a/template/en/custom/global/common-links_DEFAULT.html.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-../../default/global/common-links.html.tmpl
\ No newline at end of file
diff --git a/template/en/custom/global/common-links_DEFAULT.html.tmpl b/template/en/custom/global/common-links_DEFAULT.html.tmpl
new file mode 100644
index 0000000..78b4eb8
--- /dev/null
+++ b/template/en/custom/global/common-links_DEFAULT.html.tmpl
@@ -0,0 +1,109 @@
+[%# This Source Code Form is subject to the terms of the Mozilla Public
+  # License, v. 2.0. If a copy of the MPL was not distributed with this
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  #
+  # This Source Code Form is "Incompatible With Secondary Licenses", as
+  # defined by the Mozilla Public License, v. 2.0.
+  #%]
+
+[% DEFAULT qs_suffix = "" %]
+[% USE Bugzilla %]
+
+<ul class="links">
+  <li><a href="./">Home</a></li>
+  <li><span class="separator">| </span><a href="enter_bug.cgi">New</a></li>
+  <li><span class="separator">| </span><a href="describecomponents.cgi">Browse</a></li>
+  <li><span class="separator">| </span><a href="query.cgi">Search</a></li>
+
+  <li class="form">
+    <span class="separator">| </span>
+    <form action="buglist.cgi" method="get"
+        onsubmit="if (this.quicksearch.value == '')
+                  { alert('Please enter one or more search terms first.');
+                    return false; } return true;">
+    <input type="hidden" id="no_redirect[% qs_suffix FILTER html %]" name="no_redirect" value="0">
+    <script type="text/javascript">
+      if (history && history.replaceState) {
+        var no_redirect = document.getElementById("no_redirect[% qs_suffix FILTER js %]");
+        no_redirect.value = 1;
+      }
+    </script>
+    <input class="txt" type="text" id="quicksearch[% qs_suffix FILTER html %]" name="quicksearch" 
+           title="Quick Search" value="[% quicksearch FILTER html %]">
+    <input class="btn" type="submit" value="Search" 
+           id="find[% qs_suffix FILTER html %]">
+    [%-# Work around FF bug: keep this on one line %]</form>
+  <a href="page.cgi?id=quicksearch.html" title="Quicksearch Help">[?]</a></li>
+
+  <li><span class="separator">| </span><a href="report.cgi">Reports</a></li>
+
+  <li>
+    [% IF Param('shutdownhtml') || Bugzilla.has_flags %]
+      <span class="separator">| </span>
+      [% IF user.id %]
+        <a href="request.cgi?requester=[% user.login FILTER uri %]&requestee=
+                 [% user.login FILTER uri %]&do_union=1&group=type&action=queue">My Requests</a>
+      [% ELSE %]
+        <a href="request.cgi">Requests</a>
+      [% END %]
+    [% END %]
+  [%-# Work around FF bug: keep this on one line %]</li>
+
+  [% Hook.process('action-links') %]
+
+  [% IF user.login %]
+    <li><span class="separator">| </span><a href="userprefs.cgi">Preferences</a></li>
+    [% IF user.can_administer %]
+      <li><span class="separator">| </span><a href="admin.cgi">Administration</a></li>
+    [% END %]
+
+    [% PROCESS link_to_documentation %]
+
+    <li>
+      <span class="separator">| </span>
+      [% IF user.authorizer.can_logout %]
+        <a href="index.cgi?logout=1">Log out</a>
+      [% ELSE %]
+        Logged in as
+      [% END %]
+      [% IF sudoer %]
+        [%+ sudoer.login FILTER html %] (<b>impersonating
+        [%+ user.login FILTER html %]</b>
+        <a href="relogin.cgi?action=end-sudo">end session</a>)
+      [% ELSE %]
+        [%+ user.login FILTER html %]
+      [% END %]
+    [%-# Work around FF bug: keep this on one line %]</li>
+  [% ELSE %]
+  
+    [% PROCESS link_to_documentation %]
+    
+    [% IF Param('createemailregexp')
+          && user.authorizer.user_can_create_account %]
+      <li id="new_account_container[% qs_suffix FILTER html %]">
+        <span class="separator">| </span>
+        <a href="createaccount.cgi">New Account</a>
+      </li>
+    [% END %]
+
+    [%# Only display one login form when we're on a LOGIN_REQUIRED page. That
+      # way, we're guaranteed that the user will use the form that has 
+      # hidden_fields in it (the center form) instead of this one. Also, it's
+      # less confusing to have one form (as opposed to  three) when you're 
+      # required to log in.
+      #%]
+    [% IF user.authorizer.can_login && !Bugzilla.page_requires_login %]
+      [% PROCESS "account/auth/login-small.html.tmpl" %]
+    [% END %]
+  [% END %]
+</ul>
+
+[% Hook.process("link-row") %]
+[% BLOCK link_to_documentation %]
+    [% IF doc_section %]
+      <li>
+        <span class="separator">| </span>
+        <a href="[% docs_urlbase _ doc_section FILTER html %]" target="_blank">Help</a>
+      </li>
+    [% END %]
+[% END %]
diff --git a/template/en/custom/global/footer_DEFAULT.html.tmpl b/template/en/custom/global/footer_DEFAULT.html.tmpl
deleted file mode 120000
index f2e5690..0000000
--- a/template/en/custom/global/footer_DEFAULT.html.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-../../default/global/footer.html.tmpl
\ No newline at end of file
diff --git a/template/en/custom/global/footer_DEFAULT.html.tmpl b/template/en/custom/global/footer_DEFAULT.html.tmpl
new file mode 100644
index 0000000..7cc5e1b
--- /dev/null
+++ b/template/en/custom/global/footer_DEFAULT.html.tmpl
@@ -0,0 +1,27 @@
+[%# This Source Code Form is subject to the terms of the Mozilla Public
+  # License, v. 2.0. If a copy of the MPL was not distributed with this
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  #
+  # This Source Code Form is "Incompatible With Secondary Licenses", as
+  # defined by the Mozilla Public License, v. 2.0.
+  #%]
+
+[%# INTERFACE:
+  # This template has no interface. However, you must fulfill the interface to
+  # global/useful-links.html.tmpl.
+  #%]
+
+      [% Hook.process('main-end') %]
+    </div>
+
+    <div id="footer">
+      <div class="intro">[% Hook.process('intro') %]</div>
+
+      [% PROCESS "global/useful-links.html.tmpl" %]
+
+      <div class="outro">[% Hook.process('outro') %]</div>
+    </div>
+
+    [% Hook.process("end") %]
+  </body>
+</html>
diff --git a/template/en/custom/global/useful-links_DEFAULT.html.tmpl b/template/en/custom/global/useful-links_DEFAULT.html.tmpl
deleted file mode 120000
index 3b2ca14..0000000
--- a/template/en/custom/global/useful-links_DEFAULT.html.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-../../default/global/useful-links.html.tmpl
\ No newline at end of file
diff --git a/template/en/custom/global/useful-links_DEFAULT.html.tmpl b/template/en/custom/global/useful-links_DEFAULT.html.tmpl
new file mode 100644
index 0000000..5c5bfc3
--- /dev/null
+++ b/template/en/custom/global/useful-links_DEFAULT.html.tmpl
@@ -0,0 +1,72 @@
+[%# This Source Code Form is subject to the terms of the Mozilla Public
+  # License, v. 2.0. If a copy of the MPL was not distributed with this
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  #
+  # This Source Code Form is "Incompatible With Secondary Licenses", as
+  # defined by the Mozilla Public License, v. 2.0.
+  #%]
+
+<ul id="useful-links">
+  <li id="links-actions">
+      [% PROCESS "global/common-links.html.tmpl" qs_suffix = "_bottom" %]
+  </li>
+
+  [%# Saved searches %]
+
+  [% IF user.showmybugslink OR user.queries.size %]
+    <li id="links-saved">
+      <ul class="links">
+        [% print_pipe = 0 %]
+        [% IF user.showmybugslink %]
+          [% filtered_username = user.login FILTER uri %]
+          <li>
+            <a href="[% Param('mybugstemplate').replace('%userid%', filtered_username) %]">My [% terms.Bugs %]</a>
+          </li>
+          [% print_pipe = 1 %]
+        [% END %]
+
+        [% FOREACH q = user.queries %]
+          [% NEXT UNLESS q.link_in_footer %]
+          <li>
+            [% '<span class="separator">| </span>' IF print_pipe %]
+            <a href="buglist.cgi?cmdtype=runnamed&namedcmd=[% q.name FILTER uri %]">[% q.name FILTER html %]</a>
+          </li>
+          [% print_pipe = 1 %]
+        [% END %]
+      </ul>
+    </li>
+  [% END %]
+
+  [% IF user.queries_subscribed.size %]
+    <li id="links-shared">
+      <ul class="links">
+        [% FOREACH q = user.queries_subscribed %]
+          <li>
+            [% '<span class="separator">| </span>' UNLESS loop.first %]
+            <a href="buglist.cgi?cmdtype=dorem&remaction=run&namedcmd=
+                     [%- q.name FILTER uri %]&sharer_id=[% q.user.id FILTER uri %]"
+               class="shared" title="Shared by [% q.user.identity FILTER html %]">
+              [%- q.name FILTER html %]</a>
+          </li>
+        [% END %]
+      </ul>
+    </li>
+  [% END %]
+
+  [% IF user.reports.size %]
+    <li id="reports-saved">
+      <ul class="links">
+        [% FOREACH r = user.reports %]
+          <li>
+            [% '<span class="separator">| </span>' UNLESS loop.first %]
+            <a href="report.cgi?[% r.query FILTER html %]&saved_report_id=
+                     [%~ r.id FILTER uri %]">[% r.name FILTER html %]</a>
+          </li>
+        [% END %]
+      </ul>
+    </li>
+  [% END %]
+
+  [%# Sections of links to more things users can do on this installation. %]
+  [% Hook.process("end") %]
+</ul>
diff --git a/template/en/custom/index.html.tmpl b/template/en/custom/index.html.tmpl
index 24cd332..0aad96b 100644
--- a/template/en/custom/index.html.tmpl
+++ b/template/en/custom/index.html.tmpl
@@ -103,6 +103,8 @@
     </ul>
   </div>
 
+  [% Hook.process('xfce_index') %]
+
   <div id="common_queries">
     <h4>Common Queries:</h4>
     <ul>
diff --git a/template/en/custom/list/list_XFCE.html.tmpl b/template/en/custom/list/list_XFCE.html.tmpl
index f3a45f1..0a87b9c 100644
--- a/template/en/custom/list/list_XFCE.html.tmpl
+++ b/template/en/custom/list/list_XFCE.html.tmpl
@@ -74,7 +74,7 @@
   'nowordssubstr', 'notmatches', 'isempty', 'isnotempty'
 ] %]
 
-<h2>Search results ([% bugs.size %] bugs)</h2>
+<h2>Search results ([% bugs.size %] bug[% IF bugs.size != 1 %]s[% END %])</h2>
 [% IF default_limited AND bugs.size >= Param('default_search_limit') %]
   <p>This result was limited to [% Param('default_search_limit') FILTER html %] [%+ terms.bugs %].
     <a href="buglist.cgi?[% urlquerypart FILTER html %]
@@ -96,7 +96,21 @@
     [% END %]
     [% IF debug %]
       (<code>[% desc_item.term FILTER html %]</code>)
-   [% END %]
+    [% END %]
+
+    [% IF !Bugzilla.cgi.param('namedcmd') %]
+      [% FOREACH p = Bugzilla.cgi.param() %]
+        [% IF Bugzilla.cgi.param(p) == desc_item.field %]
+          [% field_param = p %]
+        [% END %]
+      [% END %]
+      [% IF desc_item.field == 'assigned_to' || desc_item.field == 'cc' || desc_item.field == 'qa_contact' || desc_item.field == 'reporter' %]
+        [% previous_params = Bugzilla.cgi.canonicalise_query('email' _ desc_item.field _ '1', 'email' _ desc_item.field _ '2', 'email' _ desc_item.field _ '3', field_param) %]
+      [% ELSE %]
+        [% previous_params = Bugzilla.cgi.canonicalise_query(desc_item.field, field_param) %]
+      [% END %]
+      [% IF previous_params %]   <a class="action-link" href="buglist.cgi?[% previous_params %]">Remove filter[% IF desc_item.value.split(',').size > 1 %]s[% END %]</a>[% END %]
+    [% END %]
   </li>
 [% END %]
 </ul>
diff --git a/template/en/custom/list/table.html.tmpl b/template/en/custom/list/table.html.tmpl
index 7f3ad21..25577b0 100644
--- a/template/en/custom/list/table.html.tmpl
+++ b/template/en/custom/list/table.html.tmpl
@@ -1,267 +1,5 @@
-[%# This Source Code Form is subject to the terms of the Mozilla Public
-  # License, v. 2.0. If a copy of the MPL was not distributed with this
-  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
-  #
-  # This Source Code Form is "Incompatible With Secondary Licenses", as
-  # defined by the Mozilla Public License, v. 2.0.
-  #%]
-
-[%############################################################################%]
-[%# Initialization                                                           #%]
-[%############################################################################%]
-
-[%# Don't display the table or do any processing if there are no bugs 
-  # to display %]
-[% RETURN IF !bugs.size %]
-
-[%# Columns whose titles or values should be abbreviated to make the list
-  # more compact.  For columns whose titles should be abbreviated,
-  # the shortened title is included.  For columns whose values should be
-  # abbreviated, a maximum length is provided along with the ellipsis that
-  # should be added to an abbreviated value, if any.
-  # wrap is set if a column's contents should be allowed to be word-wrapped
-  # by the browser.
-  #%]
-
-[% field_descs.short_short_desc     = field_descs.short_desc  %]
-[% field_descs.assigned_to_realname = field_descs.assigned_to %]
-[% field_descs.reporter_realname    = field_descs.reporter    %]
-[% field_descs.qa_contact_realname  = field_descs.qa_contact  %]
-
-[%# Setting maxlength => 0 means no limit. We set it for performance reasons. %]
-[% abbrev = 
-  {
-    "bug_severity"         => { maxlength => 3 , title => "Sev" } , 
-    "priority"             => { maxlength => 7 , title => "Pri" } , 
-    "rep_platform"         => { maxlength => 3 , title => "HW" } , 
-    "bug_status"           => { maxlength => 4 } , 
-    "assigned_to"          => { maxlength => 30 , ellipsis => "..." } , 
-    "assigned_to_realname" => { maxlength => 20 , ellipsis => "..." } , 
-    "reporter"             => { maxlength => 30 , ellipsis => "..." } , 
-    "reporter_realname"    => { maxlength => 20 , ellipsis => "..." } , 
-    "qa_contact"           => { maxlength => 30 , ellipsis => "..." , title => "QAContact" } , 
-    "qa_contact_realname"  => { maxlength => 20 , ellipsis => "..." , title => "QAContact" } , 
-    "resolution"        => { maxlength => 4 } , 
-    "short_desc"        => { maxlength => 0, wrap => 1 } ,
-    "short_short_desc"  => { maxlength => 60 , ellipsis => "..." , wrap => 1 } ,
-    "status_whiteboard" => { maxlength => 0, title => "Whiteboard" , wrap => 1 } , 
-    "keywords"          => { maxlength => 0, wrap => 1 } ,
-    "tags"              => { maxlength => 0, title => "Tags", wrap => 1},
-    "dependson"         => { maxlength => 0, wrap => 1 } ,
-    "blocked"           => { maxlength => 0, wrap => 1 } ,
-    "flagtypes.name"    => { maxlength => 0, wrap => 1 } ,
-    "component"         => { maxlength => 8 , title => "Comp" } , 
-    "product"           => { maxlength => 12 } , 
-    "version"           => { maxlength => 7 , title => "Vers" } ,
-    "op_sys"            => { maxlength => 12 } ,
-    "bug_file_loc"      => { maxlength => 30 } , 
-    "target_milestone"  => { maxlength => 0, title => "TargetM" } , 
-    "longdescs.count"   => { maxlength => 0, title => "# Comments" },
-    "percentage_complete" => { maxlength => 0, format_value => "%d %%" } , 
-  }
-%]
-
-[% PROCESS bug/time.html.tmpl %]
-
-[% Hook.process("before_table") %]
-
-[%############################################################################%]
-[%# Table Header                                                             #%]
-[%############################################################################%]
-
-[% tableheader = BLOCK %]
-  <table class="bz_buglist">
-    <tr class="bz_buglist_header bz_first_buglist_header">
-      [% IF dotweak %]
-      <th> </th>
-      [% END %]
-      <th colspan="[% splitheader ? 2 : 1 %]" class="first-child">
-        <a href="buglist.cgi?
-                  [% urlquerypart FILTER html %]&order=
-                  [% PROCESS new_order id='bug_id' %]
-                  [%-#%]&query_based_on=
-                  [% defaultsavename OR searchname FILTER uri %]">ID
-          [% PROCESS order_arrow id='bug_id' ~%]
-        </a>
-      </th>
-
-      [% IF splitheader %]
-
-        [% FOREACH id = displaycolumns %]
-          [% NEXT UNLESS loop.count() % 2 == 0 %]
-          [% column = columns.$id %]
-          [% PROCESS columnheader %]
-        [% END %]
-
-        </tr><tr class="bz_buglist_header">
-        [% IF dotweak %]
-          <th> </th>
-        [% END %]
-        <th> </th>
-
-        [% FOREACH id = displaycolumns %]
-          [% NEXT IF loop.count() % 2 == 0 %]
-          [% column = columns.$id %]
-          [% PROCESS columnheader %]
-        [% END %]
-
-      [% ELSE %]
-
-        [% FOREACH id = displaycolumns %]
-          [% column = columns.$id %]
-          [% PROCESS columnheader %]
-        [% END %]
-
-      [% END %]
-
-    </tr>
-[% END %]
-
-[% BLOCK columnheader %]
-  <th colspan="[% splitheader ? 2 : 1 %]">
-    <a href="buglist.cgi?[% urlquerypart FILTER html %]&order=
-      [% PROCESS new_order %]
-      [%-#%]&query_based_on=
-      [% defaultsavename OR searchname FILTER uri %]">
-        [%- abbrev.$id.title || field_descs.$id || column.title FILTER html -%]
-        [% PROCESS order_arrow ~%]
-    </a>
-  </th>
-[% END %]
-
-[% BLOCK new_order %]
-  [% desc = '' %]
-  [% IF (om = order.match("\\b$id( DESC)?")) %]
-    [% desc = ' DESC' IF NOT om.0 %]
-  [% END %]
-  [% id _ desc FILTER uri %]
-  [% IF id != 'bug_id' AND order %]
-    [% ',' _ order.remove("\\b$id( DESC)?(,\\s*|\$)") FILTER uri %]
-  [% END %]
-[% END %]
-
-[% BLOCK order_arrow %]
-  [% IF order.search("^$id DESC") %]
-    <span class="bz_sort_order_primary">&#x25BC;</span>
-  [% ELSIF order.search("^$id(,\\s*|\$)") %]
-    <span class="bz_sort_order_primary">&#x25B2;</span>
-  [% ELSIF order.search("\\b$id DESC") %]
-    <span class="bz_sort_order_secondary">&#x25BC;</span>
-  [% ELSIF order.search("\\b$id(,\\s*|\$)") %]
-    <span class="bz_sort_order_secondary">&#x25B2;</span>
-  [% END %]
-[% END %]
-
-[%############################################################################%]
-[%# Bug Table                                                                #%]
-[%############################################################################%]
-
-[% tableheader %]
-
-[% FOREACH bug = bugs %]
-  [% count = loop.count() %]
-
-  <tr id="b[% bug.bug_id %]" class="bz_bugitem
-             bz_[% bug.bug_severity FILTER css_class_quote -%]
-             bz_[% bug.priority FILTER css_class_quote -%]
-             bz_[% bug.bug_status FILTER css_class_quote -%]
-             [%+ "bz_$bug.resolution" FILTER css_class_quote IF bug.resolution -%]
-             [%+ "bz_secure" IF bug.secure_mode -%]
-             [%+ "bz_secure_mode_$bug.secure_mode" FILTER css_class_quote IF bug.secure_mode -%]
-             [%+ count % 2 == 1 ? "bz_row_odd" : "bz_row_even" -%]
-             ">
-
-    [% IF dotweak %]
-    <td class="bz_checkbox_column">
-      <input type="checkbox" name="id_[% bug.bug_id %]">
-    </td>
-    [% END %]
-    <td class="first-child bz_id_column">
-      <a href="show_bug.cgi?id=[% bug.bug_id %]">[% bug.bug_id %]</a>
-      <span class="bz_default_hidden">[%+ '[SEC]' IF bug.secure_mode %]</span>
-    </td>
-
-    [% FOREACH column = displaycolumns %]
-    [% col_abbrev = abbrev.$column %]
-    <td class="bz_[% column FILTER css_class_quote %]_column
-      [%~ ' nowrap' UNLESS col_abbrev.wrap
-        OR bug_fields.$column.type == constants.FIELD_TYPE_FREETEXT
-        OR  bug_fields.$column.type == constants.FIELD_TYPE_TEXTAREA %]">
-      [% IF col_abbrev.maxlength %]
-        <span title="[%- display_value(column, bug.$column) FILTER html %]">
-      [% END %]
-      [% IF col_abbrev.format_value %]
-        [%- bug.$column FILTER format(col_abbrev.format_value) FILTER html -%]
-      [% ELSIF column == 'actual_time' ||
-               column == 'remaining_time' ||
-               column == 'estimated_time' %]
-        [% PROCESS formattimeunit time_unit=bug.$column %] 
-      [%# Display the login name of the user if their real name is empty. %]
-      [% ELSIF column.search('_realname$') && bug.$column == '' %]
-        [% SET login_column = column.remove('_realname$') %]
-        [% bug.${login_column}.truncate(col_abbrev.maxlength,
-                                        col_abbrev.ellipsis) FILTER html %]
-      [% ELSIF column == 'short_desc' || column == "short_short_desc" %]
-        <a href="show_bug.cgi?id=[% bug.bug_id FILTER html %]">
-          [%- bug.$column.truncate(col_abbrev.maxlength, col_abbrev.ellipsis) FILTER html -%]
-        </a>
-      [% ELSIF bug_fields.$column.type == constants.FIELD_TYPE_BUG_ID %]
-        <a href="show_bug.cgi?id=[% bug.$column FILTER html %]">
-          [%- bug.$column.truncate(col_abbrev.maxlength, col_abbrev.ellipsis) FILTER html -%]
-        </a>
-      [% ELSIF bug_fields.$column.type == constants.FIELD_TYPE_TEXTAREA %]
-        [%- bug.$column.truncate(256, '...') FILTER html -%]
-      [% ELSIF column == 'bug_file_loc' && is_safe_url(bug.bug_file_loc) %]
-        <a href="[% bug.bug_file_loc FILTER html %]" target="_blank"
-           rel="noreferrer" title="[% bug.bug_file_loc FILTER html %]">
-          [%- display_value(column, bug.$column).truncate(col_abbrev.maxlength, col_abbrev.ellipsis) FILTER html -%]
-        </a>
-      [% ELSE %]
-        [%- display_value(column, bug.$column).truncate(col_abbrev.maxlength, col_abbrev.ellipsis) FILTER html -%]
-      [% END %]
-      [% IF col_abbrev.maxlength %]
-        </span>
-      [% END %]
-    </td>
-    [% END %]
-
-  </tr>
-[% END %]
-
-[% IF time_info.time_present %]
-  [% PROCESS time_summary_line %]
-[% END %]
-
-</table>
-
-[% BLOCK time_summary_line %]
-  <tr class="bz_time_summary_line">
-    [% columns_to_span = 1 %]  [%# bugID %]
-    [% IF dotweak %]
-      [% columns_to_span = columns_to_span + 1 %]
-    [% END %]
-    [% FOREACH column = displaycolumns %]
-      [% IF column == 'actual_time' ||
-            column == 'remaining_time' ||
-            column == 'estimated_time' ||
-            column == 'percentage_complete' %]
-        [% IF columns_to_span > 0 %]
-          <td class="bz_total bz_total_label" colspan="
-              [%- columns_to_span FILTER html %]"><b>Totals</b></td>
-          [% columns_to_span = 0 %]
-        [% END %]
-        [% IF column == 'percentage_complete' %]
-          <td class="bz_total">[% time_info.percentage_complete
-              FILTER format(abbrev.$column.format_value) FILTER html %]</td>
-        [% ELSE %]
-          <td class="bz_total">
-            [%- PROCESS formattimeunit time_unit=time_info.$column %]</td>
-        [% END %]
-      [% ELSIF columns_to_span == 0 %] [%# A column following the first total %]
-        <td class="bz_total"> </td>
-      [% ELSE %] [%# We haven't gotten to a time column yet, keep computing span %]
-        [% columns_to_span = columns_to_span + 1 %]
-      [% END %]
-    [% END %]
-  </tr>
+[% IF user.settings.skin.value == 'Xfce' %]
+  [% PROCESS 'list/table_XFCE.html.tmpl' %]
+[% ELSE %]
+  [% PROCESS 'list/table_DEFAULT.html.tmpl' %]
 [% END %]
diff --git a/template/en/custom/list/table.html.tmpl b/template/en/custom/list/table.html.tmpl.OLD
similarity index 100%
copy from template/en/custom/list/table.html.tmpl
copy to template/en/custom/list/table.html.tmpl.OLD
diff --git a/template/en/custom/list/table.html.tmpl b/template/en/custom/list/table_DEFAULT.html.tmpl
similarity index 98%
copy from template/en/custom/list/table.html.tmpl
copy to template/en/custom/list/table_DEFAULT.html.tmpl
index 7f3ad21..d3abc9b 100644
--- a/template/en/custom/list/table.html.tmpl
+++ b/template/en/custom/list/table_DEFAULT.html.tmpl
@@ -51,8 +51,8 @@
     "blocked"           => { maxlength => 0, wrap => 1 } ,
     "flagtypes.name"    => { maxlength => 0, wrap => 1 } ,
     "component"         => { maxlength => 8 , title => "Comp" } , 
-    "product"           => { maxlength => 12 } , 
-    "version"           => { maxlength => 7 , title => "Vers" } ,
+    "product"           => { maxlength => 8 } , 
+    "version"           => { maxlength => 5 , title => "Vers" } , 
     "op_sys"            => { maxlength => 12 } ,
     "bug_file_loc"      => { maxlength => 30 } , 
     "target_milestone"  => { maxlength => 0, title => "TargetM" } , 
diff --git a/template/en/custom/list/table.html.tmpl b/template/en/custom/list/table_XFCE.html.tmpl
similarity index 89%
copy from template/en/custom/list/table.html.tmpl
copy to template/en/custom/list/table_XFCE.html.tmpl
index 7f3ad21..13c9762 100644
--- a/template/en/custom/list/table.html.tmpl
+++ b/template/en/custom/list/table_XFCE.html.tmpl
@@ -50,8 +50,6 @@
     "dependson"         => { maxlength => 0, wrap => 1 } ,
     "blocked"           => { maxlength => 0, wrap => 1 } ,
     "flagtypes.name"    => { maxlength => 0, wrap => 1 } ,
-    "component"         => { maxlength => 8 , title => "Comp" } , 
-    "product"           => { maxlength => 12 } , 
     "version"           => { maxlength => 7 , title => "Vers" } ,
     "op_sys"            => { maxlength => 12 } ,
     "bug_file_loc"      => { maxlength => 30 } , 
@@ -60,6 +58,10 @@
     "percentage_complete" => { maxlength => 0, format_value => "%d %%" } , 
   }
 %]
+[%#
+    "product"           => { maxlength => 12 } ,
+    "component"         => { maxlength => 8 , title => "Comp" } , 
+%]
 
 [% PROCESS bug/time.html.tmpl %]
 
@@ -201,6 +203,18 @@
         [% SET login_column = column.remove('_realname$') %]
         [% bug.${login_column}.truncate(col_abbrev.maxlength,
                                         col_abbrev.ellipsis) FILTER html %]
+      [% ELSIF column == 'product' && !Bugzilla.cgi.param('namedcmd') %]
+        [% USE Bugzilla %]
+        [% previous_params_product = Bugzilla.cgi.canonicalise_query('product') %]
+        <a class="no-color" href="buglist.cgi?product=[% bug.product %][% IF previous_params_product %]&[% previous_params_product %][% END %]">[% bug.product %]</a>
+      [% ELSIF column == 'component' && !Bugzilla.cgi.param('namedcmd') %]
+        [% USE Bugzilla %]
+        [% previous_params_component = Bugzilla.cgi.canonicalise_query('product', 'component') %]
+        <a class="no-color" href="buglist.cgi?product=[% bug.product %]&component=[% bug.component %][% IF previous_params_component %]&[% previous_params_component %][% END %]">[% bug.component %]</a>
+      [% ELSIF column == 'assigned_to' && !Bugzilla.cgi.param('namedcmd') %]
+        [% USE Bugzilla %]
+        [% previous_params_assigned_to = Bugzilla.cgi.canonicalise_query('email1', 'emailassigned_to1', 'emailtype1') %]
+        <a class="no-color" href="buglist.cgi?email1=[% bug.assigned_to %]&emailassigned_to1=1&emailtype1=equals[% IF previous_params_assigned_to %]&[% previous_params_assigned_to %][% END %]">[% bug.assigned_to %]</a>
       [% ELSIF column == 'short_desc' || column == "short_short_desc" %]
         <a href="show_bug.cgi?id=[% bug.bug_id FILTER html %]">
           [%- bug.$column.truncate(col_abbrev.maxlength, col_abbrev.ellipsis) FILTER html -%]

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list