<?xml version="1.0"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- This file is similar to form1_template_action.xml. They differ in group layout,
     form's action attribute (to use continuations) and, this one is a dynamic form
     template that changes the 'contacts' repeater layout depending on its size -->
<page xmlns:ft="http://apache.org/cocoon/forms/1.0#template"
      xmlns:fi="http://apache.org/cocoon/forms/1.0#instance"
      xmlns:jx="http://apache.org/cocoon/templates/jx/1.0">
      
  <!-- Import the macros that define CForms template elements -->
  <jx:import uri="resource://org/apache/cocoon/forms/generation/jx-macros.xml"/>
  <fi:init>
	<script type="text/javascript">
	  // Uncomment next line to see Dojo debug
	  // var djConfig = { isDebug: true };
  </script>
  </fi:init>
  <h4 class="samplesGroup">Repeater widget with advanced interaction</h4>
  <title>Repeater widget with advanced interaction</title>
  <style type="text/css">
    .forms-row td {
       padding: 5px;
    }

    /* Ensure the inline edit is visible on selected rows */
    .forms-row-selected .editableRegion {
       color: black;
    }
  </style>
  
  <content>
    <ft:form-template action="#{$cocoon/continuation/id}.continue" method="POST" ajax="true">
    
    <p>This example expands on the <a href="do-dynaRepeater.flow">dynamic repeater sample</a> and uses
       <a href="http://dojotoolkit.org">Dojo</a> to provide additional interaction features.
       After adding rows in any repeater below, you will be able to:</p>
    <ul>
      <li>move rows between repeaters using drag-and-drop,</li>
      <li>reorder rows into the same repater using drag-and-drop,</li>
      <li>select and deselect rows by clicking anywhere rather than in a checkbox,</li>
      <li>use in-place editing (an input appears when you click on the text) in the third repeater.</li>
    </ul>
      <ft:repeater id="contacts1">
        <div dojoType="CFormsDragAndDropRepeater" dnd-id="contacto" dnd-action="dnd" orderable="true" select="select">
        <jx:choose>
          <jx:when test="${repeater.getSize() == 0}">
            <p><strong><em>There are no contacts to display</em></strong></p>
          </jx:when>
          <jx:otherwise>
            <table border="1">
              <tr>
                <th width="300"><ft:repeater-widget-label widget-id="firstname"/></th>
                <th width="300"><ft:repeater-widget-label widget-id="lastname"/></th>
                <th><ft:repeater-widget-label widget-id="ID"/></th>
              </tr>
              <tbody>
                  <!-- The contents of the repeater-widget element is a template that will
                       be applied to each row in the repeater. -->
                  <ft:repeater-rows>
                    <tr class="forms-row">
                      <td><ft:widget id="firstname"/></td>
                      <td><ft:widget id="lastname"/>
		              </td>
                      <td><ft:widget id="ID"/>
                        <ft:widget id="select">
	                      <fi:styling style="display: none"/>
	                    </ft:widget>
                      </td>
                    </tr>
                  </ft:repeater-rows>
                </tbody>
            </table>
          </jx:otherwise>
        </jx:choose>
        <p>
          <ft:widget id="../addcontact1"/>
          <jx:if test="${widget.getSize() > 0}">
            <ft:widget id="../removecontacts1"/>
          </jx:if>
        </p>
      </div>
    </ft:repeater>
    <!-- 2nd repeater -->
    <ft:repeater id="contacts2">
        <div dojoType="CFormsDragAndDropRepeater" dnd-id="contacto" dnd-action="dnd" orderable="true" select="select">
        <jx:choose>
          <jx:when test="${repeater.getSize() == 0}">
            <p><strong><em>There are no contacts to display</em></strong></p>
          </jx:when>
          <jx:otherwise>

            <table border="1">
              <tr>
                <th width="300"><ft:repeater-widget-label widget-id="firstname"/></th>
                <th width="300"><ft:repeater-widget-label widget-id="lastname"/></th>
                <th><ft:repeater-widget-label widget-id="ID"/></th>
              </tr>
              <tbody>
                  <!-- The contents of the repeater-widget element is a template that will
                       be applied to each row in the repeater. -->
                  <ft:repeater-rows>
                    <tr class="forms-row">
                      <td><ft:widget id="firstname"/></td>
                      <td><ft:widget id="lastname"/>
		              </td>
                      <td><ft:widget id="ID"/>
                        <ft:widget id="select">
	                      <fi:styling style="display: none"/>
	                    </ft:widget>
                      </td>
                    </tr>
                  </ft:repeater-rows>
                </tbody>
            </table>
                </jx:otherwise>
              </jx:choose>
             <p>
                  <ft:widget id="../addcontact2"/>
                  <jx:if test="${widget.getSize() > 0}">
                    <ft:widget id="../removecontacts2"/>
                  </jx:if>
              </p>
              </div>
            </ft:repeater>
     <!-- 3rd repeater -->
     <ft:repeater id="contacts3">
        <div dojoType="CFormsDragAndDropRepeater" dnd-id="contacto" dnd-action="dnd" orderable="true" select="select">
        <jx:choose>
          <jx:when test="${repeater.getSize() == 0}">
            <p><strong><em>There are no contacts to display</em></strong></p>
          </jx:when>
          <jx:otherwise>

            <table border="1">
              <tr>
                <th width="300"><ft:repeater-widget-label widget-id="firstname"/></th>
                <th width="300"><ft:repeater-widget-label widget-id="lastname"/></th>
                <th><ft:repeater-widget-label widget-id="ID"/></th>
              </tr>
              <tbody>
                  <!-- The contents of the repeater-widget element is a template that will
                       be applied to each row in the repeater. -->
                  <ft:repeater-rows>
                    <tr class="forms-row">
                      <td><ft:widget id="firstname" fi:type="inplace" fi:submit-on-change="true"/></td>
                      <td><ft:widget id="lastname" fi:type="inplace"/>
		              </td>
                      <td><ft:widget id="ID"/>
                        <ft:widget id="select">
	                      <fi:styling style="display: none"/>
	                    </ft:widget>
                      </td>
                    </tr>
                  </ft:repeater-rows>
                </tbody>
            </table>
                </jx:otherwise>
              </jx:choose>
             <p>
                  <ft:widget id="../addcontact3"/>
                  <jx:if test="${widget.getSize() > 0}">
                    <ft:widget id="../removecontacts3"/>
                  </jx:if>
              </p>
              </div>
            </ft:repeater>
            <ft:widget id="ok"/><br/>
            <a href="./do-dojoRepeaters.flow">Restart this sample</a> - <a href="./">Back to samples</a>

    </ft:form-template>
  </content>
</page>
