<?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.	   
-->

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:c="http://java.sun.com/jsp/jstl/core"
                xmlns:tr="http://myfaces.apache.org/trinidad"
                template="/template/defaultColumnPageTemplate.xhtml">

    <ui:define name="content">

         <h:panelGrid columns="2" columnClasses="column25percent,column75percent" cellpadding="0"
                      cellspacing="0" style="width: 100%;" width="100%">

            <tr:subform>
                <tr:panelGroupLayout layout="vertical">

                    <tr:outputText value="Browse Components" styleClass="head"/>

                    <tr:panelAccordion discloseNone="true" inlineStyle="width: 100%;" styleClass="components_accordion">
                        <c:forEach items="#{navigationHandler.demoCategories}" var="aCategory">
                            <tr:showDetailItem text="#{aCategory.name}" immediate="true"
                                               disclosed="#{navigationHandler.categoryDisclosed[aCategory]}">
                                <tr:navigationPane hint="list" var="aComponent" value="#{aCategory.componentDemos}" styleClass="components_list">
                                    <f:facet name="nodeStamp">

                                        <tr:commandNavigationItem text="#{aComponent.displayName}"
                                                                  selected="#{navigationHandler.componentDemoSelected[aComponent]}"
                                                                  destination="#{aComponent.destination}">
                                        </tr:commandNavigationItem>
                                    </f:facet>
                                </tr:navigationPane>
                            </tr:showDetailItem>
                        </c:forEach>
                    </tr:panelAccordion>

                </tr:panelGroupLayout>
            </tr:subform>

            <tr:subform>
                <tr:panelGroupLayout layout="vertical">
                     <ui:insert name="componentContent"/>
                </tr:panelGroupLayout>
            </tr:subform>

        </h:panelGrid>

    </ui:define>        

</ui:composition>
