Browse Source

Add useLabels setting, and add templated text values for when not using labels in multiselect

pull/2169/head
jlukic 10 years ago
parent
commit
475fb9bf93
2 changed files with 55 additions and 22 deletions
  1. 4
      src/definitions/behaviors/api.js
  2. 73
      src/definitions/modules/dropdown.js

4
src/definitions/behaviors/api.js

@ -892,8 +892,8 @@ $.api.settings = {
}, },
regExp : { regExp : {
required: /\{\$*[A-z0-9]+\}/g,
optional: /\{\/\$*[A-z0-9]+\}/g,
required : /\{\$*[A-z0-9]+\}/g,
optional : /\{\/\$*[A-z0-9]+\}/g,
}, },
className: { className: {

73
src/definitions/modules/dropdown.js

@ -166,10 +166,8 @@ $.fn.dropdown = function(parameters) {
search: function() { search: function() {
var var
query
query = module.get.query()
; ;
query = $search.val();
module.verbose('Searching for query', query); module.verbose('Searching for query', query);
module.filter(query); module.filter(query);
if(module.is.searchSelection() && module.can.show() ) { if(module.is.searchSelection() && module.can.show() ) {
@ -179,6 +177,7 @@ $.fn.dropdown = function(parameters) {
select: { select: {
firstUnfiltered: function() { firstUnfiltered: function() {
module.verbose('Selecting first non-filtered element');
module.remove.selectedItem(); module.remove.selectedItem();
$item $item
.not('.' + className.filtered) .not('.' + className.filtered)
@ -313,8 +312,8 @@ $.fn.dropdown = function(parameters) {
; ;
if( module.can.show() && !module.is.active() ) { if( module.can.show() && !module.is.active() ) {
module.debug('Showing dropdown'); 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() { module.animate.show(function() {
if( module.can.click() ) { if( module.can.click() ) {
@ -530,20 +529,16 @@ $.fn.dropdown = function(parameters) {
if(module.is.multiple()) { if(module.is.multiple()) {
module.filterActive(); module.filterActive();
} }
module.verbose('Selecting first non-filtered element');
module.select.firstUnfiltered(); module.select.firstUnfiltered();
if( module.is.allFiltered() ) { if( module.is.allFiltered() ) {
if( settings.onNoResults.call(element, searchTerm) ) { 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); module.add.message(message.noResults);
} }
} }
else { else {
module.debug('All items filtered, hiding dropdown', searchTerm);
module.verbose('All items filtered, hiding dropdown', searchTerm);
module.hideMenu(); module.hideMenu();
} }
} }
@ -959,6 +954,9 @@ $.fn.dropdown = function(parameters) {
else if(selectedIsVisible) { else if(selectedIsVisible) {
module.verbose('Enter key pressed, choosing selected item'); module.verbose('Enter key pressed, choosing selected item');
module.event.item.click.call($selectedItem, event); module.event.item.click.call($selectedItem, event);
if(!settings.useLabels) {
module.remove.searchTerm();
}
event.stopImmediatePropagation(); event.stopImmediatePropagation();
} }
event.preventDefault(); event.preventDefault();
@ -1167,6 +1165,9 @@ $.fn.dropdown = function(parameters) {
text: function() { text: function() {
return $text.text(); return $text.text();
}, },
query: function() {
return $search.val();
},
uniqueArray: function(array) { uniqueArray: function(array) {
return $.grep(array, function (value, index) { return $.grep(array, function (value, index) {
return $.inArray(value, array) === index; return $.inArray(value, array) === index;
@ -1439,7 +1440,7 @@ $.fn.dropdown = function(parameters) {
isSearch = module.is.searchSelection(), isSearch = module.is.searchSelection(),
isSearchMultiple = (isMultiple && isSearch), isSearchMultiple = (isMultiple && isSearch),
searchValue = (isSearch) searchValue = (isSearch)
? $search.val()
? module.get.query()
: '', : '',
hasSearchValue = (typeof searchValue === 'string' && searchValue.length > 0), hasSearchValue = (typeof searchValue === 'string' && searchValue.length > 0),
searchWidth = (searchValue.length * settings.glyphWidth) + 'em', searchWidth = (searchValue.length * settings.glyphWidth) + 'em',
@ -1641,12 +1642,16 @@ $.fn.dropdown = function(parameters) {
if(isNotActive) { if(isNotActive) {
if(settings.useLabels) { if(settings.useLabels) {
module.add.label(selectedValue, selectedText, shouldAnimate); 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.filterActive();
module.select.nextAvailable($selectedItem); 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) { else if(isVisible) {
module.remove.selected(selectedValue); module.remove.selected(selectedValue);
@ -1706,6 +1711,28 @@ $.fn.dropdown = function(parameters) {
$message = $(html) $message = $(html)
.appendTo($menu) .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') .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 $selectedItem
.removeClass(className.filtered) .removeClass(className.filtered)
@ -2343,6 +2375,7 @@ $.fn.dropdown.settings = {
message: { message: {
addResult : 'Add <b>{term}</b>', addResult : 'Add <b>{term}</b>',
count : '{count} selected',
noResults : 'No results found.' noResults : 'No results found.'
}, },
@ -2353,8 +2386,8 @@ $.fn.dropdown.settings = {
noTransition : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>' noTransition : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>'
}, },
regExp: {
escape: /[-[\]{}()*+?.,\\^$|#\s]/g
regExp : {
escape : /[-[\]{}()*+?.,\\^$|#\s]/g,
}, },
metadata : { metadata : {

Loading…
Cancel
Save