Modified: cocoon/blocks/core/forms/trunk/samples/forms/tasktree_template.xml
URL: 
http://svn.apache.org/viewcvs/cocoon/blocks/core/forms/trunk/samples/forms/tasktree_template.xml?view=diff&r1=161263&r2=161264
==============================================================================
--- cocoon/blocks/core/forms/trunk/samples/forms/tasktree_template.xml 
(original)
+++ cocoon/blocks/core/forms/trunk/samples/forms/tasktree_template.xml Thu Apr 
14 05:32:26 2005
@@ -65,7 +65,7 @@
     
   </style>
   <content>
-    <ft:form-template action="#{$cocoon/continuation/id}.continue" 
method="POST">
+    <ft:form-template action="#{$cocoon/continuation/id}.continue" 
method="POST" ajax="true">
     
       <ft:class id="task-class">
         <div class="section">
@@ -90,20 +90,22 @@
       <ft:class id="tasklist-class">
         <!-- Show the "Add subtask" button only if there are currently no 
subtasks.
              If there are some, more subtasks can be added using the "+" 
button -->
-        <jx:choose>
-          <jx:when test="${widget.getChild('tasks').getSize() > 0}">
-            <ft:repeater-widget id="tasks">
-              <!-- recurse -->
-              <ft:new id="task-class"/>
+        <ft:repeater id="tasks">
+          <jx:choose>
+            <jx:when test="${repeater.getSize() > 0}">
+              <ft:repeater-rows>
+                <!-- recurse -->
+                <ft:new id="task-class"/>
               
-            </ft:repeater-widget>
-          </jx:when>
-          <jx:otherwise>
+              </ft:repeater-rows>
+            </jx:when>
+            <jx:otherwise>
             <ft:widget id="addsub">
-             <fi:styling type="link"/>
-           </ft:widget>
+              <fi:styling type="link"/>
+            </ft:widget>
           </jx:otherwise>
         </jx:choose>
+        </ft:repeater>
       </ft:class>
       
       Project name: <ft:widget id="name"/>

Modified: 
cocoon/blocks/core/forms/trunk/samples/resources/forms-advanced-field-styling.xsl
URL: 
http://svn.apache.org/viewcvs/cocoon/blocks/core/forms/trunk/samples/resources/forms-advanced-field-styling.xsl?view=diff&r1=161263&r2=161264
==============================================================================
--- 
cocoon/blocks/core/forms/trunk/samples/resources/forms-advanced-field-styling.xsl
 (original)
+++ 
cocoon/blocks/core/forms/trunk/samples/resources/forms-advanced-field-styling.xsl
 Thu Apr 14 05:32:26 2005
@@ -90,7 +90,7 @@
     <xsl:variable name="id" select="@id"/>
     <xsl:variable name="values" select="fi:values/fi:value/text()"/>
 
-    <div class="forms-doubleList" title="{fi:hint}">
+    <div id="[EMAIL PROTECTED]" class="forms-doubleList" title="{fi:hint}">
       <table>
         <xsl:if 
test="fi:styling/fi:available-label|fi:styling/fi:selected-label">
           <tr>

Modified: 
cocoon/blocks/core/forms/trunk/samples/resources/forms-calendar-styling.xsl
URL: 
http://svn.apache.org/viewcvs/cocoon/blocks/core/forms/trunk/samples/resources/forms-calendar-styling.xsl?view=diff&r1=161263&r2=161264
==============================================================================
--- cocoon/blocks/core/forms/trunk/samples/resources/forms-calendar-styling.xsl 
(original)
+++ cocoon/blocks/core/forms/trunk/samples/resources/forms-calendar-styling.xsl 
Thu Apr 14 05:32:26 2005
@@ -65,28 +65,30 @@
       </xsl:choose>
     </xsl:variable>
     
-    <!-- regular input -->
-    <input id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" value="{fi:value}" 
title="{normalize-space(fi:hint)}" type="text">
-      <xsl:apply-templates select="." mode="styling"/>
-    </input>
+    <span id="[EMAIL PROTECTED]">
+      <!-- regular input -->
+      <input id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" 
value="{fi:value}" title="{normalize-space(fi:hint)}" type="text">
+        <xsl:apply-templates select="." mode="styling"/>
+      </input>
     
