Blame view

sources/apps/contacts/js/jquery.multi-autocomplete.js 2.7 KB
923852aa1   Kload   Official Owncloud...
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
90
91
92
93
94
  /**
   * Inspired by http://jqueryui.com/demos/autocomplete/#multiple
   */
  
  (function( $ ) {
  	$.widget('ui.multiple_autocomplete', {
  		_create: function() {
  			var self = this;
  			function split( val ) {
  				return val.split( /,\s*/ );
  			}
  			function extractLast( term ) {
  				return split( term ).pop();
  			}
  			function showOptions() {
  				if(!self.element.autocomplete('widget').is(':visible') && self.element.val().trim() == '') {
  					self.element.autocomplete('search', '');
  				}
  			}
  			//console.log('_create: ' + this.options['id']);
  			this.element.bind('click', function( event ) {
  				showOptions();
  			});
  			this.element.bind('input', function( event ) {
  				showOptions();
  			});
  			this.element.bind('blur', function( event ) {
  				var tmp = self.element.val().trim();
  				if(tmp[tmp.length-1] == ',') {
  					self.element.val(tmp.substring(0, tmp.length-1));
  				} else {
  					self.element.val(tmp);
  				}
  				if(self.element.val().trim() != '') {
  					self.element.trigger('change'); // Changes wasn't saved when only using the dropdown.
  				}
  			});
  			this.element.bind( "keydown", function( event ) {
  				if ( event.keyCode === $.ui.keyCode.TAB &&
  						$( this ).data( "autocomplete" ).menu.active ) {
  					event.preventDefault();
  				}
  			})
  			.autocomplete({
  				minLength: 0,
  				source: function( request, response ) {
  					// delegate back to autocomplete, but extract the last term
  					response( $.ui.autocomplete.filter(
  						self.options.source, extractLast( request.term ) ) );
  				},
  				focus: function() {
  					// prevent value inserted on focus
  					return false;
  				},
  				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;
  				}
  			});
  			/*this.button = $( "<button type='button'>&nbsp;</button>" )
  				.attr( "tabIndex", -1 )
  				.attr( "title", "Show All Items" )
  				.insertAfter( this.element )
  				.addClass('svg')
  				.addClass('action')
  				.addClass('combo-button')
  				.click(function() {
  					// close if already visible
  					if ( self.element.autocomplete( "widget" ).is( ":visible" ) ) {
  						self.element.autocomplete( "close" );
  						return;
  					}
  
  					// work around a bug (likely same cause as #5265)
  					$( this ).blur();
  
  					var tmp = self.element.val().trim();
  					if(tmp[tmp.length-1] != ',') {
  						self.element.val(tmp+', ');
  					}
  					// pass empty string as value to search for, displaying all results
  					self.element.autocomplete( "search", "" );
  					self.element.focus();
  				});*/
  		},
  	});
  })( jQuery );