Skip to content

Commit

Permalink
fix(dropdown): keep original values, also on remove and more fixes
Browse files Browse the repository at this point in the history
Fixed the following issues:

-  preset values inside an already existing hidden dropdown input field containing characters like < > " ' were encoded during setup on non-select dropdowns and thus added twice inside the hidden input
- removing selected multiple entries encoded the whole selected string on non-select dropdowns
- entering the same value in multiple search dropdowns as already provided as "values" on initialize time were ignored/not removed on enter/delimiter
- pressing enter on such already existing values forced a form submit
- placeholder text was encoded twice when preserveHTML was set to false
- when every item was filtered and reopened again via backspace deletion some css was missing for the menu
- hiding menu when all items are filtered left the visible class which prevents another dropdown to be shown with higher z-index
- reshow menu when all non selected items were filtered and an item was selected
  • Loading branch information
lubber-de committed Oct 5, 2022
1 parent c93e24a commit 7441393
Showing 1 changed file with 30 additions and 10 deletions.
40 changes: 30 additions & 10 deletions src/definitions/modules/dropdown.js
Expand Up @@ -543,6 +543,7 @@ $.fn.dropdown = function(parameters) {
return true;
}
if(settings.onShow.call(element) !== false) {
module.remove.empty();
module.animate.show(function() {
module.bind.intent();
if(module.has.search() && !preventFocus) {
Expand Down Expand Up @@ -601,7 +602,7 @@ $.fn.dropdown = function(parameters) {
module.verbose('Hiding menu instantaneously');
module.remove.active();
module.remove.visible();
$menu.transition('hide');
$menu.transition('destroy').transition('hide');
},

hideSubMenus: function() {
Expand Down Expand Up @@ -762,6 +763,7 @@ $.fn.dropdown = function(parameters) {
}
else {
module.verbose('All items filtered, hiding dropdown', searchTerm);
module.set.empty();
module.hideMenu();
}
}
Expand All @@ -772,7 +774,7 @@ $.fn.dropdown = function(parameters) {
if(settings.allowAdditions) {
module.add.userSuggestion(module.escape.htmlEntities(query));
}
if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {
if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() && !module.is.empty()) {
module.show();
}
}
Expand Down Expand Up @@ -1389,6 +1391,10 @@ $.fn.dropdown = function(parameters) {
if(settings.allowAdditions) {
module.remove.userAddition();
}
module.remove.filteredItem();
if(!module.is.visible()) {
module.show();
}
module.remove.searchTerm();
if(!module.is.focusedOnSearch() && skipRefocus !== true) {
module.focusSearch(true);
Expand Down Expand Up @@ -1503,12 +1509,18 @@ $.fn.dropdown = function(parameters) {
}
$activeLabel.last().next(selector.siblingLabel).addClass(className.active);
module.remove.activeLabels($activeLabel);
if(!module.is.visible()){
module.show();
}
event.preventDefault();
}
else if(caretAtStart && !isSelectedSearch && !hasActiveLabel && pressedKey == keys.backspace) {
module.verbose('Removing last label on input backspace');
$activeLabel = $label.last().addClass(className.active);
module.remove.activeLabels($activeLabel);
if(!module.is.visible()){
module.show();
}
}
}
else {
Expand Down Expand Up @@ -1540,14 +1552,16 @@ $.fn.dropdown = function(parameters) {
hasSelectedItem = ($selectedItem.length > 0),
selectedIsSelectable = ($selectedItem.not(selector.unselectable).length > 0),
delimiterPressed = (event.key === settings.delimiter && module.is.multiple()),
isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),
isAdditionWithoutMenu = settings.allowAdditions && (pressedKey == keys.enter || delimiterPressed),
$nextItem,
isSubMenuItem
;
// allow selection with menu closed
if(isAdditionWithoutMenu) {
module.verbose('Selecting item from keyboard shortcut', $selectedItem);
module.event.item.click.call($selectedItem, event);
if (selectedIsSelectable && settings.hideAdditions) {
module.verbose('Selecting item from keyboard shortcut', $selectedItem);
module.event.item.click.call($selectedItem, event);
}
if(module.is.searchSelection()) {
module.remove.searchTerm();
}
Expand Down Expand Up @@ -1690,7 +1704,7 @@ $.fn.dropdown = function(parameters) {
}
else {
// delimiter key
if(delimiterPressed) {
if(pressedKey == keys.enter || delimiterPressed) {
event.preventDefault();
}
// down arrow (open menu)
Expand Down Expand Up @@ -1886,7 +1900,7 @@ $.fn.dropdown = function(parameters) {
},
userValues: function() {
var
values = module.get.values()
values = module.get.values(true)
;
if(!values) {
return false;
Expand Down Expand Up @@ -2593,7 +2607,7 @@ $.fn.dropdown = function(parameters) {
var
value = module.get.choiceValue($item),
searchText = module.get.choiceText($item, false),
text = module.get.choiceText($item, true)
text = module.get.choiceText($item)
;
module.debug('Setting user selection to item', $item);
module.remove.activeItem();
Expand Down Expand Up @@ -2835,6 +2849,10 @@ $.fn.dropdown = function(parameters) {
if (!keepSearchTerm) {
module.remove.searchTerm();
}
if(module.is.allFiltered()) {
module.set.empty();
module.hideMenu();
}
}
},

Expand Down Expand Up @@ -3167,10 +3185,9 @@ $.fn.dropdown = function(parameters) {
},
value: function(removedValue, removedText, $removedItem, preventChangeTrigger) {
var
values = module.get.values(),
values = module.get.values(true),
newValue
;
removedValue = module.escape.htmlEntities(removedValue);
if( module.has.selectInput() ) {
module.verbose('Input is <select> removing selected option', removedValue);
newValue = module.remove.arrayValue(removedValue, values);
Expand Down Expand Up @@ -3403,6 +3420,9 @@ $.fn.dropdown = function(parameters) {
edge: function() {
return !!window.chrome && !!window.StyleMedia;
},
empty: function() {
return $module.hasClass(className.empty);
},
chrome: function() {
return !!window.chrome && !window.StyleMedia;
},
Expand Down

0 comments on commit 7441393

Please sign in to comment.