-    <!-- calendar popup -->
-    <xsl:choose>
-      <xsl:when test="@state = 'disabled'">
-        <!-- TODO: i18n key for @alt -->
-        <img src="{$resources-uri}/img/cal.gif" alt="Calendar"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <a href="#" name="{$id}" id="{$id}"
-           onclick="forms_calendar.select(forms_getForm(this)['[EMAIL 
PROTECTED]'],'{$id}','{$format}'); return false;">
+      <!-- calendar popup -->
+      <xsl:choose>
+        <xsl:when test="@state = 'disabled'">
           <!-- TODO: i18n key for @alt -->
           <img src="{$resources-uri}/img/cal.gif" alt="Calendar"/>
-        </a>
-      </xsl:otherwise>
-    </xsl:choose>
+        </xsl:when>
+        <xsl:otherwise>
+          <a href="#" name="{$id}" id="{$id}"
+             onclick="forms_calendar.select(forms_getForm(this)['[EMAIL 
PROTECTED]'],'{$id}','{$format}'); return false;">
+            <!-- TODO: i18n key for @alt -->
+            <img src="{$resources-uri}/img/cal.gif" alt="Calendar"/>
+          </a>
+        </xsl:otherwise>
+      </xsl:choose>
 
-    <!-- common stuff -->
-    <xsl:apply-templates select="." mode="common"/>
+      <!-- common stuff -->
+      <xsl:apply-templates select="." mode="common"/>
+    </span>
   </xsl:template>
 
 </xsl:stylesheet>

Modified: 
cocoon/blocks/core/forms/trunk/samples/resources/forms-field-styling.xsl
URL: 
http://svn.apache.org/viewcvs/cocoon/blocks/core/forms/trunk/samples/resources/forms-field-styling.xsl?view=diff&r1=161263&r2=161264
==============================================================================
--- cocoon/blocks/core/forms/trunk/samples/resources/forms-field-styling.xsl 
(original)
+++ cocoon/blocks/core/forms/trunk/samples/resources/forms-field-styling.xsl 
Thu Apr 14 05:32:26 2005
@@ -30,6 +30,7 @@
 
   <xsl:template match="head" mode="forms-field">
     <script src="{$resources-uri}/js/forms-lib.js" type="text/javascript"/>
+    <script src="{$resources-uri}/js/cforms.js" type="text/javascript"/>
     <link rel="stylesheet" type="text/css" 
href="{$resources-uri}/css/forms.css"/>
   </xsl:template>
 
@@ -48,17 +49,20 @@
       | Generic fi:field : produce an <input>
       +-->
   <xsl:template match="fi:field">
-    <input name="[EMAIL PROTECTED]" id="[EMAIL PROTECTED]" value="{fi:value}" 
title="{fi:hint}" type="text">
-      <xsl:apply-templates select="." mode="styling"/>
-    </input>
-    <xsl:apply-templates select="." mode="common"/>
+    <span id="[EMAIL PROTECTED]">
+      <!--  @id-input is what labels point to -->
+      <input name="[EMAIL PROTECTED]" id="[EMAIL PROTECTED]" 
value="{fi:value}" title="{fi:hint}" type="text">
+        <xsl:apply-templates select="." mode="styling"/>
+      </input>
+      <xsl:apply-templates select="." mode="common"/>
+    </span>
   </xsl:template>
 
   <!--+
       | Field in "output" state: display its value
       +-->
   <xsl:template match="fi:[EMAIL PROTECTED]'output']" priority="3">
-    <xsl:value-of select="fi:value/node()"/>
+    <span id="[EMAIL PROTECTED]"><xsl:value-of 
select="fi:value/node()"/></span>
   </xsl:template>
 
   <!--+
@@ -160,7 +164,7 @@
     <xsl:variable name="vertical" select="string(fi:styling/@list-orientation) 
!= 'horizontal'"/>
     <xsl:choose>
       <xsl:when test="$vertical">
-        <table cellpadding="0" cellspacing="0" border="0" title="{fi:hint}">
+        <table id="{$id}" cellpadding="0" cellspacing="0" border="0" 
title="{fi:hint}">
           <xsl:for-each select="fi:selection-list/fi:item">
             <tr>
               <td>
@@ -186,7 +190,7 @@
         </table>
       </xsl:when>
       <xsl:otherwise>
-        <span title="{fi:hint}">
+        <span id="{$id}" title="{fi:hint}">
           <xsl:for-each select="fi:selection-list/fi:item">
             <input type="radio" id="{generate-id()}" name="{$id}" 
value="[EMAIL PROTECTED]">
               <xsl:if test="@value = $value">
