On Tue, Mar 16, 2010 at 18:32, Vincent Massol <vincent(a)massol.net> wrote:
On Mar 16, 2010, at 6:28 PM, mflorea (SVN) wrote:
Author: mflorea
Date: 2010-03-16 18:28:54 +0100 (Tue, 16 Mar 2010)
New Revision: 27661
Modified:
platform/web/trunk/xwiki-gwt-wysiwyg-server/src/main/java/com/xpn/xwiki/wysiwyg/server/plugin/WysiwygPluginApi.java
Log:
XWIKI-5013: HTML code visible when inserting velocity macro displaying a property
Modified:
platform/web/trunk/xwiki-gwt-wysiwyg-server/src/main/java/com/xpn/xwiki/wysiwyg/server/plugin/WysiwygPluginApi.java
===================================================================
---
platform/web/trunk/xwiki-gwt-wysiwyg-server/src/main/java/com/xpn/xwiki/wysiwyg/server/plugin/WysiwygPluginApi.java
2010-03-16 15:51:03 UTC (rev 27660)
+++
platform/web/trunk/xwiki-gwt-wysiwyg-server/src/main/java/com/xpn/xwiki/wysiwyg/server/plugin/WysiwygPluginApi.java
2010-03-16 17:28:54 UTC (rev 27661)
@@ -35,6 +35,14 @@
public class WysiwygPluginApi extends Api
{
/**
+ * The context property which indicates if the current code was called from a
template (only Velocity execution) or
+ * from a wiki page (wiki syntax rendering).
+ *
+ * @see #parseAndRender(String, String)
+ */
+ private static final String IS_IN_RENDERING_ENGINE =
"isInRenderingEngine";
+
+ /**
* The plugin instance.
*/
private WysiwygPlugin plugin;
@@ -98,11 +106,26 @@
*/
public String parseAndRender(String html, String syntax)
{
+ // Save the value of the "is in rendering engine" context property.
+ Object isInRenderingEngine = context.get(IS_IN_RENDERING_ENGINE);
+
try {
+ // This tells display() methods that we are inside the rendering engine and
thus that they can return wiki
+ // syntax and not HTML syntax (which is needed when outside the rendering
engine, i.e. when we're inside
+ // templates using only Velocity for example).
+ context.put(IS_IN_RENDERING_ENGINE, true);
+
return Utils.getComponent(HTMLConverter.class).parseAndRender(html, syntax);
} catch (Exception e) {
// Leave the previous HTML in case of an exception.
return html;
+ } finally {
+ // Restore the value of the value of the "is in rendering engine"
context property.
+ if (isInRenderingEngine != null) {
+ context.put(IS_IN_RENDERING_ENGINE, isInRenderingEngine);
+ } else {
+ context.remove(IS_IN_RENDERING_ENGINE);
+ }
Shouldn't you always put back the value that you saved (even if it's null) ?
It's basically what he does with context.remove, XWikiContext does not
support null value because it's a Hashtable.
Thanks
-Vincent
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs