You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2007/12/01 01:54:21 UTC

svn commit: r600027 - in /tapestry/tapestry5/trunk/tapestry-core/src/main: java/org/apache/tapestry/corelib/components/Palette.java java/org/apache/tapestry/json/JSONArray.java resources/org/apache/tapestry/corelib/components/palette.js

Author: hlship
Date: Fri Nov 30 16:54:19 2007
New Revision: 600027

URL: http://svn.apache.org/viewvc?rev=600027&view=rev
Log:
TAPESTRY-1838: Palette javascript Error when an item contains a quote

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/Palette.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/json/JSONArray.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/corelib/components/palette.js

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/Palette.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/Palette.java?rev=600027&r1=600026&r2=600027&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/Palette.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/corelib/components/Palette.java Fri Nov 30 16:54:19 2007
@@ -22,7 +22,7 @@
 import org.apache.tapestry.internal.util.SelectModelRenderer;
 import org.apache.tapestry.ioc.annotations.Inject;
 import static org.apache.tapestry.ioc.internal.util.CollectionFactory.*;
-import org.apache.tapestry.ioc.internal.util.InternalUtils;
+import org.apache.tapestry.json.JSONArray;
 import org.apache.tapestry.services.Request;
 
 import java.util.Collections;
@@ -282,7 +282,8 @@
     @Override
     protected void processSubmission(String elementName)
     {
-        String values = _request.getParameter(elementName + ":values");
+        String parameterValue = _request.getParameter(elementName + ":values");
+        JSONArray values = new JSONArray(parameterValue);
 
         // Use a couple of local variables to cut down on access via bindings
 
@@ -293,14 +294,15 @@
 
         ValueEncoder encoder = _encoder;
 
-        if (InternalUtils.isNonBlank(values))
+
+        int count = values.length();
+        for (int i = 0; i < count; i++)
         {
-            for (String value : values.split(";"))
-            {
-                Object objectValue = encoder.toValue(value);
+            String value = values.getString(i);
 
-                selected.add(objectValue);
-            }
+            Object objectValue = encoder.toValue(value);
+
+            selected.add(objectValue);
         }
 
         _selected = selected;
@@ -313,8 +315,7 @@
 
     void beginRender(MarkupWriter writer)
     {
-        String sep = "";
-        StringBuilder selectedValues = new StringBuilder();
+        JSONArray selectedValues = new JSONArray();
 
         for (OptionModel selected : _selectedOptions)
         {
@@ -322,26 +323,21 @@
             Object value = selected.getValue();
             String clientValue = _encoder.toClient(value);
 
-            selectedValues.append(sep);
-            selectedValues.append(clientValue);
-
-            sep = ";";
+            selectedValues.put(clientValue);
         }
 
-        StringBuilder naturalOrder = new StringBuilder();
-        sep = "";
+        JSONArray naturalOrder = new JSONArray();
+
         for (String value : _naturalOrder)
         {
-            naturalOrder.append(sep);
-            naturalOrder.append(value);
-            sep = ";";
+            naturalOrder.put(value);
         }
 
         String clientId = getClientId();
 
         _renderSupport.addScriptLink(_paletteLibrary);
 
-        _renderSupport.addScript("new Tapestry.Palette('%s', %s, '%s');", clientId, _reorder, naturalOrder);
+        _renderSupport.addScript("new Tapestry.Palette('%s', %s, %s);", clientId, _reorder, naturalOrder);
 
         writer.element("input", "type", "hidden", "id", clientId + ":values", "name", getElementName() + ":values",
                        "value", selectedValues);

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/json/JSONArray.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/json/JSONArray.java?rev=600027&r1=600026&r2=600027&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/json/JSONArray.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/json/JSONArray.java Fri Nov 30 16:54:19 2007
@@ -98,6 +98,13 @@
     {
     }
 
+    public JSONArray(String text)
+    {
+        JSONTokener tokener = new JSONTokener(text);
+
+        parse(tokener);
+    }
+
     /**
      * Construct a JSONArray from a JSONTokener.
      *
@@ -108,6 +115,11 @@
     {
         assert tokenizer != null;
 
+        parse(tokenizer);
+    }
+
+    private void parse(JSONTokener tokenizer)
+    {
         if (tokenizer.nextClean() != '[')
         {
             throw tokenizer

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/corelib/components/palette.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/corelib/components/palette.js?rev=600027&r1=600026&r2=600027&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/corelib/components/palette.js (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry/corelib/components/palette.js Fri Nov 30 16:54:19 2007
@@ -2,6 +2,9 @@
 
 Tapestry.Palette.prototype = {
 
+    // id: of main select element
+    // reorder: true to enable extra controls for changing selection order
+    // naturalOrder: array of values, the proper order for the elements (needed when de-selecting items)
     initialize : function(id, reorder, naturalOrder)
     {
         this.reorder = reorder;
@@ -12,9 +15,6 @@
 
         this.hidden = $(id + ":values");
 
-	  // Seperator used for values in the hidden field.
-        this.sep = ";";
-
 	  // The BUTTON elements
         this.select = $(id + ":select");
         this.deselect = $(id + ":deselect");
@@ -27,7 +27,7 @@
 
         this.valueToOrderIndex = {};
 
-        naturalOrder.split(this.sep).each(function (value, i)
+        naturalOrder.each(function (value, i)
         {
             this.valueToOrderIndex[value] = i;
         }.bind(this));
@@ -38,21 +38,21 @@
     bindEvents : function()
     {
         var updateButtons = this.updateButtons.bindAsEventListener(this);
-        Event.observe(this.avail, "change", updateButtons);
-        Event.observe(this.selected, "change", updateButtons);
+        this.avail.observe("change", updateButtons);
+        this.selected.observe("change", updateButtons);
 
         var selectClicked = this.selectClicked.bindAsEventListener(this);
-        Event.observe(this.select, "click", selectClicked);
-        Event.observe(this.avail, "dblclick", selectClicked);
+        this.select.observe("click", selectClicked);
+        this.avail.observe("dblclick", selectClicked);
 
         var deselectClicked = this.deselectClicked.bindAsEventListener(this);
-        Event.observe(this.deselect, "click", deselectClicked);
-        Event.observe(this.selected, "dblclick", deselectClicked);
+        this.deselect.observe("click", deselectClicked);
+        this.selected.observe("dblclick", deselectClicked);
 
         if (this.reorder)
         {
-            Event.observe(this.up, "click", this.moveUpClicked.bindAsEventListener(this));
-            Event.observe(this.down, "click", this.moveDownClicked.bindAsEventListener(this));
+            this.up.observe("click", this.moveUpClicked.bindAsEventListener(this));
+            this.down.observe("click", this.moveDownClicked.bindAsEventListener(this));
         }
     },
 
@@ -140,7 +140,7 @@
             return o.value;
         });
 
-        this.hidden.value = values.join(this.sep);
+        this.hidden.value = values.toJSON();
     },
 
     moveUpClicked : function(event)