Bug 129375 - Add filter in top of bug list
git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@1795 6955db30-a419-402b-8a0d-67ecbb4d7f56master
parent
f94b7fdaf6
commit
98df1a5388
|
@ -869,6 +869,8 @@ my $search = new Bugzilla::Search('fields' => \@selectcolumns,
|
|||
'order' => \@orderstrings);
|
||||
my $query = $search->getSQL();
|
||||
$vars->{search_description} = $search->search_description_html;
|
||||
my $H = { %{ $params->Vars } };
|
||||
$vars->{list_params} = $H;
|
||||
|
||||
if (defined $cgi->param('limit')) {
|
||||
my $limit = $cgi->param('limit');
|
||||
|
|
41
js/global.js
41
js/global.js
|
@ -179,7 +179,7 @@ function userAutocomplete(hint, emptyOptions)
|
|||
|
||||
|
||||
// Convert keyword list from API format for SimpleAutocomplete
|
||||
function convertKeywordList(k)
|
||||
function convertSimpleList(k)
|
||||
{
|
||||
var data = [];
|
||||
for (var i = 0; i < k.length; i++)
|
||||
|
@ -198,7 +198,7 @@ function keywordAutocomplete(hint, emptyOptions)
|
|||
{
|
||||
hint.emptyText = 'Type at least 3 letters';
|
||||
if (emptyOptions)
|
||||
hint.replaceItems(convertKeywordList(emptyOptions));
|
||||
hint.replaceItems(convertSimpleList(emptyOptions));
|
||||
else
|
||||
hint.replaceItems(null);
|
||||
return;
|
||||
|
@ -220,7 +220,7 @@ function keywordAutocomplete(hint, emptyOptions)
|
|||
try { eval('r = '+x.responseText+';'); } catch (e) { return; }
|
||||
if (r.status == 'ok')
|
||||
{
|
||||
var data = convertKeywordList(r.keywords);
|
||||
var data = convertSimpleList(r.keywords);
|
||||
// FIXME "3" constant, messages: remove hardcode, also in Bugzilla::User::match()
|
||||
if (data.length == 0 && hint.input.value.length < 3)
|
||||
hint.emptyText = 'Type at least 3 letters';
|
||||
|
@ -238,4 +238,37 @@ function keywordAutocomplete(hint, emptyOptions)
|
|||
u += '&match='+encodeURI(l[i]);
|
||||
x.open('GET', u);
|
||||
x.send(null);
|
||||
}
|
||||
}
|
||||
|
||||
// Data loader for field in buglist autocomplete
|
||||
function fieldBuglistAutocomplete(hint, field, emptyOptions)
|
||||
{
|
||||
var x;
|
||||
if (window.XMLHttpRequest)
|
||||
x = new XMLHttpRequest();
|
||||
else
|
||||
{
|
||||
try { x = new ActiveXObject("Msxml2.XMLHTTP"); }
|
||||
catch (e) { x = new ActiveXObject("Microsoft.XMLHTTP"); }
|
||||
}
|
||||
x.onreadystatechange = function()
|
||||
{
|
||||
if (x.readyState == 4)
|
||||
{
|
||||
var r = {};
|
||||
try { eval('r = '+x.responseText+';'); } catch (e) { return; }
|
||||
if (r.status == 'ok')
|
||||
{
|
||||
var data = convertSimpleList(r.values);
|
||||
hint.replaceItems(data);
|
||||
}
|
||||
}
|
||||
};
|
||||
var u = window.location.href.replace(/[^\/]+$/, '');
|
||||
u += 'xml.cgi?method=Field.get_values&output=json&field=' + field;
|
||||
x.open('GET', u);
|
||||
x.send(null);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -50,7 +50,16 @@
|
|||
[%############################################################################%]
|
||||
|
||||
[% tableheader = BLOCK %]
|
||||
<form id="filter_form">
|
||||
<table class="bz_buglist sortable" cellspacing="0" cellpadding="4" width="100%">
|
||||
<tr>
|
||||
[% i = lsearch(order_columns, 'bug_id') %]
|
||||
<td><input type="button" value="Apply" id="usr_filter_submit" /></td>
|
||||
[% FOREACH id = displaycolumns %]
|
||||
[% column = columns.$id %]
|
||||
[% PROCESS columnheaderfilter key=loop.count() %]
|
||||
[% END %]
|
||||
</tr>
|
||||
<thead>
|
||||
<tr class="bz_buglist_header bz_first_buglist_header">
|
||||
[% IF dotweak %]
|
||||
|
@ -124,6 +133,34 @@
|
|||
</th>
|
||||
[% END %]
|
||||
|
||||
|
||||
[% BLOCK columnheaderfilter %]
|
||||
[% i = lsearch(order_columns, id) %]
|
||||
[% idd = id %]
|
||||
[% type = Bugzilla.get_field(id).type %]
|
||||
[% IF id == "bug_severity" || id == "priority" || id == "bug_status" || id == "resolution" %]
|
||||
<td>
|
||||
<input type="text" value="[% list_params.$id.join(",") %]" name="[% id %]" id="usr_filter_[% id %]"
|
||||
style="width: 1px; height: 1px; border: 0px; margin-top: -5px; display: block;" />
|
||||
|
||||
<script type="text/javascript">
|
||||
var emptyOptions[% id %] = [];
|
||||
var filter_[% id %] = null;
|
||||
addListener(window, 'load', function() {
|
||||
filter_[% id %] = new SimpleAutocomplete("usr_filter_[% id %]",
|
||||
function(h) { fieldBuglistAutocomplete(h, "[% id %]", emptyOptions[% id %]); },
|
||||
{ emptyText: 'No keywords found', multipleDelimiter: "," }
|
||||
);
|
||||
});
|
||||
</script>
|
||||
<a href="#" onclick="filter_[% id %].show(); return false;">Filter</a>
|
||||
</td>
|
||||
[% ELSE %]
|
||||
<td> </td>
|
||||
[% END %]
|
||||
[% END %]
|
||||
|
||||
|
||||
[% BLOCK new_order %]
|
||||
[% desc = '' %]
|
||||
[% IF (om = order.match("\\b$id( DESC)?")) %]
|
||||
|
@ -230,6 +267,31 @@
|
|||
[% END %]
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
addListener('usr_filter_submit', 'click', function (e) {
|
||||
var filter_form = document.getElementById('filter_form');
|
||||
var inputs = filter_form.getElementsByTagName('input');
|
||||
var length = inputs.length;
|
||||
[% editqueryname = searchname OR defaultsavename OR '' %]
|
||||
var href = "buglist.cgi?[% urlquerypart %][% IF editqueryname != '' %]&known_name=[% editqueryname | url_quote %][% END %]&order=[% order %]";
|
||||
for (var i = 0; i < length; i++)
|
||||
{
|
||||
if (this.id != inputs[i].id)
|
||||
{
|
||||
var removeOldParams = new RegExp("(^|/?|&)" + inputs[i].name + "=[^&]*", 'ig');
|
||||
href = href.replace(removeOldParams, "");
|
||||
var new_values = inputs[i].value.split(",");
|
||||
for(var j = 0; j < new_values.length; j++)
|
||||
{
|
||||
href += "&" + inputs[i].name.trim() + "=" + new_values[j].trim();
|
||||
}
|
||||
}
|
||||
}
|
||||
window.location.href = href;
|
||||
});
|
||||
</script>
|
||||
|
||||
[% BLOCK time_summary_line %]
|
||||
<tr class="bz_time_summary_line">
|
||||
|
|
Loading…
Reference in New Issue