diff --git a/index.php b/index.php index ba3076f9..f084bb13 100644 --- a/index.php +++ b/index.php @@ -37,7 +37,7 @@ OCP\Util::addscript('calendar', 'calendar'); OCP\Util::addStyle('calendar', 'style'); OCP\Util::addscript('', 'jquery.multiselect'); OCP\Util::addStyle('', 'jquery.multiselect'); -OCP\Util::addscript('contacts','jquery.multi-autocomplete'); +OCP\Util::addscript('calendar','jquery.multi-autocomplete'); OCP\Util::addscript('','oc-vcategories'); OCP\Util::addscript('calendar','on-event'); OCP\App::setActiveNavigationEntry('calendar_index'); diff --git a/js/jquery.multi-autocomplete.js b/js/jquery.multi-autocomplete.js new file mode 100644 index 00000000..5516a74b --- /dev/null +++ b/js/jquery.multi-autocomplete.js @@ -0,0 +1,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 = $( "" ) + .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 );