<!--
  ~ 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 template="/sections/sectionTemplate.xhtml"
      xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:f="http://java.sun.com/jsf/core" 
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets" 
      xmlns:hx="http://myfaces.apache.org/html5/html"
      xmlns:fx="http://myfaces.apache.org/html5/core"
      xmlns:sh="http://java.sun.com/jsf/composite/components/sh"
      xmlns:bs="http://java.sun.com/jsf/composite/components/browserSupport"
      xmlns:common="http://java.sun.com/jsf/composite/components/common">

<ui:define name="title">
    Animations
</ui:define>

<ui:define name="browserSupport">
  <bs:browserSupport webkitSupport="true" />
</ui:define>

<ui:define name="viewChangeLinks">
    <common:viewChange singlePageName="animations" slideId="animations" />
</ui:define>

<ui:define name="sectionContent">
    <h:outputStylesheet>
        div.effectDemoBox{
            border: 1px dashed blue;
            margin-top : 15px;
            width: 100% !important;
            height:200px !important;
        }

        div.effectDemoBoxText{
            text-align:center;
            width:100%;
        }
    </h:outputStylesheet>
    <h:panelGrid columns="2" width="100%">

        <hx:div styleClass="effectDemoBox">
            <div class="effectDemoBoxText">Click to shake</div>
            <fx:animations event="click" iteration="3" duration="0.3s" timingFunction="ease-in-out">
                <fx:animationShake rotation="10" />
            </fx:animations>

            <sh:sh><![CDATA[
<hx:div>
<fx:animations event="click" iteration="3"
    duration="0.3s" timingFunction="ease-in-out">
    <fx:animationShake rotation="10" />
</fx:animations>
</hx:div>
            ]]></sh:sh>
        </hx:div>

        <hx:div styleClass="effectDemoBox">
            <div class="effectDemoBoxText">Click to pulse</div>
            <fx:animations event="click" iteration="3" duration="0.3s" timingFunction="ease-in-out">
                <fx:animationPulse maxOpacity="1" minOpacity="0.2"/>
            </fx:animations>

            <sh:sh><![CDATA[
<hx:div>
<fx:animations event="click" iteration="3"
    duration="0.3s" timingFunction="ease-in-out">
    <fx:animationPulse maxOpacity="1" minOpacity="0.2"/>
</fx:animations>
</hx:div>
            ]]></sh:sh>
        </hx:div>

        <hx:div styleClass="effectDemoBox">
            <div class="effectDemoBoxText">Click to scale</div>
            <fx:animations event="click" iteration="3" duration="0.3s" timingFunction="ease-in-out">
                <fx:animationScale maxSize="1" minSize="0.5" />
            </fx:animations>

            <sh:sh><![CDATA[
<hx:div>
<fx:animations event="click" iteration="3"
    duration="0.3s" timingFunction="ease-in-out">
    <fx:animationScale maxSize="1" minSize="0.2" />
</fx:animations>
</hx:div>
            ]]></sh:sh>
        </hx:div>

        <h:panelGroup>
            <h:outputStylesheet id="customKeyFrame">
                .customKeyFrameAnimation{
                    position: absolute;
                    width : 200px !important;
                    box-shadow: 5px 44px 28px #333;
                    box-reflect: below 1px -webkit-gradient
                       (linear, 0% 0%, 0% 74%, from(transparent), to(rgba(255, 255, 255, 0.25)))
                       0 0 0 0 stretch stretch;
                    opacity : 1.0;
                }
                @-webkit-keyframes customKeyFrame {
                    0% {
                        width : 200px !important;
                        left : 10%;
                        top : 10%;
                        -webkit-transform : skewX(0deg);
                        background-color : yellow;
                    }
                    10% {
                        left : 10%;
                        top : 10%;
                        background-color : none;
                    }
                    20% {
                        left : 70%;
                        top : 70%;
                    }
                    30% {
                        left : 70%;
                        top : 70%;
                    }
                    40% {
                        left : 40%;
                        top : 40%;
                        -webkit-transform : skewX(-20deg);
                    }
                    50% {
                        left : 40%;
                        top : 40%;
                        -webkit-transform : skewX(0deg);
                    }
                    60% {
                        left : 70%;
                        top : 50%;
                    }
                    70% {
                        left : 70%;
                        top : 50%;
                    }
                    80% {
                        left : 10%;
                        top : 20%;
                    }
                    90% {
                        left : 10%;
                        top : 20%;
                    }
                    100% {
                        width : 200px !important;
                        left : 10%;
                        top : 20%;
                        background-color : none;
                        -webkit-transform : skewX(0deg);
                    }
                }
            </h:outputStylesheet>
            <hx:div styleClass="effectDemoBox" style="" onclick="this.className='effectDemoBox';">
                <div class="effectDemoBoxText">Double click to run animation with custom</div>
                <div class="effectDemoBoxText">keyframe. Click to stop</div>
                <fx:animation id="customKeyFrameAnimation" event="dblclick" iteration="30" duration="6s" timingFunction="linear" direction="alternate" keyFrame="customKeyFrame"/>

                <sh:sh lang="css"><![CDATA[
@-webkit-keyframes customKeyFrame {
     0% { left : 10%; top : 10%; }
    10% { left : 70%; top : 70%; }
    ....
}
                ]]></sh:sh>
                <sh:sh lang="css"><![CDATA[
<fx:animation keyFrame="customKeyFrame" event="dblclick"
  iteration="30" duration="6s" direction="alternate"/>
                ]]></sh:sh>
            </hx:div>
        </h:panelGroup>

    </h:panelGrid>
</ui:define>
</ui:composition>
