[Phpmyadmin-git] [SCM] phpMyAdmin branch, QA_3_4, updated. RELEASE_3_4_6-26-g0112ff6

Rouslan Placella roccivic at users.sourceforge.net
Fri Oct 21 16:42:41 CEST 2011


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
-- 
phpMyAdmin




More information about the Git mailing list