On Tue, Mar 16, 2010 at 18:32, Vincent Massol <[email protected]> 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 [email protected] http://lists.xwiki.org/mailman/listinfo/devs
-- Thomas Mortagne