diff --git a/src/definitions/behaviors/api.js b/src/definitions/behaviors/api.js
index d51a64a13..223a43f3e 100644
--- a/src/definitions/behaviors/api.js
+++ b/src/definitions/behaviors/api.js
@@ -892,8 +892,8 @@ $.api.settings = {
},
regExp : {
- required: /\{\$*[A-z0-9]+\}/g,
- optional: /\{\/\$*[A-z0-9]+\}/g,
+ required : /\{\$*[A-z0-9]+\}/g,
+ optional : /\{\/\$*[A-z0-9]+\}/g,
},
className: {
diff --git a/src/definitions/modules/dropdown.js b/src/definitions/modules/dropdown.js
index f75cb00b3..489178eca 100644
--- a/src/definitions/modules/dropdown.js
+++ b/src/definitions/modules/dropdown.js
@@ -166,10 +166,8 @@ $.fn.dropdown = function(parameters) {
search: function() {
var
- query
+ query = module.get.query()
;
- query = $search.val();
-
module.verbose('Searching for query', query);
module.filter(query);
if(module.is.searchSelection() && module.can.show() ) {
@@ -179,6 +177,7 @@ $.fn.dropdown = function(parameters) {
select: {
firstUnfiltered: function() {
+ module.verbose('Selecting first non-filtered element');
module.remove.selectedItem();
$item
.not('.' + className.filtered)
@@ -313,8 +312,8 @@ $.fn.dropdown = function(parameters) {
;
if( module.can.show() && !module.is.active() ) {
module.debug('Showing dropdown');
- if(module.is.multiple() && module.is.searchSelection()) {
- module.filterActive();
+ if(module.is.multiple() && !module.has.search() && module.is.allFiltered()) {
+ return true;
}
module.animate.show(function() {
if( module.can.click() ) {
@@ -530,20 +529,16 @@ $.fn.dropdown = function(parameters) {
if(module.is.multiple()) {
module.filterActive();
}
- module.verbose('Selecting first non-filtered element');
module.select.firstUnfiltered();
if( module.is.allFiltered() ) {
if( settings.onNoResults.call(element, searchTerm) ) {
- module.debug('All items filtered, showing error', searchTerm);
- if(settings.allowAdditions == true || settings.allowAdditions == 'missing') {
- module.add.message(message.noResults, data);
- }
- else {
+ if(!settings.allowAdditions) {
+ module.verbose('All items filtered, showing message', searchTerm);
module.add.message(message.noResults);
}
}
else {
- module.debug('All items filtered, hiding dropdown', searchTerm);
+ module.verbose('All items filtered, hiding dropdown', searchTerm);
module.hideMenu();
}
}
@@ -959,6 +954,9 @@ $.fn.dropdown = function(parameters) {
else if(selectedIsVisible) {
module.verbose('Enter key pressed, choosing selected item');
module.event.item.click.call($selectedItem, event);
+ if(!settings.useLabels) {
+ module.remove.searchTerm();
+ }
event.stopImmediatePropagation();
}
event.preventDefault();
@@ -1167,6 +1165,9 @@ $.fn.dropdown = function(parameters) {
text: function() {
return $text.text();
},
+ query: function() {
+ return $search.val();
+ },
uniqueArray: function(array) {
return $.grep(array, function (value, index) {
return $.inArray(value, array) === index;
@@ -1439,7 +1440,7 @@ $.fn.dropdown = function(parameters) {
isSearch = module.is.searchSelection(),
isSearchMultiple = (isMultiple && isSearch),
searchValue = (isSearch)
- ? $search.val()
+ ? module.get.query()
: '',
hasSearchValue = (typeof searchValue === 'string' && searchValue.length > 0),
searchWidth = (searchValue.length * settings.glyphWidth) + 'em',
@@ -1641,12 +1642,16 @@ $.fn.dropdown = function(parameters) {
if(isNotActive) {
if(settings.useLabels) {
module.add.label(selectedValue, selectedText, shouldAnimate);
- // move keyboard pointer to next element
+ module.set.value(selectedValue, selectedText, $selected);
+ $selected.addClass(className.active);
module.filterActive();
module.select.nextAvailable($selectedItem);
}
- module.set.value(selectedValue, selectedText, $selected);
- $selected.addClass(className.active);
+ else {
+ module.set.value(selectedValue, selectedText, $selected);
+ module.set.text(module.add.variables(message.count))
+ $selected.addClass(className.active);
+ }
}
else if(isVisible) {
module.remove.selected(selectedValue);
@@ -1706,6 +1711,28 @@ $.fn.dropdown = function(parameters) {
$message = $(html)
.appendTo($menu)
;
+ },
+ variables: function(message) {
+ var
+ hasCount = (message.search('{count}') !== -1),
+ hasTerm = (message.search('{term}') !== -1),
+ values,
+ count,
+ query
+ ;
+ if(hasCount) {
+ values = module.get.values();
+ count = $.isArray(values)
+ ? values.length
+ : 1
+ ;
+ message = message.replace('{count}', count);
+ }
+ if(hasTerm) {
+ query = module.get.query();
+ message = message.replace('{term}', query);
+ }
+ return message;
}
},
@@ -1760,8 +1787,13 @@ $.fn.dropdown = function(parameters) {
.trigger('change')
;
}
- if(module.is.multiple() && settings.useLabels) {
- module.remove.label(selectedValue);
+ if(module.is.multiple()) {
+ if(settings.useLabels) {
+ module.remove.label(selectedValue);
+ }
+ else {
+ module.set.text(module.add.variables(message.count))
+ }
}
$selectedItem
.removeClass(className.filtered)
@@ -2343,6 +2375,7 @@ $.fn.dropdown.settings = {
message: {
addResult : 'Add {term}',
+ count : '{count} selected',
noResults : 'No results found.'
},
@@ -2353,8 +2386,8 @@ $.fn.dropdown.settings = {
noTransition : 'This module requires ui transitions '
},
- regExp: {
- escape: /[-[\]{}()*+?.,\\^$|#\s]/g
+ regExp : {
+ escape : /[-[\]{}()*+?.,\\^$|#\s]/g,
},
metadata : {