<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<!-- $Id$ -->

<page:page
  xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"
  xmlns:page="http://apache.org/cocoon/lenya/cms-page/1.0"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:i18n="http://apache.org/cocoon/i18n/2.1"    
  >
  
  <page:body>
    <jx:import uri="fallback://lenya/modules/usecase/templates/tabs.jx"/>
    <div id="contentblock1" class="lenya-tab">
    <h1><i18n:text>Delete Trash</i18n:text></h1>
      
      <jx:import uri="fallback://lenya/modules/usecase/templates/messages.jx"/>
      <p>
      <jx:choose>
        <jx:when test="${usecase.getParameter('documents').isEmpty()}">
          <i18n:text>The trash is empty.</i18n:text>
        </jx:when>
        <jx:otherwise>
          <table class="lenya-table-list-noborder">
            <tr>
              <th colspan="2"><i18n:text>Documents in trash</i18n:text></th>
            </tr>
            <jx:forEach var="document" items="${usecase.getParameter('documents')}">
              <tr>
                <td>
                  <jx:if test="${document.hasLink()}">
                    <jx:out value="${document.getPath()}"/>
                  </jx:if>
                </td>
                <td>
                  <jx:out value="${document.getMetaData('http://purl.org/dc/elements/1.1/').getFirstValue('title')}"/>
                </td>
              </tr>
            </jx:forEach>
          </table>
        </jx:otherwise>
      </jx:choose>
    </p>
    <form id="form-delete_trash" style="margin-top: 20px">
      <input type="hidden" name="lenya.continuation" value="${continuation.id}"/>
      <input type="hidden" name="lenya.usecase" value="${request.getParameter('lenya.usecase')}"/>
      <jx:choose>
        <jx:when test="${usecase.getParameter('documents').isEmpty()}">
          <input i18n:attr="value" name="submit" type="submit" value="Delete" disabled="disabled"/>
        </jx:when>
        <jx:otherwise>
          <input i18n:attr="value" name="submit" type="submit" value="Delete"/>
        </jx:otherwise>
      </jx:choose>
    </form>
    </div>
  </page:body>
</page:page>