From f38237d6f8d03bbfae26c1056b23aae99da24c00 Mon Sep 17 00:00:00 2001 From: Jack Lukic Date: Fri, 1 Apr 2016 17:20:45 -0400 Subject: [PATCH] Fix quote encoding in dropdown --- RELEASE-NOTES.md | 1 + src/definitions/modules/dropdown.js | 64 ++++++++++++++++++++--------- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index f9cf0ebb4..07c6c11e1 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -36,6 +36,7 @@ - **Checkbox** - Radio buttons received `indeterminate` styles when user has not yet interacted with the page in Chrome - **Dropdown** - Fixed bug where using `action: 'hide'` could cause `text` value not to be passed to `onChange` callback - **Dropdown** - `apiSettings` was not defaulting to use `cache: 'local'` as specified in the docs +- **Dropdown** - Fixed issue where values with `"` (double quotes) would not work with a dropdown using a select, because value would not be encoded as html entities - **Dropdown** - `get value` would not return correct value when value was blank #3766 - **Dropdown** - Dropdown would open when an label delete x was clicked when not using `search selection` #3789 - **Dropdown** - Dropdowns with sub-menus would not properly activate on mobile #3183 diff --git a/src/definitions/modules/dropdown.js b/src/definitions/modules/dropdown.js index a9546a431..cba76be1e 100644 --- a/src/definitions/modules/dropdown.js +++ b/src/definitions/modules/dropdown.js @@ -1228,7 +1228,7 @@ $.fn.dropdown = function(parameters) { newIndex ; // visible menu keyboard shortcuts - if( module.is.visible() ) { + if( module.is.visible() || settings.allowAdditions ) { // enter (select or open sub-menu) if(pressedKey == keys.enter || delimiterPressed) { @@ -2234,6 +2234,7 @@ $.fn.dropdown = function(parameters) { }, value: function(value, text, $selected) { var + escapedValue = module.escape.value(value), hasInput = ($input.length > 0), isAddition = !module.has.value(value), currentValue = module.get.values(), @@ -2254,10 +2255,10 @@ $.fn.dropdown = function(parameters) { module.debug('Adding user option', value); module.add.optionValue(value); } - module.debug('Updating input value', value, currentValue); + module.debug('Updating input value', escapedValue, currentValue); internalChange = true; $input - .val(value) + .val(escapedValue) ; if(settings.fireOnInit === false && module.is.initialLoad()) { module.debug('Input native change event ignored on initial load'); @@ -2268,8 +2269,8 @@ $.fn.dropdown = function(parameters) { internalChange = false; } else { - module.verbose('Storing value in metadata', value, $input); - if(value !== currentValue) { + module.verbose('Storing value in metadata', escapedValue, $input); + if(escapedValue !== currentValue) { $module.data(metadata.value, stringValue); } } @@ -2377,17 +2378,18 @@ $.fn.dropdown = function(parameters) { $next = module.is.searchSelection() ? $search : $text, + escapedValue = module.escape.value(value), $label ; $label = $('') .addClass(className.label) - .attr('data-value', value) - .html(templates.label(value, text)) + .attr('data-value', escapedValue) + .html(templates.label(escapedValue, text)) ; - $label = settings.onLabelCreate.call($label, value, text); + $label = settings.onLabelCreate.call($label, escapedValue, text); if(module.has.label(value)) { - module.debug('Label already exists, skipping', value); + module.debug('Label already exists, skipping', escapedValue); return; } if(settings.label.variation) { @@ -2428,8 +2430,9 @@ $.fn.dropdown = function(parameters) { }, optionValue: function(value) { var - $option = $input.find('option[value="' + value + '"]'), - hasOption = ($option.length > 0) + escapedValue = module.escape.value(value), + $option = $input.find('option[value="' + escapedValue + '"]'), + hasOption = ($option.length > 0) ; if(hasOption) { return; @@ -2437,14 +2440,14 @@ $.fn.dropdown = function(parameters) { // temporarily disconnect observer if(selectObserver) { selectObserver.disconnect(); - module.verbose('Temporarily disconnecting mutation observer', value); + module.verbose('Temporarily disconnecting mutation observer', escapedValue); } if( module.is.single() ) { module.verbose('Removing previous user addition'); $input.find('option.' + className.addition).remove(); } $('