<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
 * 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.
-->
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:t="http://myfaces.apache.org/tomahawk"
      xmlns:grv="http://myfaces.apache.org/groovy"
        xmlns:c="http://java.sun.com/jsp/jstl/core">
<head>
    <title>Hello World</title>
</head>
<body>
<ui:composition template="/template.xhtml">
    <ui:define name="body">
        <h1>
            <ui:insert name="title">Ext-Scripting Groovy Blog Example</ui:insert>
        </h1>

        <h:panelGroup styleClass="stdBoxBig" style="color:black;">
            <h2>In this example you can blog simply by entering text in the fields below and send submit</h2>

            <p>You can change the blogging artifacts on the fly, all the sources can be found under
                <b>WEB-INF/java/org/apache/myfaces/javaloader/groovy/</b> in your deployment directory</p>

        </h:panelGroup>
        <h:form id="form">
            <div class="left" style="margin-top: 3px;">
                <h:panelGrid id="grid" columns="1" styleClass="stdBox">
                    <h:outputText id="title1" styleClass="title" value="#{blogView.title}"/>
                    <h:outputText id="title11" styleClass="title1" value="#{blogView.title1}"/>

                    <hr/>

                    <h:panelGrid columns="2" columnClasses="label, input">
                        <h:outputText value="First Name"/>
                        <h:inputText value="#{blogView.firstName}"/>
                        <h:outputText value="Last Name"/>
                        <h:inputText value="#{blogView.lastName}"/>
                        <h:outputText value="Topic of entry"/>
                        <h:inputText value="#{blogView.topic}"/>
                    </h:panelGrid>
                    <h:panelGrid columns="2" columnClasses="label, input">
                        <h:outputText styleClass="label" value="Content"/>
                        <h:inputText value="#{blogView.content}"/>
                    </h:panelGrid>
                    <hr/>
                    <h:commandButton styleClass="btn" action="#{blogView.addEntry}" value="Add Blog Entry">
                        <f:ajax execute="@form" render="content" />
                    </h:commandButton>
                </h:panelGrid>
            </div>
            <h:panelGrid id="content" columns="1" styleClass="right">
                <ui:repeat value="#{blogService.blogEntries}" var="item">
                    <h:panelGrid columns="1" styleClass="messageBox">
                        <h:panelGroup styleClass="topic">
                            <h:outputLabel styleClass="label" value="Topic"/>
                            <h:outputText value="#{item.topic}"/>
                        </h:panelGroup>
                        <h:panelGroup styleClass="content">
                            <h:outputLabel styleClass="label" value="Content"/>
                            <h:outputFormat escape="false" value="#{item.content}"/>
                        </h:panelGroup>
                    </h:panelGrid>
                    <br/>
                </ui:repeat>
            </h:panelGrid>
        </h:form>
    </ui:define>
</ui:composition>
</body>
</html>
