summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--template/en/default/account/cancel-token.txt.tmpl39
-rw-r--r--template/en/default/account/create.html.tmpl58
-rw-r--r--template/en/default/account/created.html.tmpl38
-rw-r--r--template/en/default/account/email/change-new.txt.tmpl36
-rw-r--r--template/en/default/account/email/change-old.txt.tmpl35
-rw-r--r--template/en/default/account/email/confirm.html.tmpl44
-rw-r--r--template/en/default/account/exists.html.tmpl34
-rw-r--r--template/en/default/account/prefs/account.html.tmpl99
-rw-r--r--template/en/default/account/prefs/email.html.tmpl157
-rw-r--r--template/en/default/account/prefs/footer.html.tmpl76
-rw-r--r--template/en/default/account/prefs/permissions.html.tmpl57
-rw-r--r--template/en/default/account/prefs/prefs.html.tmpl113
-rw-r--r--template/en/default/attachment/content-types.html.tmpl27
-rw-r--r--template/en/default/attachment/create.html.tmpl130
-rw-r--r--template/en/default/attachment/created.html.tmpl56
-rw-r--r--template/en/default/attachment/edit.html.tmpl226
-rw-r--r--template/en/default/attachment/list.html.tmpl81
-rw-r--r--template/en/default/attachment/show-multiple.html.tmpl98
-rw-r--r--template/en/default/attachment/updated.html.tmpl46
-rw-r--r--template/en/default/bug/activity/show.html.tmpl43
-rw-r--r--template/en/default/bug/activity/table.html.tmpl91
-rw-r--r--template/en/default/bug/choose-xml.html.tmpl47
-rw-r--r--template/en/default/bug/choose.html.tmpl36
-rw-r--r--template/en/default/bug/comments.html.tmpl54
-rw-r--r--template/en/default/bug/create/create.html.tmpl257
-rw-r--r--template/en/default/bug/create/created.html.tmpl47
-rw-r--r--template/en/default/bug/create/initial-comment.txt.tmpl21
-rw-r--r--template/en/default/bug/create/make-template.html.tmpl33
-rw-r--r--template/en/default/bug/dependency-graph.html.tmpl98
-rw-r--r--template/en/default/bug/dependency-tree.html.tmpl208
-rw-r--r--template/en/default/bug/edit.html.tmpl540
-rw-r--r--template/en/default/bug/navigate.html.tmpl54
-rw-r--r--template/en/default/bug/show-multiple.html.tmpl156
-rw-r--r--template/en/default/bug/votes/delete-all.html.tmpl46
-rw-r--r--template/en/default/bug/votes/list-for-bug.html.tmpl49
-rw-r--r--template/en/default/bug/votes/list-for-user.html.tmpl130
-rw-r--r--template/en/default/global/choose-product.html.tmpl42
-rw-r--r--template/en/default/global/code-error.html.tmpl57
-rw-r--r--template/en/default/global/footer.html.tmpl6
-rw-r--r--template/en/default/global/header.html.tmpl64
-rw-r--r--template/en/default/global/hidden-fields.html.tmpl32
-rw-r--r--template/en/default/global/message.html.tmpl17
-rw-r--r--template/en/default/global/user-error.html.tmpl40
-rw-r--r--template/en/default/index.html.tmpl88
-rw-r--r--template/en/default/list/change-columns.html.tmpl51
-rw-r--r--template/en/default/list/edit-multiple.html.tmpl316
-rw-r--r--template/en/default/list/list-rdf.rdf.tmpl54
-rw-r--r--template/en/default/list/list-simple.html.tmpl45
-rw-r--r--template/en/default/list/list.html.tmpl161
-rw-r--r--template/en/default/list/quips.html.tmpl65
-rw-r--r--template/en/default/list/server-push.html.tmpl36
-rw-r--r--template/en/default/list/table.html.tmpl143
-rw-r--r--template/en/default/reports/components.html.tmpl88
-rw-r--r--template/en/default/reports/duplicates.html.tmpl276
-rw-r--r--template/en/default/reports/keywords.html.tmpl75
-rw-r--r--template/en/default/search/search-advanced.html.tmpl869
-rw-r--r--template/en/default/search/search.html.tmpl869
-rw-r--r--template/en/default/sidebar.xul.tmpl123
58 files changed, 6877 insertions, 0 deletions
diff --git a/template/en/default/account/cancel-token.txt.tmpl b/template/en/default/account/cancel-token.txt.tmpl
new file mode 100644
index 000000000..b37d0da2d
--- /dev/null
+++ b/template/en/default/account/cancel-token.txt.tmpl
@@ -0,0 +1,39 @@
+[%# 1.0@bugzilla.org %]
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): John Vandenberg <zeroj@null.net>
+ #%]
+From: bugzilla-admin-daemon
+To: [% emailaddress %]
+Subject: [% tokentype %] token cancelled
+
+A token was cancelled from [% remoteaddress %].
+If you did not request this, it could be either an honest
+mistake or the result of a malicious hack attempt.
+
+Take a look at the information below and forward this email
+to [% maintainer %] if you suspect foul play.
+
+ Token: [% token %]
+ Token Type: [% tokentype %]
+ User: [% emailaddress %]
+ Issue Date: [% issuedate %]
+ Event Data: [% eventdata %]
+Cancelled Because: [% cancelaction %]
+
+
diff --git a/template/en/default/account/create.html.tmpl b/template/en/default/account/create.html.tmpl
new file mode 100644
index 000000000..e39d6ff5e
--- /dev/null
+++ b/template/en/default/account/create.html.tmpl
@@ -0,0 +1,58 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Create a new Bugzilla account"
+%]
+
+<p>
+ To create a Bugzilla account, all that you need to do is to enter a
+ legitimate e-mail address. The account will be created, and its
+ password will be mailed to you. Optionally you may enter your real name
+ as well.
+</p>
+
+<form method="get" action="createaccount.cgi">
+ <table>
+ <tr>
+ <td align="right">
+ <b>E-mail address:</b>
+ </td>
+ <td>
+ <input size="35" name="login">
+ [% Param('emailsuffix') FILTER html %]
+ </td>
+ </tr>
+
+ <tr>
+ <td align="right">
+ <b>Real name:</b>
+ </td>
+ <td>
+ <input size="35" name="realname">
+ </td>
+ </tr>
+ </table>
+ <br>
+ <input type="submit" value="Create Account">
+</form>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/account/created.html.tmpl b/template/en/default/account/created.html.tmpl
new file mode 100644
index 000000000..46bc82ad2
--- /dev/null
+++ b/template/en/default/account/created.html.tmpl
@@ -0,0 +1,38 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Account Created"
+%]
+
+<p>
+ A new account,
+ <tt>[% login FILTER html %]</tt>,
+ has been created and a randomly-generated password has been e-mailed
+ to that address.
+</p>
+
+<p>
+ When the e-mail arrives,
+ <a href="query.cgi?GoAheadAndLogIn=1">log in here</a>.
+</p>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/account/email/change-new.txt.tmpl b/template/en/default/account/email/change-new.txt.tmpl
new file mode 100644
index 000000000..5a5ae2535
--- /dev/null
+++ b/template/en/default/account/email/change-new.txt.tmpl
@@ -0,0 +1,36 @@
+[%# 1.0@bugzilla.org %]
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): John Vandenberg <zeroj@null.net>
+ #%]
+From: bugzilla-admin-daemon
+To: [% emailaddress %]
+Subject: Bugzilla Change Email Address Request
+
+Bugzilla has received a request to change the email address
+for the [% oldemailaddress %] account to your address.
+
+To confirm the change, visit the following link:
+
+[% Param('urlbase') %]token.cgi?a=cfmem&t=[% token FILTER html %]
+
+If you are not the person who made this request, or you wish to cancel
+this request, visit the following link:
+
+[% Param('urlbase') %]token.cgi?a=cxlem&t=[% token FILTER html %]
+
diff --git a/template/en/default/account/email/change-old.txt.tmpl b/template/en/default/account/email/change-old.txt.tmpl
new file mode 100644
index 000000000..82ecf1dfc
--- /dev/null
+++ b/template/en/default/account/email/change-old.txt.tmpl
@@ -0,0 +1,35 @@
+[%# 1.0@bugzilla.org %]
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): John Vandenberg <zeroj@null.net>
+ #%]
+From: bugzilla-admin-daemon
+To: [% emailaddress %]
+Subject: Bugzilla Change Email Address Request
+Importance: High
+X-MSMail-Priority: High
+X-Priority: 1
+
+Bugzilla has received a request to change the email address
+for your account to [% newemailaddress %].
+
+If you are not the person who made this request, or you wish to cancel
+this request, visit the following link:
+
+[% Param('urlbase') %]token.cgi?a=cxlem&t=[% token FILTER html %]
+
diff --git a/template/en/default/account/email/confirm.html.tmpl b/template/en/default/account/email/confirm.html.tmpl
new file mode 100644
index 000000000..4d4102968
--- /dev/null
+++ b/template/en/default/account/email/confirm.html.tmpl
@@ -0,0 +1,44 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): John Vandenberg <zeroj@null.net>
+ #%]
+
+[% INCLUDE global/header %]
+
+
+<p>
+ To change your email address, please enter the old email address:
+</p>
+
+<form method="post" action="token.cgi">
+ <input type="hidden" name="t" value=[% token FILTER html %]>
+ <input type="hidden" name="a" value="chgem">
+ <table>
+ <tr>
+ <th align="right">Old Email Address:</th>
+ <td><input type="input" name="email" size="36"></td>
+ </tr>
+ <tr>
+ <th align="right"> </th>
+ <td><input type="submit" value="Submit"></td>
+ </tr>
+ </table>
+</form>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/account/exists.html.tmpl b/template/en/default/account/exists.html.tmpl
new file mode 100644
index 000000000..a4357a5a0
--- /dev/null
+++ b/template/en/default/account/exists.html.tmpl
@@ -0,0 +1,34 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Account Exists"
+%]
+
+<form method="get" action="token.cgi">
+ <input type="hidden" name="a" value="reqpw" />
+ <input type="hidden" name="loginname" value="[% login FILTER html %]" />
+ A Bugzilla account for <tt>[% login FILTER html %]</tt> already exists. If you
+ are the account holder and have forgotten your password,
+ <input type="submit" value="submit a request to change it" />.
+</form>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/account/prefs/account.html.tmpl b/template/en/default/account/prefs/account.html.tmpl
new file mode 100644
index 000000000..e1675c7fb
--- /dev/null
+++ b/template/en/default/account/prefs/account.html.tmpl
@@ -0,0 +1,99 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[%# INTERFACE:
+ # realname: string. The user's real name, if any.
+ # login: string. The user's Bugzilla login email address.
+ # login_change_date: string. The date the email change will be complete. (optional)
+ # new_login_name: string. The user's new Bugzilla login whilst not confirmed. (optional)
+ #%]
+
+<table>
+ <tr>
+ <td colspan="3">
+ Please enter your existing password to confirm account changes.
+ </td>
+ </tr>
+ <tr>
+ <th align="right">Password:</th>
+ <td>
+ <input type="hidden" name="Bugzilla_login"
+ value="[% login FILTER html %]" />
+ <input type="password" name="Bugzilla_password" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2"><hr></td>
+ </tr>
+
+ <tr>
+ <th align="right">New password:</th>
+ <td>
+ <input type="password" name="new_password1" />
+ </td>
+ </tr>
+
+ <tr>
+ <th align="right">Re-enter new password:</th>
+ <td>
+ <input type="password" name="new_password2" />
+ </td>
+ </tr>
+
+ <tr>
+ <th align="right">Your real name (optional, but encouraged):</th>
+ <td>
+ <input size="35" name="realname" value="[% realname FILTER html %]" />
+ </td>
+ </tr>
+
+ [% IF Param('allowemailchange') %]
+ [% IF login_change_date %]
+ [% IF new_login_name %]
+ <tr>
+ <th align="right">Pending email address:</th>
+ <td>[% new_login_name FILTER html %]</td>
+ </tr>
+ <tr>
+ <th align="right">Change request expires:</th>
+ <td>[% login_change_date %]</td>
+ </tr>
+ [% ELSE %]
+ <tr>
+ <th align="right">Confirmed email address:</th>
+ <td>[% login FILTER html %]
+ </tr>
+ <tr>
+ <th align="right">Completion date:</th>
+ <td>[% login_change_date %]</td>
+ </tr>
+ [% END %]
+ [% ELSE %]
+ <tr>
+ <th align="right">New email address:</th>
+ <td>
+ <input size="35" name="new_login_name">
+ </td>
+ </tr>
+ [% END %]
+ [% END %]
+
+</table>
diff --git a/template/en/default/account/prefs/email.html.tmpl b/template/en/default/account/prefs/email.html.tmpl
new file mode 100644
index 000000000..f7d529c7c
--- /dev/null
+++ b/template/en/default/account/prefs/email.html.tmpl
@@ -0,0 +1,157 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[%# INTERFACE:
+ # watchedusers: string.
+ # Comma-separated list of email addresses this user watches.
+ # excludeself: boolean.
+ # True if user is not receiving self-generated mail.
+ # <rolename>: Multiple hashes, one for each rolename (e.g. owner; see
+ # below), keyed by reasonname (e.g. comments; again, see
+ # below). The value is a boolean - true if the user is
+ # receiving mail for that reason when in that role.
+ # Also references the 'supportwatchers' Param.
+ #%]
+
+<table>
+ [% IF Param('supportwatchers') %]
+ <tr>
+ <td colspan="4">
+ <hr />
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="4">
+ If you want to help cover for someone when they're on vacation, or if
+ you need to do the QA related to all of their bugs, you can tell
+ Bugzilla to send mail related to their bugs to you also. List the
+ email addresses of any users you wish to watch here, separated by
+ commas.
+ </td>
+ </tr>
+
+ <tr>
+ <th align="right">Users to watch:</th>
+ <td>
+ <input size="35" name="watchedusers" value="[% watchedusers %]" />
+ </td>
+ </tr>
+ [% END %]
+
+ <tr>
+ <td colspan="2">
+ <p>
+ If you don't like getting a notification for "trivial"
+ changes to bugs, you can use the settings below to
+ filter some (or even all) notifications.
+ </p>
+ </td>
+ </tr>
+</table>
+
+<hr />
+
+<table>
+ <tr>
+ <td colspan="2">
+ <b>Global options:</b>
+ </td>
+ </tr>
+
+ <tr>
+ <td width="150"></td>
+ <td>
+ Only email me reports of changes made by other people
+ <input type="checkbox" name="ExcludeSelf" value="on"
+ [% " checked" IF excludeself %]>
+ <br>
+ </td>
+ </tr>
+</table>
+
+<hr />
+<b>Field/recipient specific options:</b>
+<br>
+<br>
+
+
+<table width="100%" border="1">
+ <tr>
+ <td colspan="5" align="center" width="50%">
+ <b>When my relationship to this bug is:</b>
+ </td>
+ <td rowspan="2" width="50%">
+ <b>I want to receive mail when:</b>
+ </td>
+ </tr>
+
+ <tr>
+ <td align="center" width="10%">
+ <b>Reporter</b>
+ </td>
+ <td align="center" width="10%">
+ <b>Assignee</b>
+ </td>
+ <td align="center" width="10%">
+ <b>QA Contact</b>
+ </td>
+ <td align="center" width="10%">
+ <b>CC</b>
+ </td>
+ <td align="center" width="10%">
+ <b>Voter</b>
+ </td>
+ </tr>
+
+ [% FOREACH reason = [
+ { name = 'Removeme',
+ description = 'I\'m added to or removed from this capacity' },
+ { name = 'Comments',
+ description = 'New Comments are added' },
+ { name = 'Attachments',
+ description = 'New Attachments are added' },
+ { name = 'Status',
+ description = 'Priority, status, severity, and/or milestone changes' },
+ { name = 'Resolved',
+ description = 'The bug is resolved or verified' },
+ { name = 'Keywords',
+ description = 'Keywords field changes' },
+ { name = 'CC',
+ description = 'CC field changes' },
+ { name = 'Other',
+ description = 'Any field not mentioned above changes' } ] %]
+ <tr>
+ [% FOREACH role = [ "Owner", "Reporter", "QAcontact", "CClist", "Voter" ]
+ %]
+ <td align="center">
+ <input type="checkbox" name="email[% role %][% reason.name %]" value="on"
+ [% " checked" IF $role.${reason.name} %]>
+ </td>
+ [% END %]
+ <td>
+ [% reason.description %]
+ </td>
+ </tr>
+ [% END %]
+</table>
+
+<br>
diff --git a/template/en/default/account/prefs/footer.html.tmpl b/template/en/default/account/prefs/footer.html.tmpl
new file mode 100644
index 000000000..ea5753f0e
--- /dev/null
+++ b/template/en/default/account/prefs/footer.html.tmpl
@@ -0,0 +1,76 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[%# INTERFACE:
+ # mybugslink: boolean. True if the user wishes the My Bugs link to appear.
+ # queries: array of hashes. May be empty. Each hash has two members:
+ # name: string. The name of the query.
+ # footer: boolean. True if the query appears in the footer.
+ #%]
+
+<table>
+ <tr>
+ <th align="right">The 'My bugs' link:</th>
+ <td>
+ <select name="mybugslink">
+ <option value="1">should appear on the footer of every page</option>
+ <option value="0"
+ [% " selected" IF NOT mybugslink %]>should not be displayed
+ </option>
+ </select>
+ </td>
+ </tr>
+
+ <input type="hidden" name="numqueries" value="[% queries.size %]" />
+ [% IF queries.size %]
+ [% FOREACH query = queries %]
+ <tr>
+ <th align="right">Your query named '[% query.name FILTER html %]':</th>
+ <td>
+ <select name="query-[% loop.index %]">
+ <option value="0">should only appear in the query page</option>
+ <option value="1"
+ [% " selected" IF query.footer %]>
+ should appear on the footer of every page
+ </option>
+ </select>
+ </td>
+ </tr>
+
+ <input type="hidden" name="name-[% loop.index %]"
+ value="[% query.name FILTER html %]" />
+ [% END %]
+
+ [% ELSE %]
+ <tr>
+ <td colspan="4">
+ <br>
+ If you create remembered queries using the
+ <a href="query.cgi">query page</a>,
+ you can then come to this page and choose to have some of them
+ appear in the footer of each Bugzilla page.
+ <br>
+ <br>
+ </td>
+ </tr>
+ [% END %]
+
+</table>
diff --git a/template/en/default/account/prefs/permissions.html.tmpl b/template/en/default/account/prefs/permissions.html.tmpl
new file mode 100644
index 000000000..7ab7f1df9
--- /dev/null
+++ b/template/en/default/account/prefs/permissions.html.tmpl
@@ -0,0 +1,57 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[%# INTERFACE:
+ # has_bits: array of strings. May be empty.
+ # Descriptions of the permission bits the user has.
+ # set_bits: array of strings. May be empty.
+ # Descriptions of the permission bits the user can set for
+ # other people.
+ #%]
+
+<table>
+ <tr>
+ <td>
+ [% IF has_bits.size %]
+ You have the following permission bits set on your account:
+ <ul>
+ [% FOREACH bit_description = has_bits %]
+ <li>[% bit_description %]</li>
+ [% END %]
+ </ul>
+ [% ELSE %]
+ There are no permission bits set on your account.
+ [% END %]
+
+ [% IF set_bits.size %]
+ And you can turn on or off the following bits for
+ <a HREF="editusers.cgi">other users</a>:
+ <p>
+ <ul>
+ [% FOREACH bit_description = set_bits %]
+ <li>[% bit_description %]</li>
+ [% END %]
+ </ul>
+ </p>
+ [% END %]
+ </td>
+ </tr>
+</table>
diff --git a/template/en/default/account/prefs/prefs.html.tmpl b/template/en/default/account/prefs/prefs.html.tmpl
new file mode 100644
index 000000000..5d9fc6eb3
--- /dev/null
+++ b/template/en/default/account/prefs/prefs.html.tmpl
@@ -0,0 +1,113 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[%# INTERFACE:
+ # login: string. The user's Bugzilla login email address.
+ # tabs: List of hashes. May not be empty. Each hash has three members:
+ # name: string. Name of the tab (used internally.)
+ # description: string. Description of the tab (used in tab title.)
+ # saveable: boolean. True if tab has a form which can be submitted.
+ # True if user is not receiving self-generated mail.
+ # Note: For each tab name, a template "prefs/${tab.name}.tmpl" must exist,
+ # and its interface must be fulfilled.
+ # current_tab: A direct reference to one of the hashes in the tabs list.
+ # This tab will be displayed.
+ # changes_saved: boolean/string. True if the CGI processed form data before
+ # displaying anything, and can contain an optional custom
+ # message if required (which Perl still evaluates as True).
+ #%]
+
+[% filtered_login = login FILTER html %]
+[% INCLUDE global/header
+ title = "User Preferences"
+ h2 = filtered_login
+ style = "td.selected_tab {
+ border-width: 2px 2px 0px;
+ border-style: solid;
+ }
+ td.unselected_tab, td.spacer {
+ border-width: 0px 0px 2px 0px;
+ border-style: solid;
+ }"
+ %]
+
+<center>
+ <table cellspacing="0" cellpadding="10" border="0" width="100%">
+ <tr>
+ <td class="spacer">&nbsp;</td>
+
+ [% FOREACH tab = tabs %]
+ [% IF tab.name == current_tab.name %]
+ <td align="center" bgcolor="lightblue" class="selected_tab">
+ [% tab.description %]
+ </td>
+ [% ELSE %]
+ <td align="center" bgcolor="#BBBBEE" class="unselected_tab">
+ <a HREF="userprefs.cgi?tab=[% tab.name %]">[% tab.description %]</a>
+ </td>
+ [% END %]
+ [% END %]
+
+ <td class="spacer">&nbsp;</td>
+ </tr>
+ </table>
+</center>
+
+[% IF changes_saved %]
+ <p>
+ <font color="red">
+ The changes to your
+ [% current_tab.description FILTER lower %] have been saved.
+ </font>
+ </p>
+ [% IF changes_saved != 1 %]
+ <p>
+ [% changes_saved %]
+ </p>
+ [% END %]
+[% END %]
+
+<h3>[% current_tab.description %]</h3>
+
+<form method="post">
+ <input type="hidden" name="tab" value="[% current_tab.name %]">
+
+ [% INCLUDE "prefs/${current_tab.name}.tmpl" IF current_tab.name.defined %]
+
+ [% IF current_tab.saveable %]
+ <input type="hidden" name="dosave" value="1">
+
+ <table>
+ <tr>
+ <td width="150"></td>
+ <td>
+ <input type="submit" value="Submit Changes">
+ </td>
+ </tr>
+ </table>
+ [% END %]
+
+</form>
+
+[% INCLUDE global/footer %]
+
+
+
diff --git a/template/en/default/attachment/content-types.html.tmpl b/template/en/default/attachment/content-types.html.tmpl
new file mode 100644
index 000000000..4e7cafc47
--- /dev/null
+++ b/template/en/default/attachment/content-types.html.tmpl
@@ -0,0 +1,27 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ #%]
+
+ <option value="text/plain">plain text (text/plain)</option>
+ <option value="text/html">HTML source (text/html)</option>
+ <option value="image/gif">GIF image (image/gif)</option>
+ <option value="image/jpeg">JPEG image (image/jpeg)</option>
+ <option value="image/png">PNG image (image/png)</option>
+ <option value="application/octet-stream">binary file (application/octet-stream)</option>
diff --git a/template/en/default/attachment/create.html.tmpl b/template/en/default/attachment/create.html.tmpl
new file mode 100644
index 000000000..44533512e
--- /dev/null
+++ b/template/en/default/attachment/create.html.tmpl
@@ -0,0 +1,130 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ #%]
+
+[%# Define strings that will serve as the title and header of this page %]
+[% title = BLOCK %]Create New Attachment for Bug #[% bugid %][% END %]
+[% h1 = BLOCK %]Create New Attachment for <a href="show_bug.cgi?id=[% bugid %]">Bug #[% bugid %]</a>[% END %]
+[% h2 = BLOCK %][% bugsummary FILTER html %][% END %]
+
+[% INCLUDE global/header
+ title = title
+ h1 = h1
+ h2 = h2
+ style = "
+ th { text-align: right; vertical-align: baseline; white-space: nowrap; }
+ td { text-align: left; vertical-align: baseline; padding-bottom: 5px; }
+ "
+ extra = "onload=\"setContentTypeDisabledState();\""
+%]
+
+<form name="entryform" method="post" action="attachment.cgi" enctype="multipart/form-data">
+ <input type="hidden" name="bugid" value="[% bugid %]">
+ <input type="hidden" name="action" value="insert">
+
+ <table>
+ <tr>
+ <th>File:</th>
+ <td>
+ <em>Enter the path to the file on your computer.</em><br>
+ <input type="file" name="data" size="50">
+ </td>
+ </tr>
+ <tr>
+ <th>Description:</th>
+ <td>
+ <em>Describe the attachment briefly.</em><br>
+ <input type="text" name="description" size="60" maxlength="200">
+ </td>
+ </tr>
+ <tr>
+ <th></th>
+ <td>
+ </td>
+ </tr>
+ <tr>
+ <th>Content Type:</th>
+ <td>
+ <em>If the attachment is a patch, check the box below.</em><br>
+ <input type="checkbox" name="ispatch" value="1" onchange="setContentTypeDisabledState();"> patch<br><br>
+
+ <em>Otherwise, choose a method for determining the content type.</em><br>
+ <input type="radio" name="contenttypemethod" value="autodetect">
+ auto-detect<br>
+ <input type="radio" name="contenttypemethod" value="list">
+ select from list: <select name="contenttypeselection" onchange="this.form.contenttypemethod[1].checked = true;">
+ [% PROCESS attachment/contenttypes %]
+ </select><br>
+ <input type="radio" name="contenttypemethod" value="manual">
+ enter manually: <input type="text" name="contenttypeentry" size="30" maxlength="200" onchange="if (this.value) this.form.contenttypemethod[2].checked = true;">
+ </td>
+ </tr>
+ <tr>
+ <th>Obsoletes:</th>
+ <td>
+ <em>(optional) Check each existing attachment made obsolete by your new attachment.</em><br>
+ [% IF attachments.size %]
+ [% FOREACH attachment = attachments %]
+ <input type="checkbox" name="obsolete" value="[% attachment.id %]">
+ <a href="attachment.cgi?id=[% attachment.id %]&action=edit">[% attachment.id %]: [% attachment.description FILTER html %]</a><br>
+ [% END %]
+ [% ELSE %]
+ [no attachments can be made obsolete]
+ [% END %]
+ </td>
+ </tr>
+ <tr>
+ <th>Comment:</th>
+ <td>
+ <em>(optional) Add a comment about this attachment to the bug.</em><br>
+ <textarea wrap="soft" name="comment" rows="6" cols="80"></textarea>
+ </td>
+ </tr>
+ <tr>
+ <th>&nbsp;</th>
+ <td><input type="submit" value="Submit"></td>
+ </tr>
+ </table>
+
+</form>
+
+<script language="JavaScript" type="text/javascript">
+ <!--
+ function setContentTypeDisabledState()
+ {
+ var entryform = document.entryform;
+
+ var isdisabled = false;
+ if (entryform.ispatch.checked)
+ isdisabled = true;
+
+ for (var i=0 ; i<entryform.contenttypemethod.length ; i++)
+ entryform.contenttypemethod[i].disabled = isdisabled;
+
+ entryform.contenttypeselection.disabled = isdisabled;
+ entryform.contenttypeentry.disabled = isdisabled;
+ }
+ //-->
+</script>
+
+[% INCLUDE global/footer %]
+
+
+
diff --git a/template/en/default/attachment/created.html.tmpl b/template/en/default/attachment/created.html.tmpl
new file mode 100644
index 000000000..c46afe06b
--- /dev/null
+++ b/template/en/default/attachment/created.html.tmpl
@@ -0,0 +1,56 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ #%]
+
+[% INCLUDE global/header
+ title = "Changes Submitted"
+ style = "th { text-align: left; }"
+%]
+
+<table border="1">
+ <tr>
+ <td>
+ <h2>
+ <a title="[% description FILTER html %]" href="attachment.cgi?id=[% attachid %]&action=edit">Attachment #[% attachid %]</a>
+ to <a href="show_bug.cgi?id=[% bugid %]">Bug #[% bugid %]</a> Created
+ </h2>
+
+ [% mailresults %]
+
+ [% IF contenttypemethod == 'autodetect' %]
+ <p>
+ <b>Note:</b> Bugzilla automatically detected the content type
+ <em>[% contenttype %]</em> for this attachment. If this is
+ incorrect, correct the value by
+ <a href="attachment.cgi?id=[% attachid %]&action=edit">editing the attachment</a>.
+ </p>
+ [% END %]
+ </td>
+ <td>
+ <a href="show_bug.cgi?id=[% bugid %]">Go back to bug #[% bugid %]</a>
+ </td>
+ </tr>
+</table>
+
+<p>
+<a href="attachment.cgi?bugid=[% bugid %]&action=enter">Create Another Attachment to Bug #[% bugid %]</a>
+</p>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/attachment/edit.html.tmpl b/template/en/default/attachment/edit.html.tmpl
new file mode 100644
index 000000000..1d06bfb6f
--- /dev/null
+++ b/template/en/default/attachment/edit.html.tmpl
@@ -0,0 +1,226 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ #%]
+
+[%# Define strings that will serve as the title and header of this page %]
+[% title = BLOCK %]Edit Attachment #[% attachid %] for Bug #[% bugid %][% END %]
+[% h1 = BLOCK %]Edit Attachment #[% attachid %] for <a href="show_bug.cgi?id=[% bugid %]">Bug #[% bugid %]</a>[% END %]
+[% h2 = BLOCK %][% bugsummary FILTER html %][% END %]
+
+[% INCLUDE global/header
+ title = title
+ h1 = h1
+ h2 = h2
+ style = "
+ th { text-align: right; vertical-align: top; }
+ td { text-align: left; vertical-align: top; }
+ td#info { text-align: right; vertical-align: top; }
+ td#actions { text-align: right; vertical-align: bottom; }
+ td#noview { text-align: left; vertical-align: center; }
+ "
+%]
+
+<script type="application/x-javascript" language="JavaScript">
+ <!--
+ function editAsComment()
+ {
+ // Get the content of the document as a string.
+ var viewFrame = document.getElementById('viewFrame');
+ var aSerializer = new XMLSerializer();
+ var contentDocument = viewFrame.contentDocument;
+ var theContent = aSerializer.serializeToString(contentDocument);
+
+ // If this is a plaintext document, remove cruft that Mozilla adds
+ // because it treats it as an HTML document with a big PRE section.
+ // http://bugzilla.mozilla.org/show_bug.cgi?id=86012
+ var contentType = '[% contenttype %]';
+ if ( contentType == 'text/plain' )
+ {
+ theContent = theContent.replace( /^<html><head\/><body><pre>/ , "" );
+ theContent = theContent.replace( /<\/pre><\/body><\/html>$/ , "" );
+ theContent = theContent.replace( /&lt;/gi , "<" );
+ theContent = theContent.replace( /&gt;/gi , ">" );
+ theContent = theContent.replace( /&amp;/gi , "&" );
+ }
+
+ // Add mail-style quote indicators (>) to the beginning of each line.
+ // ".*\n" matches lines that end with a newline, while ".+" matches
+ // the rare situation in which the last line of a file does not end
+ // with a newline.
+ theContent = theContent.replace( /(.*\n|.+)/g , ">$1" );
+
+ hideElementById('viewFrame');
+ hideElementById('editButton');
+ hideElementById('smallCommentFrame');
+
+ showElementById('undoEditButton');
+
+ // Show the TEXTAREA that will contain the editable attachment
+ // and copy the content of the attachment into it.
+ showElementById('editFrame');
+
+ var editFrame = document.getElementById('editFrame');
+ editFrame.value = theContent;
+ editFrame.value += "\n\n";
+ }
+ function undoEditAsComment()
+ {
+ // Hide the "edit attachment as comment" TEXTAREA and the "undo" button.
+ hideElementById('undoEditButton');
+ hideElementById('editFrame');
+
+ // Show the "view attachment" IFRAME, the "redo" button that allows the user
+ // to go back to editing the attachment as a comment, and the small comment field.
+ showElementById('viewFrame');
+ showElementById('redoEditButton');
+ showElementById('smallCommentFrame');
+
+ }
+ function redoEditAsComment()
+ {
+ // Hide the "view attachment" IFRAME, the "redo" button that allows the user
+ // to go back to editing the attachment as a comment, and the small comment field.
+ hideElementById('viewFrame');
+ hideElementById('redoEditButton');
+ hideElementById('smallCommentFrame');
+
+ // Show the "edit attachment as comment" TEXTAREA and the "undo" button.
+ showElementById('undoEditButton');
+ showElementById('editFrame');
+ }
+
+ function hideElementById(id)
+ {
+ var elm = document.getElementById(id);
+ if (elm) {
+ elm.style.display = 'none';
+ }
+ }
+
+ function showElementById(id, val)
+ {
+ var elm = document.getElementById(id);
+ if (elm) {
+ if (!val) val = 'inline';
+ elm.style.display = val;
+ }
+ }
+
+ function normalizeComments()
+ {
+ // Remove the unused comment field from the document so its contents
+ // do not get transmitted back to the server.
+
+ var small = document.getElementById('smallCommentFrame');
+ var big = document.getElementById('editFrame');
+ if ( small.style.display == 'none' )
+ {
+ small.parentNode.removeChild(small);
+ }
+ if ( big.style.display == 'none' )
+ {
+ big.parentNode.removeChild(big);
+ }
+ }
+ //-->
+</script>
+
+<form method="post" action="attachment.cgi" onsubmit="normalizeComments();">
+ <input type="hidden" name="id" value="[% attachid %]">
+ <input type="hidden" name="action" value="update">
+ <input type="hidden" name="contenttypemethod" value="manual">
+
+ <table width="100%">
+
+ <tr>
+ <td width="25%">
+ <small>
+ <b>Description:</b><br>
+ <textarea rows="3" cols="25" name="description" wrap="soft">[% description FILTER html %]</textarea><br>
+
+ <b>MIME Type:</b><br>
+ <input type="text" size="20" name="contenttypeentry" value="[% contenttype FILTER html %]"><br>
+
+ <b>Flags:</b><br>
+ <input type="checkbox" name="ispatch" value="1"[% " checked" IF ispatch %]>patch
+ <input type="checkbox" name="isobsolete" value="1"[% " checked" IF isobsolete %]>obsolete<br>
+
+ [% IF statusdefs.size %]
+ <b>Status:</b><br>
+ [% FOREACH def = statusdefs %]
+ <input type="checkbox" name="status" value="[% def.id %]"[% " checked" IF statuses.${def.id} %]>[% def.name FILTER html %]<br>
+ [% END %]
+ [% END %]
+
+ <div id="smallCommentFrame">
+ <b>Comment (on the bug):</b><br>
+ <textarea name="comment" rows="5" cols="25" wrap="soft"></textarea><br>
+ </div>
+
+ <input type="submit" value="Submit">
+
+ </small>
+ </td>
+
+ [% IF isviewable %]
+ <td width="75%">
+ <textarea id="editFrame" name="comment" style="height: 400px; width: 100%; display: none;" cols="80" wrap="soft"></textarea>
+ <iframe id="viewFrame" src="attachment.cgi?id=[% attachid %]&action=view" style="height: 400px; width: 100%;">
+ <b>You cannot view the attachment while editing it because your browser does not support IFRAMEs.
+ <a href="attachment.cgi?id=[% attachid %]&action=view">View the attachment on a separate page</a>.</b>
+ </iframe>
+ <script type="application/x-javascript" language="JavaScript">
+ <!--
+ if (typeof document.getElementById == "function") {
+ document.write('<button type="button" id="editButton" onclick="editAsComment();">Edit Attachment As Comment</button>');
+ document.write('<button type="button" id="undoEditButton" onclick="undoEditAsComment();" style="display: none;">Undo Edit As Comment</button>');
+ document.write('<button type="button" id="redoEditButton" onclick="redoEditAsComment();" style="display: none;">Redo Edit As Comment</button>');
+ }
+ //-->
+ </script>
+ </td>
+ [% ELSE %]
+ <td id="noview" width="50%">
+ <p><b>
+ Attachment cannot be viewed because its MIME type is not either text/*, image/*, or application/vnd.mozilla.*.
+ <a href="attachment.cgi?id=[% attachid %]&action=view">Download the attachment instead</a>.
+ </b></p>
+ </td>
+ [% END %]
+
+ </tr>
+
+ </table>
+
+ Attachments on this Bug:
+ [% FOREACH a = attachments %]
+ [% IF a == attachid %]
+ #[% a %]
+ [% ELSE %]
+ <a href="attachment.cgi?id=[% a %]&action=edit">#[% a %]</a>
+ [% END %]
+ [% "|" UNLESS loop.last() %]
+ [% END %]
+
+</form>
+
+<br>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/attachment/list.html.tmpl b/template/en/default/attachment/list.html.tmpl
new file mode 100644
index 000000000..5bc5217c9
--- /dev/null
+++ b/template/en/default/attachment/list.html.tmpl
@@ -0,0 +1,81 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ #%]
+
+<br>
+<table cellspacing="0" cellpadding="4" border="1">
+ <tr>
+ <th bgcolor="#cccccc" align="left">Attachment</th>
+ <th bgcolor="#cccccc" align="left">Type</th>
+ <th bgcolor="#cccccc" align="left">Modified</th>
+ <th bgcolor="#cccccc" align="left">Status</th>
+ <th bgcolor="#cccccc" align="left">Actions</th>
+ </tr>
+
+ [% FOREACH attachment = attachments %]
+ <tr>
+ <td valign="top">
+ [% IF attachment.isobsolete %]
+ <strike><a href="attachment.cgi?id=[% attachment.attachid %]&amp;action=view">[% attachment.description FILTER html %]</a></strike>
+ [% ELSE %]
+ <a href="attachment.cgi?id=[% attachment.attachid %]&amp;action=view">[% attachment.description FILTER html %]</a>
+ [% END %]
+ </td>
+
+ <td valign="top">
+ [% IF attachment.ispatch %]
+ <i>patch</i>
+ [% ELSE %]
+ [% attachment.contenttype FILTER html %]
+ [% END %]
+ </td>
+
+ <td valign="top">[% attachment.date %]</td>
+
+ <td valign="top">
+ [% IF attachment.statuses.size == 0 %]
+ <i>none</i>
+ [% ELSE %]
+ [% FOREACH s = attachment.statuses %]
+ [% s FILTER html FILTER replace('\s', '&nbsp;') %]<br>
+ [% END %]
+ [% END %]
+ </td>
+
+ <td valign="top">
+ [% IF attachment.canedit %]
+ <a href="attachment.cgi?id=[% attachment.attachid %]&amp;action=edit">Edit</a>
+ [% ELSE %]
+ None
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+
+ <tr>
+ <td colspan="4">
+ <a href="attachment.cgi?bugid=[% bugid %]&amp;action=enter">Create a New Attachment</a> (proposed patch, testcase, etc.)
+ </td>
+ <td colspan="1">
+ <a href="attachment.cgi?bugid=[% bugid %]&amp;action=viewall">View All</a>
+ </td>
+ </tr>
+</table>
+<br>
diff --git a/template/en/default/attachment/show-multiple.html.tmpl b/template/en/default/attachment/show-multiple.html.tmpl
new file mode 100644
index 000000000..88c92b969
--- /dev/null
+++ b/template/en/default/attachment/show-multiple.html.tmpl
@@ -0,0 +1,98 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ #%]
+
+[% filtered_summary = bugsummary FILTER html %]
+[% INCLUDE global/header
+ title = "View All Attachments for Bug #$bugid"
+ h1 = "View All Attachments for <a href=\"show_bug.cgi?id=$bugid\">Bug #$bugid</a>"
+ h2 = filtered_summary
+ style = "
+ th { text-align: right; vertical-align: top; }
+ td { text-align: left; vertical-align: top; }
+ td#info { text-align: right; vertical-align: top; }
+ td#actions { text-align: right; vertical-align: bottom; }
+ "
+%]
+
+<br>
+
+[% FOREACH a = attachments %]
+
+ <div align="center">
+ <table cellspacing="0" cellpadding="4" border="1" width="75%">
+ <tr>
+ <td valign="top" bgcolor="#cccccc" colspan="5">
+ <big><b>Attachment #[% a.attachid %]</b></big>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ [% IF a.isobsolete %]
+ <strike>[% a.description FILTER html %]</strike>
+ [% ELSE %]
+ [% a.description FILTER html %]
+ [% END %]
+ </td>
+
+ <td valign="top">
+ [% IF a.ispatch %]
+ <i>patch</i>
+ [% ELSE %]
+ [% a.contenttype FILTER html %]
+ [% END %]
+ </td>
+
+ <td valign="top">[% a.date %]</td>
+
+ <td valign="top">
+ [% IF a.statuses.size == 0 %]
+ <i>none</i>
+ [% ELSE %]
+ [% FOREACH s = a.statuses %]
+ [% s FILTER html FILTER replace('\s', '&nbsp;') %]<br>
+ [% END %]
+ [% END %]
+ </td>
+
+ <td valign="top">
+ <a href="attachment.cgi?id=[% a.attachid %]&action=edit">Edit</a>
+ </td>
+ </tr>
+ </table>
+
+ [% IF a.isviewable %]
+ <iframe src="attachment.cgi?id=[% a.attachid %]&action=view" width="75%" height="350">
+ <b>You cannot view the attachment on this page because your browser does not support IFRAMEs.
+ <a href="attachment.cgi?id=[% a.attachid %]&action=view">View the attachment on a separate page</a>.</b>
+ </iframe>
+ [% ELSE %]
+ <p><b>
+ Attachment cannot be viewed because its MIME type is not text/*, image/*, or application/vnd.mozilla.*.
+ <a href="attachment.cgi?id=[% a.attachid %]&action=view">Download the attachment instead</a>.
+ </b></p>
+ [% END %]
+ </div>
+
+ <br><br>
+
+[% END %]
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/attachment/updated.html.tmpl b/template/en/default/attachment/updated.html.tmpl
new file mode 100644
index 000000000..e24595747
--- /dev/null
+++ b/template/en/default/attachment/updated.html.tmpl
@@ -0,0 +1,46 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ # Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Changes Submitted"
+ style = "th { text-align: left; }"
+%]
+
+<hr>
+
+<table border="1">
+ <tr>
+ <td>
+ <h2>Changes to
+ <a href="attachment.cgi?id=[% attachid %]&action=edit">attachment [% attachid %]</a>
+ of bug [% bugid %] submitted
+ </h2>
+ [% mailresults %]
+ </td>
+
+ <td>
+ <a href="show_bug.cgi?id=[% bugid %]">Back to Bug #[% bugid %]</a>
+ </td>
+ </tr>
+</table>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/bug/activity/show.html.tmpl b/template/en/default/bug/activity/show.html.tmpl
new file mode 100644
index 000000000..387ba6d6c
--- /dev/null
+++ b/template/en/default/bug/activity/show.html.tmpl
@@ -0,0 +1,43 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[%# INTERFACE:
+ # bug_id: integer. The bug ID.
+ #
+ # This template also needs to be called with the interface to the
+ # activity.html.tmpl template fulfilled.
+ #%]
+
+[% INCLUDE global/header
+ title = "Changes made to bug $bug_id"
+ h1 = "Activity log"
+ h2 = "Bug <a href='show_bug.cgi?id=$bug_id'>$bug_id</a>"
+ %]
+
+<br>
+
+[% INCLUDE show/activity.html.tmpl %]
+
+<p>
+ <a href="show_bug.cgi?id=[% bug_id %]">Back to bug [% bug_id %]</a>
+</p>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/bug/activity/table.html.tmpl b/template/en/default/bug/activity/table.html.tmpl
new file mode 100644
index 000000000..43529bd23
--- /dev/null
+++ b/template/en/default/bug/activity/table.html.tmpl
@@ -0,0 +1,91 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[%# INTERFACE:
+ # operations: array of hashes. May be empty. Each has has three members:
+ # who: string. who performed the operation
+ # when: string. when they performed it
+ # changes: hash. Details of what they changed. This hash has three
+ # compulsory and one optional member:
+ # field: string. The name of the field
+ # removed: string. What was removed from the field
+ # added: string. What was added to the field
+ # attach_id: integer. If the change was adding an attachment, its id.
+ # incomplete_data: boolean. True if some of the data is incomplete (because
+ # it was affected by an old Bugzilla bug.)
+ #%]
+
+[% IF incomplete_data %]
+ <p>
+ There used to be a bug Bugzilla which caused activity data
+ to be lost if there was a large number of cc's or dependencies. That
+ has been fixed, however, there was some data already lost on this bug
+ that could not be regenerated. The changes that the script could not
+ reliably determine are prefixed by '?'.
+ </p>
+[% END %]
+
+[% IF operations.size > 0 %]
+ <table border cellpadding="4">
+ <tr>
+ <th>Who</th>
+ <th>When</th>
+ <th>What</th>
+ <th>Removed</th>
+ <th>Added</th>
+ </tr>
+
+ [% FOREACH operation = operations %]
+ <tr>
+ <td rowspan="[% operation.changes.size %]" valign="top">
+ [% operation.who %]
+ </td>
+ <td rowspan="[% operation.changes.size %]" valign="top">
+ [% operation.when %]
+ </td>
+ [% FOREACH change = operation.changes %]
+ [% "</tr><tr>" IF loop.index > 0 %]
+ <td>
+ [% IF change.attachid %]
+ <a href="attachment.cgi?id=[% change.attachid %]&amp;action=view">
+ Attachment #[% change.attachid %]</a>
+ [% END %]
+ [% change.field %]
+ </td>
+ <td>
+ [% IF change.removed %]
+ [% change.removed FILTER html %]
+ [% ELSE %]
+ &nbsp;
+ [% END %]
+ </td>
+ <td>
+ [% IF change.added %]
+ [% change.added FILTER html %]
+ [% ELSE %]
+ &nbsp;
+ [% END %]
+ </td>
+ [% END %]
+ </tr>
+ [% END %]
+ </table>
+[% END %]
diff --git a/template/en/default/bug/choose-xml.html.tmpl b/template/en/default/bug/choose-xml.html.tmpl
new file mode 100644
index 000000000..4456534f5
--- /dev/null
+++ b/template/en/default/bug/choose-xml.html.tmpl
@@ -0,0 +1,47 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Display bugs as XML"
+ %]
+
+<form method="get" action="xml.cgi">
+ <table>
+ <tr>
+ <td>
+ Display bugs as XML by entering a list of bug numbers here:
+ </td>
+ <td>
+ <input name="id" size="30" />
+ <input type="submit" value="Display as XML" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>&nbsp;</td>
+ <td>
+ (e.g. 1000, 2467, 852)
+ </td>
+ </tr>
+ </table>
+</form>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/bug/choose.html.tmpl b/template/en/default/bug/choose.html.tmpl
new file mode 100644
index 000000000..b776ff255
--- /dev/null
+++ b/template/en/default/bug/choose.html.tmpl
@@ -0,0 +1,36 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% UNLESS header_done %]
+ [% INCLUDE global/header
+ title = "Search by bug number"
+ %]
+[% END %]
+
+<form method="get" action="show_bug.cgi">
+ <p>
+ You may find a single bug by entering its bug id here:
+ <input name="id" size="6">
+ <input type="submit" value="Show Me This Bug">
+ </p>
+</form>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/bug/comments.html.tmpl b/template/en/default/bug/comments.html.tmpl
new file mode 100644
index 000000000..27177486e
--- /dev/null
+++ b/template/en/default/bug/comments.html.tmpl
@@ -0,0 +1,54 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% DEFAULT start_at = 0 %]
+[% count = 0 %]
+[% FOREACH comment = comments %]
+ [% IF count >= start_at %]
+ [% PROCESS a_comment %]
+ [% END %]
+
+ [% count = count + 1 %]
+[% END %]
+
+
+[%############################################################################%]
+[%# Block for individual comments #%]
+[%############################################################################%]
+
+[% BLOCK a_comment %]
+ [% IF count > 0 %]
+ <br>
+ <i>------- Additional Comment
+ <a name="c[% count %]" href="#c[% count %]">#[% count %]</a> From
+ <a href="mailto:[% comment.email FILTER html %]">[% comment.name FILTER html %]</a>
+ [%+ comment.time %] -------
+ </i>
+ [% END %]
+
+ <br>
+[%# Don't indent the <pre> block, since then the spaces are displayed in the
+ # generated HTML
+ #%]
+<pre>
+ [%- quoteUrls(comment.body) -%]
+</pre>
+[% END %]
diff --git a/template/en/default/bug/create/create.html.tmpl b/template/en/default/bug/create/create.html.tmpl
new file mode 100644
index 000000000..cb82c8401
--- /dev/null
+++ b/template/en/default/bug/create/create.html.tmpl
@@ -0,0 +1,257 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ # Ville Skyttä <ville.skytta@iki.fi>
+ #%]
+
+[% INCLUDE global/header
+ title = "Enter Bug"
+ h2 = "This page lets you enter a new bug into Bugzilla."
+%]
+
+<form method="post" action="post_bug.cgi">
+<input type="hidden" name="product" value="[% product FILTER html %]" />
+
+<table cellspacing="2" cellpadding="0" border="0">
+
+ <tr>
+ <td><br></td>
+ </tr>
+
+ <tr>
+ <td></td>
+ <td colspan="3">
+ Before filling this in, please read the
+ <a href="bugwritinghelp.html">bug-writing guidelines</a>.
+ </td>
+ </tr>
+
+ <tr>
+ <td><br></td>
+ </tr>
+
+ <tr>
+ <td align="right" valign="top"><strong>Reporter:</strong></td>
+ <td valign="top">[% reporter FILTER html %]</td>
+
+ <td align="right" valign="top"><strong>Product:</strong></td>
+ <td valign="top">[% product FILTER html %]</td>
+ </tr>
+
+ [%# We can't use the select block in these two cases for various reasons. %]
+ <tr>
+ <td align="right" valign="top">
+ <strong>Version:</strong>
+ </td>
+ <td>
+ <select name="version" size="5">
+ [%- FOREACH v = version %]
+ <option value="[% v FILTER html %]"
+ [% " selected=\"selected\"" IF v == default.version %]>[% v FILTER html -%]
+ </option>
+ [%- END %]
+ </select>
+ </td>
+
+ <td align="right" valign="top">
+ <strong>
+ <a href="describecomponents.cgi?product=[% product FILTER uri %]">
+ Component:</a>
+ </strong>
+ </td>
+ <td>
+ <select name="component" size="5">
+ [%- FOREACH c = component_ %]
+ <option value="[% c FILTER html %]"
+ [% " selected=\"selected\"" IF c == default.component_ %]>[% c FILTER html -%]
+ </option>
+ [%- END %]
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td>&nbsp;</td>
+ <td colspan="3"></td>
+ </tr>
+
+ <tr>
+ [% sel = { description => 'Platform', name => 'rep_platform' } %]
+ [% INCLUDE select %]
+
+ [% sel = { description => 'OS', name => 'op_sys' } %]
+ [% INCLUDE select %]
+ </tr>
+
+ <tr>
+ [% IF Param('letsubmitterchoosepriority') %]
+ [% sel = { description => 'Priority', name => 'priority' } %]
+ [% INCLUDE select %]
+ [% ELSE %]
+ <input type="hidden" name="priority" value="[% default.priority %]" />
+ [% END %]
+
+ [% sel = { description => 'Severity', name => 'bug_severity' } %]
+ [% INCLUDE select %]
+ </tr>
+
+ <tr>
+ <td>&nbsp;</td>
+ <td colspan="3"></td>
+ </tr>
+
+[% IF bug_status.size > 1 %]
+ <tr>
+ [% sel = { description => 'Initial State', name => 'bug_status' } %]
+ [% INCLUDE select %]
+
+ <td colspan="2"></td>
+ </tr>
+[% ELSE %]
+ <input type="hidden" name="bug_status" value="[% default.bug_status %]" />
+[% END %]
+
+ <tr>
+ <td align="right">
+ <strong>
+ <a href="bug_status.html#assigned_to">Assigned To:</a>
+ </strong>
+ </td>
+ <td colspan="3">
+ <input name="assigned_to" size="32"
+ value="[% assigned_to FILTER html %]" />
+ (Leave blank to assign to default component owner)
+ </td>
+ </tr>
+
+ <tr>
+ <td align="right"><strong>Cc:</strong></td>
+ <td colspan="3">
+ <input name="cc" size="45" value="[% cc FILTER html %]" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>&nbsp;</td>
+ <td colspan="3"></td>
+ </tr>
+
+ <tr>
+ <td align="right"<strong>URL:</strong></td>
+ <td colspan="3">
+ <input name="bug_file_loc" size="60"
+ value="[% bug_file_loc FILTER html %]" />
+ </td>
+ </tr>
+
+ <tr>
+ <td align="right"><strong>Summary:</strong></td>
+ <td colspan="3">
+ <input name="short_desc" size="60" value="[% short_desc FILTER html %]" />
+ </td>
+ </tr>
+
+ <tr><td align="right" valign="top"><strong>Description:</strong></td>
+ <td colspan="3">
+ <textarea wrap="hard" name="comment" rows="10" cols="80">
+ [% comment FILTER html %]</textarea>
+ <br>
+ </td>
+ </tr>
+
+ <tr>
+ <td></td>
+ <td colspan="3">
+ [% IF group.size %]
+ <br>
+ <strong>
+ Only users in the selected groups can view this bug:
+ </strong>
+ <br>
+ <font size="-1">
+ (Leave all boxes unchecked to make this a public bug.)
+ </font>
+ <br>
+ <br>
+
+ <!-- Checkboxes -->
+ [% FOREACH g = group %]
+ &nbsp;&nbsp;&nbsp;&nbsp;
+ <input type="checkbox" name="bit-[% g.bit %]" value="1"
+ [% " checked=\"checked\"" IF g.checked %] />[% g.description %]<br />
+ [% END %]
+ <br>
+ [% END %]
+ </td>
+ </tr>
+
+ <tr>
+ <td></td>
+ <td colspan="3">
+ <input type="submit" value=" Commit "
+ onclick="if (this.form.short_desc.value == '')
+ { alert('Please enter a summary sentence for this bug.');
+ return false; } return true;">
+ &nbsp;&nbsp;&nbsp;&nbsp;
+ <input type="submit" name="maketemplate"
+ value="Remember values as bookmarkable template" />
+ </td>
+ </tr>
+
+[% IF Param('usebrowserinfo') %]
+ <tr>
+ <td></td>
+ <td colspan="3">
+ <br>
+ We've made a guess at your operating system and platform.
+ Please check them and, if we got it wrong, email
+ [% Param('maintainer') %].
+ </td>
+ </tr>
+[% END %]
+
+ </table>
+ <input type="hidden" name="form_name" value="enter_bug">
+</form>
+
+[% INCLUDE global/footer %]
+
+[%############################################################################%]
+[%# Block for SELECT fields #%]
+[%############################################################################%]
+
+[% BLOCK select %]
+ [% IF sel.description %]
+ <td align="right">
+ <strong>
+ <a href="bug_status.html#[% sel.name %]">[% sel.description %]:</a>
+ </strong>
+ </td>
+ [% END %]
+
+ <td>
+ <select name="[% sel.name %]">
+ [%- FOREACH x = ${sel.name} %]
+ <option value="[% x FILTER html %]"
+ [% " selected=\"selected\"" IF x == default.${sel.name} %]>[% x FILTER html -%]
+ </option>
+ [%- END %]
+ </select>
+ </td>
+[% END %]
diff --git a/template/en/default/bug/create/created.html.tmpl b/template/en/default/bug/create/created.html.tmpl
new file mode 100644
index 000000000..9eba2edf5
--- /dev/null
+++ b/template/en/default/bug/create/created.html.tmpl
@@ -0,0 +1,47 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Bug $bug_id Submitted"
+%]
+
+<table border="1">
+ <tr>
+ <td>
+ <h2>Bug [% bug_id %] has been added to the database.</h2>
+
+ [% mailresults %]
+
+ </td>
+ <td>
+ <a href="show_bug.cgi?id=[% bug_id %]">Back To Bug# [% bug_id %]</a>
+ </td>
+ </tr>
+</table>
+
+<p>
+<a href="attachment.cgi?bugid=[% bug_id %]&amp;action=enter">
+ Attach a file to this bug</a>.
+</p>
+
+[% INCLUDE show/navigate.html.tmpl %]
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/bug/create/initial-comment.txt.tmpl b/template/en/default/bug/create/initial-comment.txt.tmpl
new file mode 100644
index 000000000..21a9f3ff8
--- /dev/null
+++ b/template/en/default/bug/create/initial-comment.txt.tmpl
@@ -0,0 +1,21 @@
+[%# 1.0@bugzilla.org %]
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+[% form.comment %]
diff --git a/template/en/default/bug/create/make-template.html.tmpl b/template/en/default/bug/create/make-template.html.tmpl
new file mode 100644
index 000000000..c5e017529
--- /dev/null
+++ b/template/en/default/bug/create/make-template.html.tmpl
@@ -0,0 +1,33 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Bookmarks are your friend"
+ h1 = "Template constructed"
+%]
+
+<p>
+If you bookmark <a href="enter_bug.cgi?[% url %]">this link</a>,
+going to the bookmark will bring up the enter bug page with the fields
+initialized as you've requested.
+</p>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/bug/dependency-graph.html.tmpl b/template/en/default/bug/dependency-graph.html.tmpl
new file mode 100644
index 000000000..fff5f1b4d
--- /dev/null
+++ b/template/en/default/bug/dependency-graph.html.tmpl
@@ -0,0 +1,98 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[%# INTERFACE:
+ # bug_id: integer. The number of the bug(s).
+ # multiple_bugs: boolean. True if bug_id contains > 1 bug number.
+ # doall: boolean. True if we are displaying every bug in the database.
+ # showsummary: boolean. True if we are showing bug summaries.
+ # rankdir: string. "TB" if we are ranking top-to-bottom,
+ "LR" if left-to-right.
+ # image_url: string. The URL of the graphic showing the dependencies.
+ # map_url: string. The URL of the map file for the image.
+ #%]
+
+[% title = "Dependency Graph"
+ h1 = title
+ %]
+
+[% IF NOT multiple_bugs %]
+ [% title = "$title for bug $bug_id"
+ h1 = "$h1 for bug <a href='show_bug.cgi?id=$bug_id'>$bug_id</a>"
+ %]
+[% END %]
+
+[% INCLUDE global/header %]
+
+<p>
+ Green circles represent open bugs.
+</p>
+
+<a href="[% map_url %]">
+ <img src="[% image_url %]" ismap>
+</a>
+
+<hr>
+
+<form>
+ <table>
+ <tr>
+ <td>
+ Bug numbers:
+ <input name="id" value="[% bug_id %]">
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <input type="checkbox" name="doall"
+ [% " checked" IF doall %]>
+ Show <b>every</b> bug in the system with dependencies
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="3">
+ <input type="checkbox" name="showsummary"
+ [% " checked" IF showsummary %]>
+ Show the summaries of all displayed bugs
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="3">
+ <select name="rankdir">
+ <option value="TB"
+ [% " selected" IF rankdir == "TB" %]>
+ Orient top-to-bottom
+ </option>
+ <option value="LR"
+ [% " selected" IF rankdir == "LR" %]>
+ Orient left-to-right
+ </option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ <input type="submit" value="Change Parameters">
+</form>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/bug/dependency-tree.html.tmpl b/template/en/default/bug/dependency-tree.html.tmpl
new file mode 100644
index 000000000..ba0b8213f
--- /dev/null
+++ b/template/en/default/bug/dependency-tree.html.tmpl
@@ -0,0 +1,208 @@
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Tobias Burnus <burnus@net-b.de>
+ # Ville Skyttä <ville.skytta@iki.fi>
+ # Myk Melez <myk@mozilla.org>
+ #%]
+
+[% PROCESS global/header
+ title = "Dependency tree for Bug $bugid"
+ h1 = "Dependency tree for bug <a href=\"show_bug.cgi?id=$bugid\">$bugid</a>"
+ style = "strike { background-color: #d9d9d9; color: #000000; }"
+%]
+
+[% PROCESS depthControlToolbar %]
+
+[%# Display the tree of bugs that this bug depends on. %]
+<h3>Bugs that bug <a href="show_bug.cgi?id=[% bugid %]">[% bugid %]</a> depends on
+[% IF dependson_ids.size > 0 %]
+ (<a href="buglist.cgi?bug_id=[% dependson_ids.join(",") %]">view as bug list</a>
+ [% IF canedit && dependson_ids.size > 1 %]
+ | <a href="buglist.cgi?bug_id=[% dependson_ids.join(",") %]&amp;tweak=1">change several</a>
+ [% END %])
+ [% IF maxdepth || hide_resolved %]
+ <small><b>
+ (Only [% "open" IF hide_resolved %] bugs
+ [% " whose depth is less than $maxdepth" IF maxdepth %]
+ will be shown)
+ </b></small>
+ [% END %]
+ </h3>
+ [% INCLUDE display_tree tree=dependson_tree bug_id=bugid %]
+[% ELSE %]
+ </h3>
+ <p>None</p>
+[% END %]
+
+[%# Display the tree of bugs that this bug blocks. %]
+<h3>Bugs that bug <a href="show_bug.cgi?id=[% bugid %]">[% bugid %]</a> blocks
+[% IF blocked_ids.size > 0 %]
+ (<a href="buglist.cgi?branch_id=[% blocked_ids.join(",") %]">view as bug list</a>
+ [% IF canedit && blocked_ids.size > 1 %]
+ | <a href="buglist.cgi?branch_id=[% blocked_ids.join(",") %]&amp;tweak=1">change several</a>
+ [% END %])
+ [% IF maxdepth || hide_resolved %]
+ <small><b>
+ (Only [% "open" IF hide_resolved %] bugs
+ [% " whose depth is less than $maxdepth" IF maxdepth %]
+ will be shown)
+ </b></small>
+ [% END %]
+ </h3>
+ [% INCLUDE display_tree tree=blocked_tree bug_id=bugid %]
+[% ELSE %]
+ </h3>
+ <p>None</p>
+[% END %]
+
+[% PROCESS depthControlToolbar %]
+
+[% PROCESS global/footer %]
+
+
+[%###########################################################################%]
+[%# Block to display a tree #%]
+[%###########################################################################%]
+
+[% BLOCK display_tree %]
+<ul>
+ [% FOREACH dep_id = tree.$bug_id.dependencies %]
+ [% dep = tree.$dep_id %]
+ <li>
+ [% "<strike>" IF !dep.open %]
+ <a href="show_bug.cgi?id=[% dep_id %]">[% dep_id %]
+ [[% dep.milestone FILTER html %],
+ [% dep.assignee_email FILTER html %]] -
+ [% IF dep.seen %]
+ <i>&lt;This bug appears elsewhere in this tree&gt;</i></a>
+ [% ELSE %]
+ [% dep.summary FILTER html %].</a>
+ [% END %]
+ [% "</strike>" IF !dep.open %]
+ [% INCLUDE display_tree bug_id=dep_id
+ IF dep.dependencies.size > 0 && !dep.seen %]
+ </li>
+ [% dep.seen = 1 %]
+ [% END %]
+</ul>
+[% END %]
+
+[%###########################################################################%]
+[%# Block for depth control toolbar #%]
+[%###########################################################################%]
+
+[% BLOCK depthControlToolbar %]
+ <table cellpadding="3" border="0" cellspacing="0" bgcolor="#d0d0d0">
+ <tr>
+ [%# Hide/show resolved button
+ Swaps text depending on the state of hide_resolved %]
+ <td align="center">
+ <form method="get" action="showdependencytree.cgi"
+ style="display: inline; margin: 0px;">
+ <input name="id" type="hidden" value="[% bugid %]">
+ [% IF maxdepth %]
+ <input name="maxdepth" type="hidden" value="$maxdepth">
+ [% END %]
+ <input type="hidden" name="hide_resolved" value="[% hide_resolved ? 0 : 1 %]">
+ <input type="submit" value="[% hide_resolved ? "Show" : "Hide" %] Resolved">
+ </form>
+ </td>
+
+ <td>
+ Max Depth:
+ </td>
+
+ <td>
+ &nbsp;
+ </td>
+
+ <td>
+ <form method="get" action="showdependencytree.cgi"
+ style="display: inline; margin: 0px;">
+ [%# set to one form %]
+ <input type="submit" value="&nbsp;1&nbsp;" [%
+ realdepth < 2 || maxdepth == 1 ? "disabled" : ""
+ %]>
+ <input name="id" type="hidden" value="[% bugid %]">
+ <input name="maxdepth" type="hidden" value="1">
+ <input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
+ </form>
+ </td>
+
+ <td>
+ <form method="get" action="showdependencytree.cgi"
+ style="display: inline; margin: 0px;">
+ [%# Minus one form
+ Allow subtracting only when realdepth and maxdepth > 1 %]
+ <input name="id" type="hidden" value="[% bugid %]">
+ <input name="maxdepth" type="hidden" value="[%
+ maxdepth == 1 ? 1
+ : ( maxdepth ? maxdepth - 1 : realdepth - 1 )
+ %]">
+ <input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
+ <input type="submit" value="&nbsp;&lt;&nbsp;" [%
+ realdepth < 2 || ( maxdepth && maxdepth < 2 ) ? "disabled" : ""
+ %]>
+ </form>
+ </td>
+
+ <td>
+ <form method="get" action="showdependencytree.cgi"
+ style="display: inline; margin: 0px;">
+ [%# Limit entry form: the button can not do anything when total depth
+ is less than two, so disable it %]
+ <input name="maxdepth" size="4" maxlength="4" value="[%
+ maxdepth > 0 ? maxdepth : ""
+ %]">
+ <input name="id" type="hidden" value="[% bugid %]">
+ <input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
+ <noscript>
+ <input type="submit" value="Change" [% realdepth < 2 ? "disabled" : "" %]>
+ </noscript>
+ </form>
+ </td>
+
+ <td>
+ <form method="get" action="showdependencytree.cgi"
+ style="display: inline; margin: 0px;">
+ [%# plus one form
+ Disable button if total depth < 2, or if depth set to unlimited %]
+ <input name="id" type="hidden" value="[% bugid %]">
+ [% IF maxdepth %]
+ <input name="maxdepth" type="hidden" value="[% maxdepth + 1 %]">
+ [% END %]
+ <input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
+ <input type="submit" value="&nbsp;&gt;&nbsp;" [%
+ realdepth < 2 || ! maxdepth || maxdepth >= realdepth ?
+ "disabled" : ""
+ %]>
+ </form>
+ </td>
+
+ <td>
+ <form method="get" action="showdependencytree.cgi"
+ style="display: inline; margin: 0px;">
+ [%# Unlimited button %]
+ <input name="id" type="hidden" value="[% bugid %]">
+ <input name="hide_resolved" type="hidden" value="[% hide_resolved %]">
+ <input type="submit" value="&nbsp;Unlimited&nbsp;">
+ </form>
+ </td>
+ </tr>
+</table>
+[% END %]
diff --git a/template/en/default/bug/edit.html.tmpl b/template/en/default/bug/edit.html.tmpl
new file mode 100644
index 000000000..9b77c23a2
--- /dev/null
+++ b/template/en/default/bug/edit.html.tmpl
@@ -0,0 +1,540 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% filtered_desc = bug.short_desc FILTER html %]
+[% UNLESS header_done %]
+ [% INCLUDE global/header
+ title = "Bug $bug.bug_id - $bug.short_desc"
+ h1 = "Bugzilla Bug $bug.bug_id"
+ h2 = filtered_desc
+ extra = navigation_links()
+ %]
+[% END %]
+
+[% PROCESS show/navigate.html.tmpl %]
+
+<hr>
+
+<form name="changeform" method="post" action="process_bug.cgi">
+
+ <input type="hidden" name="delta_ts" value="[% bug.delta_ts %]">
+ <input type="hidden" name="longdesclength" value="[% bug.longdesclength %]">
+ <input type="hidden" name="id" value="[% bug.bug_id %]">
+
+[%# *** Platform Reporter Product OS AddCC *** %]
+
+ <table cellspacing="1" cellpadding="1" border="0">
+ <tr>
+ <td align="right">
+ <b>Bug#:</b>
+ </td>
+ <td>
+ <a href="[% Param('urlbase') %]show_bug.cgi?id=[% bug.bug_id %]">
+ [% bug.bug_id %]</a>
+ </td>
+
+ <td>&nbsp;</td>
+
+ <td align="right">
+ <b>Platform:</b>
+ </td>
+ [% PROCESS select selname = "rep_platform" %]
+
+ <td align="right">
+ <b>Reporter:</b>
+ </td>
+ <td>
+ [% bug.reporter FILTER html %]
+ </td>
+ </tr>
+
+ <tr>
+ <td align="right">
+ <b>Product:</b>
+ </td>
+ [% PROCESS select selname => "product" %]
+
+ <td align="right">
+ <b>OS:</b>
+ </td>
+ [% PROCESS select selname => "op_sys" %]
+
+ <td align="right">
+ <b>Add&nbsp;CC:</b>
+ </td>
+ <td>
+ <input name="newcc" size="30" value="">
+ </td>
+ </tr>
+
+[%# *** Component Version CC Priority Severity AssignedTo Milestone *** %]
+
+ <tr>
+ <td align="right">
+ <b>
+ <a href="describecomponents.cgi?product=[% bug.product FILTER uri %]">
+ Component</a>:
+ </b>
+ </td>
+ <td>
+ <select name="component">
+ [% FOREACH x = component_ %]
+ <option value="[% x FILTER html %]"
+ [% " selected" IF x == bug.component %]>[% x FILTER html %]
+ </option>
+ [% END %]
+ </select>
+ </td>
+
+ <td>&nbsp;</td>
+
+ <td align="right">
+ <b>Version:</b>
+ </td>
+ [% PROCESS select selname => "version" %]
+
+ <td rowspan="4" align="right" valign="top">
+ <b>CC:</b>
+ </td>
+ <td rowspan="4" valign="top">
+ [% IF bug.cc %]
+ <select name="cc" multiple size="5">
+ [% FOREACH c = bug.cc %]
+ <option value="[% c FILTER html %]">[% c FILTER html %]</option>
+ [% END %]
+ </select>
+ <br>
+ <input type="checkbox" name="removecc">Remove selected CCs
+ <br>
+ [% ELSE %]
+ <input type="hidden" name="cc" value="">
+ [% END %]
+ </td>
+ </tr>
+
+ <tr>
+ <td align="right">
+ <b>
+ <a href="bug_status.html">Status</a>:
+ </b>
+ </td>
+ <td>[% bug.bug_status FILTER html %]</td>
+ <td>&nbsp;</td>
+
+ <td align="right">
+ <b><a href="bug_status.html#priority">Priority</a>:</b>
+ </td>
+ [% PROCESS select selname => "priority" %]
+ </tr>
+
+ <tr>
+ <td align="right">
+ <b>
+ <a href="bug_status.html">Resolution</a>:
+ </b>
+ </td>
+ <td>[% bug.resolution FILTER html %]</td>
+ <td>&nbsp;</td>
+
+ <td align="right">
+ <b><a href="bug_status.html#severity">Severity</a>:</b>
+ </td>
+ [% PROCESS select selname = "bug_severity" %]
+
+ </tr>
+
+ <tr>
+ <td align="right">
+ <b>
+ <a href="bug_status.html#assigned_to">Assigned&nbsp;To</a>:
+ </b>
+ </td>
+ <td>[% bug.assigned_to FILTER html %]</td>
+ <td>&nbsp;</td>
+
+ [% IF Param("usetargetmilestone") && bug.target_milestone %]
+ <td align="right">
+ <b>
+ <a href="[% bug.milestoneurl FILTER uri %]">Target Milestone</a>:
+ </b>
+ </td>
+ [% PROCESS select selname = "target_milestone" %]
+ [% ELSE %]
+ <td colspan="3">&nbsp;</td>
+ [% END %]
+ </tr>
+
+[%# *** QAContact URL Summary Whiteboard Keywords *** %]
+
+ [% IF Param('useqacontact') %]
+ <tr>
+ <td align="right">
+ <b>QA Contact:</b>
+ </td>
+ <td colspan="7">
+ <input name="qa_contact"
+ value="[% bug.qa_contact FILTER html %]" size="60">
+ </td>
+ </tr>
+ [% END %]
+
+ <tr>
+ <td align="right">
+ <b>
+ [% IF bug.bug_file_loc %]
+ <a href="[% bug.bug_file_loc FILTER uri %]">URL:</a>
+ [% ELSE %]
+ URL:
+ [% END %]
+ </b>
+ </td>
+ <td colspan="7">
+ <input name="bug_file_loc"
+ value="[% bug.bug_file_loc FILTER html %]" size="60">
+ </td>
+ </tr>
+
+ <tr>
+ <td align="right">
+ <b>Summary:</b>
+ </td>
+ <td colspan="7">
+ <input name="short_desc"
+ value="[% bug.short_desc FILTER html %]" size="60">
+ </td>
+ </tr>
+
+ [% IF Param('usestatuswhiteboard') %]
+ <tr>
+ <td align="right">
+ <b>Status Whiteboard:</b>
+ </td>
+ <td colspan="7">
+ <input name="status_whiteboard"
+ value="[% bug.status_whiteboard FILTER html %]" size="60">
+ </td>
+ </tr>
+ [% END %]
+
+ [% IF use_keywords %]
+ <tr>
+ <td align="right">
+ <b>
+ <a href="describekeywords.cgi">Keywords:</a>
+ </b>
+ <td colspan="7">
+ <input name="keywords"
+ value="[% bug.keywords.join(', ') FILTER html %]" size="60">
+ </td>
+ </tr>
+ [% END %]
+ </table>
+
+[%# *** Attachments *** %]
+
+ [% INCLUDE attachment/list.atml
+ attachments = bug.attachments
+ bugid = bug.bug_id %]
+
+[%# *** Dependencies Votes *** %]
+
+ [% IF Param('usedependencies') %]
+ <table>
+ <tr>
+ [% PROCESS dependencies
+ dep = { title => "depends on", fieldname => "dependson" } %]
+ <td rowspan="2">
+ <a href="showdependencytree.cgi?id=[% bug.bug_id %]">Show
+ dependency tree</a>
+
+ [% IF Param('webdotbase') %]
+ <br>
+ <a href="showdependencygraph.cgi?id=[% bug.bug_id %]">Show
+ dependency graph</a>
+ [% END %]
+ </td>
+ </tr>
+
+ <tr>
+ [% PROCESS dependencies
+ dep = { title => "blocks", fieldname => "blocked" } %]
+ </tr>
+ </table>
+ [% END %]
+
+ [% IF use_votes %]
+ <table>
+ <tr>
+ <th>
+ <a href="votehelp.html">Votes:</a>
+ </th>
+ <td>
+ [% bug.votes %]&nbsp;&nbsp;&nbsp;
+ <a href="votes.cgi?action=show_bug&bug_id=[% bug.bug_id %]">Show
+ votes for this bug</a>&nbsp;&nbsp;&nbsp;
+ <a href="votes.cgi?action=show_user&bug_id=[% bug.bug_id %]">Vote
+ for this bug</a>
+ </td>
+ </tr>
+ </table>
+ [% END %]
+
+[%# *** Comments Groups *** %]
+
+ <br>
+ <b>Additional Comments:</b>
+ <br>
+ <textarea wrap="hard" name="comment" rows="10" cols="80"
+ accesskey="c"></textarea>
+ <br>
+
+ [% IF groups.size > 0 %]
+ <br>
+ <b>Only users in the selected groups can view this bug:</b>
+ <br>
+ <font size="-1">(Unchecking all boxes makes this a public bug.)</font>
+ <br>
+ <br>
+
+ [% FOREACH group = groups %]
+ &nbsp;&nbsp;&nbsp;&nbsp;
+ <input type="checkbox" name="bit-[% group.bit %]" value="1"
+ [% " checked='checked'" IF group.ison %]
+ [% " disabled='disabled'" IF NOT group.ingroup %]>
+ [% group.description %]
+ <br>
+ [% END %]
+
+ [% IF NOT user.inallgroups %]
+ <b>
+ Only members of a group can change the visibility of a bug for
+ that group
+ </b>
+ <br>
+ [% END %]
+
+ [% IF bug.inagroup %]
+ <p>
+ <b>But users in the roles selected below can always view this bug:</b>
+ <br>
+ <small>
+ (The assignee
+ [% IF (Param('useqacontact')) %]
+ and QA contact
+ [% END %]
+ can always see a bug, and this section does not take effect unless
+ the bug is restricted to at least one group.)
+ </small>
+ </p>
+
+ <p>
+ <input type="checkbox" name="reporter_accessible" value="1"
+ [% " checked" IF bug.reporter_accessible %]>Reporter
+ <input type="checkbox" name="cclist_accessible" value="1"
+ [% " checked" IF bug.cclist_accessible %]>CC List
+ </p>
+ [% END %]
+ [% END %]
+
+[%# *** Knob *** %]
+
+ <br>
+ <input type="radio" name="knob" value="none" checked>
+ Leave as <b>[% bug.bug_status FILTER html %]&nbsp;
+ [% bug.resolution FILTER html %]</b>
+ <br>
+
+ [% knum = 1 %]
+
+ [% IF bug.bug_status == "UNCONFIRMED" &&
+ (user.canedit || user.canconfirm) %]
+ <input type="radio" name="knob" value="confirm">
+ Confirm bug (change status to <b>NEW</b>)
+ <br>
+ [% knum = knum + 1 %]
+ [% END %]
+
+ [% IF user.canedit %]
+ [% IF bug.isopened %]
+ [% IF bug.bug_status != "ASSIGNED" %]
+ <input type="radio" name="knob" value="accept">
+ Accept bug (
+ [% "confirm bug, " IF bug.isunconfirmed %]change
+ status to <b>ASSIGNED</b>)
+ <br>
+ [% knum = knum + 1 %]
+ [% END %]
+
+ [% IF bug.resolution %]
+ <input type="radio" name="knob" value="clearresolution">
+ Clear the resolution (remove the current resolution of
+ <b>[% bug.resolution FILTER html %]</b>)<br>
+ [% knum = knum + 1 %]
+ [% END %]
+
+ <input type="radio" name="knob" value="resolve">
+ Resolve bug, changing <a href="bug_status.html">resolution</a> to
+ <select name="resolution"
+ onchange="document.changeform.knob[[% knum %]].checked=true">
+ [% FOREACH r = resolution %]
+ <option value="[% r FILTER html %]">[% r FILTER html %]</option>
+ [% END %]
+ </select>
+ <br>
+ [% knum = knum + 1 %]
+
+ <input type="radio" name="knob" value="duplicate">
+ Resolve bug, mark it as duplicate of bug #
+ <input name="dup_id" size="6"
+ onchange="if (this.value != '')
+ {document.changeform.knob[[% knum %]].checked=true}">
+ <br>
+ [% knum = knum + 1 %]
+
+ <input type="radio" name="knob" value="reassign">
+ <a href="bug_status.html#assigned_to">Reassign</A> bug to
+ <input name="assigned_to" size="32"
+ onchange="if ((this.value != '[% bug.assigned_to_email FILTER js %]') &&
+ (this.value != '')) {
+ document.changeform.knob[[% knum %]].checked=true;
+ }"
+ value="[% bug.assigned_to_email FILTER html %]">
+ <br>
+ [% IF bug.isunconfirmed %]
+ &nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="andconfirm">
+ and confirm bug (change status to <b>NEW</b>)
+ <br>
+ [% END %]
+ [% knum = knum + 1 %]
+
+ <input type="radio" name="knob" value="reassignbycomponent">
+ Reassign bug to owner
+ [% "and QA contact" IF useqacontact %]
+ of selected component
+ <br>
+ [% IF bug.isunconfirmed %]
+ &nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="andconfirm">
+ and confirm bug (change status to <b>NEW</b>)
+ <br>
+ [% END %]
+ [% knum = knum + 1 %]
+ [% ELSE %]
+ [% IF bug.resolution != "MOVED" ||
+ (bug.resolution == "MOVED" && user.canmove) %]
+ <input type="radio" name="knob" value="reopen"> Reopen bug
+ <br>
+ [% knum = knum + 1 %]
+ [% END %]
+ [% IF bug.bug_status == "RESOLVED" %]
+ <input type="radio" name="knob" value="verify">
+ Mark bug as <b>VERIFIED</b><br>
+ [% knum = knum + 1 %]
+ [% END %]
+ [% IF bug.bug_status != "CLOSED" %]
+ <input type="radio" name="knob" value="close">
+ Mark bug as <b>CLOSED</b><br>
+ [% knum = knum + 1 %]
+ [% END %]
+ [% END %]
+ [% END %]
+
+ <input type="submit" value="Commit">
+ <input type="hidden" name="form_name" value="process_bug">
+ <p>
+ <font size="+1">
+ <b>
+ <a href="show_activity.cgi?id=[% bug.bug_id %]">View Bug Activity</a>
+ &nbsp; | &nbsp;
+ <a href="long_list.cgi?buglist=[% bug.bug_id %]">Format For Printing</a>
+ </b>
+ </font>
+
+ [% IF user.canmove %]
+ &nbsp; <font size="+1"><b> | </b></font> &nbsp;
+ <input type="submit" name="action"
+ value="[% Param("move-button-text") %]">
+ [% END %]
+ </p>
+</form>
+
+[%# *** Additional Comments *** %]
+
+<table>
+ <tr>
+ <td align="left">
+ <b>
+ <a name="c0" href="#c0">Description</a>:
+ </b>
+ </td>
+ <td align="right" width="100%">
+ Opened: [% bug.creation_ts %]
+ </td>
+ </tr>
+</table>
+<hr>
+
+[% PROCESS show/comments.tmpl
+ comments = bug.comments
+ %]
+
+<hr>
+
+[% PROCESS show/navigate.html.tmpl %]
+
+<br>
+
+[% INCLUDE global/footer %]
+
+
+[%############################################################################%]
+[%# Block for dependencies #%]
+[%############################################################################%]
+
+[% BLOCK dependencies %]
+ <th align="right">Bug [% bug.bug_id %] [%+ dep.title %]:</th>
+ <td>
+ [% FOREACH depbug = bug.${dep.fieldname} %]
+ [% GetBugLink(depbug, depbug) %][% " " %]
+ [% END %]
+ </td>
+ <td>
+ <input name="[% dep.fieldname %]"
+ value="[% bug.${dep.fieldname}.join(', ') %]">
+ </td>
+[% END %]
+
+
+[%############################################################################%]
+[%# Block for SELECT fields #%]
+[%############################################################################%]
+
+[% BLOCK select %]
+ <td>
+ <select name="[% selname %]">
+ [% FOREACH x = ${selname} %]
+ <option value="[% x FILTER html %]"
+ [% " selected" IF x == bug.${selname} %]>[% x FILTER html %]
+ </option>
+ [% END %]
+ </select>
+ </td>
+ <td>&nbsp;</td>
+[% END %]
diff --git a/template/en/default/bug/navigate.html.tmpl b/template/en/default/bug/navigate.html.tmpl
new file mode 100644
index 000000000..3713e0a0d
--- /dev/null
+++ b/template/en/default/bug/navigate.html.tmpl
@@ -0,0 +1,54 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% IF bug_list.size > 0 %]
+ [% this_bug_idx = lsearch(bug_list, bug.bug_id) %]
+ <b>Bug List:</b>
+ [% IF this_bug_idx != -1 %]
+ ([% this_bug_idx + 1 %] of [% bug_list.size %])
+ [% END %]
+
+ <a href="show_bug.cgi?id=[% bug_list.first %]">First</a>
+ <a href="show_bug.cgi?id=[% bug_list.last %]">Last</a>
+
+ [% IF this_bug_idx != -1 %]
+ [% IF this_bug_idx > 0 %]
+ [% prev_bug = this_bug_idx - 1 %]
+ <a href="show_bug.cgi?id=[% bug_list.$prev_bug %]">Prev</a>
+ [% ELSE %]
+ <i><font color="#777777">Prev</font></i>
+ [% END %]
+
+ [% IF this_bug_idx + 1 < bug_list.size %]
+ [% next_bug = this_bug_idx + 1 %]
+ <a href="show_bug.cgi?id=[% bug_list.$next_bug %]">Next</a>
+ [% ELSE %]
+ <i><font color="#777777">Next</font></i>
+ [% END %]
+ [% ELSE %]
+ (This bug is not in your list)
+ [% END %]
+
+ &nbsp;&nbsp;<a href="buglist.cgi?regetlastlist=1">Show list</a>
+[% END %]
+
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="query.cgi">Query page</a>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="enter_bug.cgi">Enter new bug</a>
diff --git a/template/en/default/bug/show-multiple.html.tmpl b/template/en/default/bug/show-multiple.html.tmpl
new file mode 100644
index 000000000..8313323aa
--- /dev/null
+++ b/template/en/default/bug/show-multiple.html.tmpl
@@ -0,0 +1,156 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Terry Weissman <terry@mozilla.org>
+ # Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Full Text Bug Listing"
+%]
+
+[% IF bugs.first %]
+ [% FOREACH bug = bugs %]
+ [% PROCESS bug_display %]
+ [% END %]
+[% ELSE %]
+ <p>
+ You'd have more luck if you gave me some bug numbers.
+ </p>
+[% END %]
+
+[% INCLUDE global/footer %]
+
+
+[%###########################################################################%]
+[%# Block for an individual bug #%]
+[%###########################################################################%]
+
+[% BLOCK bug_display %]
+ <img src="1x1.gif" width="1" height="80" align="left">
+ <div align="center">
+ <b>
+ <font ="+3">Bug [% bug.bug_id %] - [% bug.short_desc FILTER html %]</font>
+ </b>
+ </div>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <b>Bug#:</b>
+ <a href="show_bug.cgi?id=[% bug.bug_id %]">[% bug.bug_id %]</a>
+ </td>
+ [% PROCESS cell attr = { description => "Product",
+ name => "product" } %]
+ [% PROCESS cell attr = { description => "Version",
+ name => "version" } %]
+ [% PROCESS cell attr = { description => "Platform",
+ name => "rep_platform" } %]
+ </tr>
+
+ <tr>
+ [% PROCESS cell attr = { description => "OS/Version",
+ name => "op_sys" } %]
+ [% PROCESS cell attr = { description => "Status",
+ name => "bug_status" } %]
+ [% PROCESS cell attr = { description => "Severity",
+ name => "bug_severity" } %]
+ [% PROCESS cell attr = { description => "Priority",
+ name => "priority" } %]
+ </tr>
+
+ <tr>
+ [% PROCESS cell attr = { description => "Resolution",
+ name => "resolution" } %]
+ [% PROCESS cell attr = { description => "Assigned To",
+ name => "assigned_to" } %]
+ [% PROCESS cell attr = { description => "Reported By",
+ name => "reporter" } %]
+ [% IF Param('useqacontact') %]
+ [% PROCESS cell attr = { description => "QA Contact",
+ name => "qa_contact" } %]
+ [% END %]
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <b>Component:</b>&nbsp;
+ [% bug.component %]
+ </td>
+
+ <td colspan="2">
+ [% IF Param('usetargetmilestone') %]
+ <b>Target Milestone:</b>&nbsp;
+ [% bug.target_milestone FILTER html %]
+ [% END %]
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="4">
+ <b>URL:</b>&nbsp;
+ <A HREF="[% bug.bug_file_loc %]">[% bug.bug_file_loc FILTER html %]</a>
+ </tr>
+
+ <tr>
+ <td colspan="4">
+ <b>Summary:</b>&nbsp;[% bug.short_desc FILTER html %]
+ </td>
+ </tr>
+
+ [% IF use_keywords %]
+ <tr>
+ <td colspan="4">
+ <b>Keywords: </b>&nbsp;[% bug.keywords FILTER html %]
+ </td>
+ </tr>
+ [% END %]
+
+ [% IF Param("usestatuswhiteboard") %]
+ <tr>
+ <td colspan="4">
+ <b>Status Whiteboard:</b>&nbsp;
+ [% bug.status_whiteboard FILTER html %]
+ </td>
+ </tr>
+ [% END %]
+
+ <tr>
+ <td colspan="4">
+ <b>Description:</b>
+ </td>
+ </tr>
+ </table>
+
+ [% PROCESS show/comments.tmpl
+ comments = bug.comments %]
+
+ <hr>
+[% END %]
+
+
+[%###########################################################################%]
+[%# Block for standard table cells #%]
+[%###########################################################################%]
+
+[% BLOCK cell %]
+ <td>
+ <b>[% attr.description%]:</b>&nbsp;
+ [% bug.${attr.name} FILTER html %]
+ </td>
+[% END %]
diff --git a/template/en/default/bug/votes/delete-all.html.tmpl b/template/en/default/bug/votes/delete-all.html.tmpl
new file mode 100644
index 000000000..9a63f75af
--- /dev/null
+++ b/template/en/default/bug/votes/delete-all.html.tmpl
@@ -0,0 +1,46 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Remove your votes?"
+ %]
+
+<p>
+ You are about to remove all of your bug votes. Are you sure you wish to
+ remove your vote from every bug you've voted on?
+</p>
+
+<form action="votes.cgi" method="post">
+ <input type="hidden" name="action" value="vote">
+ <p>
+ <input type="radio" name="delete_all_votes" value="1">
+ Yes, delete all my votes
+ </p>
+ <p>
+ <input type="radio" name="delete_all_votes" value="0" checked="checked">
+ No, go back and review my votes
+ </p>
+ <p>
+ <input type="submit" value="Submit">
+ </p>
+</form>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/bug/votes/list-for-bug.html.tmpl b/template/en/default/bug/votes/list-for-bug.html.tmpl
new file mode 100644
index 000000000..a9bcaf5c8
--- /dev/null
+++ b/template/en/default/bug/votes/list-for-bug.html.tmpl
@@ -0,0 +1,49 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Show Votes"
+ h2 = "Bug <a href='show_bug.cgi?id=$bug_id'>$bug_id</a>"
+ %]
+
+<table cellspacing="4">
+ <tr>
+ <th>Who</th>
+ <th>Number of votes</th>
+ </tr>
+
+ [% FOREACH user = users %]
+ <tr>
+ <td>
+ <a href="votes.cgi?action=show_user&user=[% user.name %]">
+ [% user.name %]
+ </a>
+ </td>
+ <td align="right">
+ [% user.count %]
+ </td>
+ </tr>
+ [% END %]
+</table>
+
+<p>Total votes: [% total %]</p>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/bug/votes/list-for-user.html.tmpl b/template/en/default/bug/votes/list-for-user.html.tmpl
new file mode 100644
index 000000000..96d9ad84a
--- /dev/null
+++ b/template/en/default/bug/votes/list-for-user.html.tmpl
@@ -0,0 +1,130 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Show Votes"
+ h2 = user.name
+ %]
+
+[% IF votes_recorded %]
+ <p>
+ <font color="red">
+ The changes to your votes have been saved.
+ </font>
+ </p>
+[% ELSE %]
+ <br>
+[% END %]
+
+[% IF products.size %]
+ <form action="votes.cgi">
+ <input type="hidden" name="action" value="vote">
+ <table cellspacing="4">
+ <tr>
+ <td></td>
+ <th>Bug #</th>
+ <th>Summary</th>
+ <th>Votes</th>
+ </tr>
+
+ [% FOREACH product = products %]
+ <tr>
+ <th>[% product.name FILTER html %]</th>
+ <td></td>
+ [% IF product.maxperbug < product.maxvotes AND
+ product.maxperbug > 1 %]
+ <td>
+ <font size="-1">
+ (Note: only [% product.maxperbug %] vote
+ [% "s" IF product.maxperbug != 1 %] allowed per bug in
+ this product.)
+ </font>
+ </td>
+ [% END %]
+ </tr>
+
+ [% FOREACH bug = product.bugs %]
+ <tr>
+ <td></td>
+ <td>
+ [% "<strike>" IF NOT bug.opened %]
+ <a href="show_bug.cgi?id=[% bug.id %]">
+ [% bug.id %]</a>
+ [% "</strike>" IF NOT bug.opened %]
+ </td>
+ <td>
+ <a href="votes.cgi?action=show_bug&bug_id=[% bug.id %]">
+ [% bug.summary FILTER html %]
+ </a>
+ </td>
+ <td align="right">
+ [% IF user.canedit %]
+ [% IF product.onevoteonly %]
+ <input type="checkbox" name="[% bug.id %]" value="1"
+ [% " checked" IF bug.count %]>
+ [% ELSE %]
+ <input name="[% bug.id %]" value="[% bug.count %]"
+ size="2">
+ [% END %]
+ [% ELSE %]
+ [% bug.count %]
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+
+ <tr>
+ <td></td>
+ <td colspan="3">[% product.total %] vote
+ [% "s" IF product.total != 1 %] used out of [% product.maxvotes %]
+ allowed.
+ <br>
+ <br>
+ </td>
+ </tr>
+ [% END %]
+ </table>
+
+ [% IF user.canedit %]
+ <input type="submit" value="Change My Votes">
+ <br>
+ <br>
+ To change your votes, type in new numbers (using zero to
+ mean no votes) or change the checkbox, and then click
+ <b>Change My Votes</b>.
+ [% END %]
+ </form>
+[% ELSE %]
+ <p>
+ [% IF user.canedit %]
+ You are
+ [% ELSE %]
+ This user is
+ [% END %]
+ currently not voting on any bugs.
+ </p>
+[% END %]
+
+<p>
+ <a href="votehelp.html">Help with voting</a>.
+</p>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/global/choose-product.html.tmpl b/template/en/default/global/choose-product.html.tmpl
new file mode 100644
index 000000000..31d9ea7ba
--- /dev/null
+++ b/template/en/default/global/choose-product.html.tmpl
@@ -0,0 +1,42 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% DEFAULT title = "Choose a Product" %]
+[% INCLUDE global/header %]
+
+<table>
+
+[% FOREACH p = proddesc.keys.sort %]
+ <tr>
+ <th align="right" valign="top">
+ <a href="[% target %]?product=[% p FILTER uri %]">
+ [% p FILTER html %]</a>:
+ </th>
+
+ [% IF proddesc.$p %]
+ <td valign="top">&nbsp;[% proddesc.$p %]</td>
+ [% END %]
+ </tr>
+[% END %]
+
+</table>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/global/code-error.html.tmpl b/template/en/default/global/code-error.html.tmpl
new file mode 100644
index 000000000..9f1fe2964
--- /dev/null
+++ b/template/en/default/global/code-error.html.tmpl
@@ -0,0 +1,57 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% UNLESS header_done %]
+ [% INCLUDE global/header %]
+[% END %]
+
+<tt>
+ <p>
+ Bugzilla has suffered an internal error. Please save this page and send
+ it to [% Param("maintainer") %] with details of what you were doing at
+ the time this message appeared.
+ </p>
+ <script> <!--
+ document.write("<p>URL: " + document.location + "</p>");
+ // -->
+ </script>
+</tt>
+
+<table cellpadding="20">
+ <tr>
+ <td bgcolor="#ff0000">
+ <font size="+2">
+ [% error %]
+ </font>
+ </td>
+ </tr>
+</table>
+
+[% IF variables %]
+ <pre>
+Variables:
+ [% FOREACH key = variables.keys %]
+ [%+ key %]: [%+ variables.$key %]
+ [% END %]
+ </pre>
+[% END %]
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/global/footer.html.tmpl b/template/en/default/global/footer.html.tmpl
new file mode 100644
index 000000000..98d525a78
--- /dev/null
+++ b/template/en/default/global/footer.html.tmpl
@@ -0,0 +1,6 @@
+<!-- 1.0@bugzilla.org -->
+[% PerformSubsts(Param('footerhtml')) %]
+
+</body>
+</html>
+
diff --git a/template/en/default/global/header.html.tmpl b/template/en/default/global/header.html.tmpl
new file mode 100644
index 000000000..4dc89e053
--- /dev/null
+++ b/template/en/default/global/header.html.tmpl
@@ -0,0 +1,64 @@
+<!-- 1.0@bugzilla.org -->
+[% DEFAULT
+ title = ""
+ h1 = title
+ h2 = ""
+ extra = ""
+ jscript = ""
+ style = ""
+ message = ""
+%]
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+ <head>
+ <title>[% title FILTER html %]</title>
+
+ [% Param('headerhtml') %]
+
+ [% jscript %]
+
+ <script type="application/x-javascript">
+ <!--
+ [%+ INCLUDE "help/show-hide.js.tmpl" %]
+ // -->
+ </script>
+
+ [% IF style %]
+ <style type="text/css">
+ [% style %]
+ </style>
+ [% END %]
+
+ [% IF style_url %]
+ <link href="[% style_url %]" rel="stylesheet" type="text/css">
+ [% END %]
+
+ </head>
+
+ <body [% Param('bodyhtml') %][% " " %][% extra %]>
+
+ [% PerformSubsts(Param('bannerhtml')) %]
+
+[% IF h1 || h2 %]
+ <table border="0" cellspacing="0">
+ <tr>
+ <td valign="top" align="left">
+ <table border="0" cellpadding="0" cellspacing="2">
+ <tr>
+ <td valign="top" align="left" nowrap>
+ <font size="+1"><b>[% h1 %]</b></font>
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td valign="middle">&nbsp;</td>
+ <td valign="middle" align="left">[% h2 %]</td>
+ </tr>
+ </table>
+[% END %]
+
+[% IF message %]
+ <table width="100%" cellspacing="0" cellpadding="5" border="1"><tr><td>
+ <font color="green">[% message %]</font>
+ </td></tr></table>
+[% END %]
diff --git a/template/en/default/global/hidden-fields.html.tmpl b/template/en/default/global/hidden-fields.html.tmpl
new file mode 100644
index 000000000..85df62435
--- /dev/null
+++ b/template/en/default/global/hidden-fields.html.tmpl
@@ -0,0 +1,32 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ #%]
+
+[%# INTERFACE:
+ # form: hash; the form fields/values for which to generate hidden fields.
+ # exclude: string; a regular expression matching fields to exclude
+ # from the list of hidden fields generated by this template
+ #%]
+
+[%# Generate hidden form fields for non-excluded fields. %]
+[% FOREACH field = form %]
+ [% NEXT IF field.key.search(exclude) %]
+ <input type="hidden" name="[% field.key %]" value="[% field.value FILTER html %]">
+[% END %]
diff --git a/template/en/default/global/message.html.tmpl b/template/en/default/global/message.html.tmpl
new file mode 100644
index 000000000..d0c8281eb
--- /dev/null
+++ b/template/en/default/global/message.html.tmpl
@@ -0,0 +1,17 @@
+<!-- 1.0@bugzilla.org -->
+[% DEFAULT title = "Bugzilla Message" %]
+
+[% PROCESS global/header %]
+
+[%# The "header" template automatically displays the contents of a "message"
+ variable if it finds one, so it is not necessary to display the message
+ here. %]
+
+[%# Display a URL if the calling script has included one. %]
+[% IF url && link %]
+ <p>
+ <a href="[% url %]">[% link %]</a>
+ </p>
+[% END %]
+
+[% PROCESS global/footer %]
diff --git a/template/en/default/global/user-error.html.tmpl b/template/en/default/global/user-error.html.tmpl
new file mode 100644
index 000000000..a76ad5fa7
--- /dev/null
+++ b/template/en/default/global/user-error.html.tmpl
@@ -0,0 +1,40 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% UNLESS header_done %]
+ [% INCLUDE global/header %]
+[% END %]
+
+<table cellpadding="20">
+ <tr>
+ <td bgcolor="#ff0000">
+ <font size="+2">
+ [% error %]
+ </font>
+ </td>
+ </tr>
+</table>
+
+<p>
+ Please press <b>Back</b> and try again.
+</p>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/index.html.tmpl b/template/en/default/index.html.tmpl
new file mode 100644
index 000000000..40117297c
--- /dev/null
+++ b/template/en/default/index.html.tmpl
@@ -0,0 +1,88 @@
+<!-- 1.0@bugzilla.org -->
+[%# -*- mode: html -*- %]
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Terry Weissman <terry@mozilla.org>
+ # Jacob Steenhagen <jake@acutex.net>
+ #%]
+
+[% INCLUDE global/header
+ title = 'Bugzilla Main Page'
+%]
+
+<script type="text/javascript" language="JavaScript">
+<!--
+function addSidebar() {
+ if ((typeof window.sidebar == "object") && (typeof window.sidebar.addPanel == "function"))
+ {
+ window.sidebar.addPanel ("Bugzilla", "[% Param('urlbase') %]sidebar.cgi", "");
+ }
+ else
+ {
+ var rv = window.confirm ("This page is enhanced for use with Netscape 6. " + "Would you like to upgrade now?");
+ if (rv)
+ document.location.href = "http://home.netscape.com/download/index.html";
+ }
+ }
+//-->
+</script>
+
+
+<table width="100%"><tr>
+ <td>
+ <p>This is where we put in lots of nifty words explaining all about Bugzilla.</p>
+
+ But it all boils down to a choice of:
+ <p>
+ <a href="query.cgi">Query existing bug reports</a><br>
+ <a href="enter_bug.cgi">Enter a new bug report</a><br>
+ <a href="reports.cgi">Get summary reports</a><br>
+ </p><p>
+[% IF username %]
+ <a href="[% PerformSubsts(Param('mybugstemplate'), subst) %]">My Bugs</a><br>
+ <a href="userprefs.cgi">Change password or user preferences</a><br>
+ <a href="relogin.cgi">Logout [% username FILTER html %]</a><br>
+[% ELSE %]
+ <a href="query.cgi?GoAheadAndLogIn=1">Log in to an existing account</a><br>
+ <a href="createaccount.cgi">Open a new Bugzilla account</a><br>
+[% END %]
+ </p><p>
+ <a href="javascript:addSidebar()">Add to Sidebar</a> (Requires Mozilla or Netscape 6)<br>
+ </p>
+ <form name="f" action="show_bug.cgi" method="get"
+ onsubmit="QuickSearch(f.id.value); return false;">
+ <p>
+ Enter a bug # or some search terms:<br>
+ <input type="text" name="id">
+ <input type="submit" value="Show">
+ <a href="quicksearch.html">[Help]</a>
+ </p>
+ </form>
+ </td>
+ <td align="right"><img src="ant.jpg" width=329 height=220 border=2 alt="ant.jpg [8.5k]"></td>
+</tr></table>
+
+<script type="text/javascript" language="JavaScript" src="localconfig.js"></script>
+<script type="text/javascript" language="JavaScript" src="quicksearch.js"></script>
+<script type="text/javascript">
+<!--
+document.forms['f'].id.focus();
+//-->
+</script>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/list/change-columns.html.tmpl b/template/en/default/list/change-columns.html.tmpl
new file mode 100644
index 000000000..d3b008c49
--- /dev/null
+++ b/template/en/default/list/change-columns.html.tmpl
@@ -0,0 +1,51 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Dave Lawrence <dkl@redhat.com>
+ #%]
+
+[% INCLUDE global/header
+ title = "Change Columns"
+%]
+
+Check which columns you wish to appear on the list, and then click
+on submit. (Cookies are required.)
+<p>
+<form action="colchange.cgi">
+<input type="hidden" name="rememberedquery" value="[% buffer %]">
+[% FOREACH column = masterlist %]
+ <input type="checkbox" id="[% column %]" name="column_[% column %]" [% "CHECKED" IF lsearch(collist, column) != -1 %]>
+ <label for="[% column %]">[% desc.${column} %]</label><br>
+[% END %]
+</p><p>
+<input id="nosplitheader" type="radio" name="splitheader" value="0" [% "CHECKED" IF ! splitheader %]>
+<label for="nosplitheader">Normal headers (prettier)</label><br>
+<input id="splitheader" type="radio" name="splitheader" value="1" [% "CHECKED" IF splitheader %]>
+<label for="splitheader">Stagger headers (often makes list more compact)</label>
+</p><p>
+<input type="submit" value="Submit">
+</form>
+<form action="colchange.cgi">
+<input type="hidden" name="rememberedquery" value="[% buffer %]">
+<input type="hidden" name="resetit" value="1">
+<input type="submit" value="Reset to Bugzilla default">
+</form>
+</p>
+
+[% INCLUDE global/footer %]
+
diff --git a/template/en/default/list/edit-multiple.html.tmpl b/template/en/default/list/edit-multiple.html.tmpl
new file mode 100644
index 000000000..c7c8d00bf
--- /dev/null
+++ b/template/en/default/list/edit-multiple.html.tmpl
@@ -0,0 +1,316 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ #%]
+
+<script type="text/javascript" language="JavaScript">
+ var numelements = document.forms.changeform.elements.length;
+ function SetCheckboxes(value) {
+ var item;
+ for (var i=0 ; i<numelements ; i++) {
+ item = document.forms.changeform.elements[i];
+ item.checked = value;
+ }
+ }
+ document.write(' <input type="button" value="Uncheck All" onclick="SetCheckboxes(false);">');
+ document.write(' <input type="button" value="Check All" onclick="SetCheckboxes(true);">');
+</script>
+
+<hr />
+
+<p><font size="-1">
+ To change multiple bugs:
+ <ol>
+ <li>Check the bugs you want to change above.</li>
+ <li>Make your changes in the form fields below. If the change
+ you are making requires an explanation, include it in
+ the comments box.</li>
+ <li>Click the <em>Commit</em> button.</li>
+ </ol>
+</font></p>
+
+<table id="form">
+ <tr>
+
+ <th><label for="product">Product:</label></th>
+ <td>
+ [% PROCESS selectmenu menuname = "product"
+ menuitems = products %]
+ </td>
+
+ <th><label for="version">Version:</label></th>
+ <td>
+ [% PROCESS selectmenu menuname = "version"
+ menuitems = versions %]
+ </td>
+
+ </tr>
+ <tr>
+
+ <th>
+ <label for="rep_platform">
+ <a href="bug_status.html#rep_platform">Platform:</a>
+ </label>
+ </th>
+ <td>
+ [% PROCESS selectmenu menuname = "rep_platform"
+ menuitems = platforms %]
+ </td>
+
+ <th>
+ <label for="priority">
+ <a href="bug_status.html#priority">Priority:</a>
+ </label>
+ </th>
+ <td>
+ [% PROCESS selectmenu menuname = "priority"
+ menuitems = priorities %]
+ </td>
+
+ </tr>
+ <tr>
+
+ <th><label for="component">Component:</label></th>
+ <td>
+ [% PROCESS selectmenu menuname = "component"
+ menuitems = components %]
+ </td>
+
+ <th>
+ <label for="bug_severity">
+ <a href="bug_status.html#severity">Severity:</a>
+ </label>
+ </th>
+ <td>
+ [% PROCESS selectmenu menuname = "bug_severity"
+ menuitems = severities %]
+ </td>
+
+ </tr>
+ <tr>
+
+ <th><label for="target_milestone">Target Milestone:</label></th>
+ <td colspan="3">
+ [% PROCESS selectmenu menuname = "target_milestone"
+ menuitems = targetmilestones %]
+ </td>
+
+ </tr>
+
+ [% IF Param("useqacontact") %]
+ <tr>
+ <th><label for="qa_contact">QA Contact:</label></th>
+ <td colspan="3">
+ <input id="qa_contact"
+ name="qa_contact"
+ value="[% dontchange FILTER html %]"
+ size="32">
+ </td>
+ </tr>
+ [% END %]
+
+ <tr>
+
+ <th><label for="masscc">CC List:</label></th>
+ <td colspan="3">
+ <input id="masscc" name="masscc" size="32">
+ <select name="ccaction">
+ <option value="add">Add these to the CC List</option>
+ <option value="remove">Remove these from the CC List</option>
+ </select>
+ </td>
+
+ </tr>
+
+ [% IF use_keywords %]
+ <tr>
+
+ <th>
+ <label for="keywords">
+ <a href="describekeywords.cgi">Keywords:</a>
+ </label>
+ </th>
+ <td colspan="3">
+ <input id="keywords" name="keywords" size="32">
+ <select name="keywordaction">
+ <option value="add">Add these keywords</option>
+ <option value="delete">Delete these keywords</option>
+ <option value="makeexact">Make the keywords be exactly this list</option>
+ </select>
+ </td>
+
+ </tr>
+ [% END %]
+
+</table>
+
+<input type="hidden" name="multiupdate" value="Y">
+
+<label for="comment"><b>Additional Comments:</b></label><br />
+<textarea id="comment" name="comment" rows="5" cols="80" wrap="hard"></textarea><br />
+
+[% IF groups.size > 0 %]
+
+ <b>Groupset:</b><br />
+ <table border="1">
+ <tr>
+ <th>Don't<br />change<br />this group<br />restriction</td>
+ <th>Remove<br />bugs<br />from this<br />group</td>
+ <th>Add<br />bugs<br />to this<br />group</td>
+ <th>Group Name:</td>
+ </tr>
+
+ [% FOREACH group = groups %]
+ <tr>
+ <td align="center">
+ <input type="radio" name="bit-[% group.bit %]" value="-1" checked>
+ </td>
+ <td align="center">
+ <input type="radio" name="bit-[% group.bit %]" value="0">
+ </td>
+ [% IF group.isactive %]
+ <td align="center">
+ <input type="radio" name="bit-[% group.bit %]" value="1">
+ </td>
+ [% ELSE %]
+ <td>&nbsp;</td>
+ [% foundinactive = 1 %]
+ [% END %]
+
+ <td>
+ [% IF group.isactive %]
+ [% group.description %]
+ [% ELSE %]
+ [% group.description FILTER strike %]
+ [% END %]
+ </td>
+
+ </tr>
+ [% END %]
+
+ </table>
+
+ [% IF foundinactive %]
+ <font size="-1">(Note: Bugs may not be added to <strike>inactive
+ groups</strike>, only removed.)</font><br />
+ [% END %]
+
+[% END %]
+
+
+
+[% knum = 0 %]
+<input id="knob-none" type="radio" name="knob" value="none" CHECKED>
+<label for="knob-none">Do nothing else</label><br />
+
+[% IF bugstatuses.size == 1 && bugstatuses.0 == unconfirmedstate %]
+ [% knum = knum + 1 %]
+ <input id="knob-confirm" type="radio" name="knob" value="confirm">
+ <label for="knob-confirm">
+ Confirm bugs (change status to <b>NEW</b>)
+ </label><br />
+[% END %]
+
+[% knum = knum + 1 %]
+<input id="knob-accept" type="radio" name="knob" value="accept">
+<label for="knob-accept">
+ Accept bugs (change status to <b>ASSIGNED</b>)
+</label><br />
+
+[%# If all the bugs being changed are open, allow the user to close them. %]
+[% IF !bugstatuses.containsany(closedstates) %]
+ [% knum = knum + 1 %]
+ <input id="knob-clearresolution" type="radio" name="knob" value="clearresolution">
+ <label for="knob-clearresolution">Clear the resolution</label><br />
+
+ [% knum = knum + 1 %]
+ <input id="knob-resolve" type="radio" name="knob" value="resolve">
+ <label for="knob-resolve">
+ Resolve bugs, changing <A HREF="bug_status.html">resolution</A> to
+ </label>
+ <select name="resolution" onchange="document.forms.changeform.knob[[% knum %]].checked=true">
+ [% FOREACH resolution = resolutions %]
+ [% NEXT IF !resolution %]
+ <option value="[% resolution FILTER html %]" [% selected IF resolution == "FIXED" %]>
+ [% resolution FILTER html %]
+ </option>
+ [% END %]
+ </select><br />
+
+[% END %]
+
+[%# If all the bugs are closed, allow the user to reopen them. %]
+[% IF !bugstatuses.containsany(openstates) %]
+ [% knum = knum + 1 %]
+ <input id="knob-reopen" type="radio" name="knob" value="reopen">
+ <label for="knob-reopen">Reopen bugs</label><br />
+[% END %]
+
+[% IF bugstatuses.size == 1 %]
+ [% IF bugstatuses.contains('RESOLVED') %]
+ [% knum = knum + 1 %]
+ <input id="knob-verify" type="radio" name="knob" value="verify">
+ <label for="knob-verify">Mark bugs as <b>VERIFIED</b></label><br />
+ [% ELSIF bugstatuses.contains('VERIFIED') %]
+ [% knum = knum + 1 %]
+ <input id="knob-close" type="radio" name="knob" value="close">
+ <label for="knob-close">Mark bugs as <b>CLOSED</b></label><br />
+ [% END %]
+[% END %]
+
+[% knum = knum + 1 %]
+<input id="knob-reassign" type="radio" name="knob" value="reassign">
+<label for="knob-reassign"><a href="bug_status.html#assigned_to">
+ Reassign</A> bugs to
+</label>
+<input name="assigned_to"
+ value="[% user FILTER html %]"
+ onchange="document.forms.changeform.knob[[% knum %]].checked = true;"
+ size="32"><br />
+
+[% knum = knum + 1 %]
+<input id="knob-reassignbycomponent"
+ type="radio"
+ name="knob"
+ value="reassignbycomponent">
+<label for="knob-reassignbycomponent">
+ Reassign bugs to owner of selected component
+</label><br />
+
+<input type="submit" value="Commit">
+
+[% IF ismover %]
+ <input type="submit" name="action" value="[% Param('move-button-text') %]">
+[% END %]
+
+
+[%############################################################################%]
+[%# Select Menu Block #%]
+[%############################################################################%]
+
+[% BLOCK selectmenu %]
+ <select id="[% menuname %]" name="[% menuname %]">
+ <option value="[% dontchange FILTER html %]" selected>
+ [% dontchange FILTER html %]
+ </option>
+ [% FOREACH menuitem = menuitems %]
+ <option value="[% menuitem FILTER html %]">[% menuitem FILTER html %]</option>
+ [% END %]
+ </select>
+[% END %]
diff --git a/template/en/default/list/list-rdf.rdf.tmpl b/template/en/default/list/list-rdf.rdf.tmpl
new file mode 100644
index 000000000..c8beb50e3
--- /dev/null
+++ b/template/en/default/list/list-rdf.rdf.tmpl
@@ -0,0 +1,54 @@
+[% template_version = "1.0@bugzilla.org" %]
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ #%]
+
+<?xml version="1.0"?>
+<!-- [% template_version %] -->
+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:bz="http://www.bugzilla.org/rdf#">
+
+<bz:result about="[% Param('urlbase') %]buglist.cgi?[% urlquerypart FILTER html %]">
+
+ <bz:bugs>
+ <Seq>
+ [% FOREACH bug = bugs %]
+ <li>
+
+ <bz:bug about="[% Param('urlbase') %]show_bug.cgi?id=[% bug.id %]">
+
+ <bz:id>[% bug.id %]</bz:id>
+
+ [% FOREACH column = displaycolumns %]
+ <bz:[% column %]>[% bug.$column FILTER html %]</bz:[% column %]>
+ [% END %]
+
+ </bz:bug>
+
+ </li>
+
+ [% END %]
+
+ </Seq>
+
+ </bz:bugs>
+
+</bz:result>
+
+</RDF>
diff --git a/template/en/default/list/list-simple.html.tmpl b/template/en/default/list/list-simple.html.tmpl
new file mode 100644
index 000000000..883b278d7
--- /dev/null
+++ b/template/en/default/list/list-simple.html.tmpl
@@ -0,0 +1,45 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ #%]
+
+[%############################################################################%]
+[%# Initialization #%]
+[%############################################################################%]
+
+[% DEFAULT title = "Bug List" %]
+[% title = title FILTER html %]
+
+
+[%############################################################################%]
+[%# Bug Table #%]
+[%############################################################################%]
+
+<html>
+
+ <head>
+ <title>[% title %]</title>
+ <link href="css/buglist.css" rel="stylesheet" type="text/css" />
+ </head>
+
+ <body>
+ [% PROCESS buglist/table.tmpl %]
+ </body>
+
+</html>
diff --git a/template/en/default/list/list.html.tmpl b/template/en/default/list/list.html.tmpl
new file mode 100644
index 000000000..150ac2c54
--- /dev/null
+++ b/template/en/default/list/list.html.tmpl
@@ -0,0 +1,161 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ #%]
+
+[%############################################################################%]
+[%# Template Initialization #%]
+[%############################################################################%]
+
+[% DEFAULT title = "Bug List" %]
+[% style_url = "css/buglist.css" %]
+
+
+[%############################################################################%]
+[%# Page Header #%]
+[%############################################################################%]
+
+[% PROCESS global/header
+ title = title
+ style = style
+%]
+
+<div align="center">
+ <b>[% currenttime %]</b><br />
+
+ [% IF debug %]
+ <p>[% query FILTER html %]</p>
+ [% END %]
+
+ [% IF quip %]
+ <a href="quips.cgi"><i>[% quip FILTER html %]</i></a>
+ [% END %]
+
+</div>
+
+[% IF toolong %]
+ <h2>
+ This list is too long for Bugzilla's little mind; the
+ Next/Prev/First/Last buttons won't appear on individual bugs.
+ </h2>
+[% END %]
+
+<hr />
+
+
+[%############################################################################%]
+[%# Preceding Status Line #%]
+[%############################################################################%]
+
+[% IF bugs.size > 9 %]
+ [% bugs.size %] bugs found.
+[% END %]
+
+
+[%############################################################################%]
+[%# Start of Change Form #%]
+[%############################################################################%]
+
+[% IF dotweak %]
+ <form name="changeform" method="post" action="process_bug.cgi">
+[% END %]
+
+
+[%############################################################################%]
+[%# Bug Table #%]
+[%############################################################################%]
+
+[% FLUSH %]
+[% PROCESS buglist/table.tmpl %]
+
+[%############################################################################%]
+[%# Succeeding Status Line #%]
+[%############################################################################%]
+
+[% IF bugs.size == 0 %]
+ Zarro Boogs found.
+ <p>
+ <a href="query.cgi">Query Page</a>
+ &nbsp;&nbsp;<a href="enter_bug.cgi">Enter New Bug</a>
+ <a href="query.cgi?[% urlquerypart %]">Edit this query</a>
+ </p>
+
+[% ELSIF bugs.size == 1 %]
+ One bug found.
+
+[% ELSE %]
+ [% bugs.size %] bugs found.
+
+[% END %]
+
+<br />
+
+
+[%############################################################################%]
+[%# Rest of Change Form #%]
+[%############################################################################%]
+
+[% IF dotweak %]
+
+ [% PROCESS "buglist/change-form.tmpl" %]
+
+ </form>
+
+ <hr />
+
+[% END %]
+
+
+[%############################################################################%]
+[%# Navigation Bar #%]
+[%############################################################################%]
+
+[% IF bugs.size > 0 %]
+ <form method="post" action="long_list.cgi">
+ <input type="hidden" name="buglist" value="[% buglist %]">
+ <input type="submit" value="Long Format">
+
+ <a href="query.cgi">Query Page</a> &nbsp;&nbsp;
+ <a href="enter_bug.cgi">Enter New Bug</a> &nbsp;&nbsp;
+ <a href="colchange.cgi?[% urlquerypart %]">Change Columns</a> &nbsp;&nbsp;
+
+ [% IF bugs.size > 1 && caneditbugs && !dotweak %]
+ <a href="buglist.cgi?[% urlquerypart %]
+ [%- "&order=$order" FILTER uri html IF order %]&tweak=1">Change Several
+ Bugs at Once</a>
+ &nbsp;&nbsp;
+ [% END %]
+
+ [% IF bugowners %]
+ <a href="mailto:[% bugowners %]">Send Mail to Bug Owners</a> &nbsp;&nbsp;
+ [% END %]
+
+ <a href="query.cgi?[% urlquerypart %]">Edit this Query</a> &nbsp;&nbsp;
+
+ </form>
+
+[% END %]
+
+
+[%############################################################################%]
+[%# Page Footer #%]
+[%############################################################################%]
+
+[% PROCESS global/footer %]
+
diff --git a/template/en/default/list/quips.html.tmpl b/template/en/default/list/quips.html.tmpl
new file mode 100644
index 000000000..d05557650
--- /dev/null
+++ b/template/en/default/list/quips.html.tmpl
@@ -0,0 +1,65 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Bugzilla Quip System"
+ h1 = "Add your own clever headline"
+ %]
+
+[% IF added_quip %]
+ <p>
+ <font color="red">
+ Your quip '<tt>[% added_quip FILTER html %]</tt>' has been added.
+ </font>
+ </p>
+[% END %]
+
+<p>
+ Bugzilla will pick a random quip for the headline on each bug list, and
+ you can extend the quip list. Type in something clever or funny or boring
+ (but not obscene or offensive, please) and bonk on the button.
+</p>
+
+<form method="post" action="quips.cgi">
+ <input type="hidden" name="action" value="add" />
+ <input size="80" name="quip" />
+ <p>
+ <input type="submit" value="Add This Quip" />
+ </p>
+</form>
+
+[% IF show_quips %]
+ <h2>
+ Existing quips:
+ </h2>
+ <ul>
+ [% FOREACH quip = quips %]
+ <li>[% quip %]</li>
+ [% END %]
+ </ul>
+[% ELSE %]
+ <p>
+ Those who like their wisdom in large doses can
+ <a href="quips.cgi?action=show">view the whole quip list</a>.
+ </p>
+[% END %]
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/list/server-push.html.tmpl b/template/en/default/list/server-push.html.tmpl
new file mode 100644
index 000000000..5a2dde0b1
--- /dev/null
+++ b/template/en/default/list/server-push.html.tmpl
@@ -0,0 +1,36 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ #%]
+
+<html>
+ <head>
+ <title>Bugzilla is pondering your query</title>
+ </head>
+ <body>
+ <h1 style="margin-top: 20%; text-align: center;">Please stand by ...</h1>
+
+ [% IF debug %]
+ <p>
+ <code>[% query FILTER html %]</code>
+ </p>
+ [% END %]
+
+ </body>
+</html>
diff --git a/template/en/default/list/table.html.tmpl b/template/en/default/list/table.html.tmpl
new file mode 100644
index 000000000..2afc9bb9d
--- /dev/null
+++ b/template/en/default/list/table.html.tmpl
@@ -0,0 +1,143 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Myk Melez <myk@mozilla.org>
+ #%]
+
+[%############################################################################%]
+[%# Initialization #%]
+[%############################################################################%]
+
+[%# 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.
+ #%]
+[% abbrev =
+ {
+ "severity" => { size => 3 , title => "Sev" } ,
+ "priority" => { size => 3 , title => "Pri" } ,
+ "platform" => { size => 3 , title => "Plt" } ,
+ "status" => { size => 4 } ,
+ "reporter" => { size => 45 , ellipsis => "..." } ,
+ "owner" => { size => 45 , ellipsis => "..." } ,
+ "qa_contact" => { size => 45 , ellipsis => "..." , title => "QAContact" } ,
+ "resolution" => { size => 4 } ,
+ "summary" => { size => 60 , ellipsis => "..." } ,
+ "status_whiteboard" => { title => "StatusSummary" } ,
+ "component" => { size => 8 , title => "Comp" } ,
+ "product" => { size => 8 } ,
+ "version" => { size => 5 , title => "Vers" } ,
+ "os" => { size => 4 } ,
+ "target_milestone" => { title => "TargetM" } ,
+ }
+%]
+
+[%############################################################################%]
+[%# Table Header #%]
+[%############################################################################%]
+
+[% tableheader = BLOCK %]
+ <table class="bz_buglist" cellspacing="0" cellpadding="4" width="100%">
+ <colgroup>
+ <col class="bz_id_column">
+ [% FOREACH id = displaycolumns %]
+ <col class="bz_[% id %]_column">
+ [% END %]
+ </colgroup>
+
+ <tr align="left">
+ <th colspan="[% splitheader ? 2 : 1 %]">
+ <a href="buglist.cgi?[% urlquerypart %]&amp;order=bugs.bug_id">ID</a>
+ </th>
+
+ [% IF splitheader %]
+
+ [% FOREACH id = displaycolumns %]
+ [% NEXT IF loop.count() % 2 == 0 %]
+ [% column = columns.$id %]
+ [% PROCESS columnheader %]
+ [% END %]
+
+ </tr><tr align="left"><th>&nbsp;</th>
+
+ [% FOREACH id = displaycolumns %]
+ [% NEXT UNLESS 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 %]&amp;order=
+ [% column.name FILTER uri html %]
+ [% ",$order" FILTER uri html IF order %]">
+ [%- abbrev.$id.title || column.title -%]</a>
+ </th>
+[% END %]
+
+
+[%############################################################################%]
+[%# Bug Table #%]
+[%############################################################################%]
+
+[% FOREACH bug = bugs %]
+ [% FLUSH IF loop.count() % 10 == 1 %]
+
+ [%# At the beginning of every hundred bugs in the list, start a new table. %]
+ [% IF loop.count() % 100 == 1 %]
+ [% tableheader %]
+ [% END %]
+
+ <tr class="bz_[% bug.severity %] bz_[% bug.priority %] [%+ "bz_secure" IF (bug.groupset && !usebuggroups) %]">
+
+ <td>
+ [% IF dotweak %]<input type="checkbox" name="id_[% bug.id %]">[% END %]
+ <a href="show_bug.cgi?id=[% bug.id %]">[% bug.id %]</a>
+ </td>
+
+ [% FOREACH column = displaycolumns %]
+ <td>
+ [%+ bug.$column.truncate(abbrev.$column.size, abbrev.$column.ellipsis) FILTER html %]
+ </td>
+ [% END %]
+
+ </tr>
+
+ [%# At the end of every hundred bugs in the list, or at the end of the list,
+ # end the current table.
+ #%]
+ [% IF loop.last() || loop.count() % 100 == 0 %]
+ </table>
+ [% END %]
+
+[% END %]
+
diff --git a/template/en/default/reports/components.html.tmpl b/template/en/default/reports/components.html.tmpl
new file mode 100644
index 000000000..c9dacca10
--- /dev/null
+++ b/template/en/default/reports/components.html.tmpl
@@ -0,0 +1,88 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Bradley Baetz <bbaetz@student.usyd.edu.au>
+ #%]
+
+[% filtered_product = product FILTER html %]
+[% INCLUDE global/header
+ title = "Components for $product"
+ h2 = filtered_product %]
+
+[% IF Param("useqacontact") %]
+ [% numcols = 3 %]
+[% ELSE %]
+ [% numcols = 2 %]
+[% END %]
+
+[% IF components.size == 0 %]
+ This product has no components.
+[% ELSE %]
+ <table>
+ <tr>
+ <th align="left">Component</th>
+ <th align="left">Default Owner</th>
+ [% IF Param("useqacontact") %]
+ <th align="left">Default QA Contact</th>
+ [% END %]
+ </tr>
+
+ [% FOREACH comp = components.sort %]
+ [% INCLUDE describe_comp %]
+ [% END %]
+ <tr>
+ <td colspan='[% numcols %]'>
+ <hr>
+ </td>
+ </tr>
+ </table>
+[% END %]
+
+[% INCLUDE global/footer %]
+
+[%############################################################################%]
+[%# BLOCK for components %]
+[%############################################################################%]
+
+[% BLOCK describe_comp %]
+ <tr>
+ <td colspan="[% numcols %]">
+ <hr>
+ </td>
+ </tr>
+ <tr>
+ <td rowspan='2'>
+ <a name="[% comp.name FILTER html %]">[% comp.name FILTER html %]</a>
+ </td>
+ <td>
+ <a href="mailto:[% comp.initialowner %][% Param('emailsuffix') %]">
+ [% comp.initialowner FILTER html %]</a>
+ </td>
+ [% IF Param("useqacontact") %]
+ <td>
+ <a href="mailto:[% comp.initialqacontact %][% Param('emailsuffix') %]">
+ [% comp.initialqacontact %]</a>
+ </td>
+ [% END %]
+ </tr>
+ <tr>
+ <td colspan="[% numcols - 1 %]">
+ [% comp.description %]
+ </td>
+ </tr>
+[% END %]
diff --git a/template/en/default/reports/duplicates.html.tmpl b/template/en/default/reports/duplicates.html.tmpl
new file mode 100644
index 000000000..1d2e1cbb8
--- /dev/null
+++ b/template/en/default/reports/duplicates.html.tmpl
@@ -0,0 +1,276 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[%# INTERFACE:
+ # bugs: list of hashes. May be empty. Each hash has nine members:
+ # id: integer. The bug number
+ # count: integer. The number of dupes
+ # delta: integer. The change in count in the last $changedsince days
+ # component: string. The bug's component
+ # bug_severity: string. The bug's severity.
+ # op_sys: string. The bug's reported OS.
+ # target_milestone: string. The bug's TM.
+ # short_desc: string. The bug's summary.
+ # bug_status: string. The bug's status.
+ #
+ # bug_ids: list of integers. May be empty. The IDs of the bugs in $bugs.
+ # products: list of strings. The products this user can see.
+ #
+ # sortby: string. the column on which we are sorting the buglist.
+ # reverse: boolean. True if we are reversing the current sort.
+ # maxrows: integer. Max number of rows to display.
+ # changedsince: integer. The number of days ago for the changedsince column.
+ # openonly: boolean. True if we are only showing open bugs.
+ # product: string. Restrict to this product only.
+ #%]
+
+[% IF product %]
+ [% title = "Most Frequently Reported Bugs for $product" %]
+[% ELSE %]
+ [% title = "Most Frequently Reported Bugs" %]
+[% END%]
+
+[% INCLUDE global/header %]
+
+<p>
+ <a href="#explanation">What is this data?</a>
+ <br>
+ <a href="#params">Change parameters</a>
+</p>
+
+[%# *** Column Headers *** %]
+
+<table border>
+ <tr BGCOLOR="#CCCCCC">
+ [% FOREACH column = [ { name => "id", description => "Bug #" },
+ { name => "count", description => "Dupe<br>Count" },
+ { name => "delta",
+ description => "Change in last<br>$changedsince day(s)" },
+ { name => "component", description => "Component" },
+ { name => "bug_severity", description => "Severity" },
+ { name => "op_sys", description => "Op Sys" },
+ { name => "target_milestone",
+ description => "Target<br>Milestone" },
+ { name => "short_desc", description => "Summary" } ]
+ %]
+
+ [%# Small hack to keep delta column out if we don't need it %]
+ [% NEXT IF column.name == "delta" AND NOT dobefore %]
+
+ <td>
+ <center>
+ <b>
+ [% bug_ids_string = bug_ids.join(',') %]
+ <a href="duplicates.cgi?sortby=[% column.name %]
+ [% "&reverse=1" IF NOT reverse AND sortby == column.name %]
+ [% "&maxrows=$maxrows" IF maxrows %]
+ [% "&changedsince=$changedsince" IF changedsince %]
+ [% "&openonly=1" IF openonly %]
+ [% "&product=$product" IF product %]
+ [% "&bug_id=$bug_ids_string&sortvisible=1" IF sortvisible %]">
+ [% column.description %]</a>
+ </b>
+ </center>
+ </td>
+ [% END %]
+ </tr>
+
+[% IF NOT sortby %]
+ [% sortby = "count"; reverse = "1" %]
+[% END %]
+
+[% IF sortby == "id" OR sortby == "count" OR sortby == "delta" %]
+ [%# Numeric sort %]
+ [% sortedbugs = bugs.nsort(sortby) %]
+[% ELSE %]
+ [% sortedbugs = bugs.sort(sortby) %]
+[% END %]
+
+[% IF reverse %]
+ [% bugs = sortedbugs.reverse %]
+[% ELSE %]
+ [% bugs = sortedbugs %]
+[% END %]
+
+[%# *** Buglist *** %]
+
+[%# We need to keep track of the bug IDs we are actually displaying, because
+ # if the user decides to sort the visible list, we need to know what that
+ # list actually is. %]
+[% vis_bug_ids = [] %]
+
+[% FOREACH bug = bugs %]
+ [% LAST IF loop.index() >= maxrows %]
+ [% vis_bug_ids.push(bug.id) %]
+
+ <tr>
+ <td>
+ <center>
+ [% "<strike>" IF bug.resolution != "" %]
+ <A HREF="show_bug.cgi?id=[% bug.id %]">[% bug.id %]</a>
+ [% "</strike>" IF bug.resolution != "" %]
+ </center>
+ </td>
+
+ <td>
+ <center>
+ [% bug.count %]
+ </center>
+ </td>
+
+ [% IF dobefore %]
+ <td><center>[% bug.delta %]</center></td>
+ [% END %]
+
+ <td>[% bug.component %]</td>
+ <td><center>[% bug.bug_severity %]</center></td>
+ <td><center>[% bug.op_sys %]</center></td>
+ <td><center>[% bug.target_milestone %]</center></td>
+ <td>[% bug.short_desc FILTER html %]</td>
+ </tr>
+[% END %]
+
+</table>
+
+<br>
+<br>
+
+[%# *** Parameters *** %]
+
+[% bug_ids_string = vis_bug_ids.join(',') %]
+
+<h3><a name="params">Change Parameters</a></h3>
+
+<form method="get" action="duplicates.cgi">
+ <input type="hidden" name="sortby" value="[% sortby %]" />
+ <input type="hidden" name="reverse" value="[% reverse %]" />
+ <input type="hidden" name="bug_id" value="[% bug_ids_string %]">
+ <table>
+ <tr>
+ <td>When sorting or restricting,
+ work with:</td>
+ <td>
+ <input type="radio" name="sortvisible" id="entirelist" value="0"
+ [% "checked" IF NOT sortvisible %] />
+ <label for="entirelist">
+ entire list
+ </label>
+ <br />
+ <input type="radio" name="sortvisible" id="visiblelist" value="1"
+ [% "checked" IF sortvisible %] />
+ <label for="visiblelist">
+ currently visible list
+ </label>
+ </td>
+ <td rowspan="4" valign="top">Restrict to products:</td>
+ <td rowspan="4" valign="top">
+ <select name="product" size="5" multiple>
+ [% FOREACH p = products %]
+ <option name="[% p %]"
+ [% " selected" IF product == p %]>[% p %]</option>
+ [% END %]
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td>Max rows:</td>
+ <td>
+ <input size="4" name="maxrows" value="[% maxrows %]" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>Change column is change in the last:</td>
+ <td>
+ <input size="4" name="changedsince" value="[% changedsince %]" /> days
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="openonly">
+ Open bugs only:
+ </label>
+ </td>
+ <td>
+ <input type="checkbox" name="openonly" id="openonly" value="1"
+ [% "checked" IF openonly %] />
+ </td>
+ </tr>
+
+ </table>
+
+ <input type="submit" value="Change" />
+</form>
+
+<form method="post" action="buglist.cgi">
+ <input type="hidden" name="bug_id" value="[% bug_ids_string %]">
+ <input type="hidden" name="order" value="Reuse same sort as last time">
+ Or just give this to me as a <input type="submit" value="bug list">.
+ (Note: the order may not be the same.)
+</form>
+
+<hr />
+
+<b>
+ <a name="explanation">What are "Most Frequently Reported Bugs"?</a>
+</b>
+
+<blockquote>
+ The Most Frequent Bugs page lists the known open bugs which
+ are reported most frequently in recent builds of Mozilla. It is
+ automatically generated from the Bugzilla database every 24 hours, by
+ counting the number of direct and indirect duplicates of bugs.
+ This information is provided in order to assist in minimizing
+ the amount of duplicate bugs entered into Bugzilla which in turn cuts down
+ on development time.
+</blockquote>
+
+<b>How do I use this list?</b>
+
+<ul>
+ <li>Review the most frequent bugs list.</li>
+ <li>If problem is listed:</li>
+
+ <ul>
+ <li>Click on Bug # link to confirm that you have found the same bug and
+ comment if you have additional information. Or move on with your testing
+ of the product.
+ </li>
+ </ul>
+
+ <li>If problem not listed:</li>
+
+ <ul>
+ <li>Go to the <a href="query.cgi">Bugzilla Search</a>
+ page to try and locate a similar bug that has already been written.</li>
+ <li>If you find your bug in Bugzilla, feel free to comment with any new or
+ additional data you may have.</li>
+ <li>If you cannot find your problem already documented in Bugzilla, go to
+ the
+ <a href="http://www.mozilla.org/quality/help/bug-form.html">Bugzilla
+ Helper</a>
+ and post a new bug.</li>
+ </ul>
+</ul>
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/reports/keywords.html.tmpl b/template/en/default/reports/keywords.html.tmpl
new file mode 100644
index 000000000..1769df85d
--- /dev/null
+++ b/template/en/default/reports/keywords.html.tmpl
@@ -0,0 +1,75 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Gervase Markham <gerv@gerv.net>
+ #%]
+
+[%# INTERFACE:
+ # keywords: array of hashes. May be empty. Each has has three members:
+ # name: the name of the keyword
+ # description: keyword description. May be HTML.
+ # bugcount: number of bugs with that keyword
+ # caneditkeywords: boolean. True if this user can edit keywords
+ %]
+
+[% INCLUDE global/header
+ title = "Bugzilla Keyword Descriptions"
+%]
+
+[% FOREACH keyword = keywords %]
+ [% IF loop.index % 50 == 0 %]
+ [% IF loop.index != 0 %]
+ </table>
+ [% END %]
+
+ <table border="1" cellpadding="4" cellspacing="0">
+ <tr bgcolor="#6666FF">
+ <th align="left">Name</th>
+ <th align="left">Description</th>
+ <th align="left">Bugs</th>
+ </tr>
+ [% END %]
+
+ <tr>
+ <th>
+ <a name="[% keyword.name FILTER html %]">
+ [% keyword.name FILTER html %]</a>
+ </th>
+ <td>[% keyword.description %]</td>
+ <td align="right">
+ [% IF keyword.bugcount > 0 %]
+ <A HREF="buglist.cgi?keywords=[% keyword.name FILTER uri %]">
+ [% keyword.bugcount %]</a>
+ [% ELSE %]
+ none
+ [% END %]
+ </td>
+ </tr>
+[% END %]
+
+[% IF keywords.size > 0 %]
+ </table>
+[% END %]
+
+[% IF caneditkeywords %]
+ <p>
+ <a href="editkeywords.cgi">Edit keywords</a>.
+ </p>
+[% END %]
+
+[% INCLUDE global/footer %]
diff --git a/template/en/default/search/search-advanced.html.tmpl b/template/en/default/search/search-advanced.html.tmpl
new file mode 100644
index 000000000..85e66356b
--- /dev/null
+++ b/template/en/default/search/search-advanced.html.tmpl
@@ -0,0 +1,869 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Chris Lahey <clahey@ximian.com> [javascript fixes]
+ # Christian Reis <kiko@async.com.br> [javascript rewrite]
+ # Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Search for bugs"
+ extra = " onLoad=\"selectProduct(document.forms['queryform']);\""
+%]
+
+[%# Note: use Template comments and not JS ones here, to avoid bloating
+ what we actually send to the browser %]
+
+<script language="JavaScript" type="text/javascript"> <!--
+
+var first_load = true; [%# is this the first time we load the page? %]
+var last_sel = new Array(); [%# caches last selection %]
+
+var cpts = new Array();
+var vers = new Array();
+[% IF Param('usetargetmilestone') %]
+var tms = new Array();
+[% END %]
+
+[%# Create three arrays of components, versions and target milestones, indexed
+ # numerically according to the product they refer to. #%]
+
+[% n = 0 %]
+[% FOREACH p = product %]
+ cpts[[% n %]] = [
+ [%- FOREACH item = componentsbyproduct.$p %]'[% item FILTER js %]', [%- END -%]];
+ vers[[% n %]] = [
+ [%- FOREACH item = versionsbyproduct.$p -%]'[% item FILTER js %]', [%- END -%]];
+ [% IF Param('usetargetmilestone') %]
+ tms[[% n %]] = [
+ [%- FOREACH item = milestonesbyproduct.$p %]'[% item FILTER js %]', [%- END -%]];
+ [% END %]
+ [% n = n+1 %]
+[% END %]
+
+[%# updateSelect(array, sel, target, merging)
+ #
+ # Adds to the target select object all elements in array that
+ # correspond to the elements selected in source.
+ # - array should be a array of arrays, indexed by number. the
+ # array should contain the elements that correspond to that
+ # product.
+ # - sel is a list of selected items, either whole or a diff
+ # depending on merging.
+ # - target should be the target select object.
+ # - merging (boolean) determines if we are mergine in a diff or
+ # substituting the whole selection. a diff is used to optimize adding
+ # selections.
+ #
+ # Example (compsel is a select form control)
+ #
+ # var components = Array();
+ # components[1] = [ 'ComponentA', 'ComponentB' ];
+ # components[2] = [ 'ComponentC', 'ComponentD' ];
+ # source = [ 2 ];
+ # updateSelect(components, source, compsel, 0, 0);
+ #
+ # would clear compsel and add 'ComponentC' and 'ComponentD' to it.
+ #
+ %]
+
+function updateSelect(array, sel, target, merging) {
+
+ var i, item;
+
+ [%# If we have no versions/components/milestones %]
+ if (array.length < 1) {
+ target.options.length = 0;
+ return false;
+ }
+
+ if (merging) {
+ [%# array merging/sorting in the case of multiple selections %]
+ [%# merge in the current options with the first selection %]
+ item = merge_arrays(array[sel[0]], target.options, 1);
+
+ [%# merge the rest of the selection with the results %]
+ for (i = 1 ; i < sel.length ; i++) {
+ item = merge_arrays(array[sel[i]], item, 0);
+ }
+ } else if ( sel.length > 1 ) {
+ [%# here we micro-optimize for two arrays to avoid merging with a
+ null array %]
+ item = merge_arrays(array[sel[0]],array[sel[1]], 0);
+
+ [%# merge the arrays. not very good for multiple selections. %]
+ for (i = 2; i < sel.length; i++) {
+ item = merge_arrays(item, array[sel[i]], 0);
+ }
+ } else { [%# single item in selection, just get me the list %]
+ item = array[sel[0]];
+ }
+
+ [%# clear select %]
+ target.options.length = 0;
+
+ [%# load elements of list into select %]
+ for (i = 0; i < item.length; i++) {
+ target.options[i] = new Option(item[i], item[i]);
+ }
+ return true;
+}
+
+[%# Returns elements in a that are not in b.
+ # NOT A REAL DIFF: does not check the reverse.
+ # - a,b: arrays of values to be compare. %]
+function fake_diff_array(a, b) {
+ var newsel = new Array();
+ var found = false;
+
+ [%# do a boring array diff to see who's new %]
+ for (var ia in a) {
+ for (var ib in b) {
+ if (a[ia] == b[ib]) {
+ found = true;
+ }
+ }
+ if (!found) {
+ newsel[newsel.length] = a[ia];
+ }
+ found = false;
+ }
+ return newsel;
+}
+
+[%# takes two arrays and sorts them by string, returning a new, sorted
+ # array. the merge removes dupes, too.
+ # - a, b: arrays to be merge.
+ # - b_is_select: if true, then b is actually an optionitem and as
+ # such we need to use item.value on it. %]
+function merge_arrays(a, b, b_is_select) {
+ var pos_a = 0;
+ var pos_b = 0;
+ var ret = new Array();
+ var bitem, aitem;
+
+ [%# iterate through both arrays and add the larger item to the return
+ list. remove dupes, too. Use toLowerCase to provide
+ case-insensitivity. %]
+ while ((pos_a < a.length) && (pos_b < b.length)) {
+ if (b_is_select) {
+ bitem = b[pos_b].value;
+ } else {
+ bitem = b[pos_b];
+ }
+ aitem = a[pos_a];
+
+ [%# smaller item in list a %]
+ if (aitem.toLowerCase() < bitem.toLowerCase()) {
+ ret[ret.length] = aitem;
+ pos_a++;
+ } else {
+ [%# smaller item in list b %]
+ if (aitem.toLowerCase() > bitem.toLowerCase()) {
+ ret[ret.length] = bitem;
+ pos_b++;
+ } else {
+ [%# list contents are equal, inc both counters. %]
+ ret[ret.length] = aitem;
+ pos_a++;
+ pos_b++;
+ }
+ }
+ }
+
+ [%# catch leftovers here. these sections are ugly code-copying. %]
+ if (pos_a < a.length) {
+ for (; pos_a < a.length ; pos_a++) {
+ ret[ret.length] = a[pos_a];
+ }
+ }
+
+ if (pos_b < b.length) {
+ for (; pos_b < b.length; pos_b++) {
+ if (b_is_select) {
+ bitem = b[pos_b].value;
+ } else {
+ bitem = b[pos_b];
+ }
+ ret[ret.length] = bitem;
+ }
+ }
+ return ret;
+}
+
+[%# Returns an array of indexes or values from a select form control.
+ # - control: select control from which to find selections
+ # - findall: boolean, store all options when true or just the selected
+ # indexes
+ # - want_values: boolean; we store values when true and indexes when
+ # false %]
+function getSelection(control, findall, want_values) {
+ var ret = new Array();
+
+ if ((!findall) && (control.selectedIndex == -1)) {
+ return ret;
+ }
+
+ for (var i=0; i<control.length; i++) {
+ if (findall || control.options[i].selected) {
+ ret[ret.length] = want_values ? control.options[i].value : i;
+ }
+ }
+ return ret;
+}
+
+[%# Selects items in control that have index defined in sel
+ # - control: SELECT control to be restored
+ # - selnames: array of indexes in select form control %]
+function restoreSelection(control, selnames) {
+ [%# right. this sucks. but I see no way to avoid going through the
+ # list and comparing to the contents of the control. %]
+ for (var j=0; j < selnames.length; j++) {
+ for (var i=0; i < control.options.length; i++) {
+ if (control.options[i].value == selnames[j]) {
+ control.options[i].selected = true;
+ }
+ }
+ }
+}
+
+[%# selectProduct reads the selection from f.product and updates
+ # f.version, component and target_milestone accordingly.
+ # - f: a form containing product, component, varsion and
+ # target_milestone select boxes.
+ # globals (3vil!):
+ # - cpts, vers, tms: array of arrays, indexed by product name. the
+ # subarrays contain a list of names to be fed to the respective
+ # selectboxes. For bugzilla, these are generated with perl code
+ # at page start.
+ # - first_load: boolean, specifying if it is the first time we load
+ # the query page.
+ # - last_sel: saves our last selection list so we know what has
+ # changed, and optimize for additions. %]
+function selectProduct(f) {
+ [%# this is to avoid handling events that occur before the form
+ itself is ready, which could happen in buggy browsers. %]
+ if ((!f) || (!f.product)) {
+ return;
+ }
+
+ [%# if this is the first load and nothing is selected, no need to
+ merge and sort all components; perl gives it to us sorted. %]
+ if ((first_load) && (f.product.selectedIndex == -1)) {
+ first_load = false;
+ return;
+ }
+
+ [%# turn first_load off. this is tricky, since it seems to be
+ redundant with the above clause. It's not: if when we first load
+ the page there is _one_ element selected, it won't fall into that
+ clause, and first_load will remain 1. Then, if we unselect that
+ item, selectProduct will be called but the clause will be valid
+ (since selectedIndex == -1), and we will return - incorrectly -
+ without merge/sorting. %]
+ first_load = false;
+
+ [%# - sel keeps the array of products we are selected.
+ - merging says if it is a full list or just a list of products that
+ were added to the current selection. %]
+ var merging = false;
+ var sel = Array();
+
+ [%# if nothing selected, pick all %]
+ var findall = f.product.selectedIndex == -1;
+ sel = getSelection(f.product, findall, false);
+ if (!findall) {
+ [%# save sel for the next invocation of selectProduct() %]
+ var tmp = sel;
+
+ [%# this is an optimization: if we have just added products to an
+ existing selection, no need to clear the form controls and add
+ everybody again; just merge the new ones with the existing
+ options. %]
+ if ((last_sel.length > 0) && (last_sel.length < sel.length)) {
+ sel = fake_diff_array(sel, last_sel);
+ merging = true;
+ }
+ last_sel = tmp;
+ }
+ [%# save original options selected %]
+ var saved_cpts = getSelection(f.component, false, true);
+ var saved_vers = getSelection(f.version, false, true);
+ [% IF Param('usetargetmilestone') %]
+ var saved_tms = getSelection(f.target_milestone, false, true);
+ [% END %]
+
+ [%# do the actual fill/update, reselect originally selected options %]
+ updateSelect(cpts, sel, f.component, merging);
+ restoreSelection(f.component, saved_cpts);
+ updateSelect(vers, sel, f.version, merging);
+ restoreSelection(f.version, saved_vers);
+ [% IF Param('usetargetmilestone') %]
+ updateSelect(tms, sel, f.target_milestone, merging);
+ restoreSelection(f.target_milestone, saved_tms);
+ [% END %]
+}
+
+// -->
+</script>
+
+[% query_variants = [
+ { value => "allwordssubstr", description => "contains all of the words/strings" },
+ { value => "anywordssubstr", description => "contains any of the words/strings" },
+ { value => "substring", description => "contains the string" },
+ { value => "casesubstring", description => "contains the string (exact case)" },
+ { value => "allwords", description => "contains all of the words" },
+ { value => "anywords", description => "contains any of the words" },
+ { value => "regexp", description => "matches the regexp" },
+ { value => "notregexp", description => "doesn&#8217;t match the regexp" } ] %]
+
+[%# The decent help requires Javascript %]
+<script> <!--
+ document.write("<p><a href='query.cgi?help=1'>Give me help</a> with this form (reloads page.)</p>");
+// -->
+</script>
+<noscript>
+ <p>
+ <a href="queryhelp.cgi">Give me help</a> with this form.
+ </p>
+</noscript>
+
+<form method="get" action="buglist.cgi" name="queryform">
+
+[%# *** Summary *** %]
+
+<table>
+ <tr>
+ <th align="right">Summary:</th>
+ <td>
+ <select name="short_desc_type">
+ [% FOREACH qv = query_variants %]
+ <option value="[% qv.value %]"
+ [% " selected" IF default.short_desc_type.0 == qv.value %]>[% qv.description %]</option>
+ [% END %]
+ </select>
+ </td>
+ <td>
+ <input name="short_desc" size="40" value="[% default.short_desc.0 FILTER html %]">
+ </td>
+ <td>
+ <input type="submit" value="Search">
+ </td>
+ </tr>
+
+[%# *** Product Component Version Target *** %]
+
+ <tr>
+ <td colspan="4">
+ <table>
+ <tr valign="bottom">
+ <th align="left">Product:</th>
+ <th align="left"><a href="describecomponents.cgi">Component</a>:</th>
+ <th align="left">Version:</th>
+
+ [% IF (Param("usetargetmilestone")) %]
+ <th align="left">Target:</th>
+ [% END %]
+ </tr>
+
+ <tr valign="top">
+
+ [%# Can't use the select block here because of onChange and the fact that
+ 'component' is a toolkit reserved word - we use 'component_' instead. %]
+ <td align="left">
+ <select name="product" multiple size="5" onChange="selectProduct(this.form);">
+ [% FOREACH p = product %]
+ <option value="[% p FILTER html %]"
+ [% " selected" IF lsearch(default.product, p) != -1 %]>
+ [% p FILTER html %]</option>
+ [% END %]
+ </select>
+ </td>
+
+ <td align="left">
+ <select name="component" multiple size="5">
+ [% FOREACH c = component_ %]
+ <option value="[% c FILTER html %]"
+ [% " selected" IF lsearch(default.component, c) != -1 %]>
+ [% c FILTER html %]</option>
+ [% END %]
+ </select>
+ </td>
+
+ [% PROCESS select sel = { name => 'version', size => 5 } %]
+
+ [% IF Param('usetargetmilestone') && target_milestone.size > 0 %]
+ [% PROCESS select sel = { name => 'target_milestone', size => 5 } %]
+ [% END %]
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+[%# *** Comment URL Whiteboard Keywords *** %]
+
+ [% FOREACH field = [
+ { name => "long_desc", description => "A&nbsp;comment" },
+ { name => "bug_file_loc", description => "The&nbsp;URL" },
+ { name => "status_whiteboard", description => "Whiteboard" } ] %]
+
+ [% UNLESS field.name == 'status_whiteboard' AND NOT Param('usestatuswhiteboard') %]
+ <tr>
+ <th align="right">[% field.description %]:</th>
+ <td>
+ <select name="[% field.name %]_type">
+ [% FOREACH qv = query_variants %]
+ [% type = "${field.name}_type" %]
+ <option value="[% qv.value %]"
+ [% " selected" IF default.$type.0 == qv.value %]>[% qv.description %]</option>
+ [% END %]
+ </select>
+ </td>
+ <td><input name="[% field.name %]" size="40" value="
+ [% default.${field.name}.0 FILTER html %]">
+ </td>
+ <td></td>
+ </tr>
+ [% END %]
+ [% END %]
+
+ [% IF have_keywords %]
+ <tr>
+ <th align="right"><a href="describekeywords.cgi">Keywords</a>:</th>
+ <td>
+ <select name="keywords_type">
+ [% FOREACH qv = [
+ { name => "anywords", description => "contains any of the keywords" },
+ { name => "allwords", description => "contains all of the keywords" },
+ { name => "nowords", description => "contains none of the keywords" } ] %]
+
+ <option value="[% qv.name %]"
+ [% " selected" IF default.keywords_type.0 == qv.name %]>
+ [% qv.description %]</option>
+ [% END %]
+ </select>
+ </td>
+ <td>
+ <input name="keywords" size="40" value="[% default.keywords.0 FILTER html %]">
+ </td>
+ </tr>
+ [% END %]
+</table>
+
+<hr>
+
+[%# *** Status Resolution Severity Priority Hardware OS *** %]
+
+<table>
+ <tr>
+ <th align="left"><a href="queryhelp.cgi#status">Status</a>:</th>
+ <th align="left"><a href="queryhelp.cgi#resolution">Resolution</a>:</th>
+ <th align="left"><a href="queryhelp.cgi#severity">Severity</a>:</th>
+ <th align="left"><a href="queryhelp.cgi#priority">Priority</a>:</th>
+ <th align="left"><a href="queryhelp.cgi#platform">Hardware</a>:</th>
+ <th align="left"><a href="queryhelp.cgi#opsys">OS</a>:</th>
+ </tr>
+
+ <tr valign="top">
+ [% PROCESS select sel = { name => 'bug_status', size => 7 } %]
+ [% PROCESS select sel = { name => 'resolution', size => 7 } %]
+ [% PROCESS select sel = { name => 'bug_severity', size => 7 } %]
+ [% PROCESS select sel = { name => 'priority', size => 7 } %]
+ [% PROCESS select sel = { name => 'rep_platform', size => 7 } %]
+ [% PROCESS select sel = { name => 'op_sys', size => 7 } %]
+ </tr>
+</table>
+
+<p>
+
+[%# *** Email Numbering Votes *** %]
+
+<table>
+ <tr>
+ <td>
+ <fieldset>
+ <legend>
+ <strong>
+ <a href="queryhelp.cgi#peopleinvolved">Email</a> and Numbering
+ </strong>
+ </legend>
+
+
+<table>
+ <tr>
+ [% FOREACH n = [1, 2] %]
+ <td>
+
+
+<table cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+ Any of:
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="checkbox" name="emailassigned_to[% n %]"
+ id="emailassigned_to[% n %]" value="1"
+ [% " checked" IF default.emailassigned_to.$n %]>
+ <label for="emailassigned_to[% n %]">
+ bug owner
+ </label>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="checkbox" name="emailreporter[% n %]"
+ id="emailreporter[% n %]" value="1"
+ [% " checked" IF default.emailreporter.$n %]>
+ <label for="emailreporter[% n %]">
+ reporter
+ </label>
+ </td>
+ </tr>
+ [% IF Param('useqacontact') %]
+ <tr>
+ <td>
+ <input type="checkbox" name="emailqa_contact[% n %]"
+ id="emailqa_contact[% n %]" value="1"
+ [% " checked" IF default.emailqa_contact.$n %]>
+ <label for="emailqa_contact[% n %]">
+ QA contact
+ </label>
+ </td>
+ </tr>
+ [% END %]
+ <tr>
+ <td>
+ <input type="checkbox" name="emailcc[% n %]"
+ id="emailcc[% n %]" value="1"
+ [% " checked" IF default.emailcc.$n %]>
+ <label for="emailcc[% n %]">
+ CC list member
+ </label>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="checkbox" name="emaillongdesc[% n %]"
+ id="emaillongdesc[% n %]" value="1"
+ [% " checked" IF default.emaillongdesc.$n %]>
+ <label for="emaillongdesc[% n %]">
+ commenter
+ </label>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <select name="emailtype[% n %]">
+ [% FOREACH qv = [
+ { name => "substring", description => "contains" },
+ { name => "exact", description => "is" },
+ { name => "regexp", description => "matches regexp" },
+ { name => "notregexp", description => "doesn&#8217;t match regexp" } ] %]
+
+ <option value="[% qv.name %]"
+ [% " selected" IF default.emailtype.$n == qv.name %]>[% qv.description %]</option>
+ [% END %]
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="email[% n %]" size="20" value="[% default.email.$n FILTER html %]">
+ </td>
+ </tr>
+</table>
+
+
+ </td>
+ [% END %]
+ </tr>
+</table>
+<hr>
+<table>
+ <tr>
+ <td>
+ <select name="bugidtype">
+ <option value="include"[% " selected" IF default.bugidtype.0 == "include" %]>Only include</option>
+ <option value="exclude"[% " selected" IF default.bugidtype.0 == "exclude" %]>Exclude</option>
+ </select>
+ bugs numbered:
+ </td>
+ <td>
+ <input type="text" name="bug_id" value="[% default.bug_id.0 FILTER html %]" size="20">
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>(comma-separated list)</td>
+ </tr>
+ <tr>
+ <td align="right">
+ Only bugs with at least:
+ </td>
+ <td>
+ <input name="votes" size="3" value="[% default.votes.0 FILTER html %]"> votes
+ </td>
+ </tr>
+</table>
+
+
+ </fieldset>
+ </td>
+
+[%# *** Bug Changes *** %]
+
+ <td valign="top">
+ <fieldset>
+ <legend><strong>Bug Changes</strong></legend>
+
+
+<dl>
+ <dt>Only bugs changed in the last </dt>
+ <dd><input name=changedin size=3 value="[% default.changedin.0 FILTER html %]"> days</dd>
+</dl>
+
+<dl>
+ <dt>Only bugs where any of the fields</dt>
+ <dd>
+ <select name="chfield" multiple size="4">
+ [% FOREACH field = chfield %]
+ <option value="[% field FILTER html %]"
+ [% " selected" IF lsearch(default.chfield, field) != -1 %]>
+ [% field FILTER html %]</option>
+ [% END %]
+ </select>
+ </dd>
+
+ <dt>were changed between</dt>
+ <dd>
+ <input name="chfieldfrom" size="10" value="[% default.chfieldfrom.0 FILTER html %]">
+ and <input name="chfieldto" size="10" value="[% default.chfieldto.0 FILTER html %]">
+ <br>(YYYY-MM-DD)
+ </dd>
+ <dt>to this value: (optional)</dt>
+ <dd>
+ <input name="chfieldvalue" size="20" value="[% default.chfieldvalue.0 FILTER html %]">
+ </dd>
+</dl>
+
+
+ </fieldset>
+ </td>
+ </tr>
+
+[%# *** Action Selection *** %]
+
+ <tr>
+ <td colspan="2">
+
+ [% IF NOT userid %]
+ <input type="hidden" name="cmdtype" value="doit">
+ [% ELSE %]
+ <br>
+ <input type="radio" name="cmdtype" value="doit" checked> Run this query
+ <br>
+
+ [% IF namedqueries.size > 0 %]
+ <p>
+ <table cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+ <input type="radio" name="cmdtype" value="editnamed">
+ Load my remembered query:
+ </td>
+ <td rowspan="3">
+ <select name="namedcmd">
+ [% FOREACH query = namedqueries %]
+ <option value="[% query FILTER html %]">[% query FILTER html %]</option>
+ [% END %]
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="radio" name="cmdtype" value="runnamed">
+ Run my remembered query:
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="radio" name="cmdtype" value="forgetnamed">
+ Forget my remembered query:
+ </td>
+ </tr>
+ </table>
+ </p>
+ [% END %]
+
+ <input type="radio" name="cmdtype" value="asdefault">
+ Remember this as my default query
+ <br>
+ <input type="radio" name="cmdtype" value="asnamed">
+ Remember this query, and name it:
+ <input type="text" name="newqueryname">
+ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="tofooter" value="1">
+ and put it in my page footer
+ <br>
+ [% END %]
+ <br>
+ <div>
+ Sort results by:
+ <select name="order">
+ [% FOREACH order = orders %]
+ <option value="[% order FILTER html %]"
+ [% " selected" IF default.order.0 == order %]>[% order FILTER html %]</option>
+ [% END %]
+ </select>
+
+ <input type="submit" value="Search">
+ [% IF userdefaultquery %]
+ <p>
+ <a href="query.cgi?nukedefaultquery=1">
+ Set my default query back to the system default</a>
+ </p>
+ [% END %]
+ </div>
+ </td>
+ </tr>
+</table>
+
+[%# *** Boolean Charts *** %]
+
+<hr>
+
+[% types = [
+ { name => "noop", description => "---" },
+ { name => "equals", description => "is equal to" },
+ { name => "notequals", description => "is not equal to" },
+ { name => "substring", description => "contains the string" },
+ { name => "casesubstring", description => "contains the string (exact case)" },
+ { name => "notsubstring", description => "does not contain the string" },
+ { name => "allwordssubstr", description => "contains all of the strings" },
+ { name => "anywordssubstr", description => "contains any of the strings" },
+ { name => "regexp", description => "contains regexp" },
+ { name => "notregexp", description => "does not contain regexp" },
+ { name => "lessthan", description => "is less than" },
+ { name => "greaterthan", description => "is greater than" },
+ { name => "anywords", description => "contains any of the words" },
+ { name => "allwords", description => "contains all of the words" },
+ { name => "nowords", description => "contains none of the words" },
+ { name => "changedbefore", description => "changed before" },
+ { name => "changedafter", description => "changed after" },
+ { name => "changedfrom", description => "changed from" },
+ { name => "changedto", description => "changed to" },
+ { name => "changedby", description => "changed by" } ] %]
+
+ <p>
+ <strong>
+ <a name="chart" href="queryhelp.cgi#advancedquerying">
+ Advanced Querying Using Boolean Charts</a>:
+ </strong>
+ </p>
+
+[%# Whoever wrote the original version of boolean charts had a seriously twisted mind %]
+
+[% jsmagic = "onclick=\"document.forms[0].action='query.cgi#chart'; document.forms[0].method='POST'; return 1;\"" %]
+
+[% FOREACH chart = default.charts %]
+ [% chartnum = loop.count - 1 %]
+ <table>
+ [% FOREACH row = chart %]
+ [% rownum = loop.count - 1 %]
+ <tr>
+ [% FOREACH col = row %]
+ [% colnum = loop.count - 1 %]
+ <td>
+ <select name="[% "field${chartnum}-${rownum}-${colnum}" %]">
+ [% FOREACH field = fields %]
+ <option value="[% field.name %]"
+ [%- " selected" IF field.name == col.field %]>[% field.description %]</option>
+ [% END %]
+ </select>
+
+ <select name="[% "type${chartnum}-${rownum}-${colnum}" %]">
+ [% FOREACH type = types %]
+ <option value="[% type.name %]"
+ [%- " selected" IF type.name == col.type %]>[% type.description %]</option>
+ [% END %]
+ </select>
+
+ <input name="[% "value${chartnum}-${rownum}-${colnum}" %]"
+ value="[% col.value FILTER html %]">
+ </td>
+
+ [% IF NOT col == row.last %]
+ <td align="center">
+ Or
+ </td>
+ [% ELSE %]
+ <td>
+ [% newor = colnum + 1 %]
+ <input type="submit" value="Or"
+ name="cmd-add[% "${chartnum}-${rownum}-${newor}" %]" [% $jsmagic %]>
+ </td>
+ [% END %]
+
+ [% END %]
+ </tr>
+
+ [% IF NOT row == chart.last %]
+ <tr>
+ <td>And</td>
+ </tr>
+ [% ELSE %]
+ <tr>
+ <td>
+ [% newand = rownum + 1; newchart = chartnum + 1 %]
+ <input type="submit" value="And"
+ name="cmd-add[% "${chartnum}-${newand}-0" %]"[% $jsmagic %]>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <input type="submit" value="Add another boolean chart"
+ name="cmd-add[% newchart %]-0-0" [% $jsmagic %]>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </td>
+ </tr>
+ [% END %]
+
+ [% END %]
+ </table>
+ <hr>
+[% END %]
+
+<p>Give me a <a href="queryhelp.cgi">clue</a> about how to use this form.</p>
+
+</FORM>
+
+[% INCLUDE global/footer %]
+
+[%############################################################################%]
+[%# Block for SELECT fields #%]
+[%############################################################################%]
+
+[% BLOCK select %]
+ <td align="left">
+ <select name="[% sel.name %]" multiple size="[% sel.size %]">
+ [% FOREACH name = ${sel.name} %]
+ <option value="[% name FILTER html %]"
+ [% " selected" IF lsearch(default.${sel.name}, name) != -1 %]>
+ [% name FILTER html %]</option>
+ [% END %]
+ </select>
+ </td>
+[% END %]
diff --git a/template/en/default/search/search.html.tmpl b/template/en/default/search/search.html.tmpl
new file mode 100644
index 000000000..85e66356b
--- /dev/null
+++ b/template/en/default/search/search.html.tmpl
@@ -0,0 +1,869 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Chris Lahey <clahey@ximian.com> [javascript fixes]
+ # Christian Reis <kiko@async.com.br> [javascript rewrite]
+ # Gervase Markham <gerv@gerv.net>
+ #%]
+
+[% INCLUDE global/header
+ title = "Search for bugs"
+ extra = " onLoad=\"selectProduct(document.forms['queryform']);\""
+%]
+
+[%# Note: use Template comments and not JS ones here, to avoid bloating
+ what we actually send to the browser %]
+
+<script language="JavaScript" type="text/javascript"> <!--
+
+var first_load = true; [%# is this the first time we load the page? %]
+var last_sel = new Array(); [%# caches last selection %]
+
+var cpts = new Array();
+var vers = new Array();
+[% IF Param('usetargetmilestone') %]
+var tms = new Array();
+[% END %]
+
+[%# Create three arrays of components, versions and target milestones, indexed
+ # numerically according to the product they refer to. #%]
+
+[% n = 0 %]
+[% FOREACH p = product %]
+ cpts[[% n %]] = [
+ [%- FOREACH item = componentsbyproduct.$p %]'[% item FILTER js %]', [%- END -%]];
+ vers[[% n %]] = [
+ [%- FOREACH item = versionsbyproduct.$p -%]'[% item FILTER js %]', [%- END -%]];
+ [% IF Param('usetargetmilestone') %]
+ tms[[% n %]] = [
+ [%- FOREACH item = milestonesbyproduct.$p %]'[% item FILTER js %]', [%- END -%]];
+ [% END %]
+ [% n = n+1 %]
+[% END %]
+
+[%# updateSelect(array, sel, target, merging)
+ #
+ # Adds to the target select object all elements in array that
+ # correspond to the elements selected in source.
+ # - array should be a array of arrays, indexed by number. the
+ # array should contain the elements that correspond to that
+ # product.
+ # - sel is a list of selected items, either whole or a diff
+ # depending on merging.
+ # - target should be the target select object.
+ # - merging (boolean) determines if we are mergine in a diff or
+ # substituting the whole selection. a diff is used to optimize adding
+ # selections.
+ #
+ # Example (compsel is a select form control)
+ #
+ # var components = Array();
+ # components[1] = [ 'ComponentA', 'ComponentB' ];
+ # components[2] = [ 'ComponentC', 'ComponentD' ];
+ # source = [ 2 ];
+ # updateSelect(components, source, compsel, 0, 0);
+ #
+ # would clear compsel and add 'ComponentC' and 'ComponentD' to it.
+ #
+ %]
+
+function updateSelect(array, sel, target, merging) {
+
+ var i, item;
+
+ [%# If we have no versions/components/milestones %]
+ if (array.length < 1) {
+ target.options.length = 0;
+ return false;
+ }
+
+ if (merging) {
+ [%# array merging/sorting in the case of multiple selections %]
+ [%# merge in the current options with the first selection %]
+ item = merge_arrays(array[sel[0]], target.options, 1);
+
+ [%# merge the rest of the selection with the results %]
+ for (i = 1 ; i < sel.length ; i++) {
+ item = merge_arrays(array[sel[i]], item, 0);
+ }
+ } else if ( sel.length > 1 ) {
+ [%# here we micro-optimize for two arrays to avoid merging with a
+ null array %]
+ item = merge_arrays(array[sel[0]],array[sel[1]], 0);
+
+ [%# merge the arrays. not very good for multiple selections. %]
+ for (i = 2; i < sel.length; i++) {
+ item = merge_arrays(item, array[sel[i]], 0);
+ }
+ } else { [%# single item in selection, just get me the list %]
+ item = array[sel[0]];
+ }
+
+ [%# clear select %]
+ target.options.length = 0;
+
+ [%# load elements of list into select %]
+ for (i = 0; i < item.length; i++) {
+ target.options[i] = new Option(item[i], item[i]);
+ }
+ return true;
+}
+
+[%# Returns elements in a that are not in b.
+ # NOT A REAL DIFF: does not check the reverse.
+ # - a,b: arrays of values to be compare. %]
+function fake_diff_array(a, b) {
+ var newsel = new Array();
+ var found = false;
+
+ [%# do a boring array diff to see who's new %]
+ for (var ia in a) {
+ for (var ib in b) {
+ if (a[ia] == b[ib]) {
+ found = true;
+ }
+ }
+ if (!found) {
+ newsel[newsel.length] = a[ia];
+ }
+ found = false;
+ }
+ return newsel;
+}
+
+[%# takes two arrays and sorts them by string, returning a new, sorted
+ # array. the merge removes dupes, too.
+ # - a, b: arrays to be merge.
+ # - b_is_select: if true, then b is actually an optionitem and as
+ # such we need to use item.value on it. %]
+function merge_arrays(a, b, b_is_select) {
+ var pos_a = 0;
+ var pos_b = 0;
+ var ret = new Array();
+ var bitem, aitem;
+
+ [%# iterate through both arrays and add the larger item to the return
+ list. remove dupes, too. Use toLowerCase to provide
+ case-insensitivity. %]
+ while ((pos_a < a.length) && (pos_b < b.length)) {
+ if (b_is_select) {
+ bitem = b[pos_b].value;
+ } else {
+ bitem = b[pos_b];
+ }
+ aitem = a[pos_a];
+
+ [%# smaller item in list a %]
+ if (aitem.toLowerCase() < bitem.toLowerCase()) {
+ ret[ret.length] = aitem;
+ pos_a++;
+ } else {
+ [%# smaller item in list b %]
+ if (aitem.toLowerCase() > bitem.toLowerCase()) {
+ ret[ret.length] = bitem;
+ pos_b++;
+ } else {
+ [%# list contents are equal, inc both counters. %]
+ ret[ret.length] = aitem;
+ pos_a++;
+ pos_b++;
+ }
+ }
+ }
+
+ [%# catch leftovers here. these sections are ugly code-copying. %]
+ if (pos_a < a.length) {
+ for (; pos_a < a.length ; pos_a++) {
+ ret[ret.length] = a[pos_a];
+ }
+ }
+
+ if (pos_b < b.length) {
+ for (; pos_b < b.length; pos_b++) {
+ if (b_is_select) {
+ bitem = b[pos_b].value;
+ } else {
+ bitem = b[pos_b];
+ }
+ ret[ret.length] = bitem;
+ }
+ }
+ return ret;
+}
+
+[%# Returns an array of indexes or values from a select form control.
+ # - control: select control from which to find selections
+ # - findall: boolean, store all options when true or just the selected
+ # indexes
+ # - want_values: boolean; we store values when true and indexes when
+ # false %]
+function getSelection(control, findall, want_values) {
+ var ret = new Array();
+
+ if ((!findall) && (control.selectedIndex == -1)) {
+ return ret;
+ }
+
+ for (var i=0; i<control.length; i++) {
+ if (findall || control.options[i].selected) {
+ ret[ret.length] = want_values ? control.options[i].value : i;
+ }
+ }
+ return ret;
+}
+
+[%# Selects items in control that have index defined in sel
+ # - control: SELECT control to be restored
+ # - selnames: array of indexes in select form control %]
+function restoreSelection(control, selnames) {
+ [%# right. this sucks. but I see no way to avoid going through the
+ # list and comparing to the contents of the control. %]
+ for (var j=0; j < selnames.length; j++) {
+ for (var i=0; i < control.options.length; i++) {
+ if (control.options[i].value == selnames[j]) {
+ control.options[i].selected = true;
+ }
+ }
+ }
+}
+
+[%# selectProduct reads the selection from f.product and updates
+ # f.version, component and target_milestone accordingly.
+ # - f: a form containing product, component, varsion and
+ # target_milestone select boxes.
+ # globals (3vil!):
+ # - cpts, vers, tms: array of arrays, indexed by product name. the
+ # subarrays contain a list of names to be fed to the respective
+ # selectboxes. For bugzilla, these are generated with perl code
+ # at page start.
+ # - first_load: boolean, specifying if it is the first time we load
+ # the query page.
+ # - last_sel: saves our last selection list so we know what has
+ # changed, and optimize for additions. %]
+function selectProduct(f) {
+ [%# this is to avoid handling events that occur before the form
+ itself is ready, which could happen in buggy browsers. %]
+ if ((!f) || (!f.product)) {
+ return;
+ }
+
+ [%# if this is the first load and nothing is selected, no need to
+ merge and sort all components; perl gives it to us sorted. %]
+ if ((first_load) && (f.product.selectedIndex == -1)) {
+ first_load = false;
+ return;
+ }
+
+ [%# turn first_load off. this is tricky, since it seems to be
+ redundant with the above clause. It's not: if when we first load
+ the page there is _one_ element selected, it won't fall into that
+ clause, and first_load will remain 1. Then, if we unselect that
+ item, selectProduct will be called but the clause will be valid
+ (since selectedIndex == -1), and we will return - incorrectly -
+ without merge/sorting. %]
+ first_load = false;
+
+ [%# - sel keeps the array of products we are selected.
+ - merging says if it is a full list or just a list of products that
+ were added to the current selection. %]
+ var merging = false;
+ var sel = Array();
+
+ [%# if nothing selected, pick all %]
+ var findall = f.product.selectedIndex == -1;
+ sel = getSelection(f.product, findall, false);
+ if (!findall) {
+ [%# save sel for the next invocation of selectProduct() %]
+ var tmp = sel;
+
+ [%# this is an optimization: if we have just added products to an
+ existing selection, no need to clear the form controls and add
+ everybody again; just merge the new ones with the existing
+ options. %]
+ if ((last_sel.length > 0) && (last_sel.length < sel.length)) {
+ sel = fake_diff_array(sel, last_sel);
+ merging = true;
+ }
+ last_sel = tmp;
+ }
+ [%# save original options selected %]
+ var saved_cpts = getSelection(f.component, false, true);
+ var saved_vers = getSelection(f.version, false, true);
+ [% IF Param('usetargetmilestone') %]
+ var saved_tms = getSelection(f.target_milestone, false, true);
+ [% END %]
+
+ [%# do the actual fill/update, reselect originally selected options %]
+ updateSelect(cpts, sel, f.component, merging);
+ restoreSelection(f.component, saved_cpts);
+ updateSelect(vers, sel, f.version, merging);
+ restoreSelection(f.version, saved_vers);
+ [% IF Param('usetargetmilestone') %]
+ updateSelect(tms, sel, f.target_milestone, merging);
+ restoreSelection(f.target_milestone, saved_tms);
+ [% END %]
+}
+
+// -->
+</script>
+
+[% query_variants = [
+ { value => "allwordssubstr", description => "contains all of the words/strings" },
+ { value => "anywordssubstr", description => "contains any of the words/strings" },
+ { value => "substring", description => "contains the string" },
+ { value => "casesubstring", description => "contains the string (exact case)" },
+ { value => "allwords", description => "contains all of the words" },
+ { value => "anywords", description => "contains any of the words" },
+ { value => "regexp", description => "matches the regexp" },
+ { value => "notregexp", description => "doesn&#8217;t match the regexp" } ] %]
+
+[%# The decent help requires Javascript %]
+<script> <!--
+ document.write("<p><a href='query.cgi?help=1'>Give me help</a> with this form (reloads page.)</p>");
+// -->
+</script>
+<noscript>
+ <p>
+ <a href="queryhelp.cgi">Give me help</a> with this form.
+ </p>
+</noscript>
+
+<form method="get" action="buglist.cgi" name="queryform">
+
+[%# *** Summary *** %]
+
+<table>
+ <tr>
+ <th align="right">Summary:</th>
+ <td>
+ <select name="short_desc_type">
+ [% FOREACH qv = query_variants %]
+ <option value="[% qv.value %]"
+ [% " selected" IF default.short_desc_type.0 == qv.value %]>[% qv.description %]</option>
+ [% END %]
+ </select>
+ </td>
+ <td>
+ <input name="short_desc" size="40" value="[% default.short_desc.0 FILTER html %]">
+ </td>
+ <td>
+ <input type="submit" value="Search">
+ </td>
+ </tr>
+
+[%# *** Product Component Version Target *** %]
+
+ <tr>
+ <td colspan="4">
+ <table>
+ <tr valign="bottom">
+ <th align="left">Product:</th>
+ <th align="left"><a href="describecomponents.cgi">Component</a>:</th>
+ <th align="left">Version:</th>
+
+ [% IF (Param("usetargetmilestone")) %]
+ <th align="left">Target:</th>
+ [% END %]
+ </tr>
+
+ <tr valign="top">
+
+ [%# Can't use the select block here because of onChange and the fact that
+ 'component' is a toolkit reserved word - we use 'component_' instead. %]
+ <td align="left">
+ <select name="product" multiple size="5" onChange="selectProduct(this.form);">
+ [% FOREACH p = product %]
+ <option value="[% p FILTER html %]"
+ [% " selected" IF lsearch(default.product, p) != -1 %]>
+ [% p FILTER html %]</option>
+ [% END %]
+ </select>
+ </td>
+
+ <td align="left">
+ <select name="component" multiple size="5">
+ [% FOREACH c = component_ %]
+ <option value="[% c FILTER html %]"
+ [% " selected" IF lsearch(default.component, c) != -1 %]>
+ [% c FILTER html %]</option>
+ [% END %]
+ </select>
+ </td>
+
+ [% PROCESS select sel = { name => 'version', size => 5 } %]
+
+ [% IF Param('usetargetmilestone') && target_milestone.size > 0 %]
+ [% PROCESS select sel = { name => 'target_milestone', size => 5 } %]
+ [% END %]
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+[%# *** Comment URL Whiteboard Keywords *** %]
+
+ [% FOREACH field = [
+ { name => "long_desc", description => "A&nbsp;comment" },
+ { name => "bug_file_loc", description => "The&nbsp;URL" },
+ { name => "status_whiteboard", description => "Whiteboard" } ] %]
+
+ [% UNLESS field.name == 'status_whiteboard' AND NOT Param('usestatuswhiteboard') %]
+ <tr>
+ <th align="right">[% field.description %]:</th>
+ <td>
+ <select name="[% field.name %]_type">
+ [% FOREACH qv = query_variants %]
+ [% type = "${field.name}_type" %]
+ <option value="[% qv.value %]"
+ [% " selected" IF default.$type.0 == qv.value %]>[% qv.description %]</option>
+ [% END %]
+ </select>
+ </td>
+ <td><input name="[% field.name %]" size="40" value="
+ [% default.${field.name}.0 FILTER html %]">
+ </td>
+ <td></td>
+ </tr>
+ [% END %]
+ [% END %]
+
+ [% IF have_keywords %]
+ <tr>
+ <th align="right"><a href="describekeywords.cgi">Keywords</a>:</th>
+ <td>
+ <select name="keywords_type">
+ [% FOREACH qv = [
+ { name => "anywords", description => "contains any of the keywords" },
+ { name => "allwords", description => "contains all of the keywords" },
+ { name => "nowords", description => "contains none of the keywords" } ] %]
+
+ <option value="[% qv.name %]"
+ [% " selected" IF default.keywords_type.0 == qv.name %]>
+ [% qv.description %]</option>
+ [% END %]
+ </select>
+ </td>
+ <td>
+ <input name="keywords" size="40" value="[% default.keywords.0 FILTER html %]">
+ </td>
+ </tr>
+ [% END %]
+</table>
+
+<hr>
+
+[%# *** Status Resolution Severity Priority Hardware OS *** %]
+
+<table>
+ <tr>
+ <th align="left"><a href="queryhelp.cgi#status">Status</a>:</th>
+ <th align="left"><a href="queryhelp.cgi#resolution">Resolution</a>:</th>
+ <th align="left"><a href="queryhelp.cgi#severity">Severity</a>:</th>
+ <th align="left"><a href="queryhelp.cgi#priority">Priority</a>:</th>
+ <th align="left"><a href="queryhelp.cgi#platform">Hardware</a>:</th>
+ <th align="left"><a href="queryhelp.cgi#opsys">OS</a>:</th>
+ </tr>
+
+ <tr valign="top">
+ [% PROCESS select sel = { name => 'bug_status', size => 7 } %]
+ [% PROCESS select sel = { name => 'resolution', size => 7 } %]
+ [% PROCESS select sel = { name => 'bug_severity', size => 7 } %]
+ [% PROCESS select sel = { name => 'priority', size => 7 } %]
+ [% PROCESS select sel = { name => 'rep_platform', size => 7 } %]
+ [% PROCESS select sel = { name => 'op_sys', size => 7 } %]
+ </tr>
+</table>
+
+<p>
+
+[%# *** Email Numbering Votes *** %]
+
+<table>
+ <tr>
+ <td>
+ <fieldset>
+ <legend>
+ <strong>
+ <a href="queryhelp.cgi#peopleinvolved">Email</a> and Numbering
+ </strong>
+ </legend>
+
+
+<table>
+ <tr>
+ [% FOREACH n = [1, 2] %]
+ <td>
+
+
+<table cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+ Any of:
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="checkbox" name="emailassigned_to[% n %]"
+ id="emailassigned_to[% n %]" value="1"
+ [% " checked" IF default.emailassigned_to.$n %]>
+ <label for="emailassigned_to[% n %]">
+ bug owner
+ </label>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="checkbox" name="emailreporter[% n %]"
+ id="emailreporter[% n %]" value="1"
+ [% " checked" IF default.emailreporter.$n %]>
+ <label for="emailreporter[% n %]">
+ reporter
+ </label>
+ </td>
+ </tr>
+ [% IF Param('useqacontact') %]
+ <tr>
+ <td>
+ <input type="checkbox" name="emailqa_contact[% n %]"
+ id="emailqa_contact[% n %]" value="1"
+ [% " checked" IF default.emailqa_contact.$n %]>
+ <label for="emailqa_contact[% n %]">
+ QA contact
+ </label>
+ </td>
+ </tr>
+ [% END %]
+ <tr>
+ <td>
+ <input type="checkbox" name="emailcc[% n %]"
+ id="emailcc[% n %]" value="1"
+ [% " checked" IF default.emailcc.$n %]>
+ <label for="emailcc[% n %]">
+ CC list member
+ </label>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="checkbox" name="emaillongdesc[% n %]"
+ id="emaillongdesc[% n %]" value="1"
+ [% " checked" IF default.emaillongdesc.$n %]>
+ <label for="emaillongdesc[% n %]">
+ commenter
+ </label>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <select name="emailtype[% n %]">
+ [% FOREACH qv = [
+ { name => "substring", description => "contains" },
+ { name => "exact", description => "is" },
+ { name => "regexp", description => "matches regexp" },
+ { name => "notregexp", description => "doesn&#8217;t match regexp" } ] %]
+
+ <option value="[% qv.name %]"
+ [% " selected" IF default.emailtype.$n == qv.name %]>[% qv.description %]</option>
+ [% END %]
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input name="email[% n %]" size="20" value="[% default.email.$n FILTER html %]">
+ </td>
+ </tr>
+</table>
+
+
+ </td>
+ [% END %]
+ </tr>
+</table>
+<hr>
+<table>
+ <tr>
+ <td>
+ <select name="bugidtype">
+ <option value="include"[% " selected" IF default.bugidtype.0 == "include" %]>Only include</option>
+ <option value="exclude"[% " selected" IF default.bugidtype.0 == "exclude" %]>Exclude</option>
+ </select>
+ bugs numbered:
+ </td>
+ <td>
+ <input type="text" name="bug_id" value="[% default.bug_id.0 FILTER html %]" size="20">
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>(comma-separated list)</td>
+ </tr>
+ <tr>
+ <td align="right">
+ Only bugs with at least:
+ </td>
+ <td>
+ <input name="votes" size="3" value="[% default.votes.0 FILTER html %]"> votes
+ </td>
+ </tr>
+</table>
+
+
+ </fieldset>
+ </td>
+
+[%# *** Bug Changes *** %]
+
+ <td valign="top">
+ <fieldset>
+ <legend><strong>Bug Changes</strong></legend>
+
+
+<dl>
+ <dt>Only bugs changed in the last </dt>
+ <dd><input name=changedin size=3 value="[% default.changedin.0 FILTER html %]"> days</dd>
+</dl>
+
+<dl>
+ <dt>Only bugs where any of the fields</dt>
+ <dd>
+ <select name="chfield" multiple size="4">
+ [% FOREACH field = chfield %]
+ <option value="[% field FILTER html %]"
+ [% " selected" IF lsearch(default.chfield, field) != -1 %]>
+ [% field FILTER html %]</option>
+ [% END %]
+ </select>
+ </dd>
+
+ <dt>were changed between</dt>
+ <dd>
+ <input name="chfieldfrom" size="10" value="[% default.chfieldfrom.0 FILTER html %]">
+ and <input name="chfieldto" size="10" value="[% default.chfieldto.0 FILTER html %]">
+ <br>(YYYY-MM-DD)
+ </dd>
+ <dt>to this value: (optional)</dt>
+ <dd>
+ <input name="chfieldvalue" size="20" value="[% default.chfieldvalue.0 FILTER html %]">
+ </dd>
+</dl>
+
+
+ </fieldset>
+ </td>
+ </tr>
+
+[%# *** Action Selection *** %]
+
+ <tr>
+ <td colspan="2">
+
+ [% IF NOT userid %]
+ <input type="hidden" name="cmdtype" value="doit">
+ [% ELSE %]
+ <br>
+ <input type="radio" name="cmdtype" value="doit" checked> Run this query
+ <br>
+
+ [% IF namedqueries.size > 0 %]
+ <p>
+ <table cellspacing="0" cellpadding="0">
+ <tr>
+ <td>
+ <input type="radio" name="cmdtype" value="editnamed">
+ Load my remembered query:
+ </td>
+ <td rowspan="3">
+ <select name="namedcmd">
+ [% FOREACH query = namedqueries %]
+ <option value="[% query FILTER html %]">[% query FILTER html %]</option>
+ [% END %]
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="radio" name="cmdtype" value="runnamed">
+ Run my remembered query:
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="radio" name="cmdtype" value="forgetnamed">
+ Forget my remembered query:
+ </td>
+ </tr>
+ </table>
+ </p>
+ [% END %]
+
+ <input type="radio" name="cmdtype" value="asdefault">
+ Remember this as my default query
+ <br>
+ <input type="radio" name="cmdtype" value="asnamed">
+ Remember this query, and name it:
+ <input type="text" name="newqueryname">
+ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="tofooter" value="1">
+ and put it in my page footer
+ <br>
+ [% END %]
+ <br>
+ <div>
+ Sort results by:
+ <select name="order">
+ [% FOREACH order = orders %]
+ <option value="[% order FILTER html %]"
+ [% " selected" IF default.order.0 == order %]>[% order FILTER html %]</option>
+ [% END %]
+ </select>
+
+ <input type="submit" value="Search">
+ [% IF userdefaultquery %]
+ <p>
+ <a href="query.cgi?nukedefaultquery=1">
+ Set my default query back to the system default</a>
+ </p>
+ [% END %]
+ </div>
+ </td>
+ </tr>
+</table>
+
+[%# *** Boolean Charts *** %]
+
+<hr>
+
+[% types = [
+ { name => "noop", description => "---" },
+ { name => "equals", description => "is equal to" },
+ { name => "notequals", description => "is not equal to" },
+ { name => "substring", description => "contains the string" },
+ { name => "casesubstring", description => "contains the string (exact case)" },
+ { name => "notsubstring", description => "does not contain the string" },
+ { name => "allwordssubstr", description => "contains all of the strings" },
+ { name => "anywordssubstr", description => "contains any of the strings" },
+ { name => "regexp", description => "contains regexp" },
+ { name => "notregexp", description => "does not contain regexp" },
+ { name => "lessthan", description => "is less than" },
+ { name => "greaterthan", description => "is greater than" },
+ { name => "anywords", description => "contains any of the words" },
+ { name => "allwords", description => "contains all of the words" },
+ { name => "nowords", description => "contains none of the words" },
+ { name => "changedbefore", description => "changed before" },
+ { name => "changedafter", description => "changed after" },
+ { name => "changedfrom", description => "changed from" },
+ { name => "changedto", description => "changed to" },
+ { name => "changedby", description => "changed by" } ] %]
+
+ <p>
+ <strong>
+ <a name="chart" href="queryhelp.cgi#advancedquerying">
+ Advanced Querying Using Boolean Charts</a>:
+ </strong>
+ </p>
+
+[%# Whoever wrote the original version of boolean charts had a seriously twisted mind %]
+
+[% jsmagic = "onclick=\"document.forms[0].action='query.cgi#chart'; document.forms[0].method='POST'; return 1;\"" %]
+
+[% FOREACH chart = default.charts %]
+ [% chartnum = loop.count - 1 %]
+ <table>
+ [% FOREACH row = chart %]
+ [% rownum = loop.count - 1 %]
+ <tr>
+ [% FOREACH col = row %]
+ [% colnum = loop.count - 1 %]
+ <td>
+ <select name="[% "field${chartnum}-${rownum}-${colnum}" %]">
+ [% FOREACH field = fields %]
+ <option value="[% field.name %]"
+ [%- " selected" IF field.name == col.field %]>[% field.description %]</option>
+ [% END %]
+ </select>
+
+ <select name="[% "type${chartnum}-${rownum}-${colnum}" %]">
+ [% FOREACH type = types %]
+ <option value="[% type.name %]"
+ [%- " selected" IF type.name == col.type %]>[% type.description %]</option>
+ [% END %]
+ </select>
+
+ <input name="[% "value${chartnum}-${rownum}-${colnum}" %]"
+ value="[% col.value FILTER html %]">
+ </td>
+
+ [% IF NOT col == row.last %]
+ <td align="center">
+ Or
+ </td>
+ [% ELSE %]
+ <td>
+ [% newor = colnum + 1 %]
+ <input type="submit" value="Or"
+ name="cmd-add[% "${chartnum}-${rownum}-${newor}" %]" [% $jsmagic %]>
+ </td>
+ [% END %]
+
+ [% END %]
+ </tr>
+
+ [% IF NOT row == chart.last %]
+ <tr>
+ <td>And</td>
+ </tr>
+ [% ELSE %]
+ <tr>
+ <td>
+ [% newand = rownum + 1; newchart = chartnum + 1 %]
+ <input type="submit" value="And"
+ name="cmd-add[% "${chartnum}-${newand}-0" %]"[% $jsmagic %]>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <input type="submit" value="Add another boolean chart"
+ name="cmd-add[% newchart %]-0-0" [% $jsmagic %]>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ </td>
+ </tr>
+ [% END %]
+
+ [% END %]
+ </table>
+ <hr>
+[% END %]
+
+<p>Give me a <a href="queryhelp.cgi">clue</a> about how to use this form.</p>
+
+</FORM>
+
+[% INCLUDE global/footer %]
+
+[%############################################################################%]
+[%# Block for SELECT fields #%]
+[%############################################################################%]
+
+[% BLOCK select %]
+ <td align="left">
+ <select name="[% sel.name %]" multiple size="[% sel.size %]">
+ [% FOREACH name = ${sel.name} %]
+ <option value="[% name FILTER html %]"
+ [% " selected" IF lsearch(default.${sel.name}, name) != -1 %]>
+ [% name FILTER html %]</option>
+ [% END %]
+ </select>
+ </td>
+[% END %]
diff --git a/template/en/default/sidebar.xul.tmpl b/template/en/default/sidebar.xul.tmpl
new file mode 100644
index 000000000..02ee1bf9b
--- /dev/null
+++ b/template/en/default/sidebar.xul.tmpl
@@ -0,0 +1,123 @@
+[% template_version = "1.0@bugzilla.org" %]
+[%# -*- mode: sgml -*- %]
+[%# The contents of this file are subject to the Mozilla Public
+ # License Version 1.1 (the "License"); you may not use this file
+ # except in compliance with the License. You may obtain a copy of
+ # the License at http://www.mozilla.org/MPL/
+ #
+ # Software distributed under the License is distributed on an "AS
+ # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ # implied. See the License for the specific language governing
+ # rights and limitations under the License.
+ #
+ # The Original Code is the Bugzilla Bug Tracking System.
+ #
+ # The Initial Developer of the Original Code is Netscape Communications
+ # Corporation. Portions created by Netscape are
+ # Copyright (C) 1998 Netscape Communications Corporation. All
+ # Rights Reserved.
+ #
+ # Contributor(s): Jacob Steenhagen <jake@acutex.net>
+ # Scott Collins <scc@mozilla.org>
+ #%]
+<?xml version="1.0"?>
+<!-- [% template_version %] -->
+<?xml-stylesheet href="chrome://communicator/skin/" type="text/css"?>
+<?xml-stylesheet href="[% Param('urlbase') %]css/panel.css" type="text/css"?>
+<window
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml"
+ orient="vertical"
+ onload="document.getElementById('query-field').addEventListener('keypress', initial_keypress_handler, true)">
+
+// Load QuickSearch libraries
+<script type="text/javascript" language="JavaScript" src="localconfig.js"/>
+<script type="text/javascript" language="JavaScript" src="quicksearch.js"/>
+
+<script type="text/javascript" language="JavaScript">
+
+// Tell QuickSearch that the source of this is the sidebar
+var sidebar = 1;
+
+function load_relative_url( aRelativeURL ) {
+ aRelativeURL = '[% Param('urlbase') %]' + aRelativeURL;
+ _content.location = aRelativeURL;
+}
+
+function initial_keypress_handler( aEvent ) {
+ this.removeAttribute("class");
+ this.addEventListener("keypress", normal_keypress_handler, true);
+ this.removeEventListener("keypress", initial_keypress_handler, true);
+}
+
+function normal_keypress_handler( aEvent ) {
+ if ( aEvent.keyCode == 13 )
+ QuickSearch(this.value);
+}
+
+</script>
+
+ <textbox id="query-field" class="descriptive-content" value="enter query" onfocus="this.setSelectionRange(0,this.value.length)"/>
+
+ <separator class="groove"/>
+
+ <box autostretch="never" valign="top">
+ <box orient="vertical" flex="1">
+ <text class="text-link" onclick="load_relative_url('query.cgi')" value="new query"/>
+ <text class="text-link" onclick="load_relative_url('reports.cgi')" value="reports"/>
+ <text class="text-link" onclick="load_relative_url('enter_bug.cgi')" value="new bug"/>
+ <separator class="thin"/>
+
+[% IF username %]
+ <text class="text-link" onclick="load_relative_url('userprefs.cgi')" value="edit prefs"/>
+[% END %]
+[% IF UserInGroup('tweakparams') %]
+ <text class="text-link" onclick="load_relative_url('editparams.cgi')" value="edit params"/>
+[% END %]
+[% IF UserInGroup('editusers') || blessgroupset %]
+ <text class="text-link" onclick="load_relative_url('editusers.cgi')" value="edit users"/>
+[% END %]
+[% IF UserInGroup('editcomponents') %]
+ <text class="text-link" onclick="load_relative_url('editcomponents.cgi')" value="edit components"/>
+[% END %]
+[% IF UserInGroup('creategroups') %]
+ <text class="text-link" onclick="load_relative_url('editgroups.cgi')" value="edit groups"/>
+[% END %]
+[% IF UserInGroup('editkeywords') %]
+ <text class="text-link" onclick="load_relative_url('editkeywords.cgi')" value="edit keywords"/>
+[% END %]
+[% IF UserInGroup('tweakparams') %]
+ <text class="text-link" onclick="load_relative_url('sanitycheck.cgi')" value="sanity check"/>
+[% END %]
+[% IF username %]
+ <text class="text-link" onclick="load_relative_url('relogin.cgi')" value="logout [% username FILTER html %]"/>
+ <separator class="thin"/>
+[% END %]
+
+[% IF mybugsurl %]
+ <text class="text-link" onclick="load_relative_url('[% mybugsurl FILTER html %]')" value="my bugs"/>
+[% END %]
+[% IF anyvotesallowed && username %]
+ <text class="text-link" onclick="load_relative_url('votes.cgi?action=show_user')" value="my votes"/>
+[% END %]
+
+[% FOREACH name = namedqueries %]
+ <text class="text-link" onclick="load_relative_url('buglist.cgi?cmdtype=runnamed&amp;namedcmd=[% name FILTER uri %]')" value="[% name FILTER html %]"/>
+[% END %]
+
+[% IF NOT username %]
+ <text class="text-link" onclick="load_relative_url('createaccount.cgi')" value="new user"/>
+ <text class="text-link" onclick="load_relative_url('query.cgi?GoAheadAndLogIn=1')" value="log in"/>
+[% END %]
+
+ </box>
+ </box>
+
+ <spring flex="1"/>
+ <box orient="horizontal">
+ <spring flex="1"/>
+ <html align="right">
+ <html:a class="text-link" href="[% Param('urlbase') %]sidebar.cgi">reload</html:a>
+ </html>
+ </box>
+</window>