<?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.
-->
<assembler>
    <scripts>
        <!--
            Assembly for our javascripts
            if you want to include them manually use:


            <script type="text/javascript" src="./myfaces/_impl/core/_Runtime.js"></script>
            <script type = "text/javascript" src = "myfaces/_impl/_util/_Lang.js"></script>
            <script type = "text/javascript" src = "./myfaces/_impl/_util/_Queue.js"></script>
            <script type = "text/javascript" src = "./myfaces/_impl/_util/_ListenerQueue.js"></script>
            <script type = "text/javascript" src = "./myfaces/_impl/_util/_Dom.js"></script>
            <script type = "text/javascript" src = "./myfaces/_impl/_util/_HtmlStripper.js"></script>
            <script type = "text/javascript" src = "./myfaces/_impl/xhrCore/_AjaxUtils.js"></script>
            <script type = "text/javascript" src = "./myfaces/_impl/xhrCore/_AjaxRequestQueue.js"></script>
            <script type = "text/javascript" src = "./myfaces/_impl/xhrCore/_AjaxRequest.js"></script>
            <script type = "text/javascript" src = "./myfaces/_impl/xhrCore/_AjaxResponse.js"></script>
            <script type = "text/javascript" src = "./myfaces/_impl/xhrCore/_Transport.js"></script>
            <script type = "text/javascript" src = "./myfaces/_impl/core/Impl.js"></script>
            <script type = "text/javascript" src = "./myfaces/api/jsf.js"></script>
        -->


        <script>
            <fileName>jsf-legacy.js</fileName>
            <includes>
                <include>**/_impl/core/_RuntimeQuirks.js</include>
                <include>**/_impl/core/_StartImpl.js</include>
                <include>**/_impl/_util/_LangQuirks.js</include>
                <include>**/_impl/_util/_DomQuirks.js</include>
                <include>**/_impl/core/_EndImpl.js</include>
            </includes>
        </script>
    </scripts>
</assembler>
