Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
bugzilla
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
etersoft
bugzilla
Commits
9fd85730
Commit
9fd85730
authored
Jun 06, 2010
by
Guy Pyrzak
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 450301: What Simplify searching UI, initial improvements to the advanced search ui.
r=mkanat, a=mkanat
parent
99ad6a4e
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
511 additions
and
464 deletions
+511
-464
Query.pm
Bugzilla/Config/Query.pm
+1
-1
Search.pm
Bugzilla/Search.pm
+1
-1
TUI.js
js/TUI.js
+6
-5
IE-fixes.css
skins/standard/IE-fixes.css
+7
-0
search_form.css
skins/standard/search_form.css
+134
-0
field-label.html.tmpl
template/en/default/bug/field-label.html.tmpl
+5
-4
filterexceptions.pl
template/en/default/filterexceptions.pl
+0
-5
boolean-charts.html.tmpl
template/en/default/search/boolean-charts.html.tmpl
+3
-2
field.html.tmpl
template/en/default/search/field.html.tmpl
+118
-0
form.html.tmpl
template/en/default/search/form.html.tmpl
+226
-441
search-advanced.html.tmpl
template/en/default/search/search-advanced.html.tmpl
+4
-2
search-create-series.html.tmpl
template/en/default/search/search-create-series.html.tmpl
+2
-1
search-report-graph.html.tmpl
template/en/default/search/search-report-graph.html.tmpl
+2
-1
search-report-table.html.tmpl
template/en/default/search/search-report-table.html.tmpl
+2
-1
No files found.
Bugzilla/Config/Query.pm
View file @
9fd85730
...
...
@@ -64,7 +64,7 @@ sub get_param_list {
{
name
=>
'defaultquery'
,
type
=>
't'
,
default
=>
'bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailassigned_to1=1&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailqa_contact2=1&order=Importance&long_desc_type=substring'
default
=>
'bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailassigned_to1=1&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailqa_contact2=1&
emaillongdesc3=1&
order=Importance&long_desc_type=substring'
},
{
...
...
Bugzilla/Search.pm
View file @
9fd85730
...
...
@@ -372,7 +372,7 @@ sub init {
}
}
foreach
my
$id
(
"1"
,
"2"
)
{
foreach
my
$id
(
1
,
2
,
3
)
{
if
(
!
defined
(
$params
->
param
(
"email$id"
)))
{
next
;
}
...
...
js/TUI.js
View file @
9fd85730
...
...
@@ -68,6 +68,7 @@ function TUI_hide_default(className) {
function
_TUI_toggle_control_link
(
className
)
{
var
link
=
document
.
getElementById
(
className
+
"_controller"
);
if
(
!
link
)
return
;
var
original_text
=
link
.
innerHTML
;
link
.
innerHTML
=
TUI_alternates
[
className
];
TUI_alternates
[
className
]
=
original_text
;
...
...
@@ -93,14 +94,14 @@ function _TUI_store(aClass, state) {
}
function
_TUI_restore
()
{
var
classes
=
YAHOO
.
util
.
Cookie
.
getSubs
(
TUI_COOKIE_NAME
);
for
(
item
in
classes
)
{
if
(
classes
[
item
]
==
0
)
{
var
elements
=
YAHOO
.
util
.
Dom
.
getElementsByClassName
(
item
);
var
yui_
classes
=
YAHOO
.
util
.
Cookie
.
getSubs
(
TUI_COOKIE_NAME
);
for
(
yui_item
in
yui_
classes
)
{
if
(
yui_classes
[
yui_
item
]
==
0
)
{
var
elements
=
YAHOO
.
util
.
Dom
.
getElementsByClassName
(
yui_
item
);
for
(
var
i
=
0
;
i
<
elements
.
length
;
i
++
)
{
YAHOO
.
util
.
Dom
.
addClass
(
elements
[
i
],
'bz_tui_hidden'
);
}
_TUI_toggle_control_link
(
item
);
_TUI_toggle_control_link
(
yui_
item
);
}
}
}
...
...
skins/standard/IE-fixes.css
View file @
9fd85730
...
...
@@ -44,3 +44,9 @@ form#Create #comp_desc {
#footer
.links
{
display
:
inline
;
}
#bug_id_container
,
.search_field_grid
,
.search_email_fields
,
ul
.bug_changes
li
{
zoom
:
1
;
display
:
inline
;
}
\ No newline at end of file
skins/standard/search_form.css
0 → 100644
View file @
9fd85730
/* 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>
*/
#bug_id_container
{
display
:
inline-block
;
vertical-align
:
middle
;
}
.search_field_grid
{
margin-top
:
1em
;
display
:
inline-block
;
}
.search_field_grid
.field_help_link
,
.history_query
.field_help_link
{
display
:
block
;
text-align
:
left
;
}
#chart
.section_help
{
font-size
:
0.8em
;
font-weight
:
normal
}
#bug_id_container
.field_help
{
font-size
:
0.75em
}
.search_field_row
{
display
:
block
;
padding
:
0.5ex
0
;
vertical-align
:
top
;
}
.search_field_grid
label
{
display
:
block
;
}
.search_field_grid
select
{
width
:
17em
;
height
:
15ex
;
}
.search_field_grid
,
.search_field_row
{
padding-left
:
1.5em
;
}
.search_email_fields
{
display
:
inline-block
;
width
:
14.5em
;
padding-left
:
1.5em
;
}
ul
.bug_changes
{
margin
:
0
;
padding
:
0
;
}
ul
.bug_changes
li
{
display
:
inline-block
;
width
:
14.5em
;
vertical-align
:
top
;
padding-left
:
1.5em
;
}
ul
.bug_changes
select
{
width
:
15em
;
}
ul
.bug_changes
li
label
{
display
:
block
;
}
div
.bz_section_title
{
display
:
block
;
margin-top
:
2em
;
font-size
:
1.2em
;
}
div
.bz_section_title
a
{
font-weight
:
bold
;
}
div
.bz_section_title
span
{
font-size
:
0.75em
;
margin-left
:
1em
;
}
#summary_field
{
margin
:
0
;
padding
:
0
;
}
#summary_field
label
{
margin-right
:
2em
;
font-weight
:
bold
;
display
:
inline
;
}
.hide_people_filter
#people_filter_section
,
.hide_history_filter
#history_filter_section
,
.hide_detailed_information
#detailed_information_section
{
display
:
none
;
}
.arrow
{
display
:
inline
;
width
:
16px
;
height
:
16px
;
}
.bz_search_section
,
ul
.bz_search_section
{
margin-top
:
1em
;
}
\ No newline at end of file
template/en/default/bug/field-label.html.tmpl
View file @
9fd85730
...
...
@@ -23,14 +23,15 @@
# desc_url: An alternate link to help for the field.
# hidden: True if the field label should start hidden.
# rowspan: a "rowspan" value for the label's <th>.
# tag_name: the tag to use to surround the label
#%]
[% PROCESS "bug/field-help.none.tmpl" %]
<
th
class="field_label [% ' bz_hidden_field' IF hidden %]
[% DEFAULT tag_name = "th" %]
<
[% tag_name %]
class="field_label [% ' bz_hidden_field' IF hidden %]
[%- ' required' IF field.is_mandatory %]"
id="field_label_[% field.name FILTER html %]"
[% IF rowspan %] rowspan="[% rowspan FILTER html %]"[% END %]>
[% IF rowspan
> 0
%] rowspan="[% rowspan FILTER html %]"[% END %]>
[% IF editable %]
<label for="[% field.name FILTER html %]">
...
...
@@ -49,4 +50,4 @@
>[%- field_descs.${field.name} FILTER html %]:</a>
[% '</label>' IF editable %]
</
th
>
</
[% tag_name %]
>
template/en/default/filterexceptions.pl
View file @
9fd85730
...
...
@@ -59,7 +59,6 @@
'search/boolean-charts.html.tmpl'
=>
[
'"field${chartnum}-${rownum}-${colnum}"'
,
'"value${chartnum}-${rownum}-${colnum}"'
,
'field.name'
,
'"${chartnum}-${rownum}-${newor}"'
,
'"${chartnum}-${newand}-0"'
,
...
...
@@ -70,10 +69,6 @@
'search/form.html.tmpl'
=>
[
'qv.name'
,
'qv.description'
,
'field.name'
,
'field.description'
,
'field.accesskey'
,
'sel.name'
,
],
'search/search-specific.html.tmpl'
=>
[
...
...
template/en/default/search/boolean-charts.html.tmpl
View file @
9fd85730
...
...
@@ -50,7 +50,9 @@
] %]
<h3 id="chart">
Advanced Searching Using Boolean Charts
Custom Search <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>
</h3>
[%# Whoever wrote the original version of boolean charts had a seriously twisted mind %]
...
...
@@ -87,7 +89,6 @@
[% 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 %]">
</td>
...
...
template/en/default/search/field.html.tmpl
0 → 100644
View file @
9fd85730
[%# 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>
#
#%]
[%# 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_DATETIME %]
[% INCLUDE "bug/field-label.html.tmpl"
field = field
tag_name = "span"
editable = 1
%]
from <input name="[% field.name %]from"
id="[% field.name %]"
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>
<div id="con_calendar_[% field.name FILTER html %]"></div>
to <input name="[% field.name %]to"
id="[% field.name %]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>
<div id="con_calendar_[% field.name FILTER html %]to"></div>
<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 %]
\ No newline at end of file
template/en/default/search/form.html.tmpl
View file @
9fd85730
...
...
@@ -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.
// ▸ and ▾ are both utf8 escaped characters for right
// and down facing arrows respectivly.
TUI_alternates['history_query'] = '►';
TUI_alternates['people_query'] = '►';
TUI_alternates['information_query'] = '►';
TUI_hide_default('history_query');
TUI_hide_default('people_query');
TUI_hide_default('information_query');
</script>
[% query_types = [
...
...
@@ -122,383 +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 *** %]
[%# *** Comment URL Whiteboard Keywords *** %]
[% 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"
onchange => "doOnSelectProduct(2);"
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">▼</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 %]s, [%+ field_descs.bug_file_loc %],
[% IF Param('usestatuswhiteboard') %] [%+ field_descs.status_whiteboard %], [%+ END %]
[% IF use_keywords %] [%+ field_descs.keywords %], [%+ END %]
[% IF user.is_timetracker %] [%+ field_descs.deadline %], [%+ END %]
[% terms.Bug %] Numbers, [%+ field_descs.version %],
[% IF Param('usetargetmilestone') %] [%+ field_descs.target_milestone %], [%+ END %]
[% field_descs.bug_severity %], [%+ field_descs.priority%], [%+ field_descs.rep_platform %],
[%+ field_descs.op_sys %]
</span>
</div>
[%# *** Comment URL Whiteboard Keywords *** %]
<div id="detailed_information_section" class="bz_search_section information_query">
[% SET freetext_fields = [
{ name => "longdesc", description => "A <u>C</u>omment",
accesskey => 'c' },
{ name => "bug_file_loc", description => "The <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 %]
[% Hook.process('after_freetext_fields') %]
</table>
<hr>
<div class="search_field_row">
<label for="bug_id">[% terms.Bugs %] numbered</label>
<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">
<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>
[%# *** Status Resolution Severity Priority Hardware OS ***
%]
[% Hook.process('after_freetext_fields')
%]
<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>
</div>
</div>
[%# *** Email Numbering *** %]
<table>
<tr>
<td>
<fieldset>
<legend>
<strong>Email Addresses and [% terms.Bug %] Numbers</strong>
</legend>
<table>
<tr>
[% FOREACH n = [1, 2] %]
<td>
<table cellspacing="0" cellpadding="0">
<tr>
<td>
<div class="bz_section_title" id="people_filter">
<div id="people_query_controller" class="arrow">▼</div>
<a href="javascript:TUI_toggle_class('people_query')">Search By People</a>
<span>Narrow results to a role (ie. [% field_descs.assigned_to%], [% field_descs.reporter %],
[% field_descs.commenter %], etc.) a person has on a [% terms.bug %]
</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>
[% 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') %]
<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>
[% PROCESS role_types field = { count => n, name => "emailqa_contact",
label=> "the ${field_descs.qa_contact}" } %]
[% 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 => "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" },
...
...
@@ -506,121 +337,75 @@ 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>
<input name="email[% n %]" class="email" id="email[% n %]" value="[% default.email.$n FILTER html %]">
</div>
[% 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>
[% Hook.process('email_numbering_end') %]
</table>
</fieldset>
</td>
</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">▼</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 %]:</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 %]
template/en/default/search/search-advanced.html.tmpl
View file @
9fd85730
...
...
@@ -38,8 +38,10 @@ var queryform = "queryform"
title = "Search for $terms.bugs"
onload = "doOnSelectProduct(0); enableHelp();"
javascript = js_data
javascript_urls = [ "js/productform.js" "js/util.js" "js/help.js" ]
style_urls = [ "skins/standard/help.css" ]
javascript_urls = [ "js/yui/calendar.js", "js/productform.js", "js/util.js",
"js/help.js" , "js/TUI.js", "js/field.js"]
style_urls = [ "skins/standard/help.css" , "skins/standard/search_form.css",
"skins/standard/yui/calendar.css" ]
doc_section = "query.html"
style = "dl.bug_changes dt {
margin-top: 15px;
...
...
template/en/default/search/search-create-series.html.tmpl
View file @
9fd85730
...
...
@@ -34,7 +34,8 @@
title = "Create New Data Set"
onload = "doOnSelectProduct(0);"
javascript = js_data
javascript_urls = [ "js/productform.js" ]
javascript_urls = [ "js/yui/calendar.js", "js/productform.js", "js/TUI.js", "js/field.js" ]
style_urls = [ "skins/standard/yui/calendar.css", "skins/standard/search_form.css" ]
doc_section = "reporting.html#charts-new-series"
%]
...
...
template/en/default/search/search-report-graph.html.tmpl
View file @
9fd85730
...
...
@@ -33,7 +33,8 @@ var queryform = "reportform"
title = "Generate Graphical Report"
onload = "doOnSelectProduct(0); chartTypeChanged()"
javascript = js_data
javascript_urls = [ "js/productform.js" ]
javascript_urls = [ "js/yui/calendar.js", "js/productform.js", "js/TUI.js", "js/field.js" ]
style_urls = [ "skins/standard/yui/calendar.css", "skins/standard/search_form.css" ]
doc_section = "reporting.html#reports"
%]
...
...
template/en/default/search/search-report-table.html.tmpl
View file @
9fd85730
...
...
@@ -33,7 +33,8 @@ var queryform = "reportform"
title = "Generate Tabular Report"
onload = "doOnSelectProduct(0)"
javascript = js_data
javascript_urls = [ "js/productform.js" ]
javascript_urls = [ "js/yui/calendar.js", "js/productform.js", "js/TUI.js", "js/field.js" ]
style_urls = [ "skins/standard/yui/calendar.css", "skins/standard/search_form.css" ]
doc_section = "reporting.html#reports"
%]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment