blob: d5a8af6b271a162457778b099f61a3680efca274 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
if (!window.RT) window.RT = {}
if (!window.RT.Autocomplete) window.RT.Autocomplete = {}
window.RT.Autocomplete.bind = function(from) {
var cssClassMap = {
Users: 'user',
Groups: 'group',
Tickets: 'tickets'
};
jQuery("input[data-autocomplete]", from).each(function(){
var input = jQuery(this);
var what = input.attr("data-autocomplete");
var wants = input.attr("data-autocomplete-return");
if (!what || !what.match(/^(Users|Groups|Tickets)$/)) // Did you update cssClassMap above?
return;
// Don't re-bind the autocompleter
if (input.data("ui-autocomplete"))
return;
var queryargs = [];
var options = {
source: RT.Config.WebHomePath + "/Helpers/Autocomplete/" + what
};
if ( wants ) {
queryargs.push("return=" + wants);
}
if (input.is('[data-autocomplete-privileged]')) {
queryargs.push("privileged=1");
}
if (input.is('[data-autocomplete-multiple]')) {
if ( what != 'Tickets' ) {
queryargs.push("delim=,");
}
options.focus = function () {
// prevent value inserted on focus
return false;
}
options.select = function(event, ui) {
var terms = this.value.split(what == 'Tickets' ? /\s+/ : /,\s*/);
terms.pop(); // remove current input
terms.push( ui.item.value ); // add selected item
if ( what == 'Tickets' ) {
// remove non-integers in case subject search with spaces in (like "foo bar")
terms = jQuery.grep(terms, function(term) {
var str = term + ''; // stringify integers to call .match
return str.match(/^\d+$/);
} );
}
terms.push(''); // add trailing delimeter so user can input another value directly
this.value = terms.join(what == 'Tickets' ? ' ' : ", ");
return false;
}
}
var exclude = input.attr('data-autocomplete-exclude');
if (exclude) {
queryargs.push("exclude="+exclude);
}
if (queryargs.length)
options.source += "?" + queryargs.join("&");
input.addClass('autocompletes-' + cssClassMap[what] )
.autocomplete(options)
.data("ui-autocomplete")
._renderItem = function(ul, item) {
var rendered = jQuery("<a/>");
if (item.html == null)
rendered.text( item.label );
else
rendered.html( item.html );
return jQuery("<li/>")
.data( "item.autocomplete", item )
.append( rendered )
.appendTo( ul );
};
});
};
jQuery(function(){ RT.Autocomplete.bind(document) });
|