assets/javascripts/semantic_ui/definitions/modules/dropdown.js in less-rails-semantic_ui-2.0.0.0 vs assets/javascripts/semantic_ui/definitions/modules/dropdown.js in less-rails-semantic_ui-2.0.2.0
- old
+ new
@@ -265,11 +265,10 @@
},
layout: function() {
if( $module.is('select') ) {
module.setup.select();
module.setup.returnedObject();
- console.log($module);
}
if( module.is.search() && !module.has.search() ) {
module.verbose('Adding search input');
$search = $('<input />')
.addClass(className.search)
@@ -313,11 +312,10 @@
$input
.removeAttr('class')
.detach()
.prependTo($module)
;
- console.log($module);
}
if($input.is('[multiple]')) {
module.set.multiple();
}
module.refresh();
@@ -473,11 +471,11 @@
touchEvents: function() {
module.debug('Touch device detected binding additional touch events');
if( module.is.searchSelection() ) {
// do nothing special yet
}
- else {
+ else if( module.is.single() ) {
$module
.on('touchstart' + eventNamespace, module.event.test.toggle)
;
}
$menu
@@ -494,24 +492,26 @@
}
if( module.is.searchSelection() ) {
$module
.on('mousedown' + eventNamespace, selector.menu, module.event.menu.mousedown)
.on('mouseup' + eventNamespace, selector.menu, module.event.menu.mouseup)
+ .on('click' + eventNamespace, selector.icon, module.event.icon.click)
.on('click' + eventNamespace, selector.search, module.show)
.on('focus' + eventNamespace, selector.search, module.event.search.focus)
.on('blur' + eventNamespace, selector.search, module.event.search.blur)
.on('click' + eventNamespace, selector.text, module.event.text.focus)
;
if(module.is.multiple()) {
$module
- .on('click' + eventNamespace, module.event.click)
+ .on('click' + eventNamespace, module.event.click)
;
}
}
else {
if(settings.on == 'click') {
$module
+ .on('click' + eventNamespace, selector.icon, module.event.icon.click)
.on('click' + eventNamespace, module.event.test.toggle)
;
}
else if(settings.on == 'hover') {
$module
@@ -779,11 +779,11 @@
click: function(event) {
var
$target = $(event.target)
;
// focus search
- if(($target.is($module) || $target.is($icon)) && !module.is.focusedOnSearch()) {
+ if($target.is($module) && !module.is.focusedOnSearch()) {
module.focusSearch();
}
},
blur: function(event) {
pageLostFocus = (document.activeElement === this);
@@ -823,10 +823,16 @@
module.hide();
}
}
}
},
+ icon: {
+ click: function(event) {
+ module.toggle();
+ event.stopPropagation();
+ }
+ },
text: {
focus: function(event) {
activated = true;
module.focusSearch();
}
@@ -955,11 +961,13 @@
hasSubMenu = ($subMenu.length > 0),
isBubbledEvent = ($subMenu.find($target).length > 0)
;
if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {
if(!settings.useLabels) {
+ module.remove.filteredItem();
module.remove.searchTerm();
+ module.set.scrollPosition($choice);
}
module.determine.selectAction.call(this, text, value);
}
}
},
@@ -1094,38 +1102,34 @@
? $currentlySelected
: $activeItem,
$visibleItems = ($selectedItem.length > 0)
? $selectedItem.siblings(':not(.' + className.filtered +')').andSelf()
: $menu.children(':not(.' + className.filtered +')'),
- $subMenu = $selectedItem.children(selector.menu),
- $parentMenu = $selectedItem.closest(selector.menu),
- inVisibleMenu = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),
- hasSubMenu = ($subMenu.length> 0),
- hasSelectedItem = ($selectedItem.length > 0),
- selectedIsVisible = ($selectedItem.not(selector.unselectable).length > 0),
+ $subMenu = $selectedItem.children(selector.menu),
+ $parentMenu = $selectedItem.closest(selector.menu),
+ inVisibleMenu = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),
+ hasSubMenu = ($subMenu.length> 0),
+ hasSelectedItem = ($selectedItem.length > 0),
+ selectedIsSelectable = ($selectedItem.not(selector.unselectable).length > 0),
$nextItem,
isSubMenuItem,
newIndex
;
// visible menu keyboard shortcuts
if( module.is.visible() ) {
// enter (select or open sub-menu)
if(pressedKey == keys.enter || pressedKey == keys.delimiter) {
-
if(pressedKey == keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {
module.verbose('Pressed enter on unselectable category, opening sub menu');
pressedKey = keys.rightArrow;
}
- else if(selectedIsVisible) {
+ else if(selectedIsSelectable) {
module.verbose('Selecting item from keyboard shortcut', $selectedItem);
module.event.item.click.call($selectedItem, event);
- if(settings.useLabels && module.is.searchSelection()) {
- module.hideAndClear();
- }
- else {
+ if(module.is.searchSelection()) {
module.remove.searchTerm();
}
}
event.preventDefault();
}
@@ -1265,15 +1269,20 @@
else {
module.error(error.action, settings.action);
}
},
eventInModule: function(event, callback) {
+ var
+ $target = $(event.target),
+ inDocument = ($target.closest(document.documentElement).length > 0),
+ inModule = ($target.closest($module).length > 0)
+ ;
callback = $.isFunction(callback)
? callback
: function(){}
;
- if( $(event.target).closest($module).length === 0 ) {
+ if(inDocument && !inModule) {
module.verbose('Triggering event', callback);
callback();
return true;
}
else {
@@ -1281,17 +1290,19 @@
return false;
}
},
eventOnElement: function(event, callback) {
var
- $target = $(event.target)
+ $target = $(event.target),
+ notOnLabel = ($target.closest(selector.siblingLabel).length === 0),
+ notInMenu = ($target.closest($menu).length === 0)
;
callback = $.isFunction(callback)
? callback
: function(){}
;
- if($target.closest($menu).length === 0) {
+ if(notOnLabel && notInMenu) {
module.verbose('Triggering event', callback);
callback();
return true;
}
else {
@@ -1675,10 +1686,11 @@
}
},
restore: {
defaults: function() {
+ module.clear();
module.restore.defaultText();
module.restore.defaultValue();
},
defaultText: function() {
var
@@ -2011,27 +2023,34 @@
}
}
},
selectedLetter: function(letter) {
var
- $selectedItem = $item.filter('.' + className.selected),
- $nextValue = false
+ $selectedItem = $item.filter('.' + className.selected),
+ alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter),
+ $nextValue = false,
+ $nextItem
;
- $item
- .each(function(){
- var
- $choice = $(this),
- text = module.get.choiceText($choice, false),
- firstLetter = String(text).charAt(0).toLowerCase(),
- matchedLetter = letter.toLowerCase()
- ;
- if(firstLetter == matchedLetter) {
- $nextValue = $choice;
- return false;
- }
- })
- ;
+ // check next of same letter
+ if(alreadySelectedLetter) {
+ $nextItem = $selectedItem.nextAll($item).eq(0);
+ if( module.has.firstLetter($nextItem, letter) ) {
+ $nextValue = $nextItem;
+ }
+ }
+ // check all values
+ if(!$nextValue) {
+ $item
+ .each(function(){
+ if(module.has.firstLetter($(this), letter)) {
+ $nextValue = $(this);
+ return false;
+ }
+ })
+ ;
+ }
+ // set next value
if($nextValue) {
module.verbose('Scrolling to next value with letter', letter);
module.set.scrollPosition($nextValue);
$selectedItem.removeClass(className.selected);
$nextValue.addClass(className.selected);
@@ -2145,12 +2164,12 @@
$selected.addClass(className.active);
module.filterActive();
module.select.nextAvailable($selectedItem);
}
else {
- module.add.value(selectedValue, selectedText, $selected);
module.set.text(module.add.variables(message.count));
+ module.add.value(selectedValue, selectedText, $selected);
$selected.addClass(className.active);
}
}
else if(!isFiltered) {
module.debug('Selected active value, removing label');
@@ -2159,12 +2178,12 @@
}
else {
if(settings.apiSettings && settings.saveRemoteData) {
module.save.remoteData(selectedText, selectedValue);
}
- module.set.value(selectedValue, selectedText, $selected);
module.set.text(selectedText);
+ module.set.value(selectedValue, selectedText, $selected);
$selected
.addClass(className.active)
.addClass(className.selected)
;
}
@@ -2540,13 +2559,29 @@
has: {
search: function() {
return ($search.length > 0);
},
+ firstLetter: function($item, letter) {
+ var
+ text,
+ firstLetter
+ ;
+ if(!$item || $item.length === 0 || typeof letter !== 'string') {
+ return false;
+ }
+ text = module.get.choiceText($item, false);
+ letter = letter.toLowerCase();
+ firstLetter = String(text).charAt(0).toLowerCase();
+ return (letter == firstLetter);
+ },
input: function() {
return ($input.length > 0);
},
+ items: function() {
+ return ($item.length > 0);
+ },
menu: function() {
return ($menu.length > 0);
},
message: function() {
return ($menu.children(selector.message).length !== 0);
@@ -2588,10 +2623,13 @@
return ($subMenu)
? $subMenu.transition && $subMenu.transition('is animating')
: $menu.transition && $menu.transition('is animating')
;
},
+ disabled: function() {
+ $module.hasClass(className.disabled);
+ },
focused: function() {
return (document.activeElement === $module[0]);
},
focusedOnSearch: function() {
return (document.activeElement === $search[0]);
@@ -2699,11 +2737,11 @@
can: {
click: function() {
return (hasTouch || settings.on == 'click');
},
show: function() {
- return !$module.hasClass(className.disabled) && $item.length > 0;
+ return !module.is.disabled() && (module.has.items() || module.has.message());
},
useAPI: function() {
return $.fn.api !== undefined;
}
},
@@ -2809,11 +2847,14 @@
}
}
},
hideAndClear: function() {
+ module.remove.searchTerm();
+ if( module.has.maxSelections() ) {
+ return;
+ }
if(module.has.search()) {
- module.remove.searchTerm();
module.hide(function() {
module.remove.filteredItem();
});
}
else {