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 2014/08/01 20:26:07 UTC
git commit: TAP5-773: Select component should have parameter to allow
option labels to be rendered w/o HTML entity escaping
Repository: tapestry-5
Updated Branches:
refs/heads/master 37c2f877b -> 28b4dc805
TAP5-773: Select component should have parameter to allow option labels to be rendered w/o HTML entity escaping
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/28b4dc80
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/28b4dc80
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/28b4dc80
Branch: refs/heads/master
Commit: 28b4dc805dfc64891b89f8e5d83d6c5d42ff6b42
Parents: 37c2f87
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Fri Aug 1 11:26:02 2014 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Fri Aug 1 11:26:02 2014 -0700
----------------------------------------------------------------------
.../tapestry5/corelib/components/Palette.java | 4 +--
.../tapestry5/corelib/components/Select.java | 35 ++++++++++++++------
.../internal/util/SelectModelRenderer.java | 16 ++++++---
.../corelib/components/SelectTest.java | 35 ++++++++++++++++++--
.../components/output_with_raw_enabled.txt | 2 ++
5 files changed, 72 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/28b4dc80/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Palette.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Palette.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Palette.java
index 78339e1..764aa6d 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Palette.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Palette.java
@@ -1,5 +1,3 @@
-// Copyright 2007-2013 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -181,7 +179,7 @@ public class Palette extends AbstractField
{
public void render(MarkupWriter writer)
{
- SelectModelRenderer visitor = new SelectModelRenderer(writer, encoder);
+ SelectModelRenderer visitor = new SelectModelRenderer(writer, encoder, false);
model.visit(visitor);
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/28b4dc80/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
index 7c13a46..44f4e79 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Select.java
@@ -1,5 +1,3 @@
-// Copyright 2007-2013 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -56,7 +54,7 @@ public class Select extends AbstractField
public Renderer(MarkupWriter writer)
{
- super(writer, encoder);
+ super(writer, encoder, raw);
}
@Override
@@ -94,6 +92,15 @@ public class Select extends AbstractField
private SecureOption secure;
/**
+ * If true, then the provided {@link org.apache.tapestry5.SelectModel} labels will be written raw (no escaping of
+ * embedded HTML entities); it becomes the callers responsibility to escape any such entities.
+ *
+ * @since 5.4
+ */
+ @Parameter(value = "false")
+ private boolean raw;
+
+ /**
* The model used to identify the option groups and options to be presented to the user. This can be generated
* automatically for Enum types.
*/
@@ -143,15 +150,15 @@ public class Select extends AbstractField
*/
@Parameter(defaultPrefix = BindingConstants.LITERAL)
private String zone;
-
+
/**
- * The context for the "valueChanged" event triggered by this component (optional parameter).
+ * The context for the "valueChanged" event triggered by this component (optional parameter).
* This list of values will be converted into strings and included in
* the URI. The strings will be coerced back to whatever their values are and made available to event handler
* methods. The first parameter of the context passed to "valueChanged" event handlers will
* still be the selected value chosen by the user, so the context passed through this parameter
* will be added from the second position on.
- *
+ *
* @since 5.4
*/
@Parameter
@@ -251,17 +258,18 @@ public class Select extends AbstractField
}
}
- Object onChange(final List<Context> context,
- @RequestParameter(value = "t:selectvalue", allowBlank = true) final String selectValue)
- throws ValidationException
+ Object onChange(final List<Context> context,
+ @RequestParameter(value = "t:selectvalue", allowBlank = true) final String selectValue)
+ throws ValidationException
{
final Object newValue = toValue(selectValue);
CaptureResultCallback<Object> callback = new CaptureResultCallback<Object>();
-
+
Object[] newContext = new Object[context.size() + 1];
newContext[0] = newValue;
- for (int i = 1; i < newContext.length; i++) {
+ for (int i = 1; i < newContext.length; i++)
+ {
newContext[i] = context.get(i - 1);
}
@@ -484,4 +492,9 @@ public class Select extends AbstractField
blankOption = option;
blankLabel = label;
}
+
+ void setRaw(boolean b)
+ {
+ raw = b;
+ }
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/28b4dc80/tapestry-core/src/main/java/org/apache/tapestry5/internal/util/SelectModelRenderer.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/util/SelectModelRenderer.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/util/SelectModelRenderer.java
index 4f7c5dd..140ac3a 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/util/SelectModelRenderer.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/util/SelectModelRenderer.java
@@ -1,5 +1,3 @@
-// Copyright 2007, 2008 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -24,10 +22,13 @@ public class SelectModelRenderer implements SelectModelVisitor
private final ValueEncoder encoder;
- public SelectModelRenderer(final MarkupWriter writer, ValueEncoder encoder)
+ private final boolean raw;
+
+ public SelectModelRenderer(final MarkupWriter writer, ValueEncoder encoder, boolean raw)
{
this.writer = writer;
this.encoder = encoder;
+ this.raw = raw;
}
public void beginOptionGroup(OptionGroupModel groupModel)
@@ -57,7 +58,14 @@ public class SelectModelRenderer implements SelectModelVisitor
writeDisabled(optionModel.isDisabled());
writeAttributes(optionModel.getAttributes());
- writer.write(optionModel.getLabel());
+
+ if (raw)
+ {
+ writer.writeRaw(optionModel.getLabel());
+ } else
+ {
+ writer.write(optionModel.getLabel());
+ }
writer.end();
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/28b4dc80/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/SelectTest.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/SelectTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/SelectTest.java
index 9818ae4..62e04f2 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/SelectTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/corelib/components/SelectTest.java
@@ -1,5 +1,3 @@
-// Copyright 2007-2013 The Apache Software Foundation
-//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
@@ -195,6 +193,39 @@ public class SelectTest extends InternalBaseTestCase
}
@Test
+ public void output_with_raw_enabled() throws Exception
+ {
+ ValidationTracker tracker = mockValidationTracker();
+
+ List<OptionModel> options = TapestryInternalUtils.toOptionModels("bold=<b>Bold</b>,italic=<i>Italic</i>");
+
+ Select select = new Select();
+
+ train_getInput(tracker, select, null);
+
+ replay();
+
+ select.setModel(new SelectModelImpl(null, options));
+ select.setValueEncoder(new StringValueEncoder());
+ select.setValue("barney");
+ select.setValidationTracker(tracker);
+ select.setRaw(true);
+
+ MarkupWriter writer = new MarkupWriterImpl(new XMLMarkupModel());
+
+ writer.element("select");
+
+ select.options(writer);
+
+ writer.end();
+
+ assertEquals(writer.toString(), read("output_with_raw_enabled.txt"));
+
+ verify();
+
+ }
+
+ @Test
public void option_attributes() throws Exception
{
ValidationTracker tracker = mockValidationTracker();
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/28b4dc80/tapestry-core/src/test/resources/org/apache/tapestry5/corelib/components/output_with_raw_enabled.txt
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/resources/org/apache/tapestry5/corelib/components/output_with_raw_enabled.txt b/tapestry-core/src/test/resources/org/apache/tapestry5/corelib/components/output_with_raw_enabled.txt
new file mode 100644
index 0000000..901c47c
--- /dev/null
+++ b/tapestry-core/src/test/resources/org/apache/tapestry5/corelib/components/output_with_raw_enabled.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<select><option value="bold"><b>Bold</b></option><option value="italic"><i>Italic</i></option></select>
\ No newline at end of file