]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 37339 and Bug 80183 - Adding a sidebar.cgi and index.cgi. The sidebar.cgi can...
authorjake%acutex.net <>
Thu, 13 Dec 2001 06:41:04 +0000 (06:41 +0000)
committerjake%acutex.net <>
Thu, 13 Dec 2001 06:41:04 +0000 (06:41 +0000)
r= ddk, kiko

12 files changed:
.cvsignore
checksetup.pl
css/panel.css [new file with mode: 0644]
index.cgi [new file with mode: 0755]
index.html [deleted file]
quicksearch.html
quicksearch.js
quicksearchhack.html
sidebar.cgi [new file with mode: 0755]
skins/standard/panel.css [new file with mode: 0644]
template/default/index.tmpl [new file with mode: 0644]
template/default/sidebar/xul.tmpl [new file with mode: 0644]

index 64432ca1ef1215d07f1d4f1ad5d83c0f8a634eb6..fb345b2b0a87e68bbe10c8c26aae320612ec506e 100644 (file)
@@ -2,4 +2,4 @@
 graphs
 data
 localconfig
-shadow
+index.html
index 942c4e2ef3d51a40783bb096818efed5870ce881..99f2df13591b03c802cabd2cf09e3a9efb5fa63c 100755 (executable)
@@ -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 (file)
index 0000000..23b5270
--- /dev/null
@@ -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 (executable)
index 0000000..5c30099
--- /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 (file)
index 3a1a76f..0000000
+++ /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>
index 900180065bf4353454d7442c08ef6ed5e6b18810..df7e85ccf006536aacfdf8ab240273f025ceec27 100644 (file)
@@ -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>
index 7778d3598daaa3678d018621ebd0ddc61d825053..e8834a7222a3200b48789c4391304e809e544c03 100644 (file)
@@ -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]+$/,"");
 
index 7d788f626219d3d3e9481c8a4a4a8888d6e02543..70dcb4b555c4ab3efe919712e48e1fb54ad7bfdc 100644 (file)
 
 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 (executable)
index 0000000..587b0c5
--- /dev/null
@@ -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 (file)
index 0000000..23b5270
--- /dev/null
@@ -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 (file)
index 0000000..8c1af4e
--- /dev/null
@@ -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 (file)
index 0000000..1794d5f
--- /dev/null
@@ -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>