@@ -198,8 +202,8 @@
               <xsl:with-param name="id" select="generate-id()"/>
             </xsl:apply-templates>
           </xsl:for-each>
+          <xsl:apply-templates select="." mode="common"/>
         </span>
-        <xsl:apply-templates select="." mode="common"/>
       </xsl:otherwise>
     </xsl:choose>
   </xsl:template>
@@ -215,18 +219,20 @@
     <xsl:variable name="value" select="fi:value"/>
 
     <!-- dropdown or listbox -->
-    <select title="{fi:hint}" id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]">
-      <xsl:apply-templates select="." mode="styling"/>
-      <xsl:for-each select="fi:selection-list/fi:item">
-        <option value="[EMAIL PROTECTED]">
-          <xsl:if test="@value = $value">
-            <xsl:attribute name="selected">selected</xsl:attribute>
-          </xsl:if>
-          <xsl:copy-of select="fi:label/node()"/>
-        </option>
-      </xsl:for-each>
-    </select>
-    <xsl:apply-templates select="." mode="common"/>
+    <span id="[EMAIL PROTECTED]">
+      <select title="{fi:hint}" id="[EMAIL PROTECTED]" name="[EMAIL 
PROTECTED]">
+        <xsl:apply-templates select="." mode="styling"/>
+        <xsl:for-each select="fi:selection-list/fi:item">
+          <option value="[EMAIL PROTECTED]">
+            <xsl:if test="@value = $value">
+              <xsl:attribute name="selected">selected</xsl:attribute>
+            </xsl:if>
+            <xsl:copy-of select="fi:label/node()"/>
+          </option>
+        </xsl:for-each>
+      </select>
+      <xsl:apply-templates select="." mode="common"/>
+    </span>
   </xsl:template>
 
   <!--+
@@ -235,33 +241,37 @@
   <xsl:template match="fi:field[fi:selection-list][fi:styling/@type='output']" 
priority="3">
     <xsl:variable name="value" select="fi:value"/>
     <xsl:variable name="selected" select="fi:selection-list/fi:[EMAIL 
PROTECTED] = $value]"/>
-    <xsl:choose>
-      <xsl:when test="$selected/fi:label">
-        <xsl:copy-of select="$selected/fi:label/node()"/>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:value-of select="$value"/>
-      </xsl:otherwise>
-    </xsl:choose>
+    <span id="[EMAIL PROTECTED]">
+      <xsl:choose>
+        <xsl:when test="$selected/fi:label">
+          <xsl:copy-of select="$selected/fi:label/node()"/>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:value-of select="$value"/>
+        </xsl:otherwise>
+      </xsl:choose>
+    </span>
   </xsl:template>
 
   <!--+
       | fi:field with @type 'textarea'
       +-->
   <xsl:template match="fi:field[fi:styling/@type='textarea']">
-    <textarea id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" 
title="{fi:hint}">
-      <xsl:apply-templates select="." mode="styling"/>
-      <!-- remove carriage-returns (occurs on certain versions of IE and 
doubles linebreaks at each submit) -->
-      <xsl:copy-of select="translate(fi:value/node(), '&#13;', '')"/>
-    </textarea>
-    <xsl:apply-templates select="." mode="common"/>
+    <span id="[EMAIL PROTECTED]">
+      <textarea id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" 
title="{fi:hint}">
+        <xsl:apply-templates select="." mode="styling"/>
+        <!-- remove carriage-returns (occurs on certain versions of IE and 
doubles linebreaks at each submit) -->
+        <xsl:copy-of select="translate(fi:value/node(), '&#13;', '')"/>
+      </textarea>
+      <xsl:apply-templates select="." mode="common"/>
+    </span>
   </xsl:template>
 
   <!--+
       | fi:field with @type 'output' and fi:output are both rendered as text
       +-->
   <xsl:template match="fi:output | fi:field[fi:styling/@type='output']" 
priority="2">
-    <xsl:copy-of select="fi:value/node()"/>
+    <span id="[EMAIL PROTECTED]"><xsl:copy-of select="fi:value/node()"/></span>
   </xsl:template>
 
   <!--+
@@ -269,7 +279,7 @@
       +-->
   <xsl:template match="fi:*" mode="label">
     <xsl:param name="id" select="@id"/>
-    <label for="{$id}" title="{fi:hint}">
+    <label for="{$id}-input" title="{fi:hint}">
       <xsl:copy-of select="fi:label/node()"/>
     </label>
   </xsl:template>
