]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 135707 - rearrange templates to normalise filenames, and create directory structu...
authorgerv%gerv.net <>
Fri, 19 Apr 2002 01:56:11 +0000 (01:56 +0000)
committergerv%gerv.net <>
Fri, 19 Apr 2002 01:56:11 +0000 (01:56 +0000)
58 files changed:
template/en/default/account/cancel-token.txt.tmpl [new file with mode: 0644]
template/en/default/account/create.html.tmpl [new file with mode: 0644]
template/en/default/account/created.html.tmpl [new file with mode: 0644]
template/en/default/account/email/change-new.txt.tmpl [new file with mode: 0644]
template/en/default/account/email/change-old.txt.tmpl [new file with mode: 0644]
template/en/default/account/email/confirm.html.tmpl [new file with mode: 0644]
template/en/default/account/exists.html.tmpl [new file with mode: 0644]
template/en/default/account/prefs/account.html.tmpl [new file with mode: 0644]
template/en/default/account/prefs/email.html.tmpl [new file with mode: 0644]
template/en/default/account/prefs/footer.html.tmpl [new file with mode: 0644]
template/en/default/account/prefs/permissions.html.tmpl [new file with mode: 0644]
template/en/default/account/prefs/prefs.html.tmpl [new file with mode: 0644]
template/en/default/attachment/content-types.html.tmpl [new file with mode: 0644]
template/en/default/attachment/create.html.tmpl [new file with mode: 0644]
template/en/default/attachment/created.html.tmpl [new file with mode: 0644]
template/en/default/attachment/edit.html.tmpl [new file with mode: 0644]
template/en/default/attachment/list.html.tmpl [new file with mode: 0644]
template/en/default/attachment/show-multiple.html.tmpl [new file with mode: 0644]
template/en/default/attachment/updated.html.tmpl [new file with mode: 0644]
template/en/default/bug/activity/show.html.tmpl [new file with mode: 0644]
template/en/default/bug/activity/table.html.tmpl [new file with mode: 0644]
template/en/default/bug/choose-xml.html.tmpl [new file with mode: 0644]
template/en/default/bug/choose.html.tmpl [new file with mode: 0644]
template/en/default/bug/comments.html.tmpl [new file with mode: 0644]
template/en/default/bug/create/create.html.tmpl [new file with mode: 0644]
template/en/default/bug/create/created.html.tmpl [new file with mode: 0644]
template/en/default/bug/create/initial-comment.txt.tmpl [new file with mode: 0644]
template/en/default/bug/create/make-template.html.tmpl [new file with mode: 0644]
template/en/default/bug/dependency-graph.html.tmpl [new file with mode: 0644]
template/en/default/bug/dependency-tree.html.tmpl [new file with mode: 0644]
template/en/default/bug/edit.html.tmpl [new file with mode: 0644]
template/en/default/bug/navigate.html.tmpl [new file with mode: 0644]
template/en/default/bug/show-multiple.html.tmpl [new file with mode: 0644]
template/en/default/bug/votes/delete-all.html.tmpl [new file with mode: 0644]
template/en/default/bug/votes/list-for-bug.html.tmpl [new file with mode: 0644]
template/en/default/bug/votes/list-for-user.html.tmpl [new file with mode: 0644]
template/en/default/global/choose-product.html.tmpl [new file with mode: 0644]
template/en/default/global/code-error.html.tmpl [new file with mode: 0644]
template/en/default/global/footer.html.tmpl [new file with mode: 0644]
template/en/default/global/header.html.tmpl [new file with mode: 0644]
template/en/default/global/hidden-fields.html.tmpl [new file with mode: 0644]
template/en/default/global/message.html.tmpl [new file with mode: 0644]
template/en/default/global/user-error.html.tmpl [new file with mode: 0644]
template/en/default/index.html.tmpl [new file with mode: 0644]
template/en/default/list/change-columns.html.tmpl [new file with mode: 0644]
template/en/default/list/edit-multiple.html.tmpl [new file with mode: 0644]
template/en/default/list/list-rdf.rdf.tmpl [new file with mode: 0644]
template/en/default/list/list-simple.html.tmpl [new file with mode: 0644]
template/en/default/list/list.html.tmpl [new file with mode: 0644]
template/en/default/list/quips.html.tmpl [new file with mode: 0644]
template/en/default/list/server-push.html.tmpl [new file with mode: 0644]
template/en/default/list/table.html.tmpl [new file with mode: 0644]
template/en/default/reports/components.html.tmpl [new file with mode: 0644]
template/en/default/reports/duplicates.html.tmpl [new file with mode: 0644]
template/en/default/reports/keywords.html.tmpl [new file with mode: 0644]
template/en/default/search/search-advanced.html.tmpl [new file with mode: 0644]
template/en/default/search/search.html.tmpl [new file with mode: 0644]
template/en/default/sidebar.xul.tmpl [new file with mode: 0644]

