<?xml version="1.0"?>
<rss version="2.0">
<channel>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/</link>
<title>helma.org/wiki/New Skin Features in Helma 1.6</title>
<description>Updates for Page helma.org/wiki/New Skin Features in Helma 1.6</description>
<pubDate>Thu, 24 May 2012 15:18:23 +0000</pubDate>
<item>
<title>Version 21</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=21</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;51&lt;/td&gt;&lt;td&gt;=== &lt;span class=&#39;diffremoved&#39;&gt;Processed parameters and nested &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;Nested &lt;/span&gt;Macros ===&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;53&lt;/td&gt;&lt;td&gt;Helma 1.6 &lt;span class=&#39;diffremoved&#39;&gt;introduces features to automatically process &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;supports nested macros as &lt;/span&gt;macro &lt;span class=&#39;diffremoved&#39;&gt;tag parameters before passing them to the macro function. If a macro &lt;/span&gt;parameter &lt;span class=&#39;diffremoved&#39;&gt;is wrapped as &amp;lt;code&amp;gt;$[name]&amp;lt;/code&amp;gt;, the value is replaced with the object registered in &amp;lt;code&amp;gt;res.handlers&amp;lt;/code&amp;gt; with that name&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;values&lt;/span&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;54&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;55&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&amp;nbsp; &amp;lt;% page.image linkto=$[handlerName] %&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;56&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;57&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;If a macro paramter is wrapped as &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt;, it is passed to a callback &amp;lt;code&amp;gt;app.processMacroParameter&amp;lt;/code&amp;gt;. The callback takes the unprocessed parameter value as argument and returns the processed value.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;58&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;59&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&amp;nbsp; app.processMacroParameter = function(value) {&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;60&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&amp;nbsp; &amp;nbsp; if (value == &amp;quot;header&amp;quot;)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;61&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;&amp;lt;h1&amp;gt;Page List&amp;lt;/h1&amp;gt;&amp;quot;;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;62&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;63&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;64&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&amp;nbsp; &amp;lt;% page.list prefix=$(header) %&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;65&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;66&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;Helma 1.6 also allows macros as macro parameter values.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Wed, 02 May 2007 15:35:38 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 20</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=20</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;84&lt;/td&gt;&lt;td&gt;The first is the &lt;span class=&#39;diffremoved&#39;&gt;&amp;lt;code&amp;gt;unhandledMacro&amp;lt;/code&amp;gt; &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;lt;code&amp;gt;onUnhandledMacro&amp;lt;/code&amp;gt; &lt;/span&gt;callback. If this is defined (in the global scope or on the handler object, depending on whether the macro is global or not), it is invoked with the name of the unhandled macro, followed by the macro parameters. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;86&lt;/td&gt;&lt;td&gt;&amp;nbsp; function &lt;span class=&#39;diffremoved&#39;&gt;unhandledMacro(name&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;onUnhandledMacro(name&lt;/span&gt;, param) &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;94&lt;/td&gt;&lt;td&gt;Note that &lt;span class=&#39;diffremoved&#39;&gt;&amp;lt;code&amp;gt;unhandledMacro&amp;lt;/code&amp;gt; &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;lt;code&amp;gt;onUnhandledMacro&amp;lt;/code&amp;gt; &lt;/span&gt;is only invoked if Helma was actually able to resolve the handler object, i.e. everything up to the actual macro name. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Thu, 05 Apr 2007 00:20:42 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 19</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=19</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;80&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;=== Fix quoted parameter parsing ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;81&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;82&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;In Helma 1.5 and earlier, a &amp;quot;%&amp;gt;&amp;quot; sequence was interpreted as macro end tag even if it was contained in a quoted parameter string. Helma 1.6 fixes this, making it possible to pass strings containing macro tags as parameter values to be rendered as skin by the macro function.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;83&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;103&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;104&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;=== Namespaces for global macros ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;105&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;106&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;It is now possible to use global macros that are defined in a namespace as opposed to the global scope itself. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;107&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;108&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; app.globalMacroPath = [&amp;quot;myapp.macros&amp;quot;, &amp;quot;helma.macros&amp;quot;, &amp;quot;&amp;quot;];&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;109&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;110&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Helma will loop through the namespaces defined in app.globalMacroPath until it finds the macro or filter it is looking for.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;111&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;112&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;=== Fix quoted parameter parsing ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;113&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;114&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;In Helma 1.5 and earlier, a &amp;quot;%&amp;gt;&amp;quot; sequence was interpreted as macro end tag even if it was contained in a quoted parameter string. Helma 1.6 fixes this, making it possible to pass strings containing macro tags as parameter values to be rendered as skin by the macro function.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Wed, 04 Apr 2007 15:23:08 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 18</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=18</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;19&lt;/td&gt;&lt;td&gt;=== Macro &lt;span class=&#39;diffremoved&#39;&gt;pipes/filters &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;filters &lt;/span&gt;===&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;25&lt;/td&gt;&lt;td&gt;Filter functions must have a _filter suffix and get two arguments: the return value of the previous &lt;span class=&#39;diffremoved&#39;&gt;macro/filter &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;macro or filter &lt;/span&gt;in the chain, and a parameter object with the attributs in the filter tag. They are expected to return the filtered macro output. Macro and filter return values are converted to string only at the end of the chain. It is therefore possible to pass other objects between macros and filters:&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;41&lt;/td&gt;&lt;td&gt;=== &lt;span class=&#39;diffremoved&#39;&gt;Deep/Reach-through macro invocation &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;Deep macros &lt;/span&gt;===&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Wed, 04 Apr 2007 14:56:00 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 17</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=17</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;3&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;=== Subskins ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;4&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;5&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;It is now possible to have multiple skins in one skin resource. Subskins are delimited using a &amp;lt;code&amp;gt;&amp;lt;% #subname %&amp;gt;&amp;lt;/code&amp;gt; tag. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;6&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;7&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; main skin body&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;8&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;lt;% #subskin1 %&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;9&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; subskin 1 body&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;10&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;lt;% #subskin2 %&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;11&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; subskin 2 body&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;12&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;13&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Subskins can be referenced from the outside as &amp;quot;skinname#subname&amp;quot;. While a skin or subskin is being rendered (i.e. from macros contained in that skin), it is possible to reference other local subskins just using &amp;quot;#subname&amp;quot;. Skin objects also *provide a getSubskin() method|http://helma.zumbrunn.net/reference/Skin.html*.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;14&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;15&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; renderSkin(&amp;quot;mainskin&amp;quot;);&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;16&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; renderSkin(&amp;quot;mainskin#subskin1&amp;quot;);&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;17&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; renderSkin(skin.getSubskin(&amp;quot;subskin2&amp;quot;));&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;18&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;6&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Helme 1.6 introduces a new filter feature to further process macro output.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;7&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;12&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;17&lt;/td&gt;&lt;td&gt;&amp;nbsp; function &lt;span class=&#39;diffremoved&#39;&gt;format_filter(arg&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;format_filter(date&lt;/span&gt;, param) &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;18&lt;/td&gt;&lt;td&gt;&amp;nbsp; &amp;nbsp; return &lt;span class=&#39;diffremoved&#39;&gt;arg&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;date&lt;/span&gt;.format();&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;30&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;Since deep macro invocation poses a potential security risk for applications that support skins by untrusted users, this feature &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;The handler object path &lt;/span&gt;is &lt;span class=&#39;diffremoved&#39;&gt;disabled &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;resolved &lt;/span&gt;by &lt;span class=&#39;diffremoved&#39;&gt;default &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;calling method &amp;lt;code&amp;gt;getMacroHandler(name)&amp;lt;/code&amp;gt; successively on each handler path element. The method takes the next path element as string &lt;/span&gt;and &lt;span class=&#39;diffremoved&#39;&gt;must be enabled with &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;is supposed to return &lt;/span&gt;the &lt;span class=&#39;diffremoved&#39;&gt;allowDeepMacros setting in app&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;next path element, similar to getChildElement(name) for request path resolution&lt;/span&gt;.&lt;span class=&#39;diffremoved&#39;&gt;properties or server.properties file:&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;32&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;For untyped JavaScript objects,&lt;/span&gt;&amp;nbsp;&lt;span class=&#39;diffadded&#39;&gt;macro path resolution also works in an autmatic way by following object properties.&lt;/span&gt;&amp;nbsp;&lt;span class=&#39;diffremoved&#39;&gt;allowDeepMacros =&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;For prototyped HopObjects,&lt;/span&gt;&amp;nbsp;&lt;span class=&#39;diffremoved&#39;&gt;true&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;this mechanism is disabled because of security considerations.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;34&lt;/td&gt;&lt;td&gt;=== &lt;span class=&#39;diffremoved&#39;&gt;Nested &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;Processed parameters and nested &lt;/span&gt;Macros ===&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;36&lt;/td&gt;&lt;td&gt;Helma 1.6 &lt;span class=&#39;diffremoved&#39;&gt;allows macros as &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;introduces features to automatically process &lt;/span&gt;macro &lt;span class=&#39;diffremoved&#39;&gt;attribute values&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;tag parameters before passing them to the macro function. If a macro parameter is wrapped as &amp;lt;code&amp;gt;$[name]&amp;lt;/code&amp;gt;, the value is replaced with the object registered in &amp;lt;code&amp;gt;res.handlers&amp;lt;/code&amp;gt; with that name&lt;/span&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;38&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;lt;% page.image linkto=$[handlerName] %&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;39&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;40&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;If a macro paramter is wrapped as &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt;, it is passed to a callback &amp;lt;code&amp;gt;app.processMacroParameter&amp;lt;/code&amp;gt;. The callback takes the unprocessed parameter value as argument and returns the processed value.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;41&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;42&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; app.processMacroParameter = function(value) {&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;43&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; if (value == &amp;quot;header&amp;quot;)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;44&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;&amp;lt;h1&amp;gt;Page List&amp;lt;/h1&amp;gt;&amp;quot;;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;45&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;46&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;47&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;lt;% page.list prefix=$(header) %&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;48&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;49&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Helma 1.6 also allows macros as macro parameter values.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;50&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;55&lt;/td&gt;&lt;td&gt;=== &lt;span class=&#39;diffremoved&#39;&gt;New standard failmode attribute &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;Unhandled macros &lt;/span&gt;===&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;57&lt;/td&gt;&lt;td&gt;Helma &lt;span class=&#39;diffremoved&#39;&gt;macros support a &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;1.6 introduces two &lt;/span&gt;new &lt;span class=&#39;diffremoved&#39;&gt;standard attribute, in addition to &amp;lt;code&amp;gt;prefix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;suffix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;encoding&amp;lt;/code&amp;gt;&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;features for dealing with unhandled macros&lt;/span&gt;.&lt;span class=&#39;diffremoved&#39;&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;59&lt;/td&gt;&lt;td&gt;The &lt;span class=&#39;diffremoved&#39;&gt;&amp;lt;code&amp;gt;failmode&amp;lt;/code&amp;gt; attribute,&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;first is the &amp;lt;code&amp;gt;unhandledMacro&amp;lt;/code&amp;gt; callback.&lt;/span&gt;&amp;nbsp;&lt;span class=&#39;diffremoved&#39;&gt;if defined&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;If this is defined (in the global scope or on the handler object&lt;/span&gt;, &lt;span class=&#39;diffremoved&#39;&gt;will cause error messages for failed &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;depending on whether the macro is global &lt;/span&gt;or &lt;span class=&#39;diffremoved&#39;&gt;unresolved macros to be generated or suppressed&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;not), it is invoked with the name of the unhandled macro, followed by the macro parameters&lt;/span&gt;.&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;61&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; function unhandledMacro(name, param) {&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;62&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (name == &amp;quot;dynamacro&amp;quot;) {&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;63&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // actually do something useful&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;64&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;65&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;quot;oops, unhandled macro &amp;quot; + name;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;66&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;67&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;68&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;69&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Note that &amp;lt;code&amp;gt;unhandledMacro&amp;lt;/code&amp;gt; is only invoked if Helma was actually able to resolve the handler object, i.e. everything up to the actual macro name. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;70&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;71&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;If a macro is not defined, and no &amp;lt;code&amp;gt;undefinedMacro&amp;lt;/code&amp;gt; method is defined on the handler object, the generation of an error message can be controlled using the &amp;lt;code&amp;gt;failmode&amp;lt;/code&amp;gt; attribute. If defined, it will cause error messages for failed or unresolved macros to be generated or suppressed.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;72&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;67&lt;/td&gt;&lt;td&gt;=== Compatibility &lt;span class=&#39;diffadded&#39;&gt;and Security &lt;/span&gt;issues ===&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;71&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;===&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;The one know security implication introduced by the new features is with deep/reach-through macro invocation and untrusted skin authors,&lt;/span&gt;&amp;nbsp;&lt;span class=&#39;diffremoved&#39;&gt;Security issues ===&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;since it allows skin authors to reach objects that may not be meant to be reached. This is why automatic property walkthrough is disabled for prototyped HopObjects.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;73&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;The one know security implication introduced by the new features is with deep/reach-through macro invocation and untrusted skin authors, since it allows skin authors to reach objects that may not be meant to be reached. Therefore, this feauture is disabled by default and must be activated using the allowDeepMacros property.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;74&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;76&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;=== Known bugs ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Wed, 04 Apr 2007 14:51:00 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 16</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=16</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;41&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;=== Fix quoted parameter parsing ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;42&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;43&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;In Helma 1.5 and earlier, a &amp;quot;%&amp;gt;&amp;quot; sequence was interpreted as macro end tag even if it was contained in a quoted parameter string. Helma 1.6 fixes this, making it possible to pass strings containing macro tags as parameter values to be rendered as skin by the macro function.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;44&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;49&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;50&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;=== Fix quoted parameter parsing ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;51&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;52&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;In Helma 1.5 and earlier, a &amp;quot;%&amp;gt;&amp;quot; sequence was interpreted as macro end tag even if it was contained in a quoted parameter string. Helma 1.6 fixes this, making it possible to pass strings containing macro tags as parameter values to be rendered as skin by the macro function.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Tue, 20 Mar 2007 12:34:55 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 15</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=15</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;41&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;=== Fix quoted parameter parsing ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;42&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;43&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;In Helma 1.5 and earlier, a &amp;quot;%&amp;gt;&amp;quot; sequence was interpreted as macro end tag even if it was contained in a quoted parameter string. Helma 1.6 fixes this, making it possible to pass strings containing macro tags as parameter values to be rendered as skin by the macro function.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;44&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Tue, 20 Mar 2007 12:34:12 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 14</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=14</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;29&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Since deep macro invocation poses a potential security risk for applications that support skins by untrusted users, this feature is disabled by default and must be enabled with the allowDeepMacros setting in app.properties or server.properties file:&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;30&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;31&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; allowDeepMacros = true&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;32&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;38&lt;/td&gt;&lt;td&gt;=== Positional macro &lt;span class=&#39;diffremoved&#39;&gt;arguments &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;parameters &lt;/span&gt;===&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;42&lt;/td&gt;&lt;td&gt;&amp;nbsp; &amp;lt;% image &amp;quot;dancer.gif&amp;quot; alt=&amp;quot;&lt;span class=&#39;diffremoved&#39;&gt;Maggie &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;Helma &lt;/span&gt;dancing her feet off&amp;quot; %&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;63&lt;/td&gt;&lt;td&gt;The one know security implication introduced by the new features is with deep/reach-through macro invocation and untrusted skin authors, since it allows skin authors to reach objects that may not be meant to be reached. &lt;span class=&#39;diffremoved&#39;&gt;It is therefore planned to implement an application property that allows to switch &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;Therefore, &lt;/span&gt;this &lt;span class=&#39;diffremoved&#39;&gt;feature off&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;feauture is disabled by default and must be activated using the allowDeepMacros property&lt;/span&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Tue, 20 Mar 2007 12:18:51 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 13</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=13</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;43&lt;/td&gt;&lt;td&gt;&amp;nbsp; function &lt;span class=&#39;diffremoved&#39;&gt;dancer_macro(param&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;image_macro(param&lt;/span&gt;, imageName) { ... &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;45&lt;/td&gt;&lt;td&gt;=== &lt;span class=&#39;diffadded&#39;&gt;New standard &lt;/span&gt;failmode attribute ===&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Mon, 19 Mar 2007 17:57:54 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 12</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=12</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;37&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;=== Positional macro arguments ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;38&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;39&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;In addition to named parameters, macro functions can now be invoked with positional parameters. If the attribute name and equals sign is omitted from an parameter, it is interpreted as positional parameter. Positional parameters are passed to macro and filter functions after the parameter object containing any named parameters.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;40&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;41&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;lt;% image &amp;quot;dancer.gif&amp;quot; alt=&amp;quot;Maggie dancing her feet off&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;42&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;43&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; function dancer_macro(param, imageName) { ... }&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;44&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;61&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;Currently, the default attribute is never used for property macros. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Mon, 19 Mar 2007 17:56:12 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 11</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=11</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;19&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&amp;nbsp; //You &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;You &lt;/span&gt;can use regular expressions directly as filters:&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;20&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;56&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;57&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;=== Known bugs ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;58&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;59&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Currently, the default attribute is never used for property macros. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Fri, 16 Mar 2007 20:36:12 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 10</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=10</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;19&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; //You can use regular expressions directly as filters:&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;20&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;21&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; var regexp_filter = new RegExp(&amp;quot;\\w*&amp;quot;);&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;22&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Fri, 16 Mar 2007 17:53:29 +0000</pubDate>
<author>klemens</author>
</item>
<item>
<title>Version 9</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=9</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;52&lt;/td&gt;&lt;td&gt;The other new features should not affect security, since it just allows to call macros that were already callable before. The skin sandboxing &lt;span class=&#39;diffremoved&#39;&gt;feauture &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;feature &lt;/span&gt;hasn&#39;t changed and works the same as before. Macro filters are currently not affected by the sandbox.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Fri, 16 Mar 2007 12:22:33 +0000</pubDate>
<author>zumbrunn</author>
</item>
<item>
<title>Version 8</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=8</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;50&lt;/td&gt;&lt;td&gt;The &lt;span class=&#39;diffadded&#39;&gt;one know security implication introduced by the new features is with deep/reach-through macro invocation and untrusted skin authors, since it allows skin authors to reach objects that may not be meant to be reached. It is therefore planned to implement an application property that allows to switch this feature off.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;51&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;52&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;The other new features should not affect security, since it just allows to call macros that were already callable before. The skin sandboxing feauture hasn&#39;t changed and works the same as before. Macro filters are currently not affected by the sandbox.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Fri, 16 Mar 2007 11:29:39 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 7</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=7</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;10&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Fri, 16 Mar 2007 11:23:08 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 6</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=6</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;7&lt;/td&gt;&lt;td&gt;Filter functions must have a _filter suffix and get two arguments: the return value of the previous macro/filter in the chain, and a parameter object with the attributs in the filter tag. They are expected to return the filtered macro output.&lt;span class=&#39;diffadded&#39;&gt; Macro and filter return values are converted to string only at the end of the chain. It is therefore possible to pass other objects between macros and filters:&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;9&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;lt;% now | format %&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;10&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;11&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; function now_macro(param) {&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;12&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; return new Date();&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;13&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;14&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;15&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; function format_filter(arg, param) {&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;16&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; return arg.format();&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;17&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;18&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;12&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Helma 1.6 allows macros to be invoked over several property path links.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;13&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;17&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Helma 1.6 allows macros as macro attribute values.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;18&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;20&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;The main reasons to reject this over the years have been that this is ugly, and that it results in unreadable skins. But then, isn&#39;t recursion one of the coolest concepts in programming? If you think it&#39;s ugly, just don&#39;t use it. Otherwise, it may save you a handsome amount of macro writing.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;21&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;31&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;32&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;=== Compatibility issues ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;33&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;34&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;All the changes and new features in Helma 1.6 skins are backwards compatible with Helma 1.5. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;35&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;36&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;=== Security issues ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;37&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;38&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;The &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Fri, 16 Mar 2007 11:23:02 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 5</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=5</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;1&lt;/td&gt;&lt;td&gt;Helma 1.6 contains a number of Skin/Macro enhancements that aim to make Helma&#39;s rendering infrastructure more flexible and &lt;span class=&#39;diffremoved&#39;&gt;powerful &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;powerful.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;3&lt;/td&gt;&lt;td&gt;===&lt;span class=&#39;diffremoved&#39;&gt;=&lt;/span&gt; Macro &lt;span class=&#39;diffremoved&#39;&gt;pipes/filters&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;pipes/filters ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;9&lt;/td&gt;&lt;td&gt;===&lt;span class=&#39;diffremoved&#39;&gt;=&lt;/span&gt; Deep/Reach-through macro &lt;span class=&#39;diffremoved&#39;&gt;invocation&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;invocation ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;13&lt;/td&gt;&lt;td&gt;===&lt;span class=&#39;diffremoved&#39;&gt;=&lt;/span&gt; Nested &lt;span class=&#39;diffremoved&#39;&gt;Macros&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;Macros ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;17&lt;/td&gt;&lt;td&gt;===&lt;span class=&#39;diffremoved&#39;&gt;=&lt;/span&gt; failmode &lt;span class=&#39;diffremoved&#39;&gt;attribute&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;attribute ===&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;19&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;New &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;Helma macros support a new &lt;/span&gt;standard &lt;span class=&#39;diffremoved&#39;&gt;attribute: failmode=silent|verbose.&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;attribute,&lt;/span&gt;&amp;nbsp;&lt;span class=&#39;diffremoved&#39;&gt;Default value is silent for request/response/session/param handlers&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;in addition to &amp;lt;code&amp;gt;prefix&amp;lt;/code&amp;gt;&lt;/span&gt;, &lt;span class=&#39;diffadded&#39;&gt;&amp;lt;code&amp;gt;suffix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; &lt;/span&gt;and &lt;span class=&#39;diffremoved&#39;&gt;verbose for app object handlers (mimicking implicit Helma 1&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;lt;code&amp;gt;encoding&amp;lt;/code&amp;gt;&lt;/span&gt;.&lt;span class=&#39;diffremoved&#39;&gt;5 behaviour)&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;20&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;21&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;The &amp;lt;code&amp;gt;failmode&amp;lt;/code&amp;gt; attribute, if defined, will cause error messages for failed or unresolved macros to be generated or suppressed.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;22&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;23&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;lt;% failLoudly failmode=&amp;quot;verbose&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;24&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;lt;% failQuitely failmode=&amp;quot;silent&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;25&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;26&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;The default value is silent for request/response/session/param handlers, and verbose for app object handlers (mimicking implicit Helma 1.5 behaviour).&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Fri, 16 Mar 2007 11:12:03 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 4</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=4</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;7&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Fri, 16 Mar 2007 10:59:49 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 3</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=3</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;7&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Fri, 16 Mar 2007 10:59:41 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 2</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=2</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;11&lt;/td&gt;&lt;td&gt;&amp;nbsp; &amp;lt;% page.author.name &lt;span class=&#39;diffadded&#39;&gt;%&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Fri, 16 Mar 2007 10:55:13 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 1</title>
<link>http://helma.org/wiki/New+Skin+Features+in+Helma+1.6/history.diff?v=1</link>
<description>&lt;ul class=&#39;diffproperties&#39;&gt;&lt;li&gt;Set &lt;span class=&#39;diffpropname&#39;&gt;tags&lt;/span&gt; to &lt;span class=&#39;diffadded&#39;&gt;helma 1.6, Skin Rendering, templates&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;1&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Helma 1.6 contains a number of Skin/Macro enhancements that aim to make Helma&#39;s rendering infrastructure more flexible and powerful &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;3&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;==== Macro pipes/filters&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;4&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;5&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;lt;% text | truncate max=&amp;quot;300&amp;quot; | uppercase %&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;6&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;7&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Filter functions must have a _filter suffix and get two arguments: the return value of the previous macro/filter in the chain, and a parameter object with the attributs in the filter tag. They are expected to return the filtered macro output.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;8&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;9&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;==== Deep/Reach-through macro invocation&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;10&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;11&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;lt;% page.author.name %&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;12&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;13&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;==== Nested Macros&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;14&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;15&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;lt;% page.link content=&amp;lt;% messages.storylink %&amp;gt; %&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;16&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;17&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;==== failmode attribute&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;18&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;19&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;New standard attribute: failmode=silent|verbose. Default value is silent for request/response/session/param handlers, and verbose for app object handlers (mimicking implicit Helma 1.5 behaviour)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Fri, 16 Mar 2007 10:54:54 +0000</pubDate>
<author>hannes</author>
</item>
</channel>
</rss>

