<?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>8</version>
    <relativePath>../../parent/pom.xml</relativePath>
  </parent>

  <artifactId>cocoon-thien-maven-site-skin</artifactId>
  <version>1.0.1</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>


  <scm>
    <connection>scm:svn:https://svn.apache.org/repos/asf/cocoon/tags/cocoon-2.2/cocoon-thien-maven-site-skin/cocoon-thien-maven-site-skin-1.0.1</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/cocoon/tags/cocoon-2.2/cocoon-thien-maven-site-skin/cocoon-thien-maven-site-skin-1.0.1</developerConnection>
    <url>https://svn.apache.org/repos/asf/cocoon/tags/cocoon-2.2/cocoon-thien-maven-site-skin/cocoon-thien-maven-site-skin-1.0.1</url>
  </scm>
</project>