@@ -287,22 +297,24 @@
       | the value and not the checked attribute
       +-->
   <xsl:template match="fi:booleanfield">
-    <input id="[EMAIL PROTECTED]" type="checkbox" value="true" name="[EMAIL 
PROTECTED]" title="{fi:hint}">
-      <xsl:apply-templates select="." mode="styling"/>
-      <xsl:choose>
-        <xsl:when test="./fi:[EMAIL PROTECTED]'hidden']">
-          <xsl:if test="fi:value = 'false'">
-            <xsl:attribute name="value">false</xsl:attribute>
-          </xsl:if>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:if test="fi:value = 'true'">
-            <xsl:attribute name="checked">checked</xsl:attribute>
-          </xsl:if>
-        </xsl:otherwise>
-      </xsl:choose>
-    </input>
-    <xsl:apply-templates select="." mode="common"/>
+    <span id="[EMAIL PROTECTED]">
+      <input id="[EMAIL PROTECTED]" type="checkbox" value="true" name="[EMAIL 
PROTECTED]" title="{fi:hint}">
+        <xsl:apply-templates select="." mode="styling"/>
+        <xsl:choose>
+          <xsl:when test="./fi:[EMAIL PROTECTED]'hidden']">
+            <xsl:if test="fi:value = 'false'">
+              <xsl:attribute name="value">false</xsl:attribute>
+            </xsl:if>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:if test="fi:value = 'true'">
+              <xsl:attribute name="checked">checked</xsl:attribute>
+            </xsl:if>
+          </xsl:otherwise>
+        </xsl:choose>
+      </input>
+      <xsl:apply-templates select="." mode="common"/>
+    </span>
   </xsl:template>
 
   <!--+
@@ -310,7 +322,7 @@
       | use text but avoids i18n problems related to hardcoding 'yes'/'no' or 
'true'/'false'
       +-->
   <xsl:template match="fi:[EMAIL PROTECTED]'output' or 
fi:styling/@type='output']" priority="3">
-    <input type="checkbox" title="{fi:hint}" disabled="disabled">
+    <input id="[EMAIL PROTECTED]" type="checkbox" title="{fi:hint}" 
disabled="disabled">
          <xsl:if test="fi:value = 'true'">
            <xsl:attribute name="checked">checked</xsl:attribute>
          </xsl:if>
@@ -321,7 +333,7 @@
       | fi:action
       +-->
   <xsl:template match="fi:action">
-    <input id="[EMAIL PROTECTED]" type="submit" name="[EMAIL PROTECTED]" 
title="{fi:hint}">
+    <input id="[EMAIL PROTECTED]" type="submit" name="[EMAIL PROTECTED]" 
title="{fi:hint}" onclick="forms_submitForm(this, '[EMAIL PROTECTED]'); return 
false">
       <xsl:attribute name="value"><xsl:value-of 
select="fi:label/node()"/></xsl:attribute>
       <xsl:apply-templates select="." mode="styling"/>
     </input>
@@ -331,7 +343,7 @@
       | fi:action, link-style   
       +-->      
   <xsl:template match="fi:action[fi:styling/@type = 'link']" priority="1">     
 
-    <a title="{fi:hint}" href="#" onclick="forms_submitForm(this, '[EMAIL 
PROTECTED]'); return false">          
+    <a id="[EMAIL PROTECTED]" title="{fi:hint}" href="#" 
onclick="forms_submitForm(this, '[EMAIL PROTECTED]'); return false">   
       <xsl:apply-templates select="." mode="styling"/>          
       <xsl:copy-of select="fi:label/node()"/>   
     </a>
@@ -357,7 +369,7 @@
     <xsl:variable name="id" select="@id"/>
     <xsl:variable name="values" select="fi:values/fi:value/text()"/>
 
-    <span title="{fi:hint}">
+    <span id="[EMAIL PROTECTED]" title="{fi:hint}">
       <xsl:for-each select="fi:selection-list/fi:item">
         <xsl:variable name="value" select="@value"/>
         <input id="{generate-id()}" type="checkbox" value="[EMAIL PROTECTED]" 
name="{$id}">
@@ -370,8 +382,8 @@
         </xsl:apply-templates>
         <br/>
       </xsl:for-each>
+      <xsl:apply-templates select="." mode="common"/>
     </span>
-    <xsl:apply-templates select="." mode="common"/>
   </xsl:template>
 
   <!--+
