Commit 7f85d8e5 authored by Max Kanat-Alexander's avatar Max Kanat-Alexander

Bug 518293: Improve and Simplify the QuickSearch Documentation

r=LpSolit, a=LpSolit
parent 36b5893b
......@@ -21,8 +21,8 @@
/skins/contrib/Dusk/editusers.css
/skins/contrib/Dusk/help.css
/skins/contrib/Dusk/panel.css
/skins/contrib/Dusk/page.css
/skins/contrib/Dusk/params.css
/skins/contrib/Dusk/release-notes.css
/skins/contrib/Dusk/reports.css
/skins/contrib/Dusk/show_bug.css
/skins/contrib/Dusk/show_multiple.css
......
......@@ -35,6 +35,29 @@ use lib qw(. lib);
use Bugzilla;
use Bugzilla::Error;
use Bugzilla::Hook;
use Bugzilla::Search::Quicksearch;
###############
# Subroutines #
###############
# For quicksearch.html.
sub quicksearch_field_names {
my $fields = Bugzilla::Search::Quicksearch::FIELD_MAP;
my %fields_reverse;
# Put longer names before shorter names.
my @nicknames = sort { length($b) <=> length($a) } (keys %$fields);
foreach my $nickname (@nicknames) {
my $db_field = $fields->{$nickname};
$fields_reverse{$db_field} ||= [];
push(@{ $fields_reverse{$db_field} }, $nickname);
}
return \%fields_reverse;
}
###############
# Main Script #
###############
Bugzilla->login();
......@@ -51,7 +74,9 @@ if ($id) {
ThrowCodeError("bad_page_cgi_id", { "page_id" => $id });
}
my %vars;
my %vars = (
quicksearch_field_names => \&quicksearch_field_names,
);
Bugzilla::Hook::process('page_before_template',
{ page_id => $id, vars => \%vars });
......
......@@ -17,10 +17,22 @@
* Contributor(s): Max Kanat-Alexander <mkanat@bugzilla.org>
*/
/* This CSS is used by various informational pages in the
template/en/default/pages/ directory. */
#bugzilla-body {
padding: 0 1em;
}
#bugzilla-body > * {
/* People have an easier time reading narrower columns of text. */
max-width: 45em;
}
/*****************/
/* Release Notes */
/*****************/
.req_new {
color: red;
}
......@@ -33,3 +45,26 @@
border: 1px solid black;
padding: .25em;
}
/********************/
/* QuickSearch Help */
/********************/
.qs_help li {
margin-top: 1ex;
}
.qs_fields th {
padding: 0 .25em;
}
.qs_fields th.field_nickname {
text-align: left;
}
.qs_fields td {
padding: .25em;
border-top: 1px solid gray;
}
.qs_fields .field_name {
width: 10em;
}
......@@ -37,7 +37,8 @@
<input class="txt" type="text" id="quicksearch[% qs_suffix FILTER html %]" name="quicksearch">
<input class="btn" type="submit" value="Search"
id="find[% qs_suffix FILTER html %]">
[%-# Work around FF bug: keep this on one line %]</form></li>
[%-# Work around FF bug: keep this on one line %]</form>
<a href="page.cgi?id=quicksearch.html" title="Quicksearch Help">[?]</a></li>
<li><span class="separator">| </span><a href="report.cgi">Reports</a></li>
......
......@@ -1436,8 +1436,8 @@
[% END %]
[% IF unknown.size %]
<p>The legal field names are
<a href="page.cgi?id=quicksearchhack.html">listed here</a>.</p>
<p>The legal field names are
<a href="page.cgi?id=quicksearch.html#fields">listed here</a>.</p>
[% END %]
[% ELSIF error == "reassign_to_empty" %]
......
[%# 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): N.N.
# Marc Schumann <wurblzap@gmail.com>
#%]
[% PROCESS global/variables.none.tmpl %]
[% INCLUDE global/header.html.tmpl
title = "$terms.Bugzilla QuickSearch (for Hackers)",
style = 'th {text-align: left}'
onload = 'document.forms[\'f\'].quicksearch.focus()'
%]
<p>
Type in one or more words (or word fragments) to search for:
</p>
<form name="f" action="buglist.cgi" method="get"
onsubmit="if (this.quicksearch.value == '')
{ alert('Please enter one or more search terms first.');
return false; } return true;">
<input type="text" size="40" name="quicksearch">
<input type="submit" value="Search" id="find">
<input type="submit" name="load" value="Load Search Form" id="load">
</form>
<p>
This is a case-insensitive &ldquo;all words as substrings&rdquo; search;
words are separated by spaces.
By default, the following fields are relevant: Summary, Keywords,
Product, Component, Status Whiteboard.
If a word looks like a part of a URL, that field is included in the search,
too.
</p>
<p>
The generic format for a &ldquo;word&rdquo; is
<tt>field1,&hellip;,fieldN:value1,&hellip;,valueM</tt>.
A [% terms.bug %] qualifies if at least one of the values occurs as a
substring in at least one of the fields.
For example, <tt>assignee,reporter,qa:ibm,sun</tt> will give you
[%+ terms.bugs %] where the assignee, reporter, or qa contact has a login
that contains <tt>ibm</tt> or <tt>sun</tt>.
If only <tt>value1,&hellip;,valueM</tt> is given, the prefix (roughly) defaults to
<tt>summary,keywords,product,component,statuswhiteboard:</tt> as noted above.
You can use <tt>-<i>word</i></tt> to express the logical negation of
<tt><i>word</i></tt>.
</p>
<p>
Here is a complete listing of available fields (the Shortcut column is just
for access speed):
</p>
<table border="1">
<thead>
<tr>
<th>Searched by default</th>
<th>Shortcut</th>
<th>Field Name</th>
<th>Aliases</th>
<th>Description</th>
</tr>
</thead>
<!-- Status, Resolution, Platform, OS, Priority, Severity -->
<tr>
<td>&nbsp;</td>
<td rowspan="2">
<tt>UNCO,NEW,&hellip;,CLOS,<br>FIX,DUP,&hellip;<i>(as first word)</i></tt>
</td>
<td><tt>status</tt></td>
<td>&nbsp;</td>
<td>
<a href="page.cgi?id=fields.html#status">Status</a>
<i>(&ldquo;bug_status&rdquo;)</i>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td><tt>resolution</tt></td>
<td>&nbsp;</td>
<td><a href="page.cgi?id=fields.html#resolution">Resolution</a></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><i>as-is</i></td>
<td><tt>platform</tt></td>
<td>&nbsp;</td>
<td>
<a href="page.cgi?id=fields.html#rep_platform">Platform</a>
<i>(&ldquo;rep_platform&rdquo;)</i>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tt>os</tt></td>
<td><tt>opsys</tt></td>
<td>
<a href="page.cgi?id=fields.html#op_sys">OS</a>
<i>(&ldquo;op_sys&rdquo;)</i>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td><tt>p1,p2</tt> <i>or</i> <tt>p1-2</tt></td>
<td><tt>priority</tt></td>
<td><tt>pri</tt></td>
<td><a href="page.cgi?id=fields.html#priority">Priority</a></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><tt>blo,cri,&hellip;,enh</tt></td>
<td><tt>severity</tt></td>
<td><tt>sev</tt></td>
<td>
<a href="page.cgi?id=fields.html#bug_severity">Severity</a>
<i>(&ldquo;bug_severity&rdquo;)</i>
</td>
</tr>
<!-- People: AssignedTo, Reporter, QA Contact, CC, Added comment -->
<!-- Added comment is missing!!!! -->
<tr>
<td>&nbsp;</td>
<td><b>@</b><i>assignee</i></td>
<td><tt>assignedto</tt></td>
<td><tt>assignee</tt></td>
<td>
<a href="page.cgi?id=fields.html#assigned_to">Assignee</a>
<i>(&ldquo;assigned_to&rdquo;)</i>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tt>reporter</tt></td>
<td><tt>rep</tt></td>
<td>Reporter (login)</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tt>qa</tt></td>
<td><tt>qacontact</tt></td>
<td>QA Contact (login) <i>(&ldquo;qa_contact&rdquo;)</i></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tt>cc</tt></td>
<td>&nbsp;</td>
<td>CC (login)</td>
</tr>
<!-- Product, Version, Component, Target Milestone -->
<tr>
<td><i>yes</i></td>
<td rowspan="2"><b>:</b><i>area</i></td>
<td><tt>product</tt></td>
<td><tt>prod</tt></td>
<td>Product (enum)</td>
</tr>
<tr>
<td><i>yes</i></td>
<td><tt>component</tt></td>
<td><tt>comp</tt></td>
<td><a href="describecomponents.cgi">Component</a></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tt>version</tt></td>
<td><tt>ver</tt></td>
<td>Version (enum)</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tt>milestone</tt></td>
<td><tt>target, targetmilestone</tt></td>
<td>Target Milestone <i>(&ldquo;target_milestone&rdquo;)</i></td>
</tr>
<!-- Summary, Description, URL, Status whiteboard, Keywords -->
<tr>
<td><i>yes</i></td>
<td>&nbsp;</td>
<td><tt>summary</tt></td>
<td><tt>shortdesc</tt></td>
<td>
[% terms.Bug %] Summary (short text)
<i>(&ldquo;short_desc&rdquo;)</i>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tt>description</tt></td>
<td><tt>desc, longdesc<!--, comment--></tt></td>
<!-- reserve "comment" for "added comment" login search?! -->
<td>[% terms.Bug %] Description / Comments (long text)</td>
</tr>
<tr>
<td><i>depends</i></td>
<td>&nbsp;</td>
<td><tt>url</tt></td>
<td>&nbsp;</td>
<td>URL <i>(&ldquo;bug_file_loc&rdquo;)</i></td>
</tr>
<tr>
<td><i>yes</i></td>
<td>&nbsp;</td>
<td><tt>statuswhiteboard</tt></td>
<td><tt>sw, whiteboard</tt></td>
<td>Status Whiteboard <i>(&ldquo;status_whiteboard&rdquo;)</i></td>
</tr>
<tr>
<td><i>yes</i></td>
<td><b>!</b><i>keyword</i></td>
<td><tt>keywords</tt></td>
<td><tt>kw</tt></td>
<td><a href="describekeywords.cgi">Keywords</a></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tt>group</tt></td>
<td>&nbsp;</td>
<td>Group</td>
</tr>
<!-- Flags -->
<tr>
<td>&nbsp;</td>
<td rowspan="2"><i>flag</i><b>?</b><i>requestee</i></td>
<td><tt>flag</tt></td>
<td>&nbsp;</td>
<td>Flag name and status (+, - or ?)</td>
</tr>
<tr>
<td>&nbsp;</td>
<td><tt>requestee</tt></td>
<td><tt>req</tt></td>
<td>Flag requestee (login)</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tt>setter</tt></td>
<td><tt>set</tt></td>
<td>Flag setter (login)</td>
</tr>
<!-- Attachments -->
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tt>attachmentdesc</tt></td>
<td><tt>attachdesc</tt></td>
<td>
Attachment Description
<i>(&ldquo;attachments.description&rdquo;)</i>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tt>attachmentdata</tt></td>
<td><tt>attachdata</tt></td>
<td>Attachment Data <i>(&ldquo;attach_data.thedata&rdquo;)</i></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tt>attachmentmimetype</tt></td>
<td><tt>attachmimetype</tt></td>
<td>Attachment mime-type <i>(&ldquo;attachments.mimetype&rdquo;)</i></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tt>votes</tt></td>
<td>&nbsp;</td>
<td>
Number of votes<br>
(votes:<i>N</i> and votes&gt;=<i>N</i> mean "at least N votes",
votes&gt;<i>N</i> means "more than N votes")
</td>
</tr>
</table>
<p>
Examples for some useful abbreviations:
</p>
<table border="1">
<thead>
<tr>
<th>Syntax</th>
<th>Semantics and Examples</th>
</tr>
</thead>
<!--
<tr>
<td><i>STAT</i> <i>(as first word)</i></td>
<td><b>status,resolution:</b> <i>STAT</i></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td><tt>ALL</tt> <i>(as first word)</i></td>
<td><i>include all resolved [% terms.bugs %] in your search</i></td>
</tr>
<tr>
<td><tt>+DUP,FIXED</tt> <i>(as first word)</i></td>
<td><i>include DUPLICATE and FIXED [% terms.bugs %] in your search</i></td>
</tr>
-->
<tr>
<td><b>:</b><i>area</i></td>
<td><b>product,component:</b><i>area</i></td>
</tr>
<tr>
<td><i>sev</i></td>
<td><b>severity:</b><i>sev</i></td>
</tr>
<tr>
<td><tt>blo,cri,maj</tt></td>
<td><i>severe [% terms.bugs %]</i></td>
</tr>
<tr>
<td><tt>enh</tt></td>
<td><i>enhancement requests</i></td>
</tr>
<tr>
<td><b>p</b><i>level</i></td>
<td><b>priority:</b><i>level</i></td>
</tr>
<tr>
<td><tt>p1</tt></td>
<td><i>very high-priority [% terms.bugs %]</i></td>
</tr>
<tr>
<td><tt>p1-2</tt></td>
<td><i>high-priority [% terms.bugs %]</i></td>
</tr>
<tr>
<td><b>@</b><i>assignee</i></td>
<td><b>assignedto:</b><i>assignee</i></td>
</tr>
<tr>
<td><b>!</b><i>keyword</i></td>
<td><b>keywords:</b><i>keyword</i></td>
</tr>
<tr>
<td><i>flag</i><b>?</b><i>requestee</i></td>
<td><b>flag:</b><i>flag?</i> <b>requestee:</b><i>requestee</i></td>
</tr>
</table>
<p>
More information can be found in the
<a href="page.cgi?id=quicksearch.html#features">&ldquo;Features&rdquo;</a>
section on the <a href="page.cgi?id=quicksearch.html">introductory page</a>.
</p>
[% PROCESS global/footer.html.tmpl %]
......@@ -20,7 +20,7 @@
[% PROCESS global/variables.none.tmpl %]
[% INCLUDE global/header.html.tmpl
title = "$terms.Bugzilla 3.4 Release Notes"
style_urls = ['skins/standard/release-notes.css']
style_urls = ['skins/standard/page.css']
%]
<h2>Table of Contents</h2>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment