Author: jdonnerstag
Date: Sat Mar 19 19:54:25 2011
New Revision: 1083270
URL: http://svn.apache.org/viewvc?rev=1083270&view=rev
Log:
fixed: javascript with a less than character ("<") fails to execute when added
through a header contribution in ajax response
- Introduced a new WicketFilter (StyleAndScriptIdentifier) to support the use
case
- ComponentTag: replace growing number of booleans with an int flag
- WicketFilter now support postProcessing the markup (may replace current
chaining approach in the future)
Issue: WICKET-3420
Added:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/StyleAndScriptIdentifier.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/AbstractMarkupParser.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/ComponentTag.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/IMarkupFilter.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RootMarkupFilter.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/mock/MockHomePage.java
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ajax/MockComponent1-expected.html
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/MarkupParserTest.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java?rev=1083270&r1=1083269&r2=1083270&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
Sat Mar 19 19:54:25 2011
@@ -32,7 +32,6 @@ import org.apache.wicket.markup.MarkupFa
import org.apache.wicket.markup.MarkupNotFoundException;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.markup.MarkupType;
-import org.apache.wicket.markup.RawMarkup;
import org.apache.wicket.markup.WicketTag;
import org.apache.wicket.markup.html.border.Border;
import org.apache.wicket.markup.resolver.ComponentResolvers;
@@ -1385,8 +1384,9 @@ public abstract class MarkupContainer ex
*
* @param markupStream
* The markup stream
+ * @return true, if element was rendered as RawMarkup
*/
- protected final void renderNext(final MarkupStream markupStream)
+ protected final boolean renderNext(final MarkupStream markupStream)
{
// Get the current markup element
final MarkupElement element = markupStream.get();
@@ -1416,6 +1416,12 @@ public abstract class MarkupContainer ex
{
component.render();
}
+ else if (tag.getFlag(ComponentTag.RENDER_RAW))
+ {
+ // No component found, but "render as raw
markup" flag found
+ getResponse().write(element.toCharSequence());
+ return true;
+ }
else
{
if (tag instanceof WicketTag)
@@ -1446,12 +1452,11 @@ public abstract class MarkupContainer ex
else
{
// Render as raw markup
- if (log.isDebugEnabled())
- {
- log.debug("Rendering raw markup");
- }
getResponse().write(element.toCharSequence());
+ return true;
}
+
+ return false;
}
/**
@@ -1537,13 +1542,13 @@ public abstract class MarkupContainer ex
final int index = markupStream.getCurrentIndex();
// Render the markup element
- renderNext(markupStream);
+ boolean rawMarkup = renderNext(markupStream);
// Go back to where we were and move the markup stream
forward to whatever the next
// element is.
markupStream.setCurrentIndex(index);
MarkupElement elem = markupStream.get();
- if (elem instanceof RawMarkup)
+ if (rawMarkup)
{
markupStream.next();
}
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java?rev=1083270&r1=1083269&r2=1083270&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
Sat Mar 19 19:54:25 2011
@@ -808,14 +808,10 @@ public class AjaxRequestTarget implement
}
// we need to write response as CDATA and parse it on
client,
- // because
- // konqueror crashes when there is a <script> element
+ // because konqueror crashes when there is a <script>
element
response.write("><![CDATA[<head
xmlns:wicket=\"http://wicket.apache.org\">");
-
response.write(encodingHeaderResponse.getContents());
-
response.write("</head>]]>");
-
response.write("</header-contribution>");
}
}
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/AbstractMarkupParser.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/AbstractMarkupParser.java?rev=1083270&r1=1083269&r2=1083270&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/AbstractMarkupParser.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/AbstractMarkupParser.java
Sat Mar 19 19:54:25 2011
@@ -44,7 +44,7 @@ import org.slf4j.LoggerFactory;
* @see IMarkupFilter
* @see MarkupFactory
* @see IMarkupSettings
- *
+ *
* @author Jonathan Locke
* @author Juergen Donnerstag
*/
@@ -228,7 +228,7 @@ public abstract class AbstractMarkupPars
ComponentTag tag;
while (null != (tag = getNextTag()))
{
- boolean add = (tag.getId() != null);
+ boolean add = (tag.getId() != null) ||
tag.getFlag(ComponentTag.ADD);
if (!add && tag.getXmlTag().isClose())
{
add = ((tag.getOpenTag() != null) &&
(tag.getOpenTag().getId() != null));
@@ -302,12 +302,23 @@ public abstract class AbstractMarkupPars
markup.addMarkupElement(new RawMarkup(text));
}
+ postProcess(markup);
+
// Make all tags immutable and the list of elements unmodifiable
markup.makeImmutable();
}
/**
*
+ * @param markup
+ */
+ protected void postProcess(final Markup markup)
+ {
+ markupFilterChain.postProcess(markup);
+ }
+
+ /**
+ *
* @param rawMarkup
* @return The modified raw markup
*/
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/ComponentTag.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/ComponentTag.java?rev=1083270&r1=1083269&r2=1083270&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/ComponentTag.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/ComponentTag.java
Sat Mar 19 19:54:25 2011
@@ -30,6 +30,7 @@ import org.apache.wicket.markup.parser.X
import org.apache.wicket.markup.parser.XmlTag.TagType;
import org.apache.wicket.markup.parser.filter.HtmlHandler;
import org.apache.wicket.request.Response;
+import org.apache.wicket.util.lang.Generics;
import org.apache.wicket.util.string.AppendingStringBuffer;
import org.apache.wicket.util.string.StringValue;
import org.apache.wicket.util.string.Strings;
@@ -46,11 +47,26 @@ import org.apache.wicket.util.value.IVal
*/
public class ComponentTag extends MarkupElement
{
- /**
- * Standard component id attribute always available for components
regardless of user
- * ApplicationSettings for id attribute; value == 'wicket'.
- */
- public static final String DEFAULT_WICKET_NAMESPACE =
MarkupParser.WICKET;
+ /** True if a href attribute is available and autolinking is on */
+ private final static int AUTOLINK = 0x0001;
+
+ /** True, if attributes have been modified or added */
+ private final static int MODIFIED = 0x0002;
+
+ /** If true, than the MarkupParser will ignore (remove) it. Temporary
working variable */
+ private final static int IGNORE = 0x0004;
+
+ /** If true, than the tag contain an automatically created wicket id */
+ private final static int AUTO_COMPONENT = 0x0008;
+
+ /** Some HTML tags are allow to have no close tag, e.g. 'br' */
+ private final static int NO_CLOSE_TAG = 0x0010;
+
+ /** The component tag shall be added to the markup in any case */
+ public final static int ADD = 0x0020;
+
+ /** Render the tag as RawMarkup even if no Component can be found */
+ public final static int RENDER_RAW = 0x0040;
/**
* Assuming this is a open (or open-close) tag, 'closes' refers to the
ComponentTag which closes
@@ -61,8 +77,8 @@ public class ComponentTag extends Markup
/** The underlying xml tag */
protected final XmlTag xmlTag;
- /** True if a href attribute is available and autolinking is on */
- private boolean autolink = false;
+ /** Boolean flags. See above */
+ private int flags = 0;
/**
* By default this is equal to the wicket:id="xxx" attribute value, but
may be provided e.g. for
@@ -70,17 +86,6 @@ public class ComponentTag extends Markup
*/
private String id;
- /** True, if attributes have been modified or added */
- private boolean modified = false;
-
- /**
- * If true, than the MarkupParser will ignore (remove) it. Temporary
working variable
- */
- private boolean ignore = false;
-
- /** If true, than the tag contain an automatically created wicket id */
- private boolean autoComponent = false;
-
/**
* In case of inherited markup, the base and the extended markups are
merged and the information
* about the tags origin is lost. In some cases like wicket:head and
wicket:link this
@@ -88,12 +93,6 @@ public class ComponentTag extends Markup
*/
private WeakReference<Class<? extends Component>> markupClassRef = null;
- /**
- * Tags which are detected to have only an open tag, which is allowed
with some HTML tags like
- * 'br' for example
- */
- private boolean hasNoCloseTag = false;
-
/** added behaviors */
private List<Behavior> behaviors;
@@ -142,6 +141,38 @@ public class ComponentTag extends Markup
}
/**
+ * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT!
+ *
+ * @param flag
+ * The flag to set
+ * @param set
+ * True to turn the flag on, false to turn it off
+ */
+ public final void setFlag(final int flag, final boolean set)
+ {
+ if (set)
+ {
+ flags |= flag;
+ }
+ else
+ {
+ flags &= ~flag;
+ }
+ }
+
+ /**
+ * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT!
+ *
+ * @param flag
+ * The flag to test
+ * @return True if the flag is set
+ */
+ public final boolean getFlag(final int flag)
+ {
+ return (flags & flag) != 0;
+ }
+
+ /**
* Adds a behavior to this component tag.
*
* @param behavior
@@ -155,7 +186,7 @@ public class ComponentTag extends Markup
if (behaviors == null)
{
- behaviors = new ArrayList<Behavior>();
+ behaviors = Generics.newArrayList();
}
behaviors.add(behavior);
}
@@ -210,7 +241,7 @@ public class ComponentTag extends Markup
*/
public final void enableAutolink(final boolean autolink)
{
- this.autolink = autolink;
+ setFlag(AUTOLINK, autolink);
}
/**
@@ -234,6 +265,19 @@ public class ComponentTag extends Markup
}
/**
+ * Please use {@link #getAttribute(String)} instead
+ *
+ * @param name
+ * @return The attribute
+ * @deprecated since 1.5
+ */
+ @Deprecated
+ public final String getString(String name)
+ {
+ return getAttribute(name);
+ }
+
+ /**
* Get the tag's component id
*
* @return The component id attribute of this tag
@@ -300,17 +344,6 @@ public class ComponentTag extends Markup
}
/**
- * @see org.apache.wicket.markup.parser.XmlTag#getString(String)
- * @param key
- * The key
- * @return The string value
- */
- public final CharSequence getString(String key)
- {
- return xmlTag.getString(key);
- }
-
- /**
* @return the tag type (OPEN, CLOSE or OPEN_CLOSE).
*/
public final TagType getType()
@@ -325,7 +358,7 @@ public class ComponentTag extends Markup
*/
public final boolean isAutolinkEnabled()
{
- return autolink;
+ return getFlag(AUTOLINK);
}
/**
@@ -410,7 +443,7 @@ public class ComponentTag extends Markup
}
else
{
- final ComponentTag tag = new
ComponentTag(xmlTag.mutable());
+ ComponentTag tag = new ComponentTag(xmlTag.mutable());
copyPropertiesTo(tag);
return tag;
}
@@ -426,8 +459,7 @@ public class ComponentTag extends Markup
void copyPropertiesTo(final ComponentTag dest)
{
dest.id = id;
- dest.setHasNoCloseTag(hasNoCloseTag);
- dest.setAutoComponentTag(autoComponent);
+ dest.flags = flags;
if (markupClassRef != null)
{
dest.setMarkupClass(markupClassRef.get());
@@ -699,7 +731,7 @@ public class ComponentTag extends Markup
{
response.write(" ");
response.write(key);
- CharSequence value = getString(key);
+ CharSequence value = getAttribute(key);
// attributes without values are
possible, e.g.' disabled'
if (value != null)
@@ -748,7 +780,7 @@ public class ComponentTag extends Markup
*/
public final void setModified(final boolean modified)
{
- this.modified = modified;
+ setFlag(MODIFIED, modified);
}
/**
@@ -757,7 +789,7 @@ public class ComponentTag extends Markup
*/
final boolean isModified()
{
- return modified;
+ return getFlag(MODIFIED);
}
/**
@@ -766,7 +798,7 @@ public class ComponentTag extends Markup
*/
public boolean hasNoCloseTag()
{
- return hasNoCloseTag;
+ return getFlag(NO_CLOSE_TAG);
}
/**
@@ -776,7 +808,7 @@ public class ComponentTag extends Markup
*/
public void setHasNoCloseTag(boolean hasNoCloseTag)
{
- this.hasNoCloseTag = hasNoCloseTag;
+ setFlag(NO_CLOSE_TAG, hasNoCloseTag);
}
/**
@@ -832,7 +864,7 @@ public class ComponentTag extends Markup
*/
public boolean isIgnore()
{
- return ignore;
+ return getFlag(IGNORE);
}
/**
@@ -843,7 +875,7 @@ public class ComponentTag extends Markup
*/
public void setIgnore(boolean ignore)
{
- this.ignore = ignore;
+ setFlag(IGNORE, ignore);
}
/**
@@ -851,7 +883,7 @@ public class ComponentTag extends Markup
*/
public boolean isAutoComponentTag()
{
- return autoComponent;
+ return getFlag(AUTO_COMPONENT);
}
/**
@@ -860,7 +892,7 @@ public class ComponentTag extends Markup
*/
public void setAutoComponentTag(boolean auto)
{
- autoComponent = auto;
+ setFlag(AUTO_COMPONENT, auto);
}
/**
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java?rev=1083270&r1=1083269&r2=1083270&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/MarkupParser.java
Sat Mar 19 19:54:25 2011
@@ -27,6 +27,7 @@ import org.apache.wicket.markup.parser.f
import org.apache.wicket.markup.parser.filter.HtmlHeaderSectionHandler;
import org.apache.wicket.markup.parser.filter.OpenCloseTagExpander;
import org.apache.wicket.markup.parser.filter.RelativePathPrefixHandler;
+import org.apache.wicket.markup.parser.filter.StyleAndScriptIdentifier;
import org.apache.wicket.markup.parser.filter.WicketLinkTagHandler;
import org.apache.wicket.markup.parser.filter.WicketMessageTagHandler;
import org.apache.wicket.markup.parser.filter.WicketNamespaceHandler;
@@ -180,6 +181,7 @@ public class MarkupParser extends Abstra
filters.add(new OpenCloseTagExpander());
filters.add(new RelativePathPrefixHandler());
filters.add(new EnclosureHandler());
+ filters.add(new StyleAndScriptIdentifier(markup));
return filters;
}
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java?rev=1083270&r1=1083269&r2=1083270&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/AbstractMarkupFilter.java
Sat Mar 19 19:54:25 2011
@@ -19,6 +19,7 @@ package org.apache.wicket.markup.parser;
import java.text.ParseException;
import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.Markup;
/**
@@ -92,4 +93,8 @@ public abstract class AbstractMarkupFilt
{
return count++;
}
+
+ public void postProcess(final Markup markup)
+ {
+ }
}
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/IMarkupFilter.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/IMarkupFilter.java?rev=1083270&r1=1083269&r2=1083270&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/IMarkupFilter.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/IMarkupFilter.java
Sat Mar 19 19:54:25 2011
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.parser;
import java.text.ParseException;
+import org.apache.wicket.markup.Markup;
import org.apache.wicket.markup.MarkupElement;
@@ -59,4 +60,11 @@ public interface IMarkupFilter
* The next element in the chain
*/
void setNextFilter(final IMarkupFilter parent);
+
+ /**
+ * Called after all filters have been processed
+ *
+ * @param markup
+ */
+ void postProcess(final Markup markup);
}
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RootMarkupFilter.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RootMarkupFilter.java?rev=1083270&r1=1083269&r2=1083270&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RootMarkupFilter.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/RootMarkupFilter.java
Sat Mar 19 19:54:25 2011
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.parser.
import java.text.ParseException;
+import org.apache.wicket.markup.Markup;
import org.apache.wicket.markup.MarkupElement;
import org.apache.wicket.markup.parser.IMarkupFilter;
import org.apache.wicket.markup.parser.IXmlPullParser;
@@ -76,4 +77,8 @@ public final class RootMarkupFilter impl
{
return parser.next();
}
+
+ public void postProcess(Markup markup)
+ {
+ }
}
Added:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/StyleAndScriptIdentifier.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/StyleAndScriptIdentifier.java?rev=1083270&view=auto
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/StyleAndScriptIdentifier.java
(added)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/StyleAndScriptIdentifier.java
Sat Mar 19 19:54:25 2011
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.parser.filter;
+
+import java.text.ParseException;
+
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.Markup;
+import org.apache.wicket.markup.MarkupElement;
+import org.apache.wicket.markup.RawMarkup;
+import org.apache.wicket.markup.parser.XmlPullParser;
+
+
+/**
+ *
+ * @author Juergen Donnerstag
+ */
+public final class StyleAndScriptIdentifier extends BaseMarkupFilter
+{
+ private boolean found;
+
+ private final Markup markup;
+
+ /**
+ * Construct.
+ *
+ * @param markup
+ */
+ public StyleAndScriptIdentifier(final Markup markup)
+ {
+ this.markup = markup;
+ }
+
+ @Override
+ protected final MarkupElement nextTag(final ComponentTag tag) throws
ParseException
+ {
+ if (tag.getNamespace() != null)
+ {
+ return tag;
+ }
+
+ if (XmlPullParser.SCRIPT.equalsIgnoreCase(tag.getName()) ||
+ (XmlPullParser.STYLE.equalsIgnoreCase(tag.getName())))
+ {
+ if (tag.isOpen() && (tag.getId() == null))
+ {
+ // Not needed, but must not be null
+ tag.setId("_ScriptStyle");
+ tag.setModified(true);
+ }
+
+ tag.setFlag(ComponentTag.ADD, true);
+ tag.setFlag(ComponentTag.RENDER_RAW, true);
+ tag.setUserData("STYLE_OR_SCRIPT", Boolean.TRUE);
+ }
+
+ return tag;
+ }
+
+ @Override
+ public void postProcess(Markup markup)
+ {
+ for (int i = 0; i < markup.size(); i++)
+ {
+ MarkupElement elem = markup.get(i);
+ if (elem instanceof ComponentTag)
+ {
+ ComponentTag open = (ComponentTag)elem;
+ if (open.getUserData("STYLE_OR_SCRIPT") != null)
+ {
+ if (open.isOpen() && ((i + 2) <
markup.size()))
+ {
+ MarkupElement body =
markup.get(i + 1);
+ MarkupElement tag2 =
markup.get(i + 2);
+
+ if ((body instanceof RawMarkup)
&& (tag2 instanceof ComponentTag))
+ {
+ ComponentTag close =
(ComponentTag)tag2;
+ if (close.closes(open))
+ {
+ String text =
body.toString().trim();
+ if
(!text.startsWith("<!--") && !text.startsWith("<![CDATA["))
+ {
+ text =
"<![CDATA[" + body.toString() + "]]>";
+
markup.replace(i + 1, new RawMarkup(text));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/mock/MockHomePage.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/mock/MockHomePage.java?rev=1083270&r1=1083269&r2=1083270&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/mock/MockHomePage.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/mock/MockHomePage.java
Sat Mar 19 19:54:25 2011
@@ -18,7 +18,11 @@ package org.apache.wicket.mock;
import org.apache.wicket.markup.html.WebPage;
+/**
+ * Mock Page
+ */
public class MockHomePage extends WebPage
{
+ private static final long serialVersionUID = 1L;
}
Modified:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ajax/MockComponent1-expected.html
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ajax/MockComponent1-expected.html?rev=1083270&r1=1083269&r2=1083270&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ajax/MockComponent1-expected.html
(original)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ajax/MockComponent1-expected.html
Sat Mar 19 19:54:25 2011
@@ -1,9 +1,9 @@
<![CDATA[<head xmlns:wicket="http://wicket.apache.org">
-<style type="text/css" id="org-apache-wicket-ajax-MockComponent1-0">
+<style type="text/css" id="org-apache-wicket-ajax-MockComponent1-0"><![CDATA[
.onTheFlyClass {
background-color: red;
color: white;
width: 200px;
}
-</style>
+]^]^></style>
</head>]]>
\ No newline at end of file
Modified:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/MarkupParserTest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/MarkupParserTest.java?rev=1083270&r1=1083269&r2=1083270&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/MarkupParserTest.java
(original)
+++
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/MarkupParserTest.java
Sat Mar 19 19:54:25 2011
@@ -385,12 +385,10 @@ public final class MarkupParserTest exte
"<html wicket:id=\"test\"><script
language=\"JavaScript\">... <x a> ...</script></html>");
IMarkupFragment markup = parser.parse();
- assertEquals(3, markup.size());
+ assertEquals(5, markup.size());
assertEquals("html", ((ComponentTag)markup.get(0)).getName());
- assertEquals("html", ((ComponentTag)markup.get(2)).getName());
- assertEquals(true, markup.get(1) instanceof RawMarkup);
- assertEquals("<script language=\"JavaScript\">... <x a>
...</script>", markup.get(1)
- .toString());
+ assertEquals("html", ((ComponentTag)markup.get(4)).getName());
+ assertEquals("<![CDATA[... <x a> ...]]>",
markup.get(2).toString());
}
/**
@@ -431,4 +429,78 @@ public final class MarkupParserTest exte
RawMarkup raw = (RawMarkup)markup.get(0);
assertEquals("<span> </span>", raw.toString());
}
+
+ /**
+ *
+ * @throws IOException
+ * @throws ResourceStreamNotFoundException
+ */
+ public final void testScript1() throws IOException,
ResourceStreamNotFoundException
+ {
+ IMarkupFragment markup = new MarkupParser("<script/>").parse();
+ assertEquals(1, markup.size());
+ MarkupElement tag = markup.get(0);
+ assertEquals("<script/>", tag.toString());
+
+ markup = new MarkupParser("<script></script>").parse();
+ assertEquals(2, markup.size());
+ tag = markup.get(0);
+ assertEquals("<script>", tag.toString());
+ tag = markup.get(1);
+ assertEquals("</script>", tag.toString());
+
+ markup = new MarkupParser("<script> text </script>").parse();
+ assertEquals(3, markup.size());
+ tag = markup.get(0);
+ assertEquals("<script>", tag.toString());
+ tag = markup.get(1);
+ assertEquals("<![CDATA[ text ]]>", tag.toString());
+ tag = markup.get(2);
+ assertEquals("</script>", tag.toString());
+
+ markup = new MarkupParser("<script><!-- text
--></script>").parse();
+ assertEquals(3, markup.size());
+ tag = markup.get(0);
+ assertEquals("<script>", tag.toString());
+ tag = markup.get(1);
+ assertEquals("<!-- text -->", tag.toString());
+ tag = markup.get(2);
+ assertEquals("</script>", tag.toString());
+
+ markup = new MarkupParser("<script> <!-- text -->
</script>").parse();
+ assertEquals(3, markup.size());
+ tag = markup.get(0);
+ assertEquals("<script>", tag.toString());
+ tag = markup.get(1);
+ assertEquals(" <!-- text --> ", tag.toString());
+ tag = markup.get(2);
+ assertEquals("</script>", tag.toString());
+
+ markup = new MarkupParser("<style><![CDATA[ text
]]></style>").parse();
+ assertEquals(3, markup.size());
+ tag = markup.get(0);
+ assertEquals("<style>", tag.toString());
+ tag = markup.get(1);
+ assertEquals("<![CDATA[ text ]]>", tag.toString());
+ tag = markup.get(2);
+ assertEquals("</style>", tag.toString());
+
+ markup = new MarkupParser("<html><script> text
</script></html>").parse();
+ assertEquals(5, markup.size());
+ tag = markup.get(1);
+ assertEquals("<script>", tag.toString());
+ tag = markup.get(2);
+ assertEquals("<![CDATA[ text ]]>", tag.toString());
+ tag = markup.get(3);
+ assertEquals("</script>", tag.toString());
+
+ markup = new MarkupParser("<html wicket:id='xx'><script> text
</script></html>").parse();
+ assertEquals(5, markup.size());
+ tag = markup.get(1);
+ assertEquals("<script>", tag.toString());
+ tag = markup.get(2);
+ assertEquals("<![CDATA[ text ]]>", tag.toString());
+ tag = markup.get(3);
+ assertEquals("</script>", tag.toString());
+ }
}