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 10 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 border radius on `sub menu` when aligned `left`
- **Dropdown** - Fixed `inline dropdown` icon not aligning with content - **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 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 `search dropdown` submitting parent form when enter shortcut pressed
- **Dropdown** - Fixed dropdown menu items should not center inside of a center aligned container. - **Dropdown** - Fixed dropdown menu items should not center inside of a center aligned container.
- **Form** - `field` inside `fields` no longer produce double sized margins. - **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 { else {
module.setup.layout(); module.setup.layout();
module.save.defaults(); module.save.defaults();
module.restore.values();
if(module.is.multiple()) {
module.restore.labels();
}
module.restore.selected();
module.create.id(); module.create.id();
if(hasTouch) { if(hasTouch) {
module.bind.touchEvents(); module.bind.touchEvents();
} }
@ -818,11 +811,11 @@ $.fn.dropdown = function(parameters) {
; ;
if( $label.hasClass(className.active) ) { if( $label.hasClass(className.active) ) {
// remove all selected labels // remove all selected labels
module.remove.labels();
module.remove.activeLabels();
} }
else { else {
// remove this label only // 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); $activeLabel.last().next(selector.siblingLabel).addClass(className.active);
module.remove.labels($activeLabel);
module.remove.activeLabels($activeLabel);
event.preventDefault(); event.preventDefault();
} }
else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) { else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) {
module.verbose('Removing last label on input backspace'); module.verbose('Removing last label on input backspace');
$activeLabel = $label.last().addClass(className.active); $activeLabel = $label.last().addClass(className.active);
module.remove.labels($activeLabel);
module.remove.activeLabels($activeLabel);
} }
} }
else { else {
@ -1547,7 +1540,7 @@ $.fn.dropdown = function(parameters) {
} }
} }
else { else {
if( optionValue == value || optionText == value) {
if( optionValue.toString() == value.toString() || optionText == value) {
module.verbose('Found select item by value', optionValue, value); module.verbose('Found select item by value', optionValue, value);
$selectedItem = $choice; $selectedItem = $choice;
return true; return true;
@ -1606,8 +1599,9 @@ $.fn.dropdown = function(parameters) {
; ;
if(defaultValue !== undefined) { if(defaultValue !== undefined) {
module.debug('Restoring default value', defaultValue); module.debug('Restoring default value', defaultValue);
if(defaultValue.length) {
module.set.selected(defaultValue);
if(defaultValue !== '') {
module.set.value(defaultValue);
module.set.selected();
} }
else { else {
module.remove.activeItem(); module.remove.activeItem();
@ -1626,11 +1620,19 @@ $.fn.dropdown = function(parameters) {
} }
module.check.maxSelections(); 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() { values: function() {
module.debug('Restoring selected values'); module.debug('Restoring selected values');
if(settings.fireOnInit === false) {
initialLoad = true;
}
module.set.initialLoad();
if(settings.apiSettings) { if(settings.apiSettings) {
if(settings.saveRemoteData) { if(settings.saveRemoteData) {
module.restore.remoteValues(); module.restore.remoteValues();
@ -1642,9 +1644,7 @@ $.fn.dropdown = function(parameters) {
else { else {
module.set.selected(); module.set.selected();
} }
if(settings.fireOnInit === false) {
initialLoad = false;
}
module.remove.initialLoad();
}, },
remoteValues: function() { remoteValues: function() {
var var
@ -1710,10 +1710,15 @@ $.fn.dropdown = function(parameters) {
}, },
clear: function() { clear: function() {
if(module.is.multiple()) {
module.remove.labels();
}
else {
module.remove.activeItem();
module.remove.selectedItem();
}
module.set.placeholderText(); module.set.placeholderText();
module.clearValue(); module.clearValue();
module.remove.activeItem();
module.remove.selectedItem();
}, },
clearValue: function() { clearValue: function() {
@ -1799,9 +1804,6 @@ $.fn.dropdown = function(parameters) {
text = text || $module.data(metadata.placeholderText); text = text || $module.data(metadata.placeholderText);
module.set.text(text); module.set.text(text);
$text.addClass(className.placeholder); $text.addClass(className.placeholder);
},
input: function() {
}, },
tabbable: function() { tabbable: function() {
if( module.has.search() ) { 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) { scrollPosition: function($item, forceScroll) {
var var
edgeTolerance = 5, edgeTolerance = 5,
@ -1948,7 +1954,10 @@ $.fn.dropdown = function(parameters) {
$module.data(metadata.value, value); $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); settings.onChange.call(element, value, text, $selected);
} }
}, },
@ -1965,14 +1974,12 @@ $.fn.dropdown = function(parameters) {
}, },
selected: function(value, $selectedItem) { selected: function(value, $selectedItem) {
var var
isMultiple = module.is.multiple()
isMultiple = module.is.multiple()
; ;
$selectedItem = $selectedItem || module.get.item(value); $selectedItem = $selectedItem || module.get.item(value);
if(!$selectedItem) { if(!$selectedItem) {
return false; return false;
} }
module.debug('Setting selected menu item to', $selectedItem); module.debug('Setting selected menu item to', $selectedItem);
if(module.is.single()) { if(module.is.single()) {
module.remove.activeItem(); module.remove.activeItem();
@ -2197,7 +2204,11 @@ $.fn.dropdown = function(parameters) {
newValue = newValue.join(settings.delimiter); newValue = newValue.join(settings.delimiter);
module.debug('Setting hidden input to delimited value', newValue, $input); 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); settings.onAdd.call(element, addedValue, addedText, $selectedItem);
} }
module.set.value(newValue, addedValue, addedText, $selectedItem); module.set.value(newValue, addedValue, addedText, $selectedItem);
@ -2215,6 +2226,9 @@ $.fn.dropdown = function(parameters) {
loading: function() { loading: function() {
$module.removeClass(className.loading); $module.removeClass(className.loading);
}, },
initialLoad: function() {
initialLoad = false;
},
upward: function($menu) { upward: function($menu) {
var $element = $menu || $module; var $element = $menu || $module;
$element.removeClass(className.upward); $element.removeClass(className.upward);
@ -2292,7 +2306,10 @@ $.fn.dropdown = function(parameters) {
newValue = module.remove.arrayValue(removedValue, values); newValue = module.remove.arrayValue(removedValue, values);
newValue = newValue.join(settings.delimiter); 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); settings.onRemove.call(element, removedValue, removedText, $removedItem);
} }
module.set.value(newValue, removedText, $removedItem); module.set.value(newValue, removedText, $removedItem);
@ -2325,10 +2342,15 @@ $.fn.dropdown = function(parameters) {
$removedLabel.remove(); $removedLabel.remove();
} }
}, },
labels: function($activeLabels) {
activeLabels: function($activeLabels) {
$activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active); $activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active);
module.verbose('Removing active label selections', $activeLabels); 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(){ .each(function(){
var var
value = $(this).data('value'), value = $(this).data('value'),
@ -2430,6 +2452,9 @@ $.fn.dropdown = function(parameters) {
hidden: function($subMenu) { hidden: function($subMenu) {
return !module.is.visible($subMenu); return !module.is.visible($subMenu);
}, },
initialLoad: function() {
return initialLoad;
},
onScreen: function($subMenu) { onScreen: function($subMenu) {
var var
$currentMenu = $subMenu || $menu, $currentMenu = $subMenu || $menu,
@ -2835,7 +2860,7 @@ $.fn.dropdown.settings = {
action : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){}) action : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})
apiSettings : false, 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 keepOnScreen : true, // Whether dropdown should check whether it is on screen before showing

Loading…
Cancel
Save