diff --git a/template/en/default/account/cancel-token.txt.tmpl b/template/en/default/account/cancel-token.txt.tmpl
new file mode 100644 (file)
index 0000000..b37d0da
--- /dev/null
@@ -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 (file)
index 0000000..e39d6ff
--- /dev/null
@@ -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 (file)
index 0000000..46bc82a
--- /dev/null
@@ -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 (file)
index 0000000..5a5ae25
--- /dev/null
@@ -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 (file)
index 0000000..82ecf1d
--- /dev/null
@@ -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 (file)
index 0000000..4d41029
--- /dev/null
@@ -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 (file)
index 0000000..a4357a5
--- /dev/null
@@ -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 (file)
index 0000000..e1675c7
--- /dev/null
@@ -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 (file)
index 0000000..f7d529c
--- /dev/null
@@ -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 (file)
index 0000000..ea5753f
--- /dev/null
@@ -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 (file)
index 0000000..7ab7f1d
--- /dev/null
@@ -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 (file)
index 0000000..5d9fc6e
--- /dev/null
@@ -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 (file)
index 0000000..4e7cafc
--- /dev/null
@@ -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 (file)
index 0000000..4453351
--- /dev/null
@@ -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 (file)
index 0000000..c46afe0
--- /dev/null
@@ -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 (file)
index 0000000..1d06bfb
--- /dev/null
@@ -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 (file)
index 0000000..5bc5217
--- /dev/null
@@ -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 (file)
index 0000000..88c92b9
--- /dev/null
@@ -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 (file)
index 0000000..e245957
--- /dev/null
@@ -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 (file)
index 0000000..387ba6d
--- /dev/null
@@ -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 (file)
index 0000000..43529bd
--- /dev/null
@@ -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 (file)
index 0000000..4456534
--- /dev/null
@@ -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 (file)
index 0000000..b776ff2
--- /dev/null
@@ -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 (file)
index 0000000..2717748
--- /dev/null
@@ -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 (file)
index 0000000..cb82c84
--- /dev/null
@@ -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 (file)
index 0000000..9eba2ed
--- /dev/null
@@ -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 (file)
index 0000000..21a9f3f
--- /dev/null
@@ -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 (file)
index 0000000..c5e0175
--- /dev/null
@@ -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 (file)
index 0000000..fff5f1b
--- /dev/null
@@ -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 (file)
index 0000000..ba0b821
--- /dev/null
@@ -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 (file)
index 0000000..9b77c23
--- /dev/null
@@ -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 (file)
index 0000000..3713e0a
--- /dev/null
@@ -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 (file)
index 0000000..8313323
--- /dev/null
@@ -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 (file)
index 0000000..9a63f75
--- /dev/null
@@ -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 (file)
index 0000000..a9bcaf5
--- /dev/null
@@ -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 (file)
index 0000000..96d9ad8
--- /dev/null
@@ -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 (file)
index 0000000..31d9ea7
--- /dev/null
@@ -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 (file)
index 0000000..9f1fe29
--- /dev/null
@@ -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 (file)
index 0000000..98d525a
--- /dev/null
@@ -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 (file)
index 0000000..4dc89e0
--- /dev/null
@@ -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 (file)
index 0000000..85df624
--- /dev/null
@@ -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 (file)
index 0000000..d0c8281
--- /dev/null
@@ -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 (file)
index 0000000..a76ad5f
--- /dev/null
@@ -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 (file)
index 0000000..4011729
--- /dev/null
@@ -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 (file)
index 0000000..d3b008c
--- /dev/null
@@ -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 (file)
index 0000000..c7c8d00
--- /dev/null
@@ -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 (file)
index 0000000..c8beb50
--- /dev/null
@@ -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 (file)
index 0000000..883b278
--- /dev/null
@@ -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 (file)
index 0000000..150ac2c
--- /dev/null
@@ -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 (file)
index 0000000..d055576
--- /dev/null
@@ -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 (file)
index 0000000..5a2dde0
--- /dev/null
@@ -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 (file)
index 0000000..2afc9bb
--- /dev/null
@@ -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 (file)
index 0000000..c9dacca
--- /dev/null
@@ -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 (file)
index 0000000..1d2e1cb
--- /dev/null
@@ -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 (file)
index 0000000..1769df8
--- /dev/null
@@ -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 (file)
index 0000000..85e6635
--- /dev/null
@@ -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 (file)
index 0000000..85e6635
--- /dev/null
@@ -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 (file)
index 0000000..02ee1bf
--- /dev/null
@@ -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>