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 {