On 01/19/2011 03:30 PM, Sergiu Dumitriu wrote:
On 01/19/2011 02:20 PM, Vincent Massol wrote:
On Jan 19, 2011, at 2:05 PM, sdumitriu (SVN) wrote:
Author: sdumitriu Date: 2011-01-19 14:05:06 +0100 (Wed, 19 Jan 2011) New Revision: 33998
Modified: platform/web/trunk/standard/src/main/webapp/templates/macros.vm Log: XWIKI-5890: #setVariableFromRequest doesn't work with Velocity 1.7, replace with #readVariableFromRequest Corrected #setVariable so that it doesn't output any whitespace.
Modified: platform/web/trunk/standard/src/main/webapp/templates/macros.vm =================================================================== --- platform/web/trunk/standard/src/main/webapp/templates/macros.vm 2011-01-19 13:01:30 UTC (rev 33997) +++ platform/web/trunk/standard/src/main/webapp/templates/macros.vm 2011-01-19 13:05:06 UTC (rev 33998) @@ -1508,13 +1508,13 @@ * @param value the value to assign *### #macro(setVariable $variableName $value) - ## Only do this if the variable name is really a valid variable name - #if ($variableName.matches('[a-zA-Z_][a-zA-Z0-9_-]*')) - #evaluate("${escapetool.h}set(${escapetool.d}${variableName}=${escapetool.d}value)") - #elseif ($variableName.matches('\$[a-zA-Z_][a-zA-Z0-9_-]*')) - #evaluate("${escapetool.h}set(${variableName}=${escapetool.d}value)") - #end +## Only do this if the variable name is really a valid variable name +#if ($variableName.matches('[a-zA-Z_][a-zA-Z0-9_-]*')) +#evaluate("${escapetool.h}set(${escapetool.d}${variableName}=${escapetool.d}value)") +#elseif ($variableName.matches('\$[a-zA-Z_][a-zA-Z0-9_-]*')) +#evaluate("${escapetool.h}set(${variableName}=${escapetool.d}value)") #end +#end
So we can't use indentation in macros? Should we document this generally or is it specific to this macro (in which case maybe we should add a comment so that the next person doesn't start indenting it)?
I don't know, Marius complained that #setVariable creates whitespace, so I removed them for this macro. For the other macros, it depends. I'd say that utility macros that bring essential functionality should not output spaces.
In XWiki.ConfigurableClass #setVariable velocity macro is called between two HTML macros that generate only script tags: {{html}} <script>...</script> {{html}} One problem is that SCRIPT tag is considered a block level element by the HTML macro and as a result something like: before{{html}}<script>alert('Hi!')</script>{{/html}}after fails to be rendered. In our case "before" and "after" are spaces generated by #setVariable macro call. If we leave empty lines before and after these two HTML macros they will be rendered fine BUT we'll get a paragraph with spaces between the two SCRIPT tags, spaces coming from the #setVariable macro call.
The problem comes from the fact that in wiki content, {{velocity}} has a default whitespace filter which takes care of indentation whitespace, but calling global macros will output the whitespace present in the original macro.
Exactly. If I put the code of the #setVariable velocity macro in a wiki page, inside a {{velocity}} macro, then spaces are filtered. Thanks, Marius
Maybe macros.vm should also be passed through the whitespace filter before being parsed? Is that even possible?