<?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.7</version>
  </parent>

  <artifactId>royale-typedefs-jquery</artifactId>
  <version>0.9.7</version>
  <packaging>swc</packaging>

  <name>Apache Royale: TypeDefs: JQuery</name>

  <properties>
    <jquery.version>1.9</jquery.version>
  <project.build.outputTimestamp>2020-05-07T16:03:38Z</project.build.outputTimestamp></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.7</version>
      <type>swc</type>
      <classifier>typedefs</classifier>
      <scope>runtime</scope>
    </dependency>
  </dependencies>

</project>