@@ -381,8 +393,8 @@
     <xsl:variable name="id" select="@id"/>
     <xsl:variable name="values" select="fi:values/fi:value/text()"/>
 
-    <span title="{fi:hint}">
-      <select id="[EMAIL PROTECTED]" name="{$id}" multiple="multiple">
+    <span id="[EMAIL PROTECTED]" title="{fi:hint}">
+      <select id="[EMAIL PROTECTED]" name="{$id}" multiple="multiple">
         <xsl:apply-templates select="." mode="styling"/>
         <xsl:for-each select="fi:selection-list/fi:item">
           <xsl:variable name="value" select="@value"/>
@@ -394,8 +406,8 @@
           </option>
         </xsl:for-each>
       </select>
+      <xsl:apply-templates select="." mode="common"/>
     </span>
-    <xsl:apply-templates select="." mode="common"/>
   </xsl:template>
 
   <!--+
@@ -403,50 +415,52 @@
       +-->
   <xsl:template match="fi:[EMAIL PROTECTED]'output']" priority="3">
     <xsl:variable name="values" select="fi:values/fi:value/text()"/>
-    <xsl:for-each select="fi:selection-list/fi:item">
-      <xsl:variable name="value" select="@value"/>
-      <xsl:if test="$values[. = $value]">
-           <xsl:value-of select="fi:label/node()"/>
-         </xsl:if>
-    </xsl:for-each>
+    <span id="[EMAIL PROTECTED]">
+      <xsl:for-each select="fi:selection-list/fi:item">
+        <xsl:variable name="value" select="@value"/>
+        <xsl:if test="$values[. = $value]">
+          <xsl:value-of select="fi:label/node()"/>
+           </xsl:if>
+      </xsl:for-each>
+    </span>
   </xsl:template>
 
   <!--+
       | fi:upload
       +-->
   <xsl:template match="fi:upload">
