[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">▼</span>
- [% ELSIF order.search("^$id(,\\s*|\$)") %]
- <span class="bz_sort_order_primary">▲</span>
- [% ELSIF order.search("\\b$id DESC") %]
- <span class="bz_sort_order_secondary">▼</span>
- [% ELSIF order.search("\\b$id(,\\s*|\$)") %]
- <span class="bz_sort_order_secondary">▲</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