]> source.dussan.org Git - vaadin-framework.git/commitdiff
Merge of (#8004) to Vaadin 7. 08/608/1
authorAnna Koskinen <anna@vaadin.com>
Wed, 9 Jan 2013 14:17:37 +0000 (16:17 +0200)
committerAnna Koskinen <anna@vaadin.com>
Wed, 9 Jan 2013 14:17:37 +0000 (16:17 +0200)
Empty RichTextArea returns "<br>" as getValue().

Change-Id: I5190d55b0e1d32ed4dd181434006820db9220ada

client/src/com/vaadin/client/ui/VRichTextArea.java
uitest/src/com/vaadin/tests/components/richtextarea/RichTextAreaEmptyString.java [new file with mode: 0644]

index 7cb7f9ec5977d8fec897e5dede6a4857898c55a5..1498c096ed78111bc53973558d95398a0d7da9a2 100644 (file)
@@ -191,7 +191,7 @@ public class VRichTextArea extends Composite implements Field, ChangeHandler,
      */
     public void synchronizeContentToServer() {
         if (client != null && id != null) {
-            final String html = rta.getHTML();
+            final String html = sanitizeRichTextAreaValue(rta.getHTML());
             if (!html.equals(currentValue)) {
                 client.updateVariable(id, "text", html, immediate);
                 currentValue = html;
@@ -199,6 +199,37 @@ public class VRichTextArea extends Composite implements Field, ChangeHandler,
         }
     }
 
+    /**
+     * Browsers differ in what they return as the content of a visually empty
+     * rich text area. This method is used to normalize these to an empty
+     * string. See #8004.
+     * 
+     * @param html
+     * @return cleaned html string
+     */
+    private String sanitizeRichTextAreaValue(String html) {
+        BrowserInfo browser = BrowserInfo.get();
+        String result = html;
+        if (browser.isFirefox()) {
+            if ("<br>".equals(html)) {
+                result = "";
+            }
+        } else if (browser.isWebkit()) {
+            if ("<div><br></div>".equals(html)) {
+                result = "";
+            }
+        } else if (browser.isIE()) {
+            if ("<P>&nbsp;</P>".equals(html)) {
+                result = "";
+            }
+        } else if (browser.isOpera()) {
+            if ("<br>".equals(html) || "<p><br></p>".equals(html)) {
+                result = "";
+            }
+        }
+        return result;
+    }
+
     @Override
     public void onBlur(BlurEvent event) {
         synchronizeContentToServer();
diff --git a/uitest/src/com/vaadin/tests/components/richtextarea/RichTextAreaEmptyString.java b/uitest/src/com/vaadin/tests/components/richtextarea/RichTextAreaEmptyString.java
new file mode 100644 (file)
index 0000000..5eddf9d
--- /dev/null
@@ -0,0 +1,42 @@
+package com.vaadin.tests.components.richtextarea;
+
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.RichTextArea;
+
+public class RichTextAreaEmptyString extends TestBase {
+
+    @Override
+    protected String getDescription() {
+        return "Test the value of a rich text area. Visually empty area should return \"\"";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 8004;
+    }
+
+    @Override
+    protected void setup() {
+        final RichTextArea area = new RichTextArea();
+
+        final Label l = new Label(area.getValue(), ContentMode.PREFORMATTED);
+        l.setCaption("Value recieved from RichTextArea:");
+
+        final Button b = new Button("get area value", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                l.setValue(area.getValue());
+            }
+        });
+
+        addComponent(area);
+        addComponent(b);
+        addComponent(l);
+    }
+
+}