-    <xsl:choose>
-      <xsl:when test="fi:value">
-        <!-- Has a value (filename): display it with a change button -->
-        <span title="{fi:hint}">
-          <xsl:text>[</xsl:text>
-          <xsl:value-of select="fi:value"/>
-          <xsl:text>] </xsl:text>
-          <input type="button" id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" 
value="..." onclick="forms_submitForm(this)"/>
-        </span>
-      </xsl:when>
-      <xsl:otherwise>
-        <input type="file" id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" 
title="{fi:hint}" accept="[EMAIL PROTECTED]">
-          <xsl:apply-templates select="." mode="styling"/>
-        </input>
-      </xsl:otherwise>
-    </xsl:choose>
-    <xsl:apply-templates select="." mode="common"/>
+    <span id="[EMAIL PROTECTED]" title="{fi:hint}">
+      <xsl:choose>
+        <xsl:when test="fi:value">
+          <!-- Has a value (filename): display it with a change button -->
+            <xsl:text>[</xsl:text>
+            <xsl:value-of select="fi:value"/>
+            <xsl:text>] </xsl:text>
+            <input type="button" id="[EMAIL PROTECTED]" name="[EMAIL 
PROTECTED]" value="..." onclick="forms_submitForm(this)"/>
+        </xsl:when>
+        <xsl:otherwise>
+          <input type="file" id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" 
title="{fi:hint}" accept="[EMAIL PROTECTED]">
+            <xsl:apply-templates select="." mode="styling"/>
+          </input>
+        </xsl:otherwise>
+      </xsl:choose>
+      <xsl:apply-templates select="." mode="common"/>`
+    </span>
   </xsl:template>
 
   <!--+
       | fi:upload, output state
       +-->
   <xsl:template match="fi:[EMAIL PROTECTED]'output']" priority="3">
-      <xsl:copy-of select="fi:value/node()"/>
+      <span id="[EMAIL PROTECTED]"><xsl:copy-of 
select="fi:value/node()"/></span>
   </xsl:template>
 
   <!--+
       | fi:repeater
       +-->
   <xsl:template match="fi:repeater">
-    <input type="hidden" name="[EMAIL PROTECTED]" value="[EMAIL PROTECTED]"/>
-    <table border="1">
+    <table id="[EMAIL PROTECTED]" border="1">
+      <input type="hidden" name="[EMAIL PROTECTED]" value="[EMAIL PROTECTED]"/>
       <tr>
         <xsl:for-each select="fi:headings/fi:heading">
           <th><xsl:value-of select="."/></th>
@@ -485,6 +499,9 @@
       <xsl:attribute name="onsubmit">forms_onsubmit(); <xsl:value-of 
select="@onsubmit"/></xsl:attribute>
       <!-- hidden field to store the submit id -->
       <div><input type="hidden" name="forms_submit_id"/></div>
+      <xsl:if test="@ajax = 'true'">
+        <script script="text/javascript">CForms.ajax = true;</script>
+      </xsl:if>
       <xsl:apply-templates/>
       
       <!-- TODO: consider putting this in the xml stream from the generator? 
-->
@@ -530,62 +547,88 @@
   </xsl:template>
 
   <xsl:template match="fi:aggregatefield">
-    <input id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" value="{fi:value}" 
title="{fi:hint}">
-      <xsl:apply-templates select="." mode="styling"/>
-    </input>
-    <xsl:apply-templates select="." mode="common"/>
+    <span id="[EMAIL PROTECTED]">
+      <input id="[EMAIL PROTECTED]" name="[EMAIL PROTECTED]" 
value="{fi:value}" title="{fi:hint}">
+        <xsl:apply-templates select="." mode="styling"/>
+      </input>
+      <xsl:apply-templates select="." mode="common"/>
+    </span>
   </xsl:template>
 
   <xsl:template match="fi:messages">
-    <xsl:if test="fi:message">
-      <xsl:apply-templates select="." mode="label"/>:
-      <ul>
-        <xsl:for-each select="fi:message">
-          <li><xsl:apply-templates/></li>
-        </xsl:for-each>
-      </ul>
-    </xsl:if>
+    <div id="[EMAIL PROTECTED]">
+      <xsl:if test="fi:message">
+        <xsl:apply-templates select="." mode="label"/>:
+        <ul>
+          <xsl:for-each select="fi:message">
+            <li><xsl:apply-templates/></li>
+          </xsl:for-each>
+        </ul>
+      </xsl:if>
+    </div>
   </xsl:template>
 
   <xsl:template match="fi:validation-errors">
-    <xsl:variable name="header">
-      <xsl:choose>
-        <xsl:when test="header">
-          <xsl:copy-of select="header"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <p class="forms-validation-errors">The following errors have been 
detected (marked with !):</p>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:variable>
-    <xsl:variable name="footer">
-      <xsl:choose>
-        <xsl:when test="footer">
-          <xsl:copy-of select="footer"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <p class="forms-validation-errors">Please, correct them and 
re-submit the form.</p>
-        </xsl:otherwise>
-      </xsl:choose>
-    </xsl:variable>
-    <xsl:variable name="messages" 
select="ancestor::fi:form-template//fi:validation-message"/>
-    <xsl:if test="$messages">
-      <xsl:copy-of select="$header"/>
-      <ul>
-        <xsl:for-each select="$messages">
-          <li class="forms-validation-error">
-            <xsl:variable name="label">
-              <xsl:apply-templates select=".." mode="label"/>
-            </xsl:variable>
-            <xsl:if test="$label">
-              <xsl:copy-of select="$label"/><xsl:text>: </xsl:text>
-            </xsl:if>
-            <xsl:value-of select="."/>
-          </li>
-        </xsl:for-each>
-      </ul>
-      <xsl:copy-of select="$footer"/>
-    </xsl:if>
+    <div id="[EMAIL PROTECTED]">
+      <xsl:variable name="header">
+        <xsl:choose>
+          <xsl:when test="header">
+            <xsl:copy-of select="header"/>
+          </xsl:when>
+          <xsl:otherwise>
+            <p class="forms-validation-errors">The following errors have been 
detected (marked with !):</p>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:variable>
+      <xsl:variable name="footer">
+        <xsl:choose>
+          <xsl:when test="footer">
+            <xsl:copy-of select="footer"/>
+          </xsl:when>
+          <xsl:otherwise>
+            <p class="forms-validation-errors">Please, correct them and 
re-submit the form.</p>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:variable>
+      <xsl:variable name="messages" 
select="ancestor::fi:form-template//fi:validation-message"/>
+      <xsl:if test="$messages">
+        <xsl:copy-of select="$header"/>
+        <ul>
+          <xsl:for-each select="$messages">
+            <li class="forms-validation-error">
+              <xsl:variable name="label">
+                <xsl:apply-templates select=".." mode="label"/>
+              </xsl:variable>
+              <xsl:if test="$label">
+                <xsl:copy-of select="$label"/><xsl:text>: </xsl:text>
+              </xsl:if>
+              <xsl:value-of select="."/>
+            </li>
+          </xsl:for-each>
+        </ul>
+        <xsl:copy-of select="$footer"/>
+      </xsl:if>
+    </div>
+  </xsl:template>
+  
+  <xsl:template match="fi:union">
+    <div id="[EMAIL PROTECTED]">
+      <xsl:apply-templates/>
+    </div>
+  </xsl:template>
+  
+  <xsl:template match="fi:repeater-template">
+    <div id="[EMAIL PROTECTED]">
+      <xsl:apply-templates/>
+    </div>
+  </xsl:template>
+  
+  <!--+
+      | fi:placeholder - used to represent invisible widgets so that AJAX 
updates
+      | know where to insert the widget if it becomes visible
+      +-->
+  <xsl:template match="fi:placeholder">
+    <span id="[EMAIL PROTECTED]"/>
   </xsl:template>
 
   <xsl:template match="@*|node()" priority="-1">

Modified: 
cocoon/blocks/core/forms/trunk/samples/resources/forms-page-styling.xsl
URL: 
http://svn.apache.org/viewcvs/cocoon/blocks/core/forms/trunk/samples/resources/forms-page-styling.xsl?view=diff&r1=161263&r2=161264
==============================================================================
--- cocoon/blocks/core/forms/trunk/samples/resources/forms-page-styling.xsl 
(original)
+++ cocoon/blocks/core/forms/trunk/samples/resources/forms-page-styling.xsl Thu 
Apr 14 05:32:26 2005
@@ -141,7 +141,7 @@
     <fieldset id="{$id}">
       <legend title="{fi:hint}">
         <xsl:apply-templates select="fi:label/node()"/>
-        <select name="{$state-widget}" onchange="forms_showTab('{$id}', 
this.selectedIndex, {count(fi:items/*)}, '{$state-widget}')">
+        <select name="{$state-widget}" id="{$state-widget}" 
onchange="forms_showTab('{$id}', this.selectedIndex, {count(fi:items/*)}, 
'{$state-widget}')">
           <xsl:for-each select="fi:items/fi:*">
             <xsl:variable name="pos" select="position() - 1"/>
             <option>

Modified: cocoon/blocks/core/forms/trunk/samples/sitemap.xmap
URL: 
http://svn.apache.org/viewcvs/cocoon/blocks/core/forms/trunk/samples/sitemap.xmap?view=diff&r1=161263&r2=161264
==============================================================================
--- cocoon/blocks/core/forms/trunk/samples/sitemap.xmap (original)
+++ cocoon/blocks/core/forms/trunk/samples/sitemap.xmap Thu Apr 14 05:32:26 2005
@@ -20,6 +20,7 @@
  <map:components>
 
   <map:transformers default="xslt">    
+    <map:transformer name="browser-update" 
src="org.apache.cocoon.transformation.BrowserUpdateTransformer"/>
     <map:transformer name="i18n" 
src="org.apache.cocoon.transformation.I18nTransformer">
       <catalogues default="other">
         <catalogue id="other" name="OtherMessages" location="messages"/>
@@ -191,6 +192,7 @@
         -->
      <map:match pattern="*-display-pipeline.jx">
        <map:generate type="jx" src="forms/{1}_template.xml" label="content1"/>
+       <map:transform type="browser-update"/>
        <map:transform type="i18n">
          <!--map:parameter name="locale" value="en-US"/-->
        </map:transform>
@@ -198,7 +200,15 @@
          <map:parameter name="file" value="forms/{1}_template.xml"/>
        </map:call>
        <map:transform src="resources/forms-samples-styling.xsl"/>
-       <map:serialize/>
+       <map:select type="request-parameter">
+         <map:parameter name="parameter-name" value="cocoon-ajax"/>
+         <map:when test="true">
+          <map:serialize type="xml"/>
+        </map:when>
+        <map:otherwise>
+           <map:serialize type="html"/>
+        </map:otherwise>
+       </map:select>
      </map:match>
 
      <!--
@@ -431,6 +441,7 @@
      </map:match>
 
      <map:match pattern="resources/**">
+       <map:read 
src="/Users/sylvain/dev/apache.org/cocoon/trunk/src/blocks/forms/java/org/apache/cocoon/forms/{0}"/>
        <map:read src="resource://org/apache/cocoon/forms/{0}"/>
      </map:match>
 

Added: 
cocoon/trunk/src/java/org/apache/cocoon/transformation/BrowserUpdateTransformer.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/transformation/BrowserUpdateTransformer.java?view=auto&rev=161264
==============================================================================
--- 
cocoon/trunk/src/java/org/apache/cocoon/transformation/BrowserUpdateTransformer.java
 (added)
+++ 
cocoon/trunk/src/java/org/apache/cocoon/transformation/BrowserUpdateTransformer.java
 Thu Apr 14 05:32:26 2005
@@ -0,0 +1,108 @@
+package org.apache.cocoon.transformation;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.environment.ObjectModelHelper;
+import org.apache.cocoon.environment.Request;
+import org.apache.cocoon.environment.SourceResolver;
+import org.apache.cocoon.xml.AttributesImpl;
+import org.apache.cocoon.xml.RedundantNamespacesFilter;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class BrowserUpdateTransformer extends AbstractTransformer {
+    
+    public static final String AJAXMODE_PARAM = "cocoon-ajax";
+    
+    public static final String BU_NSURI = 
"http://apache.org/cocoon/browser-update/1.0";;
+    
+    private boolean ajaxMode = false;
+    
+    private int replaceDepth = 0;
+
+    public void setup(SourceResolver resolver, Map objectModel, String src, 
Parameters par) throws ProcessingException, SAXException, IOException {
+
+        Request request = ObjectModelHelper.getRequest(objectModel);
+        this.ajaxMode = request.getParameter(AJAXMODE_PARAM) != null;
+    }
+
+    public void startDocument() throws SAXException {
+        
+        if (ajaxMode) {
+            // Add the namespace filter to our own output.
+            // This is needed as flattening bu:* elements can lead to some 
weird reordering of
+            // namespace declarations...
+            RedundantNamespacesFilter nsPipe = new RedundantNamespacesFilter();
+            if (this.xmlConsumer != null) {
+                nsPipe.setConsumer(this.xmlConsumer);
+            } else {
+                nsPipe.setContentHandler(this.contentHandler);
+            }
+            setConsumer(nsPipe);
+        }
+        
+        super.startDocument();
+        if (ajaxMode) {
+            // Add a root element. The original one is very likely to be 
stripped
+            super.startPrefixMapping("bu", BU_NSURI);
+            super.startElement(BU_NSURI, "document", "bu:document", new 
AttributesImpl());
+        }
+    }
+    
+    public void startPrefixMapping(String prefix, String uri) throws 
SAXException {
+        // always let them trough
+        super.startPrefixMapping(prefix, uri);
+    }
+
+    public void startElement(String uri, String loc, String raw, Attributes a) 
throws SAXException {
+        if (BU_NSURI.equals(uri) && "replace".equals(loc)) {
+            if (this.ajaxMode && this.replaceDepth == 0) {
+                // Pass this element through
+                super.startElement(uri, loc, raw, a);
+            }
+            replaceDepth++;
+        } else {
+            // Passthrough if not in ajax mode or if in a bu:replace
+            if (!this.ajaxMode || this.replaceDepth > 0) {
+                super.startElement(uri, loc, raw, a);
+            }
+        }
+    }
+
+    public void characters(char[] buffer, int offset, int len) throws 
SAXException {
+        if (!this.ajaxMode || this.replaceDepth > 0) {
+            super.characters(buffer, offset, len);
+        }
+    }
+    
+    public void endElement(String uri, String loc, String raw) throws 
SAXException {
+        if (BU_NSURI.equals(uri) && "replace".equals(loc)) {
+            replaceDepth--;
+            if (this.ajaxMode && this.replaceDepth == 0) {
+                // Pass this element through
+                super.endElement(uri, loc, raw);
+            }
+        } else {
+            // Passthrough if not in ajax mode or if in a bu:replace
+            if (!this.ajaxMode || this.replaceDepth > 0) {
+                super.endElement(uri, loc, raw);
+            }
+        }
+    }
+
+    public void endPrefixMapping(String prefix) throws SAXException {
+        // always let them trough
+        super.endPrefixMapping(prefix);
+    }
+
+    public void endDocument() throws SAXException {
+        if (ajaxMode) {
+            super.endElement(BU_NSURI, "document", "bu:document");
+            super.endPrefixMapping("bu");
+        }
+        super.endDocument();
+    }
+}

Propchange: 
cocoon/trunk/src/java/org/apache/cocoon/transformation/BrowserUpdateTransformer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
cocoon/trunk/src/java/org/apache/cocoon/transformation/BrowserUpdateTransformer.java
------------------------------------------------------------------------------
    svn:keywords = Id


Reply via email to