<?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/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.cocoon</groupId>
    <artifactId>cocoon</artifactId>
    <version>10</version>
    <relativePath>../../parent/pom.xml</relativePath>
  </parent>

  <artifactId>cocoon-thien-maven-site-skin</artifactId>
  <version>1.0.2-SNAPSHOT</version>
  <name>Cocoon Maven Skin</name>
  <description>The Cocoon Maven skin developed by Thien</description>

  <!-- Workaround for SUREFIRE-300 -->
  <properties>
    <maven.test.skip>true</maven.test.skip>
  </properties>

  <build>
    <resources>
      <resource>
        <directory>${basedir}</directory>
        <targetPath>META-INF</targetPath>
        <includes>
          <include>NOTICE.txt</include>
          <include>LICENSE.txt</include>
        </includes>
      </resource>

      <!-- exclude css and js since will include the minified version -->
      <resource>
        <directory>${basedir}/src/main/resources</directory>
        <excludes>
          <exclude>css/**</exclude>
          <exclude>js/**</exclude>
        </excludes>
      </resource>

      <!-- include the print.css -->
      <resource>
        <directory>${basedir}/src/main/resources</directory>
        <includes>
          <include>css/print.css</include>
        </includes>
      </resource>

      <!-- include minified only -->
      <resource>
        <directory>${project.build.directory}/${project.build.finalName}</directory>
        <includes>
          <include>css/apache-cocoon-thien-maven-skin.min.css</include>
          <include>js/apache-cocoon-thien-maven-skin.min.js</include>
        </includes>
      </resource>
    </resources>

    <plugins>
      <plugin>
        <groupId>com.samaxes.maven</groupId>
        <artifactId>maven-minify-plugin</artifactId>
        <version>1.3.5</version>
        <executions>
          <execution>
            <id>default-minify</id>
            <phase>generate-resources</phase>
            <configuration>
              <webappSourceDir>${basedir}/src/main/resources</webappSourceDir>
              <cssSourceDir>css</cssSourceDir>
              <cssSourceFiles>
                <cssSourceFile>maven-base.css</cssSourceFile>
                <cssSourceFile>maven-theme.css</cssSourceFile>
                <cssSourceFile>prettify.css</cssSourceFile>
                <cssSourceFile>site.css</cssSourceFile>
              </cssSourceFiles>
              <cssFinalFile>apache-cocoon-thien-maven-skin.css</cssFinalFile>
              <jsSourceDir>js</jsSourceDir>
              <jsSourceFiles>
                <jsSourceFile>getBlank.js</jsSourceFile>
                <jsSourceFile>prettify.js</jsSourceFile>
              </jsSourceFiles>
              <jsFinalFile>apache-cocoon-thien-maven-skin.js</jsFinalFile>
            </configuration>
            <goals>
              <goal>minify</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
