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-67ecbb4d7f56
master
akrasilnikov 2013-09-13 12:57:28 +00:00
parent f94b7fdaf6
commit 98df1a5388
3 changed files with 101 additions and 4 deletions

View File

@ -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');

View File

@ -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);
}

View File

@ -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>&nbsp;</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">