--- Revision 569 +++ Revision 570 @@ -17,7 +17,8 @@ delay: 0.2, // Delay before running ajax request shadow: false, // Shadow theme name (false = no shadow) highlight: false, // Highlight search string in list - tokens: false // Tokens used to automatically adds a new entry (ex tokens:[',', ' '] for coma and spaces) + tokens: false, // Tokens used to automatically adds a new entry (ex tokens:[',', ' '] for coma and spaces) + unique: true // Do not display in suggestion a selected value }, initialize: function(element, options) { @@ -82,7 +83,7 @@ else this.hideAutocomplete().fire("input:empty"); - return this.fire("element:added", {element: li}); + return this.fire("element:added", {element: li, text: text, value: value}); }, remove: function(element) { @@ -298,7 +299,7 @@ this.autocompletionContainer.hide(); this.fire("request:started"); - new Ajax.Request(this.options.url, {parameters: {search: search, max: this.options.max.selection}, onComplete: function(transport) { + new Ajax.Request(this.options.url, {parameters: {search: search, max: this.options.max.selection, "selected[]": this.selectedValues()}, onComplete: function(transport) { this.setAutocompleteList(transport.responseText.evalJSON()); this.timer = null; this.fire("request:completed"); @@ -418,8 +419,14 @@ this.message.hide(); if (this.options.url) this.selectedList = this.list; - else + else { this.selectedList = this.list.findAll(function(entry) {return entry.text.match(value)}).slice(0, this.options.max.selection); + if (this.options.unique) { + var selected= this.selectedValues(); + if (! selected.empty()) + this.selectedList = this.selectedList.findAll(function(entry) {return !selected.include(entry.value)}); + } + } this.autocompletionContainer.update(""); if (this.selectedList.empty()) { this.hideAutocomplete().fire('selection:empty'); @@ -514,6 +521,11 @@ updateHiddenField: function() { var separator = this.options.tokens ? this.options.tokens.first() : " "; this.hidden.value = this.selectedText ? $A([this.selectedText, this.input.value]).join(separator) : this.input.value; + }, + + selectedValues: function() { + var selected = this.container.select("li." + this.getClassName("box")); + return selected.collect(function(element) {return element.readAttribute("pui-autocomplete:value")}); } });