<?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.8-SNAPSHOT</version>
  </parent>

  <artifactId>royale-typedefs-jquery</artifactId>
  <version>0.9.8-SNAPSHOT</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>
        <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>
        <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>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.apache.royale.typedefs</groupId>
      <artifactId>royale-typedefs-js</artifactId>
      <version>0.9.8-SNAPSHOT</version>
      <type>swc</type>
      <classifier>typedefs</classifier>
      <scope>runtime</scope>
    </dependency>
  </dependencies>

</project>
