The branch, QA_3_4 has been updated via 0112ff6ba522b6d18fee298357a3fda1d9cea0cf (commit) from d4cce87b263ed00654588fa068c7ec73422fd465 (commit)
- Log ----------------------------------------------------------------- -----------------------------------------------------------------------
Summary of changes: ChangeLog | 1 + js/functions.js | 58 ++++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 42 insertions(+), 17 deletions(-)
diff --git a/ChangeLog b/ChangeLog index 6a2d9e3..ef1517b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,7 @@ phpMyAdmin - ChangeLog
3.4.8.0 (not yet released) - bug #3425230 [interface] enum data split at space char (more space to edit) +- bug #3426840 [interface] ENUM/SET editor can't handle commas in values
3.4.7.0 (not yet released) - bug #3418610 [interface] Links in navigation when $cfg['MainPageIconic'] = false diff --git a/js/functions.js b/js/functions.js index 3a1ed33..8431b2a 100644 --- a/js/functions.js +++ b/js/functions.js @@ -1842,24 +1842,48 @@ $(document).ready(function() { $("#popup_background").fadeIn("fast"); $("#enum_editor").fadeIn("fast");
- // Get the values - var values = $(this).parent().prev("input").attr("value").split(","); - $.each(values, function(index, val) { - if(jQuery.trim(val) != "") { - // enclose the string in single quotes if it's not already - if(val.substr(0, 1) != "'") { - val = "'" + val; - } - if(val.substr(val.length-1, val.length) != "'") { - val = val + "'"; - } - // escape the single quotes, except the mandatory ones enclosing the entire string - val = val.substr(1, val.length-2).replace(/''/g, "'").replace(/\\/g, '\').replace(/\'/g, "'").replace(/'/g, "'"); - // escape the greater-than symbol - val = val.replace(/>/g, ">"); - $("#enum_editor #values").append("<input type='text' value='" + val + "' />"); + // Get the values as a string + var inputstring = $(this) + .parent() + .prev("input") + .val(); + // Escape html entities + inputstring = $('<div/>') + .text(inputstring) + .html(); + // Parse the values, escaping quotes and + // slashes on the fly, into an array + var values = []; + var in_string = false; + var curr, next, buffer = ''; + for (var i=0; i<inputstring.length; i++) { + curr = inputstring.charAt(i); + next = i == inputstring.length ? '' : inputstring.charAt(i+1); + if (! in_string && curr == "'") { + in_string = true; + } else if (in_string && curr == "\" && next == "\") { + buffer += "\"; + i++; + } else if (in_string && next == "'" && (curr == "'" || curr == "\")) { + buffer += "'"; + i++; + } else if (in_string && curr == "'") { + in_string = false; + values.push(buffer); + buffer = ''; + } else if (in_string) { + buffer += curr; } - }); + } + if (buffer.length > 0) { + values.push(buffer); + } + // Add the parsed values to the editor + for (var i=0; i<values.length; i++) { + $("#enum_editor #values").append( + "<input type='text' value='" + values[i] + "' />" + ); + } // So we know which column's data is being edited $("#enum_editor").append("<input type='hidden' value='" + $(this).parent().prev("input").attr("id") + "' />"); return false;
hooks/post-receive