Browse Source

Add support for 'clear', 'restore defaults' for multiple #2303, update logic for fireOnInit to be more clean, fix issue with boolean values setting #2296

pull/2308/head
jlukic 9 years ago
parent
commit
35edff6b52
2 changed files with 61 additions and 35 deletions
  1. 1
      RELEASE-NOTES.md
  2. 95
      src/definitions/modules/dropdown.js

1
RELEASE-NOTES.md

@ -140,6 +140,7 @@
- **Dropdown** - Fixed border radius on `sub menu` when aligned `left`
- **Dropdown** - Fixed `inline dropdown` icon not aligning with content
- **Dropdown** - Fixed behaviors called on `<select>` after initialization not being correctly applied to `ui dropdown`
- **Dropdown** - Fixed issue with matching boolean values, and using `set selected` with `true` or `false`
- **Dropdown** - Fixed `search dropdown` submitting parent form when enter shortcut pressed
- **Dropdown** - Fixed dropdown menu items should not center inside of a center aligned container.
- **Form** - `field` inside `fields` no longer produce double sized margins.

95
src/definitions/modules/dropdown.js

@ -85,17 +85,10 @@ $.fn.dropdown = function(parameters) {
}
else {
module.setup.layout();
module.save.defaults();
module.restore.values();
if(module.is.multiple()) {
module.restore.labels();
}
module.restore.selected();
module.create.id();
if(hasTouch) {
module.bind.touchEvents();
}
@ -818,11 +811,11 @@ $.fn.dropdown = function(parameters) {
;
if( $label.hasClass(className.active) ) {
// remove all selected labels
module.remove.labels();
module.remove.activeLabels();
}
else {
// remove this label only
module.remove.labels( $label );
module.remove.activeLabels( $label );
}
}
},
@ -1008,13 +1001,13 @@ $.fn.dropdown = function(parameters) {
}
}
$activeLabel.last().next(selector.siblingLabel).addClass(className.active);
module.remove.labels($activeLabel);
module.remove.activeLabels($activeLabel);
event.preventDefault();
}
else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) {
module.verbose('Removing last label on input backspace');
$activeLabel = $label.last().addClass(className.active);
module.remove.labels($activeLabel);
module.remove.activeLabels($activeLabel);
}
}
else {
@ -1547,7 +1540,7 @@ $.fn.dropdown = function(parameters) {
}
}
else {
if( optionValue == value || optionText == value) {
if( optionValue.toString() == value.toString() || optionText == value) {
module.verbose('Found select item by value', optionValue, value);
$selectedItem = $choice;
return true;
@ -1606,8 +1599,9 @@ $.fn.dropdown = function(parameters) {
;
if(defaultValue !== undefined) {
module.debug('Restoring default value', defaultValue);
if(defaultValue.length) {
module.set.selected(defaultValue);
if(defaultValue !== '') {
module.set.value(defaultValue);
module.set.selected();
}
else {
module.remove.activeItem();
@ -1626,11 +1620,19 @@ $.fn.dropdown = function(parameters) {
}
module.check.maxSelections();
},
selected: function() {
module.restore.values();
if(module.is.multiple()) {
module.debug('Restoring previously selected values and labels');
module.restore.labels();
}
else {
module.debug('Restoring previously selected values');
}
},
values: function() {
module.debug('Restoring selected values');
if(settings.fireOnInit === false) {
initialLoad = true;
}
module.set.initialLoad();
if(settings.apiSettings) {
if(settings.saveRemoteData) {
module.restore.remoteValues();
@ -1642,9 +1644,7 @@ $.fn.dropdown = function(parameters) {
else {
module.set.selected();
}
if(settings.fireOnInit === false) {
initialLoad = false;
}
module.remove.initialLoad();
},
remoteValues: function() {
var
@ -1710,10 +1710,15 @@ $.fn.dropdown = function(parameters) {
},
clear: function() {
if(module.is.multiple()) {
module.remove.labels();
}
else {
module.remove.activeItem();
module.remove.selectedItem();
}
module.set.placeholderText();
module.clearValue();
module.remove.activeItem();
module.remove.selectedItem();
},
clearValue: function() {
@ -1799,9 +1804,6 @@ $.fn.dropdown = function(parameters) {
text = text || $module.data(metadata.placeholderText);
module.set.text(text);
$text.addClass(className.placeholder);
},
input: function() {
},
tabbable: function() {
if( module.has.search() ) {
@ -1826,6 +1828,10 @@ $.fn.dropdown = function(parameters) {
}
}
},
initialLoad: function() {
module.verbose('Setting initial load');
initialLoad = true;
},
scrollPosition: function($item, forceScroll) {
var
edgeTolerance = 5,
@ -1948,7 +1954,10 @@ $.fn.dropdown = function(parameters) {
$module.data(metadata.value, value);
}
}
if(!initialLoad) {
if(settings.fireOnInit === false && module.is.initialLoad()) {
module.verbose('No callback on initial load', settings.onChange);
}
else {
settings.onChange.call(element, value, text, $selected);
}
},
@ -1965,14 +1974,12 @@ $.fn.dropdown = function(parameters) {
},
selected: function(value, $selectedItem) {
var
isMultiple = module.is.multiple()
isMultiple = module.is.multiple()
;
$selectedItem = $selectedItem || module.get.item(value);
if(!$selectedItem) {
return false;
}
module.debug('Setting selected menu item to', $selectedItem);
if(module.is.single()) {
module.remove.activeItem();
@ -2197,7 +2204,11 @@ $.fn.dropdown = function(parameters) {
newValue = newValue.join(settings.delimiter);
module.debug('Setting hidden input to delimited value', newValue, $input);
}
if(!initialLoad) {
if(settings.fireOnInit === false && module.is.initialLoad()) {
module.verbose('No callback on initial load', settings.onAdd);
}
else {
settings.onAdd.call(element, addedValue, addedText, $selectedItem);
}
module.set.value(newValue, addedValue, addedText, $selectedItem);
@ -2215,6 +2226,9 @@ $.fn.dropdown = function(parameters) {
loading: function() {
$module.removeClass(className.loading);
},
initialLoad: function() {
initialLoad = false;
},
upward: function($menu) {
var $element = $menu || $module;
$element.removeClass(className.upward);
@ -2292,7 +2306,10 @@ $.fn.dropdown = function(parameters) {
newValue = module.remove.arrayValue(removedValue, values);
newValue = newValue.join(settings.delimiter);
}
if(!initialLoad) {
if(settings.fireOnInit === false && module.is.initialLoad()) {
module.verbose('No callback on initial load', settings.onRemove);
}
else {
settings.onRemove.call(element, removedValue, removedText, $removedItem);
}
module.set.value(newValue, removedText, $removedItem);
@ -2325,10 +2342,15 @@ $.fn.dropdown = function(parameters) {
$removedLabel.remove();
}
},
labels: function($activeLabels) {
activeLabels: function($activeLabels) {
$activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active);
module.verbose('Removing active label selections', $activeLabels);
$activeLabels
module.remove.labels($activeLabels);
},
labels: function($labels) {
$labels = $labels || $module.find(selector.label);
module.verbose('Removing labels', $labels);
$labels
.each(function(){
var
value = $(this).data('value'),
@ -2430,6 +2452,9 @@ $.fn.dropdown = function(parameters) {
hidden: function($subMenu) {
return !module.is.visible($subMenu);
},
initialLoad: function() {
return initialLoad;
},
onScreen: function($subMenu) {
var
$currentMenu = $subMenu || $menu,
@ -2835,7 +2860,7 @@ $.fn.dropdown.settings = {
action : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})
apiSettings : false,
saveRemoteData : false, // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh
saveRemoteData : false, // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh
keepOnScreen : true, // Whether dropdown should check whether it is on screen before showing

Loading…
Cancel
Save