Index: setup.py
===================================================================
--- setup.py (revision 12686)
+++ setup.py (working copy)
@@ -10,12 +10,12 @@
from setuptools import find_packages, setup
-version='0.4.2'
+version='0.4.5'
setup(name='AutocompleteUsers',
version=version,
description="complete the known trac users, AJAX style",
- author='Jeff Hammel',
+ author='Jeff Hammel & Mario Wehr',
author_email='jhammel@openplans.org',
maintainer = 'Ryan J Ollos',
maintainer_email = 'ryano@physiosonics.com',
Index: autocompleteusers/htdocs/css/autocomplete.css
===================================================================
--- autocompleteusers/htdocs/css/autocomplete.css (revision 12686)
+++ autocompleteusers/htdocs/css/autocomplete.css (working copy)
@@ -1,4 +1,16 @@
-.ac_results {
+.ui-autocomplete-loading {
+ background:url('indicator.gif') no-repeat right center
+}
+
+.ui-autocomplete.ui-menu{
+ padding: 0px;
+ border: 1px solid black;
+ background-color: white;
+ overflow: hidden;
+ z-index: 99999;
+ }
+
+.ui-autocomplete-results {
padding: 0px;
border: 1px solid black;
background-color: white;
@@ -6,14 +18,14 @@
z-index: 99999;
}
-.ac_results ul {
+.ui-autocomplete-results ul {
list-style-position: outside;
list-style: none;
padding: 0;
margin: 0;
}
-.ac_results li {
+.ui-autocomplete-results li {
margin: 0px;
padding: 2px 5px;
cursor: default;
@@ -34,20 +46,17 @@
white-space: nowrap;
}
-.ac_results li div.mail {
+li div.mail {
font-size: 80%;
color: #888;
}
-.ac_loading {
- background: white url('indicator.gif') right center no-repeat;
-}
-
-.ac_odd {
+.ui-autocomplete-results li.ui-autocomplete-odd{
background-color: #eee;
}
-.ac_over {
+.ui-autocomplete-over {
background-color: #ffd;
color: #000;
}
+
Index: autocompleteusers/htdocs/js/autocomplete_newticket.js
===================================================================
--- autocompleteusers/htdocs/js/autocomplete_newticket.js (revision 12686)
+++ autocompleteusers/htdocs/js/autocomplete_newticket.js (working copy)
@@ -1,5 +1,15 @@
jQuery(document).ready(function($) {
- $("#field-owner").autocomplete("subjects", {
- formatItem: formatItem
- });
+ $("#field-owner").autocomplete({
+ source: function( request, response ) {
+ $.ajax({
+ url: "subjects",
+ type: "GET",
+ dataType: "text",
+ data: 'q=' + request.term ,
+ success: function( data ) {
+ response( $.map( data.split("\n"), formatItem ));
+ }
+ });
+ }
+ });
});
\ No newline at end of file
Index: autocompleteusers/htdocs/js/autocomplete_newticket_cc.js
===================================================================
--- autocompleteusers/htdocs/js/autocomplete_newticket_cc.js (revision 12686)
+++ autocompleteusers/htdocs/js/autocomplete_newticket_cc.js (working copy)
@@ -1,10 +1,46 @@
jQuery(document).ready(function($) {
- $("#field-cc").autocomplete("subjects", {
- multiple: true,
- formatItem: formatItem,
- delay: 100
- });
- $("input:text#field-reporter").autocomplete("subjects", {
- formatItem: formatItem
- });
-});
\ No newline at end of file
+ $("#field-cc").autocomplete({
+ source: function( request, response ) {
+ $.ajax({
+ url: "subjects",
+ type: "GET",
+ dataType: "text",
+ data: 'q=' + extractLast( request.term ) ,
+ success: function( data ) {
+ response( $.map( data.split("\n"), formatItem ));
+ }
+ });
+ },
+
+ select: function( event, ui ) {
+ var terms = split( this.value );
+ // remove the current input
+ terms.pop();
+ // add the selected item
+ terms.push( ui.item.value );
+ // add placeholder to get the comma-and-space at the end
+ terms.push( "" );
+ this.value = terms.join( "," );
+ return false;
+ }
+ }).data("autocomplete")._renderItem = function (ul, item) {
+ return $( "
" )
+ .data('item.autocomplete', item)
+ .append( "" + item.label + "
" + item.desc + "
" )
+ .appendTo( ul );
+ };
+ $("input:text#field-reporter").autocomplete({
+ source: function( request, response ) {
+ $.ajax({
+ url: "subjects",
+ type: "GET",
+ dataType: "text",
+ data: 'q=' + request.term ,
+ success: function( data ) {
+ response( $.map( data.split("\n"), formatItem ));
+ }
+ });
+ }
+ });
+});
+
Index: autocompleteusers/htdocs/js/autocomplete_ticket.js
===================================================================
--- autocompleteusers/htdocs/js/autocomplete_ticket.js (revision 12686)
+++ autocompleteusers/htdocs/js/autocomplete_ticket.js (working copy)
@@ -1,5 +1,15 @@
jQuery(document).ready(function($) {
- $("[id$=reassign_owner]").autocomplete("../subjects", {
- formatItem: formatItem
- });
+ $("[id$=action_changeowner_reassign_owner]").autocomplete({
+ source: function( request, response ) {
+ $.ajax({
+ url: "../subjects",
+ type: "GET",
+ dataType: "text",
+ data: 'q=' + request.term ,
+ success: function( data ) {
+ response( $.map( data.split("\n"), formatItem ));
+ }
+ });
+ }
+ });
});
\ No newline at end of file
Index: autocompleteusers/htdocs/js/format_item.js
===================================================================
--- autocompleteusers/htdocs/js/format_item.js (revision 12686)
+++ autocompleteusers/htdocs/js/format_item.js (working copy)
@@ -1,5 +1,16 @@
function formatItem(row) {
- var firstLine = (row[2]) ? row[0] + " (" + row[2] + ")" : row[0];
- return "" + firstLine + "
"
- + (row[1] ? "" + row[1] + "
" : '');
-}
+ var array = row.split('|');
+ return {
+ label : (array[2]) ? array[0] + " (" + array[2] + ")" : array[0],
+ value : array[0],
+ desc : (array[1]) ? array[1] : "no results"
+ }
+};
+
+function split( val ) {
+ return val.split( /\s*[,;]\s*/ );
+ }
+
+function extractLast( term ) {
+ return split( term ).pop();
+}
\ No newline at end of file
Index: autocompleteusers/htdocs/js/autocomplete_perms.js
===================================================================
--- autocompleteusers/htdocs/js/autocomplete_perms.js (revision 12686)
+++ autocompleteusers/htdocs/js/autocomplete_perms.js (working copy)
@@ -1,11 +1,41 @@
-$(document).ready(function() {
- $("#gp_subject").autocomplete("../../subjects?groups=1", {
- formatItem: formatItem
+jQuery(document).ready(function($) {
+ $("#gp_subject").autocomplete({
+ source: function( request, response ) {
+ $.ajax({
+ url: "../../subjects?groups=1",
+ type: "GET",
+ dataType: "text",
+ data: 'q=' + request.term ,
+ success: function( data ) {
+ response( $.map( data.split("\n"), formatItem ));
+ }
+ });
+ }
});
- $("#sg_subject").autocomplete("../../subjects?groups=1", {
- formatItem: formatItem
+ $("#sg_subject").autocomplete({
+ source: function( request, response ) {
+ $.ajax({
+ url: "../../subjects?groups=1",
+ type: "GET",
+ dataType: "text",
+ data: 'q=' + request.term ,
+ success: function( data ) {
+ response( $.map( data.split("\n"), formatItem ));
+ }
+ });
+ }
});
- $("#sg_group").autocomplete("../../subjects?groups=1&users=0", {
- formatItem: formatItem
+ $("#sg_group").autocomplete({
+ source: function( request, response ) {
+ $.ajax({
+ url: "../../subjects?groups=1&users=0",
+ type: "GET",
+ dataType: "text",
+ data: 'q=' + request.term ,
+ success: function( data ) {
+ response( $.map( data.split("\n"), formatItem ));
+ }
+ });
+ }
});
});
Index: autocompleteusers/htdocs/js/autocomplete_ticket_cc.js
===================================================================
--- autocompleteusers/htdocs/js/autocomplete_ticket_cc.js (revision 12686)
+++ autocompleteusers/htdocs/js/autocomplete_ticket_cc.js (working copy)
@@ -1,9 +1,45 @@
jQuery(document).ready(function($) {
- $("#field-cc").autocomplete("../subjects", {
- multiple: true,
- formatItem: formatItem
- });
- $("input:text#field-reporter").autocomplete("../subjects", {
- formatItem: formatItem
- });
-});
\ No newline at end of file
+ $("#field-cc").autocomplete({
+ source: function( request, response ) {
+ $.ajax({
+ url: "../subjects",
+ type: "GET",
+ dataType: "text",
+ data: 'q=' + extractLast( request.term ) ,
+ success: function( data ) {
+ response( $.map( data.split("\n"), formatItem ));
+ }
+ });
+ },
+ select: function( event, ui ) {
+ var terms = split( this.value );
+ // remove the current input
+ terms.pop();
+ // add the selected item
+ terms.push( ui.item.value );
+ // add placeholder to get the comma-and-space at the end
+ terms.push( "" );
+ this.value = terms.join( "," );
+ return false;
+ }
+ }).data("autocomplete")._renderItem = function (ul, item) {
+ return $( "" )
+ .data('item.autocomplete', item)
+ .append( "" + item.label + "
" + item.desc + "
" )
+ .appendTo( ul );
+ };
+ $("input:text#field-reporter").autocomplete({
+ source: function( request, response ) {
+ $.ajax({
+ url: "../subjects",
+ type: "GET",
+ dataType: "text",
+ data: 'q=' + request.term ,
+ success: function( data ) {
+ response( $.map( data.split("\n"), formatItem ));
+ }
+ });
+ }
+ });
+});
+
Index: autocompleteusers/autocompleteusers.py
===================================================================
--- autocompleteusers/autocompleteusers.py (revision 12686)
+++ autocompleteusers/autocompleteusers.py (working copy)
@@ -37,7 +37,7 @@
if req.args.get('users', '1') == '1':
users = self._get_users(req)
subjects = ['%s|%s|%s' % (user[USER],
- user[EMAIL] and '<%s> ' % user[EMAIL] or '',
+ user[EMAIL] and '%s' % user[EMAIL] or '',
user[NAME])
for value, user in users] # value unused (placeholder needed for sorting)
@@ -63,13 +63,13 @@
return handler
def post_process_request(self, req, template, data, content_type):
- if template in ('ticket.html', 'admin_perms.html', 'query.html'):
+ if template in ('ticket.html', 'admin_perms.html', 'query.html', 'admin_svnpolicies.html'):
add_stylesheet(req, 'autocomplete/css/autocomplete.css')
- add_script(req, 'autocomplete/js/autocomplete.js')
add_script(req, 'autocomplete/js/format_item.js')
+ add_script(req, 'autocomplete/js/format_item.js')
if template == 'ticket.html':
restrict_owner = self.env.config.getbool('ticket', 'restrict_owner')
- if req.path_info.rstrip() == '/newticket':
+ if req.path_info.rstrip() == '/newticket':
add_script(req, 'autocomplete/js/autocomplete_newticket_cc.js')
if not restrict_owner:
add_script(req, 'autocomplete/js/autocomplete_newticket.js')
@@ -79,9 +79,13 @@
add_script(req, 'autocomplete/js/autocomplete_ticket.js')
elif template == 'admin_perms.html':
add_script(req, 'autocomplete/js/autocomplete_perms.js')
+ add_script(req, 'common/js/jquery-ui.js')
elif template == 'query.html':
add_script(req, 'autocomplete/js/autocomplete_query.js')
-
+ elif template == 'admin_svnpolicies.html':
+ add_script(req, 'common/js/jquery-ui.js')
+ add_script(req, 'autocomplete/js/autocomplete_admin_svnpolicies_recp_list.js')
+
return template, data, content_type
# ITemplateStreamFilter methods