summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.cvsignore2
-rwxr-xr-xchecksetup.pl45
-rw-r--r--css/panel.css37
-rwxr-xr-xindex.cgi90
-rw-r--r--index.html98
-rw-r--r--quicksearch.html4
-rw-r--r--quicksearch.js20
-rw-r--r--quicksearchhack.html6
-rwxr-xr-xsidebar.cgi116
-rw-r--r--skins/standard/panel.css37
-rw-r--r--template/default/index.tmpl83
-rw-r--r--template/default/sidebar/xul.tmpl121
12 files changed, 542 insertions, 117 deletions
diff --git a/.cvsignore b/.cvsignore
index 64432ca1e..fb345b2b0 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -2,4 +2,4 @@
graphs
data
localconfig
-shadow
+index.html
diff --git a/checksetup.pl b/checksetup.pl
index 942c4e2ef..99f2df135 100755
--- a/checksetup.pl
+++ b/checksetup.pl
@@ -282,6 +282,21 @@ sub LocalVar ($$)
# Set up the defaults for the --LOCAL-- variables below:
#
+LocalVar('index_html', <<'END');
+#
+# With the introduction of a configurable index page using the
+# template toolkit, Bugzilla's main index page is now index.cgi.
+# Most web servers will allow you to use index.cgi as a directory
+# index and many come preconfigured that way, however if yours
+# doesn't you'll need an index.html file that provides redirection
+# to index.cgi. Setting $index_html to 1 below will allow
+# checksetup.pl to create one for you if it doesn't exist.
+# NOTE: checksetup.pl will not replace an existing file, so if you
+# wish to have checksetup.pl create one for you, you must
+# make sure that there isn't already an index.html
+$index_html = 0;
+END
+
my $mysql_binaries = `which mysql`;
if ($mysql_binaries =~ /no mysql/) {
# If which didn't find it, just provide a reasonable default
@@ -473,6 +488,7 @@ my $my_db_port = ${*{$main::{'db_port'}}{SCALAR}};
my $my_db_name = ${*{$main::{'db_name'}}{SCALAR}};
my $my_db_user = ${*{$main::{'db_user'}}{SCALAR}};
my $my_db_pass = ${*{$main::{'db_pass'}}{SCALAR}};
+my $my_index_html = ${*{$main::{'index_html'}}{SCALAR}};
my $my_create_htaccess = ${*{$main::{'create_htaccess'}}{SCALAR}};
my $my_webservergroup = ${*{$main::{'webservergroup'}}{SCALAR}};
my @my_severities = @{*{$main::{'severities'}}{ARRAY}};
@@ -637,6 +653,35 @@ END
}
+if ($my_index_html) {
+ if (!-e "index.html") {
+ print "Creating index.html...\n";
+ open HTML, ">index.html";
+ print HTML <<'END';
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="REFRESH" CONTENT="0; URL=index.cgi">
+</HEAD>
+<BODY>
+<H1>I think you are looking for <a href="index.cgi">index.cgi</a></H1>
+</BODY>
+</HTML>
+END
+ close HTML;
+ }
+ else {
+ open HTML, "index.html";
+ if (! grep /index\.cgi/, <HTML>) {
+ print "\n\n";
+ print "*** It appears that you still have an old index.html hanging\n";
+ print " around. The contents of this file should be moved into a\n";
+ print " template and placed in the 'template/custom' directory.\n\n";
+ }
+ close HTML;
+ }
+}
+
# Just to be sure ...
unlink "data/versioncache";
diff --git a/css/panel.css b/css/panel.css
new file mode 100644
index 000000000..23b52705e
--- /dev/null
+++ b/css/panel.css
@@ -0,0 +1,37 @@
+body
+ {
+ font-family: sans-serif;
+ font-size: 10pt;
+ background-color: white;
+ }
+
+ul
+ {
+ padding-left: 12px;
+ }
+
+radio
+ {
+ -moz-user-select: ignore;
+ }
+
+.text-link
+ {
+ margin-left: 3px;
+ }
+
+.text-link:hover
+ {
+ text-decoration: underline;
+ cursor: pointer;
+ }
+
+.descriptive-content
+ {
+ color: #AAAAAA;
+ }
+
+.descriptive-content[focused=true]
+ {
+ color: black;
+ }
diff --git a/index.cgi b/index.cgi
new file mode 100755
index 000000000..5c300992d
--- /dev/null
+++ b/index.cgi
@@ -0,0 +1,90 @@
+#!/usr/bonsaitools/bin/perl -wT
+# -*- Mode: perl; indent-tabs-mode: nil -*-
+#
+# 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>
+#
+
+# Suppress silly "used only once" warnings
+use vars qw{ %COOKIE };
+
+
+###############################################################################
+# Script Initialization
+###############################################################################
+
+# Make it harder for us to do dangerous things in Perl.
+use diagnostics;
+use strict;
+
+# Include the Bugzilla CGI and general utility library.
+use lib ".";
+require "CGI.pl";
+
+# Establish a connection to the database backend.
+ConnectToDatabase();
+
+# Use the template toolkit (http://www.template-toolkit.org/) to generate
+# the user interface (HTML pages and mail messages) using templates in the
+# "template/" subdirectory.
+use Template;
+
+# Create the global template object that processes templates and specify
+# configuration parameters that apply to all templates processed in this script.
+my $template = Template->new(
+ {
+ # Colon-separated list of directories containing templates.
+ INCLUDE_PATH => "template/custom:template/default",
+ # Allow templates to be specified with relative paths.
+ RELATIVE => 1,
+ POST_CHOMP => 1,
+ }
+);
+
+# Define the global variables and functions that will be passed to the UI
+# template. Individual functions add their own values to this hash before
+# sending them to the templates they process.
+my $vars =
+ {
+ # Function for retrieving global parameters.
+ 'Param' => \&Param ,
+
+ # Function for processing global parameters that contain references
+ # to other global parameters.
+ 'PerformSubsts' => \&PerformSubsts
+ };
+
+# Check whether or not the user is logged in and, if so, set the $::userid
+# and $::usergroupset variables.
+quietly_check_login();
+
+###############################################################################
+# Main Body Execution
+###############################################################################
+
+$vars->{'username'} = $::COOKIE{'Bugzilla_login'} || '';
+$vars->{'subst'} = { 'userid' => $vars->{'username'} };
+
+# Return the appropriate HTTP response headers.
+print "Content-Type: text/html\n\n";
+
+# Generate and return the UI (HTML page) from the appropriate template.
+$template->process("index.tmpl", $vars)
+ || DisplayError("Template process failed: " . $template->error())
+ && exit;
diff --git a/index.html b/index.html
deleted file mode 100644
index 3a1a76ff6..000000000
--- a/index.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<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):
-
- Contributor(s): Terry Weissman <terry@mozilla.org>
--->
-<HEAD><TITLE>Bugzilla Main Page</TITLE></HEAD>
-<BODY BGCOLOR="#FFFFFF" TEXT="#000000"
-LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000">
-<TABLE BGCOLOR="#000000" WIDTH="100%" BORDER=0 CELLPADDING=0 CELLSPACING=0>
-<TR><TD><A HREF="http://www.mozilla.org/"><IMG
- SRC="http://www.mozilla.org/images/mozilla-banner.gif" ALT=""
- BORDER=0 WIDTH=600 HEIGHT=58></A></TD></TR></TABLE>
-<TABLE BORDER=0 CELLPADDING=12 CELLSPACING=0 WIDTH="100%">
- <TR>
-
- <TD>
-
- <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=2>
-
- <TR><TD VALIGN=TOP ALIGN=CENTER NOWRAP>
-
- <FONT SIZE="+3"><B><NOBR>Main Page</NOBR></B></FONT>
-
- </TD></TR><TR><TD VALIGN=TOP ALIGN=CENTER>
-
- <B></B>
-
- </TD></TR>
-
- </TABLE>
-
- </TD>
-
- <TD>
-
- This is <B>Bugzilla</B>: the Mozilla bug system. For more
- information about what Bugzilla is and what it can do, see
- <A HREF="http://www.mozilla.org/">mozilla.org</A>'s
- <A HREF="http://www.mozilla.org/bugs/"><B>bug pages</B></A>.
-</TD></TR></TABLE>
-
-
-<img align=right width=329 height=220 src=ant.jpg border=2>
-
-
-This is where we put in lots of nifty words explaining all about
-bugzilla.
-
-<p>
-
-But it all boils down to a choice of:
-<br>
-<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>
-<a href="createaccount.cgi">Open a new Bugzilla account</a><br>
-<a href="relogin.cgi">Forget the currently stored login</a><br>
-<a href="userprefs.cgi">Change password or user preferences</a><br>
-<p>
-<script language="JavaScript" src="localconfig.js"></script>
-<script language="JavaScript" src="quicksearch.js"></script>
-
-<form name="f" action="show_bug.cgi" method="get"
- onsubmit="QuickSearch(); return false;">
- Enter a bug # or some search terms:<br>
- <input type="text" name="id">
- <input type="submit" value="Show">
- <a href="quicksearch.html">[Help]</a>
-</form>
-
-<script>
-<!--
-document.forms['f'].id.focus();
-//-->
-</script>
-
-</BODY>
-</HTML>
diff --git a/quicksearch.html b/quicksearch.html
index 900180065..df7e85ccf 100644
--- a/quicksearch.html
+++ b/quicksearch.html
@@ -18,10 +18,8 @@ you may prefer <a href="quicksearchhack.html">this form</a>.
Type in one or more words (or word fragments) to search for:
-<!-- The name of the form must be "f" (used in "quicksearch.js"). -->
-
<form name="f" action="show_bug.cgi" method="get"
- onsubmit="QuickSearch(); return false;">
+ onsubmit="QuickSearch(f.id.value); return false;">
<table>
<tr>
<td><input type="text" size="40" name="id"/></td>
diff --git a/quicksearch.js b/quicksearch.js
index 7778d3598..e8834a722 100644
--- a/quicksearch.js
+++ b/quicksearch.js
@@ -46,8 +46,11 @@ function do_shift(l) {
}
function go_to (url) {
- document.location.href = url;
- //window.open(url, "other" );
+ if (sidebar == 1) {
+ load_relative_url(url);
+ } else {
+ document.location.href = url;
+ }
}
function map(l, f) {
@@ -600,8 +603,7 @@ function unique_id () {
return (new Date()).getTime();
}
-function ShowURL(mode) {
- var input = document.f.id.value;
+function ShowURL(mode,input) {
var searchURL = make_query_URL(bugzilla+"buglist.cgi", input, false);
if (searchURL != no_result) {
var pieces = searchURL.replace(/[\?]/g,"\n?").replace(/[\&]/g,"\n&");
@@ -684,7 +686,7 @@ function Search(url, input, searchLong) {
// derived from http://www.cs.hmc.edu/~jruderma/s/bugz.html
// QuickSearch combines lookup-by-bug-number and search
-// in a single textbox. It's name must be document.f.id .
+// in a single textbox.
//
// type nothing:
// --> go to bugzilla front page
@@ -696,10 +698,8 @@ function Search(url, input, searchLong) {
// --> search summary, product, component, keywords, status whiteboard
// (and URL if it's an IP address, a host.name, or an absolute://URL)
-function QuickSearch ()
+function QuickSearch (input)
{
- var input = document.f.id.value;
-
//remove leading and trailing whitespace
input = input.replace(/^[\s]+/,"").replace(/[\s]+$/,"");
@@ -726,9 +726,7 @@ function QuickSearch ()
return;
}
-function LoadQuery() {
- var input = document.f.id.value;
-
+function LoadQuery(input) {
//remove leading and trailing whitespace
input = input.replace(/^[\s]+/,"").replace(/[\s]+$/,"");
diff --git a/quicksearchhack.html b/quicksearchhack.html
index 7d788f626..70dcb4b55 100644
--- a/quicksearchhack.html
+++ b/quicksearchhack.html
@@ -12,16 +12,14 @@
Type in one or more words (or word fragments) to search for:
-<!-- The name of the form must be "f" (used in "quicksearch.js"). -->
-
<form name="f" action="show_bug.cgi" method="get"
- onsubmit="QuickSearch(); return false;">
+ onsubmit="QuickSearch(f.id.value); return false;">
<table>
<tr>
<td><input type="text" size="40" name="id"/></td>
<td align=left><input type="submit" name="run" value="Search"/></td>
<td align=left><input type="button" name="load" value="Load Query"
- onclick="LoadQuery();" />
+ onclick="LoadQuery(f.id.value);" />
</td>
</tr>
</table>
diff --git a/sidebar.cgi b/sidebar.cgi
new file mode 100755
index 000000000..587b0c534
--- /dev/null
+++ b/sidebar.cgi
@@ -0,0 +1,116 @@
+#!/usr/bonsaitools/bin/perl -wT
+# -*- Mode: perl; indent-tabs-mode: nil -*-
+#
+# 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.
+#
+# Contributor(s): Jacob Steenhagen <jake@acutex.net>
+
+use strict;
+use diagnostics;
+
+use lib ".";
+require "CGI.pl";
+
+# Shut up "Used Only Once" errors
+use vars qw { $anyvotesallowed };
+
+ConnectToDatabase();
+
+# Use the template toolkit (http://www.template-toolkit.org/) to generate
+# the user interface (HTML pages and mail messages) using templates in the
+# "template/" subdirectory.
+use Template;
+
+# Create the global template object that processes templates and specify
+# configuration parameters that apply to all templates processed in this script.
+my $template = Template->new(
+ {
+ # Colon-separated list of directories containing templates.
+ INCLUDE_PATH => "template/custom:template/default",
+ # Allow templates to be specified with relative paths.
+ RELATIVE => 1,
+ POST_CHOMP =>1,
+ # Functions for processing text within templates
+ FILTERS =>
+ {
+ url => \&url_quote,
+ },
+ }
+);
+
+# Define the global variables and functions that will be passed to the UI
+# template. Individual functions add their own values to this hash before
+# sending them to the templates they process.
+my $vars =
+ {
+ # Function for retrieving global parameters.
+ 'Param' => \&Param ,
+
+ # Function that tells us if the logged in user is in a specific group.
+ 'UserInGroup' => \&UserInGroup ,
+ };
+
+
+# Needed for $::anyvotesallowed
+GetVersionTable();
+
+# Check to see if the user has logged in yet.
+quietly_check_login();
+
+###############################################################################
+# Main Body Execution
+###############################################################################
+
+$vars->{'username'} = $::COOKIE{'Bugzilla_login'} || '';
+$vars->{'anyvotesallowed'} = $::anyvotesallowed;
+
+if (defined $::COOKIE{'Bugzilla_login'}) {
+ SendSQL("SELECT mybugslink, userid, blessgroupset FROM profiles " .
+ "WHERE login_name = " . SqlQuote($::COOKIE{'Bugzilla_login'}));
+ my ($mybugslink, $userid, $blessgroupset) = (FetchSQLData());
+ $vars->{'userid'} = $userid;
+ $vars->{'blessgroupset'} = $blessgroupset;
+ if ($mybugslink) {
+ my $mybugstemplate = Param("mybugstemplate");
+ my %substs = ( 'userid' => url_quote($::COOKIE{'Bugzilla_login'}) );
+ $vars->{'mybugsurl'} = PerformSubsts($mybugstemplate, \%substs);
+ }
+ SendSQL("SELECT name FROM namedqueries WHERE userid = $userid AND linkinfooter");
+ while (MoreSQLData()) {
+ my ($name) = FetchSQLData();
+ push(@{$vars->{'namedqueries'}}, $name);
+ }
+}
+
+# This sidebar is currently for use with Mozilla based web browsers.
+# Internet Explorer 6 is supposed to have a similar feature, but it
+# most likely won't support XUL ;) When that does come out, this
+# can be expanded to output normal HTML for IE. Until then, I like
+# the way Scott's sidebar looks so I'm using that as the base for
+# this file.
+# http://bugzilla.mozilla.org/show_bug.cgi?id=37339
+
+my $useragent = $ENV{HTTP_USER_AGENT};
+if ($useragent =~ m:Mozilla/([1-9][0-9]*):i && $1 >= 5 && $useragent !~ m/compatible/i) {
+ print "Content-type: application/vnd.mozilla.xul+xml\n\n";
+ # Generate and return the XUL from the appropriate template.
+ $template->process("sidebar/xul.tmpl", $vars)
+ || DisplayError("Template process failed: " . $template->error())
+ && exit;
+} else {
+ DisplayError("sidebar.cgi currently only supports Mozilla based web browsers");
+ exit;
+}
+
+
+
diff --git a/skins/standard/panel.css b/skins/standard/panel.css
new file mode 100644
index 000000000..23b52705e
--- /dev/null
+++ b/skins/standard/panel.css
@@ -0,0 +1,37 @@
+body
+ {
+ font-family: sans-serif;
+ font-size: 10pt;
+ background-color: white;
+ }
+
+ul
+ {
+ padding-left: 12px;
+ }
+
+radio
+ {
+ -moz-user-select: ignore;
+ }
+
+.text-link
+ {
+ margin-left: 3px;
+ }
+
+.text-link:hover
+ {
+ text-decoration: underline;
+ cursor: pointer;
+ }
+
+.descriptive-content
+ {
+ color: #AAAAAA;
+ }
+
+.descriptive-content[focused=true]
+ {
+ color: black;
+ }
diff --git a/template/default/index.tmpl b/template/default/index.tmpl
new file mode 100644
index 000000000..8c1af4ed6
--- /dev/null
+++ b/template/default/index.tmpl
@@ -0,0 +1,83 @@
+[%# -*- 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 %]</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>
+
+
+[% INCLUDE global/footer %]
diff --git a/template/default/sidebar/xul.tmpl b/template/default/sidebar/xul.tmpl
new file mode 100644
index 000000000..1794d5f50
--- /dev/null
+++ b/template/default/sidebar/xul.tmpl
@@ -0,0 +1,121 @@
+[%# -*- 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"?>
+<?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('showvotes.cgi')" value="my votes"/>
+[% END %]
+
+[% FOREACH name = namedqueries %]
+ <text class="text-link" onclick="load_relative_url('buglist.cgi?cmdtype=runnamed&amp;namedcmd=[% name FILTER url %]')" 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>