<?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.

-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.royale.typedefs</groupId>
    <artifactId>royale-typedefs-parent</artifactId>
    <version>0.9.6</version>
  </parent>

  <artifactId>royale-typedefs-jquery</artifactId>
  <version>0.9.6</version>
  <packaging>swc</packaging>

  <name>Apache Royale: TypeDefs: JQuery</name>

  <properties>
    <jquery.version>1.9</jquery.version>
  </properties>

  <build>
    <plugins>
      <!-- Download JavaScript form GitHub -->
      <plugin>
        <groupId>com.googlecode.maven-download-plugin</groupId>
        <artifactId>download-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <id>get-createjs</id>
            <phase>validate</phase>
            <goals>
              <goal>wget</goal>
            </goals>
            <configuration>
              <url>https://raw.githubusercontent.com/royale-extras/closure-compiler/royale/contrib/externs/jquery-${jquery.version}.js</url>
              <outputFileName>jquery-${jquery.version}.js</outputFileName>
              <outputDirectory>${project.build.directory}/downloads</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.royale.compiler</groupId>
        <artifactId>royale-maven-plugin</artifactId>
        <version>${royale.compiler.version}</version>
        <extensions>true</extensions>
        <configuration>
          <includeSources>true</includeSources>
          <externcInput>
            <fileSet>
              <directory>${project.basedir}/target/downloads</directory>
              <includes>
                <include>**/*.js</include>
              </includes>
            </fileSet>
          </externcInput>
          <externcConfig>
            <!-- JQuery -->
            <!--class-to-function><class>$</class></class-to-function-->

            <class-excludes>
              <class-exclude>
                <className>Deferred</className>
              </class-exclude>
              <class-exclude>
                <className>jQuery.deferred</className>
              </class-exclude>
              <class-exclude>
                <className>jQuery.Event</className>
              </class-exclude>
              <class-exclude>
                <className>jQuery.Deferred</className>
              </class-exclude>
              <class-exclude>
                <className>$.Event</className>
              </class-exclude>
              <class-exclude>
                <className>$.Deferred</className>
              </class-exclude>
              <class-exclude>
                <className>$.deferred</className>
              </class-exclude>
            </class-excludes>

            <excludes>
              <exclude>
                <className>jQuery</className>
                <name>is</name>
              </exclude>
              <exclude>
                <className>jQuery</className>
                <name>promise</name>
              </exclude>
              <exclude>
                <className>jQuery</className>
                <name>getJSON</name>
              </exclude>
              <exclude>
                <className>jQuery</className>
                <name>ajax</name>
              </exclude>
              <exclude>
                <className>jQuery</className>
                <name>when</name>
              </exclude>
              <exclude>
                <className>jQuery</className>
                <name>post</name>
              </exclude>
              <exclude>
                <className>jQuery</className>
                <name>getScript</name>
              </exclude>
              <exclude>
                <className>jQuery</className>
                <name>Callbacks</name>
              </exclude>
              <exclude>
                <className>jQuery.jqXHR</className>
                <name>onreadystatechange</name>
              </exclude>
            </excludes>
          </externcConfig>
          <includeFiles>
            <include-file>
              <name>externs/jquery-1.9.js</name>
              <path>downloads/jquery-1.9.js</path>
            </include-file>
          </includeFiles>
          <skipSwc>true</skipSwc>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.apache.royale.compiler</groupId>
            <artifactId>compiler-jx</artifactId>
            <version>${royale.compiler.version}</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.apache.royale.typedefs</groupId>
      <artifactId>royale-typedefs-js</artifactId>
      <version>0.9.6</version>
      <type>swc</type>
      <classifier>typedefs</classifier>
      <scope>runtime</scope>
    </dependency>
  </dependencies>

</project>
