summaryrefslogtreecommitdiffstats
path: root/template/en/default/search
diff options
context:
space:
mode:
Diffstat (limited to 'template/en/default/search')
-rw-r--r--template/en/default/search/boolean-charts.html.tmpl27
-rw-r--r--template/en/default/search/field.html.tmpl142
-rw-r--r--template/en/default/search/form.html.tmpl704
-rw-r--r--template/en/default/search/search-advanced.html.tmpl29
-rw-r--r--template/en/default/search/search-create-series.html.tmpl5
-rw-r--r--template/en/default/search/search-report-graph.html.tmpl17
-rw-r--r--template/en/default/search/search-report-select.html.tmpl8
-rw-r--r--template/en/default/search/search-report-table.html.tmpl23
8 files changed, 436 insertions, 519 deletions
diff --git a/template/en/default/search/boolean-charts.html.tmpl b/template/en/default/search/boolean-charts.html.tmpl
index 1b79a45..90b5c79 100644
--- a/template/en/default/search/boolean-charts.html.tmpl
+++ b/template/en/default/search/boolean-charts.html.tmpl
@@ -34,7 +34,9 @@
"regexp",
"notregexp",
"lessthan",
+ "lessthaneq",
"greaterthan",
+ "greaterthaneq",
"anywords",
"allwords",
"nowords",
@@ -46,13 +48,18 @@
"matches",
"notmatches",
] %]
-
- <p>
- <strong>
- <a name="chart">Advanced Searching Using Boolean Charts</a>:
- </strong>
- </p>
-
+<script type="text/javascript">
+ TUI_alternates['custom_search_query'] = '&#9658;';
+ TUI_hide_default('custom_search_query');
+</script>
+<div class="bz_section_title" id="custom_search_filter">
+ <div id="custom_search_query_controller" class="arrow">&#9660;</div>
+ <a id="chart" href="javascript:TUI_toggle_class('custom_search_query')" >
+ Custom Search</a> <span class="section_help">Didn't find what
+ you're looking for above? This area allows for ANDs, ORs,
+ and other more complex searches.</span>
+ </div>
+ <div id="custom_search_filter_section" class="bz_search_section custom_search_query" >
[%# Whoever wrote the original version of boolean charts had a seriously twisted mind %]
[% jsmagic = "onclick=\"this.form.action='query.cgi#chart'; this.form.method='POST'; return 1;\"" %]
@@ -87,9 +94,8 @@
[% INCLUDE "search/type-select.html.tmpl"
name = "type${chartnum}-${rownum}-${colnum}",
types = types, selected = col.type %]
-
<input name="[% "value${chartnum}-${rownum}-${colnum}" %]"
- value="[% col.value FILTER html %]">
+ value="[% col.value FILTER html %]">
</td>
[% UNLESS loop.last %]
@@ -132,5 +138,6 @@
[% END %]
</table>
- <hr>
+ [% "<hr>" IF NOT loop.last %]
[% END %]
+</div> \ No newline at end of file
diff --git a/template/en/default/search/field.html.tmpl b/template/en/default/search/field.html.tmpl
new file mode 100644
index 0000000..defc94c
--- /dev/null
+++ b/template/en/default/search/field.html.tmpl
@@ -0,0 +1,142 @@
+[%# 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 Guy Pyrzak
+ # Portions created by the Initial Developer are Copyright (C) 2010 the
+ # Initial Developer. All Rights Reserved.
+ #
+ # Contributor(s): Guy Pyrzak <guy.pyrzak@gmail.com>
+ # Reed Loden <reed@reedloden.com>
+ #
+ #%]
+[%# INTERFACE:
+ # field: a Bugzilla::Field object
+ # value: the value or values that should be used to prepopulate the field
+ # accesskey: the access key used to access the field more quickly
+ # onchange: js to run when the change event fires on the field
+ # type_selected: used by the free text to indicate which type of text
+ # search was selected for a particular field
+ #%]
+
+[% SWITCH field.type %]
+ [% CASE [ constants.FIELD_TYPE_FREETEXT,
+ constants.FIELD_TYPE_TEXTAREA,
+ constants.FIELD_TYPE_UNKNOWN ] %]
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = field
+ tag_name = "span"
+ editable = 1
+ %]
+ [% INCLUDE "search/type-select.html.tmpl"
+ name = field.name _ "_type",
+ types = types,
+ selected = type_selected
+ %]
+ <input name="[% field.name FILTER html %]"
+ id="[% field.name FILTER html %]" size="40"
+ [% IF onchange %] onchange="[% onchange FILTER html %]"[% END %]
+ value="[% value FILTER html %]">
+ [% CASE constants.FIELD_TYPE_KEYWORDS %]
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = field
+ tag_name = "span"
+ editable = 1
+ %]
+ [% INCLUDE "search/type-select.html.tmpl"
+ name = field.name _ "_type",
+ types = types,
+ selected = type_selected
+ %]
+ <div id="keyword_container">
+ <input name="[% field.name FILTER html %]"
+ id="[% field.name FILTER html %]" size="40"
+ [% IF onchange %] onchange="[% onchange FILTER html %]"[% END %]
+ value="[% value FILTER html %]">
+ <div id="keyword_autocomplete"></div>
+ </div>
+ <script type="text/javascript" defer="defer">
+ YAHOO.bugzilla.keyword_array = [
+ [%- FOREACH keyword = all_keywords %]
+ [%-# %]"[% keyword.name FILTER js %]"
+ [%- "," IF NOT loop.last %][% END %]];
+ YAHOO.bugzilla.keywordAutocomplete.init('[% field.name FILTER js %]',
+ 'keyword_autocomplete');
+ </script>
+ [% CASE constants.FIELD_TYPE_DATETIME %]
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = field
+ tag_name = "span"
+ editable = 1
+ %]
+ from <input name="[% field.name FILTER html %]from"
+ id="[% field.name FILTER html %]"
+ size="10" maxlength="10"
+ value="[% value.0 FILTER html %]"
+ onchange="updateCalendarFromField(this);[% onchange FILTER html %]">
+ <button type="button" class="calendar_button"
+ id="button_calendar_[% field.name FILTER html %]"
+ onclick="showCalendar('[% field.name FILTER js %]')">
+ <span>Calendar</span>
+ </button>
+ <span id="con_calendar_[% field.name FILTER html %]"></span>
+ to <input name="[% field.name FILTER html %]to"
+ id="[% field.name FILTER html %]to" size="10" maxlength="10"
+ value="[% value.1 FILTER html %]"
+ onchange="updateCalendarFromField(this);[% onchange FILTER html %]">
+ <button type="button" class="calendar_button"
+ id="button_calendar_[% field.name FILTER html %]to"
+ onclick="showCalendar('[% field.name FILTER js %]to')">
+ <span>Calendar</span>
+ </button>
+ <small>(YYYY-MM-DD or relative dates)</small>
+
+ <span id="con_calendar_[% field.name FILTER html %]to"></span>
+ <script type="text/javascript">
+ createCalendar('[% field.name FILTER js %]');
+ createCalendar('[% field.name FILTER js %]to');
+ </script>
+ [% CASE [ constants.FIELD_TYPE_SINGLE_SELECT,
+ constants.FIELD_TYPE_MULTI_SELECT ] %]
+ <div id="container_[% field.name FILTER html %]" class="search_field_grid">
+ [% INCLUDE "bug/field-label.html.tmpl"
+ field = field
+ editable = 1
+ tag_name = "span"
+ %]
+ <select name="[% field.name FILTER html%]"
+ id="[% field.name FILTER html %]"
+ [% IF onchange %] onchange="[% onchange FILTER html %]"[% END %]
+ multiple="multiple" size="7">
+ [% legal_values = ${field.name} %]
+ [% IF field.name == "component" %]
+ [% legal_values = ${"component_"} %]
+ [% END %]
+ [% FOREACH current_value = legal_values %]
+ [% IF current_value.id %]
+ [%# current_value is a hash instead of a value which
+ only applies for Resolution really, everywhere else current_value
+ is just the value %]
+ [% v = current_value.name OR '---' -%]
+ <option value="[% v FILTER html %]"
+ [% ' selected="selected"' IF value.contains( v ) %]>
+ [% display_value(field.name, current_value.name) FILTER html %]
+ </option>
+ [% ELSE %]
+ <option value="[% current_value OR '---' FILTER html %]"
+ [% ' selected="selected"' IF value.contains( current_value ) %]>
+ [% display_value(field.name, current_value) FILTER html %]
+ </option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ [% END %]
diff --git a/template/en/default/search/form.html.tmpl b/template/en/default/search/form.html.tmpl
index 2e2ae73..f310420 100644
--- a/template/en/default/search/form.html.tmpl
+++ b/template/en/default/search/form.html.tmpl
@@ -18,6 +18,7 @@
# Contributor(s): Chris Lahey <clahey@ximian.com> [javascript fixes]
# Christian Reis <kiko@async.com.br> [javascript rewrite]
# Gervase Markham <gerv@gerv.net>
+ # Guy Pyrzak <guy.pyrzak@gmail.com>
#%]
[% PROCESS "global/field-descs.none.tmpl" %]
@@ -103,6 +104,17 @@ function doOnSelectProduct(selectmode) {
}
}
+// Hide the Advanced Fields by default, unless the user has a cookie
+// that specifies otherwise.
+// &#9656; and &#9662; are both utf8 escaped characters for right
+// and down facing arrows respectivly.
+TUI_alternates['history_query'] = '&#9658;';
+TUI_alternates['people_query'] = '&#9658;';
+TUI_alternates['information_query'] = '&#9658;';
+
+TUI_hide_default('history_query');
+TUI_hide_default('people_query');
+TUI_hide_default('information_query');
</script>
[% query_types = [
@@ -122,389 +134,202 @@ function doOnSelectProduct(selectmode) {
[%# *** Summary *** %]
-<table>
- <tr>
- <th align="right">
- <label for="short_desc" accesskey="s"><u>S</u>ummary</label>:
- </th>
- <td>
- [% INCLUDE "search/type-select.html.tmpl"
- name = "short_desc_type",
- types = query_types, selected = default.short_desc_type.0 %]
- </td>
- <td>
- <input name="short_desc" id="short_desc" size="40"
- value="[% default.short_desc.0 FILTER html %]">
+ <div class="search_field_row" id="summary_field">
+ [% INCLUDE "search/field.html.tmpl"
+ field = bug_fields.short_desc
+ types = query_types
+ value = default.short_desc.0
+ type_selected = default.short_desc_type.0
+ accesskey = "s"
+ %]
<script type="text/javascript"> <!--
document.forms[queryform].short_desc.focus();
// -->
</script>
- </td>
- <td>
+
[% IF button_name %]
<input type="submit" id="[% button_name FILTER css_class_quote %]_top"
value="[% button_name FILTER html %]">
[% END %]
- </td>
- </tr>
+ </div>
-[%# *** Classification Product Component Version Target *** %]
- <tr>
- <td colspan="4">
- <table>
- <tr>
- [% Hook.process('before_selects_top') %]
- [% IF Param('useclassification') %]
- <td valign="top">
- <table>
- <tr valign="bottom">
- <th align="left">
- <label for="classification">Classification</label>:
- </th>
- </tr>
- <tr valign="top">
- <td align="left">
- <select name="classification" multiple="multiple" size="5" id="classification"
- onchange="doOnSelectProduct(1);">
- [% FOREACH cat = classification %]
- <option value="[% cat.name FILTER html %]"
- [% " selected" IF lsearch(default.classification, cat.name) != -1 %]>
- [% cat.name FILTER html %]
- </option>
- [% END %]
- </select>
- </td>
- </tr>
- </table>
- </td>
- [% END %]
- <td valign="top">
- <table>
- <tr valign="bottom">
- <th align="left">
- <label for="product" accesskey="p"><u>P</u>roduct</label>:
- </th>
- </tr>
- <tr valign="top">
- [%# Can't use the select block here because of the onChange %]
- <td align="left">
- <select name="product" multiple="multiple" size="5" id="product"
- onchange="doOnSelectProduct(2);">
- [% FOREACH p = product %]
- [% IF p.components.size %]
- <option value="[% p.name FILTER html %]"
- [% " selected" IF lsearch(default.product, p.name) != -1 %]>
- [% p.name FILTER html %]</option>
- [% END %]
- [% END %]
- </select>
- </td>
- </tr>
- </table>
- </td>
- <td valign="top">
- <table>
- <tr valign="bottom">
- <th align="left">
- <label for="component" accesskey="m"><a href="describecomponents.cgi">Co<u>m</u>ponent</a></label>:
- </th>
- </tr>
- <tr valign="top">
- [%# Can't use the select block here because 'component' is a toolkit
- reserved word - we use 'component_' instead. %]
- <td align="left">
- <select name="component" id="component"
- multiple="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>
- </tr>
- </table>
- </td>
- <td valign="top">
- <table>
- <tr valign="bottom">
- <th align="left">
- <label for="version">Version</label>:
- </th>
- </tr>
- <tr valign="top">
- [% PROCESS select sel = { name => 'version',
- size => 5 } %]
- </tr>
- </table>
- </td>
- [% IF Param('usetargetmilestone') %]
- <td valign="top">
- <table>
- <tr valign="bottom">
- <th align="left">
- <label for="target_milestone">Target</label>:
- </th>
- </tr>
- <tr valign="top">
- [% PROCESS select sel = { name => 'target_milestone',
- size => 5 } %]
- </tr>
- </table>
- </td>
- [% END %]
- [% Hook.process('after_selects_top') %]
- </tr>
- </table>
- </td>
- </tr>
+[%# *** Classification Product Component *** %]
+
+[% Hook.process('before_selects_top') %]
+[% IF Param('useclassification') %]
+ [% fake_classfication = { name => bug_fields.classification.name,
+ type => constants.FIELD_TYPE_SINGLE_SELECT } %]
+ [% INCLUDE "search/field.html.tmpl"
+ field => fake_classfication
+ accesskey => "c"
+ onchange => "doOnSelectProduct(1);"
+ value => default.classification
+ %]
+[% END %]
+[% INCLUDE "search/field.html.tmpl"
+ field => bug_fields.product
+ accesskey => "p"
+ onchange => "doOnSelectProduct(2);"
+ value => default.product
+%]
+[% INCLUDE "search/field.html.tmpl"
+ field => bug_fields.component
+ accesskey => "m"
+ value => default.component
+%]
+[% INCLUDE "search/field.html.tmpl"
+ field => bug_fields.bug_status
+ accesskey => "a"
+ value => default.bug_status
+%]
+[% INCLUDE "search/field.html.tmpl"
+ field => bug_fields.resolution
+ accesskey => "r"
+ value => default.resolution
+%]
+
+[% Hook.process('after_selects_top') %]
+
+<div id="detailed_information" class="bz_section_title">
+ <div id="information_query_controller" class="arrow">&#9660;</div>
+ <a href="javascript:TUI_toggle_class('information_query')">
+ Detailed [% terms.Bug %] Information
+ </a>
+ <span class="section_help">Narrow results by the following fields:
+ [%+ field_descs.longdesc FILTER html %]s, [%+ field_descs.bug_file_loc FILTER html %],
+ [% IF Param('usestatuswhiteboard') %] [%+ field_descs.status_whiteboard FILTER html %], [%+ END %]
+ [% IF use_keywords %] [%+ field_descs.keywords FILTER html %], [%+ END %]
+ [% IF user.is_timetracker %] [%+ field_descs.deadline FILTER html %], [%+ END %]
+ [% terms.Bug %] Numbers, [%+ field_descs.version FILTER html %],
+ [% IF Param('usetargetmilestone') %] [%+ field_descs.target_milestone FILTER html %], [%+ END %]
+ [% field_descs.bug_severity FILTER html %], [%+ field_descs.priority FILTER html %], [%+ field_descs.rep_platform FILTER html %],
+ [%+ field_descs.op_sys FILTER html %]
+ </span>
+</div>
[%# *** Comment URL Whiteboard Keywords *** %]
-
+<div id="detailed_information_section" class="bz_search_section information_query">
[% SET freetext_fields = [
- { name => "longdesc", description => "A&nbsp;<u>C</u>omment",
- accesskey => 'c' },
- { name => "bug_file_loc", description => "The&nbsp;<u>U</u>RL",
- accesskey => 'u' },
- { name => "status_whiteboard", description => "<u>W</u>hiteboard",
- accesskey => 'w' }
+ { field => bug_fields.longdesc, accesskey => 'c' },
+ { field => bug_fields.bug_file_loc, accesskey => 'u' },
+ { field => bug_fields.status_whiteboard, accesskey => 'w' },
+ { field => bug_fields.keywords, accesskey => 'k',
+ qtypes => ['allwords', 'anywords', 'nowords', 'regexp', 'notregexp'] }
] %]
-
[% Hook.process('before_freetext_fields') %]
- [% FOREACH field = freetext_fields %]
- [% NEXT IF field.name == 'status_whiteboard'
+
+ [%# loop through a bunch of free text fields and print out their text stuff %]
+ [% FOREACH field_container = freetext_fields %]
+ [% NEXT IF field_container.field.name == 'status_whiteboard'
AND NOT Param('usestatuswhiteboard')
%]
- <tr>
- <th align="right">
- <label for="[% field.name %]"
- accesskey="[% field.accesskey %]">[% field.description %]</label>:
- </th>
- <td>
- [% type = field.name _ "_type" %]
- [% INCLUDE "search/type-select.html.tmpl"
- name = type,
- types = query_types, selected = default.$type.0 %]
- </td>
- <td><input name="[% field.name %]" id="[% field.name %]" size="40"
- value="[% default.${field.name}.0 FILTER html %]">
- </td>
- <td></td>
- </tr>
- [% END %]
-
- [% IF use_keywords %]
- <tr>
- <th align="right">
- <label for="keywords" accesskey="k"><a href="describekeywords.cgi"><u>K</u>eywords</a></label>:
- </th>
- <td>
- [% INCLUDE "search/type-select.html.tmpl"
- name = "keywords_type",
- types = ['allwords', 'anywords', 'nowords', 'regexp', 'notregexp'],
- selected = default.keywords_type.0 %]
- </td>
- <td>
- <input name="keywords" id="keywords" size="40"
- value="[% default.keywords.0 FILTER html %]">
- </td>
- </tr>
+ [% NEXT IF field_container.field.name == 'keywords'
+ AND NOT use_keywords
+ %]
+ <div class="search_field_row">
+ [% type = field_container.field.name _ "_type" %]
+ [% INCLUDE "search/field.html.tmpl"
+ field => field_container.field
+ types => field_container.qtypes || query_types
+ accesskey => field_container.accesskey
+ value => default.${field_container.field.name}.0
+ type_selected => default.$type.0
+ %]
+ </div>
[% END %]
[%# Deadline %]
[% IF user.is_timetracker %]
- <tr>
- <th align="right">
- <label for="deadlinefrom" accesskey="l">Dead<u>l</u>ine</label>:
- </th>
- <td>
- from <input name="deadlinefrom" id="deadlinefrom" size="10" maxlength="10"
- value="[% default.deadlinefrom.0 FILTER html %]">
- to <input name="deadlineto" size="10" maxlength="10"
- value="[% default.deadlineto.0 FILTER html %]">
- </td>
- <td>
- <small>(YYYY-MM-DD or relative dates)</small>
- </td>
- </tr>
+ <div class="search_field_row">
+ [% INCLUDE "search/field.html.tmpl"
+ field = bug_fields.deadline
+ accesskey = "l"
+ value = [ default.deadlinefrom.0, default.deadlineto.0 ]
+ %]
+ </div>
[% END %]
+ <div class="search_field_row">
+ <span class="field_label"><label for="bug_id">[% terms.Bugs %] numbered</label></span>
+ <div id="bug_id_container" >
+ <input type="text" name="bug_id" id="bug_id"
+ value="[% default.bug_id.0 FILTER html %]" size="20">
+ <div class="field_help">(comma-separated list)</div>
+ </div>
+ should be
+ <select name="bug_id_type" id="bug_id_type">
+ <option value="anyexact"[% " selected" IF default.bug_id_type.0 == "anyexact" %]>only included in</option>
+ <option value="nowords"[% " selected" IF default.bug_id_type.0 == "nowords" %]>excluded from</option>
+ </select> the results
+ </div>
+
[% Hook.process('after_freetext_fields') %]
-</table>
-
-<hr>
-
-[%# *** Status Resolution Severity Priority Hardware OS *** %]
-
-<table>
- <tr>
+ [%# *** Status Resolution Severity Priority Hardware OS *** %]
+ <div>
[% Hook.process('before_selects_bottom') %]
- <td>
- <table>
- <tr>
- <th align="left">
- <label for="bug_status" accesskey="a">St<u>a</u>tus</label>:
- </th>
- </tr>
- <tr valign="top">
- [% PROCESS select sel = { name => 'bug_status',
- size => 7 } %]
- </tr>
- </table>
- </td>
- <td>
- <table>
- <tr>
- <th align="left">
- <label for="resolution" accesskey="r"><u>R</u>esolution</label>:
- </th>
- </tr>
- <tr valign="top">
- [% PROCESS select sel = { name => 'resolution',
- size => 7 } %]
- </tr>
- </table>
- </td>
- <td>
- <table>
- <tr>
- <th align="left">
- <label for="bug_severity">Severity</label>:
- </th>
- </tr>
- <tr valign="top">
- [% PROCESS select sel = { name => 'bug_severity',
- size => 7 }%]
- </tr>
- </table>
- </td>
- <td>
- <table>
- <tr>
- <th align="left">
- <label for="priority" accesskey="i">Pr<u>i</u>ority</label>:
- </th>
- </tr>
- <tr valign="top">
- [% PROCESS select sel = { name => 'priority',
- size => 7 } %]
- </tr>
- </table>
- </td>
- <td>
- <table>
- <tr>
- <th align="left">
- <label for="rep_platform" accesskey="h"><u>H</u>ardware</label>:
- </th>
- </tr>
- <tr valign="top">
- [% PROCESS select sel = { name => 'rep_platform',
- size => 7 } %]
- </tr>
- </table>
- </td>
- <td>
- <table>
- <tr>
- <th align="left">
- <label for="op_sys" accesskey="o"><u>O</u>S</label>:
- </th>
- </tr>
- <tr valign="top">
- [% PROCESS select sel = { name => 'op_sys',
- size => 7 } %]
- </tr>
- </table>
- </td>
+ [% fake_version_field = { name => bug_fields.version.name,
+ type => constants.FIELD_TYPE_SINGLE_SELECT }%]
+ [% INCLUDE "search/field.html.tmpl"
+ field => fake_version_field
+ value => default.version
+ %]
+ [% IF Param('usetargetmilestone') %]
+ [% fake_target_milestone_field = { name => bug_fields.target_milestone.name ,
+ type => constants.FIELD_TYPE_SINGLE_SELECT } %]
+ [% INCLUDE "search/field.html.tmpl"
+ field => fake_target_milestone_field
+ value => default.target_milestone
+ %]
+ [% END %]
+ [% INCLUDE "search/field.html.tmpl"
+ field => bug_fields.bug_severity
+ accesskey=> "v"
+ value => default.bug_severity
+ %]
+ [% INCLUDE "search/field.html.tmpl"
+ field => bug_fields.priority
+ accesskey => "i"
+ value => default.priority
+ %]
+ [% INCLUDE "search/field.html.tmpl"
+ field => bug_fields.rep_platform
+ accesskey =>"h"
+ value => default.rep_platform
+ %]
+ [% INCLUDE "search/field.html.tmpl"
+ field => bug_fields.op_sys
+ accesskey =>"o"
+ value => default.op_sys
+ %]
[% Hook.process('after_selects_bottom') %]
- </tr>
-</table>
-
-[%# *** Email Numbering Votes *** %]
-
-<table>
- <tr>
- <td>
- <fieldset>
- <legend>
- <strong>
- [% IF Param('usevotes') %]
- Email Addresses, [% terms.Bug %] Numbers, and Votes
- [% ELSE %]
- Email Addresses and [% terms.Bug %] Numbers
- [% END %]
- </strong>
- </legend>
-
-
-<table>
- <tr>
- [% FOREACH n = [1, 2] %]
- <td>
-
-
-<table cellspacing="0" cellpadding="0">
- <tr>
- <td>
+ </div>
+</div>
+[%# *** Email Numbering *** %]
+ <div class="bz_section_title" id="people_filter">
+ <div id="people_query_controller" class="arrow">&#9660;</div>
+ <a href="javascript:TUI_toggle_class('people_query')">Search By People</a>
+ <span>Narrow results to a role (i.e. [% field_descs.assigned_to FILTER html %],
+ [%+ field_descs.reporter FILTER html %], [% field_descs.commenter FILTER html %],
+ etc.) a person has on [% terms.abug %]
+ </span>
+ </div>
+ <div id="people_filter_section" class="bz_search_section people_query">
+ [% FOREACH n = [1, 2, 3] %]
+ <div class="search_email_fields">
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 %]">
- the [% terms.bug %] assignee
- </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 %]">
- the 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 %]">
- the 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 %]">
- a 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 %]">
- a commenter
- </label>
- </td>
- </tr>
- <tr>
- <td>
+ [% PROCESS role_types field = { count => n, name => "emailassigned_to",
+ label=> "the ${terms.Bug} ${field_descs.assigned_to}" } %]
+ [% PROCESS role_types field = { count => n, name => "emailreporter",
+ label=> "the ${field_descs.reporter}" } %]
+ [% IF Param('useqacontact') %]
+ [% PROCESS role_types field = { count => n, name => "emailqa_contact",
+ label=> "the ${field_descs.qa_contact}" } %]
+ [% END %]
+ [% PROCESS role_types field = { count => n, name => "emailcc",
+ label=> "a ${field_descs.cc} list member" } %]
+ [% PROCESS role_types field = { count => n, name => "emaillongdesc",
+ label=> " a ${field_descs.commenter}" } %]
<select name="emailtype[% n %]">
[% FOREACH qv = [
{ name => "substring", description => "contains" },
@@ -512,132 +337,87 @@ function doOnSelectProduct(selectmode) {
{ name => "notequals", description => "is not" },
{ name => "regexp", description => "matches regexp" },
{ name => "notregexp", description => "doesn'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="25" value="[% default.email.$n FILTER html %]">
- </td>
- </tr>
-</table>
-
-
- </td>
- [% END %]
- </tr>
-</table>
-<hr>
-<table>
- <tr>
- <td>
- <select name="bug_id_type">
- <option value="anyexact"[% " selected" IF default.bug_id_type.0 == "anyexact" %]>Only include</option>
- <option value="nowords"[% " selected" IF default.bug_id_type.0 == "nowords" %]>Exclude</option>
- </select>
- <label for="bug_id">[% terms.bugs %] numbered</label>:
- </td>
- <td>
- <input type="text" name="bug_id" id="bug_id"
- value="[% default.bug_id.0 FILTER html %]" size="20">
- </td>
- </tr>
- <tr>
- <td></td>
- <td>(comma-separated list)</td>
- </tr>
- [% IF Param('usevotes') %]
- <tr>
- <td align="right">
- <label for="votes">Only [% terms.bugs %] with at least</label>:
- </td>
- <td>
- <input name="votes" id="votes" size="3"
- value="[% default.votes.0 FILTER html %]">
- votes
- </td>
- </tr>
+ [% IF feature_enabled('jsonrpc') %]
+ <div id="email[% n %]_autocomplete">
+ [% END %]
+ <input name="email[% n %]" class="email" id="email[% n %]"
+ value="[% default.email.$n FILTER html %]">
+ [% IF feature_enabled('jsonrpc') %]
+ <div id="email[% n %]_autocomplete_container"></div>
+ </div>
+ <script type="text/javascript">
+ YAHOO.bugzilla.userAutocomplete.init( "email[% n %]",
+ "email[% n %]_autocomplete_container");
+ </script>
+ [% END %]
+ </div>
[% END %]
-</table>
-
-
- </fieldset>
- </td>
-
+ [% Hook.process('email_numbering_end') %]
+ </div>
[%# *** Bug Changes *** %]
-
- <td valign="top">
- <fieldset>
- <legend><strong>[% terms.Bug %] Changes</strong></legend>
-
-
-<dl class="bug_changes">
- <dt>
- <label for="chfieldfrom">Only [% terms.bugs %] changed between</label>:
- </dt>
- <dd>
- <input name="chfieldfrom" id="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 or relative dates)
- </dd>
- <dt>
- <label for="chfield">where one or more of the following changed</label>:
- </dt>
- <dd>
+<div class="bz_section_title" id="history_filter">
+ <div id="history_query_controller" class="arrow">&#9660;</div>
+ <a href="javascript:TUI_toggle_class('history_query')" >Search By Change History</a>
+ <span>Narrow results to how fields have changed during a specific time period</span>
+</div>
+<ul class="bug_changes bz_search_section history_query" id="history_filter_section" >
+ <li>
+ <label for="chfield">where ANY of the fields:</label>
[%# Create array, so we can sort it by description #%]
[% chfields = [] %]
[% FOREACH field = chfield %]
[% chfields.push({value => field, desc => (field_descs.$field || field) }) %]
[% END %]
-
<select name="chfield" id="chfield" multiple="multiple" size="4">
[% FOREACH field = chfields.sort('desc') %]
<option value="[% field.value FILTER html %]"
- [% " selected" IF lsearch(default.chfield, field.value) != -1 %]>
+ [% " selected" IF default.chfield.contains(field.value) %]>
[% field.desc FILTER html %]</option>
[% END %]
</select>
- </dd>
- <dt>and <label for="chfieldvalue">the new value was</label>:</dt>
- <dd>
+ </li>
+ <li>
+ <label for="chfieldvalue">[% search_descs.changedto FILTER html %]:</label>
<input name="chfieldvalue" id="chfieldvalue"
size="20" value="[% default.chfieldvalue.0 FILTER html %]">
- </dd>
-</dl>
-
- </fieldset>
- </td>
- </tr>
-</table>
+ </li>
+ <li>
+ <label for="chfieldfrom">between:</label>
+ <input name="chfieldfrom" id="chfieldfrom" size="10"
+ value="[% default.chfieldfrom.0 FILTER html %]" onchange="updateCalendarFromField(this)">
+ <button type="button" class="calendar_button"
+ id="button_calendar_chfieldfrom"
+ onclick="showCalendar('chfieldfrom')"><span>Calendar</span></button>
+ and
+ <div id="con_calendar_chfieldfrom"></div>
+ <input name="chfieldto" size="10" id="chfieldto"
+ value="[% default.chfieldto.0 FILTER html %]" onchange="updateCalendarFromField(this)">
+ <button type="button" class="calendar_button"
+ id="button_calendar_chfieldto"
+ onclick="showCalendar('chfieldto')"><span>Calendar</span></button>
+ <div id="con_calendar_chfieldto"></div>
+ (YYYY-MM-DD or relative dates)
+ <script type="text/javascript">
+ createCalendar('chfieldfrom');
+ createCalendar('chfieldto');
+ </script>
+ </li>
+</ul>
[%############################################################################%]
-[%# Block for SELECT fields #%]
+[%# Block for email role type use to select which email to search through #%]
[%############################################################################%]
-
-[% BLOCK select %]
- <td align="left">
- <select name="[% sel.name %]" id="[% sel.name %]"
- multiple="multiple" size="[% sel.size %]">
- [% FOREACH value = ${sel.name} %]
- [% IF value.id %]
- [%# This only applies for Resolution really %]
- [% v = value.name OR '---' -%]
- <option value="[% v FILTER html %]"
- [% " selected" IF lsearch(default.${sel.name}, v) != -1 %]>
- [% display_value(sel.name, value.name) FILTER html %]
- </option>
- [% ELSE %]
- <option value="[% value OR '---' FILTER html %]"
- [% " selected" IF lsearch(default.${sel.name}, value) != -1 %]>
- [% display_value(sel.name, value) FILTER html %]
- </option>
- [% END %]
- [% END %]
- </select>
- </td>
+[% BLOCK role_types %]
+ <div class="role_type">
+ <input type="checkbox" name="[% field.name _ field.count FILTER html %]"
+ id="[% field.name _ field.count FILTER html %]" value="1"
+ [% " checked" IF default.${field.name}.${field.count} %]>
+ <label for="[% field.name _ field.count FILTER html%]">
+ [% field.label FILTER html%]
+ </label>
+ </div>
[% END %]
diff --git a/template/en/default/search/search-advanced.html.tmpl b/template/en/default/search/search-advanced.html.tmpl
index cb0519a..ef7fa76 100644
--- a/template/en/default/search/search-advanced.html.tmpl
+++ b/template/en/default/search/search-advanced.html.tmpl
@@ -36,10 +36,11 @@ var queryform = "queryform"
[% PROCESS global/header.html.tmpl
title = "Search for $terms.bugs"
- onload = "doOnSelectProduct(0); enableHelp();"
+ onload = "doOnSelectProduct(0);"
javascript = js_data
- javascript_urls = [ "js/productform.js" "js/util.js" "js/help.js" ]
- style_urls = [ "skins/standard/help.css" ]
+ yui = [ 'autocomplete', 'calendar' ]
+ javascript_urls = [ "js/productform.js", "js/util.js", "js/TUI.js", "js/field.js"]
+ style_urls = [ "skins/standard/search_form.css" ]
doc_section = "query.html"
style = "dl.bug_changes dt {
margin-top: 15px;
@@ -50,30 +51,16 @@ var queryform = "queryform"
[% button_name = "Search" %]
-[%# The decent help requires Javascript %]
-<script type="text/javascript"> <!--
-[% IF NOT cgi.param("help") %]
- document.write("<p><a href='query.cgi?help=1&amp;format=advanced'>Give me some help<\/a> (reloads page).<\/p>");
-[% ELSE %]
- [% PROCESS "search/search-help.html.tmpl" %]
- if (generateHelp())
- document.write("<p>For help, mouse over the page elements.<\/p>");
- else
- document.write("<p>Help initialization failed, no help available.<\/p>");
-[% END %]
-// -->
-</script>
+<p id="search_help">Hover your mouse over each field label to get help for that field.</p>
-<form method="post" action="buglist.cgi" name="queryform">
+<form method="post" action="buglist.cgi" name="queryform" id="queryform">
[% PROCESS search/form.html.tmpl %]
-[% PROCESS search/knob.html.tmpl %]
-
-<hr>
-
[% PROCESS "search/boolean-charts.html.tmpl" %]
+[% PROCESS search/knob.html.tmpl %]
+
</form>
diff --git a/template/en/default/search/search-create-series.html.tmpl b/template/en/default/search/search-create-series.html.tmpl
index da1011e..c425fbd 100644
--- a/template/en/default/search/search-create-series.html.tmpl
+++ b/template/en/default/search/search-create-series.html.tmpl
@@ -33,8 +33,10 @@
[% PROCESS global/header.html.tmpl
title = "Create New Data Set"
onload = "doOnSelectProduct(0);"
+ yui = [ 'autocomplete', 'calendar' ]
javascript = js_data
- javascript_urls = [ "js/productform.js" ]
+ javascript_urls = [ "js/util.js", "js/productform.js", "js/TUI.js", "js/field.js" ]
+ style_urls = [ "skins/standard/search_form.css" ]
doc_section = "reporting.html#charts-new-series"
%]
@@ -52,6 +54,7 @@
[% PROCESS reports/series.html.tmpl
button_name = "Create Data Set" %]
<input type="hidden" name="action" value="create">
+ <input type="hidden" name="token" value="[% issue_hash_token(['create-series']) FILTER html %]">
<script type="text/javascript">
document.chartform.category[0].selected = true;
diff --git a/template/en/default/search/search-report-graph.html.tmpl b/template/en/default/search/search-report-graph.html.tmpl
index 61dd3b5..3c894cf 100644
--- a/template/en/default/search/search-report-graph.html.tmpl
+++ b/template/en/default/search/search-report-graph.html.tmpl
@@ -32,8 +32,10 @@ var queryform = "reportform"
[% PROCESS global/header.html.tmpl
title = "Generate Graphical Report"
onload = "doOnSelectProduct(0); chartTypeChanged()"
+ yui = [ 'autocomplete', 'calendar' ]
javascript = js_data
- javascript_urls = [ "js/productform.js" ]
+ javascript_urls = [ "js/util.js", "js/productform.js", "js/TUI.js", "js/field.js" ]
+ style_urls = [ "skins/standard/search_form.css" ]
doc_section = "reporting.html#reports"
%]
@@ -63,7 +65,7 @@ var queryform = "reportform"
[% button_name = "Generate Report" %]
-<form method="get" action="report.cgi" name="reportform">
+<form method="get" action="report.cgi" name="reportform" id="reportform">
<table align="center">
<tr>
@@ -128,14 +130,13 @@ var queryform = "reportform"
[% PROCESS search/form.html.tmpl %]
-<br>
-<input type="submit" id="[% button_name FILTER css_class_quote %]"
- value="[% button_name FILTER html %]">
-<input type="hidden" name="action" value="wrap">
-<hr>
-
[% PROCESS "search/boolean-charts.html.tmpl" %]
+ <div id="knob">
+ <input type="submit" id="[% button_name FILTER css_class_quote %]"
+ value="[% button_name FILTER html %]">
+ <input type="hidden" name="action" value="wrap">
+ </div>
</form>
[% PROCESS global/footer.html.tmpl %]
diff --git a/template/en/default/search/search-report-select.html.tmpl b/template/en/default/search/search-report-select.html.tmpl
index de64787..5e5db06 100644
--- a/template/en/default/search/search-report-select.html.tmpl
+++ b/template/en/default/search/search-report-select.html.tmpl
@@ -26,19 +26,15 @@
[% PROCESS "global/field-descs.none.tmpl" %]
[% BLOCK select %]
- [% rep_fields = ["classification", "product", "component", "version", "rep_platform",
- "op_sys", "bug_status", "resolution", "bug_severity",
- "priority", "target_milestone", "assigned_to",
- "reporter", "qa_contact", "votes" ] %]
+ [% Hook.process('rep_fields', 'search/search-report-select.html.tmpl') %]
<select name="[% name FILTER html %]">
<option value="">&lt;none&gt;</option>
- [% FOREACH field = rep_fields %]
+ [% FOREACH field = report_columns.keys.sort %]
[% NEXT IF field == "classification" AND !Param('useclassification') %]
[% NEXT IF field == "target_milestone" AND !Param('usetargetmilestone') %]
[% NEXT IF field == "qa_contact" AND !Param('useqacontact') %]
- [% NEXT IF field == "votes" AND !Param('usevotes') %]
<option value="[% field FILTER html %]"
[% " selected" IF default.$name.0 == field %]>
[% field_descs.$field || field FILTER html %]</option>
diff --git a/template/en/default/search/search-report-table.html.tmpl b/template/en/default/search/search-report-table.html.tmpl
index 55d62a1..7e087e7 100644
--- a/template/en/default/search/search-report-table.html.tmpl
+++ b/template/en/default/search/search-report-table.html.tmpl
@@ -32,8 +32,10 @@ var queryform = "reportform"
[% PROCESS global/header.html.tmpl
title = "Generate Tabular Report"
onload = "doOnSelectProduct(0)"
+ yui = [ 'autocomplete', 'calendar' ]
javascript = js_data
- javascript_urls = [ "js/productform.js" ]
+ javascript_urls = [ "js/util.js", "js/productform.js", "js/TUI.js", "js/field.js" ]
+ style_urls = [ "skins/standard/search_form.css" ]
doc_section = "reporting.html#reports"
%]
@@ -46,7 +48,7 @@ var queryform = "reportform"
[% button_name = "Generate Report" %]
-<form method="get" action="report.cgi" name="reportform">
+<form method="get" action="report.cgi" name="reportform" id="reportform">
<table align="center">
<tr>
@@ -78,17 +80,16 @@ var queryform = "reportform"
<hr>
-[% PROCESS search/form.html.tmpl %]
+ [% PROCESS search/form.html.tmpl %]
-<br>
-<input type="submit" id="[% button_name FILTER css_class_quote %]"
- value="[% button_name FILTER html %]">
-<input type="hidden" name="format" value="table">
-<input type="hidden" name="action" value="wrap">
-<hr>
-
-[% PROCESS "search/boolean-charts.html.tmpl" %]
+ [% PROCESS "search/boolean-charts.html.tmpl" %]
+ <div id="knob">
+ <input type="submit" id="[% button_name FILTER css_class_quote %]"
+ value="[% button_name FILTER html %]">
+ <input type="hidden" name="format" value="table">
+ <input type="hidden" name="action" value="wrap">
+ </div>
</form>
[% PROCESS global/footer.html.tmpl %]