mirror of
https://github.com/h5bp/html5-boilerplate.git
synced 2026-01-10 07:08:02 -05:00
* reduce extra code via <isset> * `manifest` becomes its own ant task now * html files are populated into the manifest based on ant config * add manifest attribute to the HTML tag via Ant. So only the config switch is neccessary * appcache back to disabled by default. toggling it on in config/project.properties is all that's neccessary
1057 lines
44 KiB
XML
1057 lines
44 KiB
XML
<?xml version="1.0"?>
|
|
<!DOCTYPE project>
|
|
<project name="Boilerplate Build" default="build" basedir="../"> <!-- one back since we're in build/ -->
|
|
|
|
|
|
<!-- Load in Ant-Contrib to give us access to some very useful tasks! -->
|
|
<!-- the .jar file is located in the tools directory -->
|
|
<taskdef resource="net/sf/antcontrib/antlib.xml">
|
|
<classpath>
|
|
<pathelement location="${basedir}/build/tools/ant-contrib-1.0b3.jar"/>
|
|
</classpath>
|
|
</taskdef>
|
|
|
|
<!-- load shell environment -->
|
|
<property environment="ENV" />
|
|
|
|
<!-- load property files -->
|
|
<property file="build/config/project.properties"/>
|
|
<property file="build/config/default.properties"/>
|
|
|
|
<!-- merge the stylesheet properties -->
|
|
<var name="stylesheet-files" value="${file.default.stylesheets}, ${file.stylesheets}"/>
|
|
|
|
<!-- merge the pages properties -->
|
|
<var name="page-files" value="${file.pages}, ${file.pages.default.include}"/>
|
|
|
|
<!-- Test for Ant Version Delete this task and all instances of overwrite='no' if you can't upgrade to 1.8.2-->
|
|
<fail message="All features of the build script require Ant version 1.8.2. Please upgrade to 1.8.2 or remove all instances of 'overwrite=no' (and this fail task) from the build script to continue">
|
|
<condition>
|
|
<not>
|
|
<contains string="${ant.version}" substring="1.8.2"/>
|
|
</not>
|
|
</condition>
|
|
</fail>
|
|
|
|
<!--
|
|
*************************************************
|
|
* BASE TARGETS *
|
|
*************************************************
|
|
-->
|
|
<target name="basics">
|
|
<if>
|
|
<equals arg1="${env}" arg2="dev"/>
|
|
<then>
|
|
<!-- Build a dev environment -->
|
|
<echo message="Building a Development Environment..."/>
|
|
<antcall target="-basics.dev"/>
|
|
</then>
|
|
|
|
<elseif>
|
|
<equals arg1="${env}" arg2="test"/>
|
|
<then>
|
|
<!-- Build a test environment -->
|
|
<echo message="Building a Test Environment..."/>
|
|
<antcall target="-basics.test"/>
|
|
</then>
|
|
</elseif>
|
|
|
|
<else>
|
|
<!-- Build a production environment -->
|
|
<echo message="Building a Production Environment..."/>
|
|
<antcall target="-basics.production"/>
|
|
</else>
|
|
</if>
|
|
</target>
|
|
|
|
|
|
<target name="text">
|
|
<if>
|
|
<equals arg1="${env}" arg2="dev"/>
|
|
<then>
|
|
<!-- Build a dev environment -->
|
|
<echo message="Building a Development Environment..."/>
|
|
<antcall target="-text.dev"/>
|
|
</then>
|
|
|
|
<elseif>
|
|
<equals arg1="${env}" arg2="test"/>
|
|
<then>
|
|
<!-- Build a test environment -->
|
|
<echo message="Building a Test Environment..."/>
|
|
<antcall target="-text.test"/>
|
|
</then>
|
|
</elseif>
|
|
|
|
<else>
|
|
<!-- Build a production environment -->
|
|
<echo message="Building a Production Environment..."/>
|
|
<antcall target="-text.production"/>
|
|
</else>
|
|
</if>
|
|
<antcall target="-imgcopy"/>
|
|
</target>
|
|
|
|
|
|
<target name="buildkit">
|
|
<if>
|
|
<equals arg1="${env}" arg2="dev"/>
|
|
<then>
|
|
<!-- Build a dev environment -->
|
|
<echo message="Building a Development Environment..."/>
|
|
<antcall target="-buildkit.dev"/>
|
|
</then>
|
|
|
|
<elseif>
|
|
<equals arg1="${env}" arg2="test"/>
|
|
<then>
|
|
<!-- Build a test environment -->
|
|
<echo message="Building a Test Environment..."/>
|
|
<antcall target="-buildkit.test"/>
|
|
</then>
|
|
</elseif>
|
|
|
|
<else>
|
|
<!-- Build a production environment -->
|
|
<echo message="Building a Production Environment..."/>
|
|
<antcall target="-buildkit.production"/>
|
|
</else>
|
|
</if>
|
|
</target>
|
|
|
|
|
|
<target name="build">
|
|
<if>
|
|
<equals arg1="${env}" arg2="dev"/>
|
|
<then>
|
|
<!-- Build a dev environment -->
|
|
<echo message="Building a Development Environment..."/>
|
|
<antcall target="-build.dev" />
|
|
</then>
|
|
|
|
<elseif>
|
|
<equals arg1="${env}" arg2="test"/>
|
|
<then>
|
|
<!-- Build a test environment -->
|
|
<echo message="Building a Test Environment..."/>
|
|
<antcall target="-build.test" />
|
|
</then>
|
|
</elseif>
|
|
|
|
<else>
|
|
<!-- Build a production environment -->
|
|
<echo message="Building a Production Environment..."/>
|
|
<antcall target="-build.production" />
|
|
</else>
|
|
</if>
|
|
</target>
|
|
|
|
|
|
<target name="minify">
|
|
<if>
|
|
<equals arg1="${env}" arg2="dev"/>
|
|
<then>
|
|
<!-- Build a dev environment -->
|
|
<echo message="Building a Development Environment..."/>
|
|
<antcall target="-minify.dev"/>
|
|
</then>
|
|
|
|
<elseif>
|
|
<equals arg1="${env}" arg2="test"/>
|
|
<then>
|
|
<!-- Build a test environment -->
|
|
<echo message="Building a Test Environment..."/>
|
|
<antcall target="-minify.test"/>
|
|
</then>
|
|
</elseif>
|
|
|
|
<else>
|
|
<!-- Build a production environment -->
|
|
<echo message="Building a Production Environment..."/>
|
|
<antcall target="-minify.production"/>
|
|
</else>
|
|
</if>
|
|
</target>
|
|
|
|
<target name="clean" depends="-clean"/>
|
|
|
|
|
|
|
|
<!-- JSLint target, run separately -->
|
|
<target name="jslint">
|
|
<apply dir="${dir.source}/${dir.js}" executable="java" parallel="false" failonerror="true">
|
|
<fileset dir="./${dir.source}/">
|
|
<include name="**/${dir.js}/*.js"/>
|
|
<exclude name="**/*.min.js"/>
|
|
<exclude name="**/${dir.js.libs}/"/>
|
|
<exclude name="**/${dir.publish}/"/>
|
|
</fileset>
|
|
<arg value="-jar" />
|
|
<arg path="./${dir.build.tools}/${tool.rhino}" />
|
|
<arg path="./${dir.build.tools}/${tool.jslint}" />
|
|
<srcfile/>
|
|
<arg value="${tool.jslint.opts}" />
|
|
</apply>
|
|
<echo>JSLint Successful</echo>
|
|
</target>
|
|
|
|
|
|
<!-- JSHint target, run separately -->
|
|
<target name="jshint">
|
|
<apply dir="${dir.source}/${dir.js}" executable="java" parallel="false" failonerror="true">
|
|
<fileset dir="./${dir.source}/">
|
|
<include name="**/${dir.js}/*.js"/>
|
|
<exclude name="**/*.min.js"/>
|
|
<exclude name="**/${dir.js.libs}/"/>
|
|
<exclude name="**/${dir.publish}/"/>
|
|
</fileset>
|
|
<arg value="-jar" />
|
|
<arg path="./${dir.build.tools}/${tool.rhino}" />
|
|
<arg path="./${dir.build.tools}/${tool.jshint}" />
|
|
<srcfile/>
|
|
<arg value="${tool.jshint.opts}" />
|
|
</apply>
|
|
<echo>JSHint Successful</echo>
|
|
</target>
|
|
|
|
<!-- CSSLint target, run separately -->
|
|
<target name="csslint">
|
|
<apply dir="${dir.source}/${dir.css}" executable="java" parallel="false" failonerror="true">
|
|
<fileset dir="./${dir.source}/">
|
|
<include name="**/${dir.css}/*.css"/>
|
|
<exclude name="**/*.min.css"/>
|
|
<exclude name="**/${dir.publish}/"/>
|
|
</fileset>
|
|
<arg value="-jar" />
|
|
<arg path="./${dir.build.tools}/${tool.rhino}" />
|
|
<arg path="./${dir.build.tools}/${tool.csslint}" />
|
|
<srcfile/>
|
|
<arg value="${tool.csslint.opts}" />
|
|
</apply>
|
|
<echo>CSSLint Successful</echo>
|
|
</target>
|
|
|
|
<!--
|
|
*************************************************
|
|
* BUILD TARGETS *
|
|
*************************************************
|
|
-->
|
|
|
|
<!-- Target: basics -->
|
|
<target name="-basics.dev"
|
|
depends="-rev,
|
|
-copy"/>
|
|
|
|
<target name="-basics.test"
|
|
depends="-rev,
|
|
-usemin,
|
|
-js.all.minify,
|
|
-js.main.concat,
|
|
-js.mylibs.concat,
|
|
-js.scripts.concat,
|
|
-css,
|
|
-manifest,
|
|
-copy"/>
|
|
|
|
<target name="-basics.production"
|
|
depends="-rev,
|
|
-usemin,
|
|
-js.all.minify,
|
|
-js.main.concat,
|
|
-js.mylibs.concat,
|
|
-js.scripts.concat,
|
|
-css,
|
|
-manifest,
|
|
-copy"/>
|
|
|
|
<!-- Target: text -->
|
|
<target name="-text.dev"
|
|
depends="-rev,
|
|
-copy"/>
|
|
|
|
<target name="-text.test"
|
|
depends="-rev,
|
|
-usemin,
|
|
-js.all.minify,
|
|
-js.main.concat,
|
|
-js.mylibs.concat,
|
|
-js.scripts.concat,
|
|
-css,
|
|
-manifest,
|
|
-htmlclean,
|
|
-copy"/>
|
|
|
|
<target name="-text.production"
|
|
depends="-rev,
|
|
-usemin,
|
|
-js.all.minify,
|
|
-js.main.concat,
|
|
-js.mylibs.concat,
|
|
-js.scripts.concat,
|
|
-css,
|
|
-manifest,
|
|
-htmlclean,
|
|
-copy"/>
|
|
|
|
<!-- Target: buildkit -->
|
|
<target name="-buildkit.dev"
|
|
depends="-rev,
|
|
-imagespng,
|
|
-imagesjpg,
|
|
-copy"/>
|
|
|
|
<target name="-buildkit.test"
|
|
depends="-rev,
|
|
-usemin,
|
|
-js.all.minify,
|
|
-js.main.concat,
|
|
-js.mylibs.concat,
|
|
-js.scripts.concat,
|
|
-css,
|
|
-manifest,
|
|
-htmlbuildkit,
|
|
-imagespng,
|
|
-imagesjpg,
|
|
-copy"/>
|
|
|
|
<target name="-buildkit.production"
|
|
depends="-rev,
|
|
-usemin,
|
|
-js.all.minify,
|
|
-js.main.concat,
|
|
-js.mylibs.concat,
|
|
-js.scripts.concat,
|
|
-css,
|
|
-manifest,
|
|
-htmlbuildkit,
|
|
-imagespng,
|
|
-imagesjpg,
|
|
-copy"/>
|
|
|
|
<!-- Target: build -->
|
|
<target name="-build.dev"
|
|
depends="-rev,
|
|
-imagespng,
|
|
-imagesjpg,
|
|
-copy"/>
|
|
|
|
<target name="-build.test"
|
|
depends="-rev,
|
|
-usemin,
|
|
-js.all.minify,
|
|
-js.main.concat,
|
|
-js.mylibs.concat,
|
|
-js.scripts.concat,
|
|
-css,
|
|
-manifest,
|
|
-htmlclean,
|
|
-imagespng,
|
|
-imagesjpg,
|
|
-copy"/>
|
|
|
|
<target name="-build.production"
|
|
depends="-rev,
|
|
-usemin,
|
|
-js.all.minify,
|
|
-js.main.concat,
|
|
-js.mylibs.concat,
|
|
-js.scripts.concat,
|
|
-css,
|
|
-manifest,
|
|
-htmlclean,
|
|
-imagespng,
|
|
-imagesjpg,
|
|
-copy"/>
|
|
|
|
<!-- Target: minify -->
|
|
<target name="-minify.dev"
|
|
depends="-rev,
|
|
-imagespng,
|
|
-imagesjpg,
|
|
-copy"/>
|
|
|
|
<target name="-minify.test"
|
|
depends="-rev,
|
|
-usemin,
|
|
-js.all.minify,
|
|
-js.main.concat,
|
|
-js.mylibs.concat,
|
|
-js.scripts.concat,
|
|
-css,
|
|
-manifest,
|
|
-htmlcompress,
|
|
-imagespng,
|
|
-imagesjpg,
|
|
-copy"/>
|
|
|
|
<target name="-minify.production"
|
|
depends="-rev,
|
|
-usemin,
|
|
-js.all.minify,
|
|
-js.main.concat,
|
|
-js.mylibs.concat,
|
|
-js.scripts.concat,
|
|
-css,
|
|
-manifest,
|
|
-htmlcompress,
|
|
-imagespng,
|
|
-imagesjpg,
|
|
-copy"/>
|
|
|
|
<!--
|
|
*************************************************
|
|
* FUNCTION TARGETS *
|
|
*************************************************
|
|
-->
|
|
|
|
<target name="-clean" description="(PRIVATE) Wipe the previous build (Deletes the dir.publish directory">
|
|
<!-- This is a private target -->
|
|
<echo message="Cleaning up previous build directory..."/>
|
|
<delete dir="./${dir.intermediate}/"/>
|
|
<delete dir="./${dir.publish}/"/>
|
|
</target>
|
|
|
|
|
|
<target name="-rev" description="(PRIVATE) Increase the current build number by one and set build date">
|
|
<!-- This is a private target -->
|
|
|
|
<echo message="====================================================================="/>
|
|
<echo message="Welcome to the HTML5 Boilerplate Build Script!"/>
|
|
<echo message=" "/>
|
|
<echo message="We're going to get your site all ship-shape and ready for prime time."/>
|
|
<echo message=" "/>
|
|
<echo message="This should take somewhere between 15 seconds and a few minutes,"/>
|
|
<echo message="mostly depending on how many images we're going to compress."/>
|
|
<echo message=" "/>
|
|
<echo message="Feel free to come back or stay here and follow along."/>
|
|
<echo message="====================================================================="/>
|
|
<echo message=" "/>
|
|
<echo message=" "/>
|
|
|
|
</target>
|
|
|
|
<target name="-mkdirs">
|
|
<if>
|
|
<or>
|
|
<equals arg1="${dir.publish}" arg2="."/>
|
|
<equals arg1="${dir.publish}" arg2=".."/>
|
|
<equals arg1="${dir.publish}" arg2="/"/>
|
|
<equals arg1="${dir.publish}" arg2="./"/>
|
|
<equals arg1="${dir.publish}" arg2="../"/>
|
|
</or>
|
|
<then>
|
|
<fail message="Your dir.publish folder is set to ${dir.publish} which could delete your entire site or worse. Change it in project.properties"/>
|
|
</then>
|
|
<else>
|
|
<echo message="Creating directory structure... ${dir.publish}"/>
|
|
|
|
<mkdir dir="${dir.intermediate}"/>
|
|
<copy todir="${dir.intermediate}" includeEmptyDirs="true">
|
|
<fileset dir="${dir.source}/" excludes="${file.default.exclude}, ${file.exclude}">
|
|
<type type="dir"/>
|
|
</fileset>
|
|
</copy>
|
|
<mkdir dir="${dir.publish}"/>
|
|
<copy todir="${dir.publish}" includeEmptyDirs="true">
|
|
<fileset dir="${dir.source}/" excludes="${file.default.exclude}, ${file.exclude}">
|
|
<type type="dir"/>
|
|
</fileset>
|
|
</copy>
|
|
</else>
|
|
</if>
|
|
</target>
|
|
|
|
<target name="-copy" depends="-mkdirs">
|
|
<!-- This is a private target -->
|
|
|
|
<echo message="Copying over new files..."/>
|
|
|
|
<copy todir="./${dir.publish}">
|
|
<fileset dir="${dir.source}/" excludes="${file.default.exclude}, ${file.exclude}">
|
|
<!-- exclude files that are superseded by optimized versions with different names -->
|
|
<!-- this is not strictly necessary, but it avoids putting unreferenced files into your server -->
|
|
<exclude name="${dir.js}/**/*.js"/>
|
|
<exclude name="${dir.css}/**/*.css"/>
|
|
<exclude name="${file.manifest}"/>
|
|
</fileset>
|
|
</copy>
|
|
|
|
<echo message="A copy of all non-dev files are now in: ./${dir.publish}."/>
|
|
</target>
|
|
|
|
<!-- JAVASCRIPT -->
|
|
<target name="-js.main.concat" depends="-js.all.minify" description="(PRIVATE) Concatenates the JS files in dir.js">
|
|
<echo message="Concatenating Main JS scripts..."/>
|
|
<!-- overwrite=no here means not to overwrite if the target is newer than the sources -->
|
|
<concat destfile="./${dir.intermediate}/${dir.js}/scripts-concat.js" overwrite="no">
|
|
<fileset dir="./${dir.intermediate}/">
|
|
<include name="${dir.js.main}/plugins.js"/>
|
|
<include name="${dir.js.main}/script.js"/>
|
|
</fileset>
|
|
</concat>
|
|
</target>
|
|
|
|
<target name="-js.mylibs.concat" depends="-js.all.minify" description="(PRIVATE) Concatenates the JS files in dir.js.mylibs">
|
|
<mkdir dir="./${dir.intermediate}/${dir.js.mylibs}"/>
|
|
|
|
<echo message="Concatenating JS libraries"/>
|
|
<!-- overwrite=no here means not to overwrite if the target is newer than the sources -->
|
|
<concat destfile="./${dir.intermediate}/${dir.js}/mylibs-concat.js" overwrite="no">
|
|
<fileset dir="./${dir.intermediate}/${dir.js.mylibs}/"
|
|
includes="**/*.js"
|
|
excludes="${file.js.bypass}"/>
|
|
|
|
</concat>
|
|
</target>
|
|
|
|
|
|
<target name="-js.scripts.concat" depends="-js.main.concat,-js.mylibs.concat" if="build.concat.scripts">
|
|
<echo message="Concatenating library file with main script file"/>
|
|
<!-- overwrite=no here means not to overwrite if the target is newer than the sources -->
|
|
<concat destfile="./${dir.intermediate}/${dir.js}/scripts-concat.min.js" overwrite="no">
|
|
<fileset dir="./${dir.intermediate}/${dir.js}/">
|
|
<include name="mylibs-concat.js"/>
|
|
<include name="scripts-concat.js"/>
|
|
</fileset>
|
|
</concat>
|
|
|
|
<checksum file="${dir.intermediate}/${dir.js}/scripts-concat.min.js" algorithm="sha" property="scripts.sha" />
|
|
<if>
|
|
<isset property="gae.js_dir" />
|
|
<then>
|
|
<property name="scripts.js" value="${gae.js_dir}/${scripts.sha}.js" />
|
|
</then>
|
|
<else>
|
|
<property name="scripts.js" value="${dir.js}/${scripts.sha}.js" />
|
|
</else>
|
|
</if>
|
|
<copy file="${dir.intermediate}/${dir.js}/scripts-concat.min.js" tofile="${dir.publish}/${dir.js}/${scripts.sha}.js" />
|
|
</target>
|
|
|
|
|
|
<target name="-js.all.minify" depends="-mkdirs" description="(PRIVATE) Minifies the scripts.js files created by js.scripts.concat">
|
|
<echo message="Minifying scripts"/>
|
|
<copy todir="${dir.intermediate}/">
|
|
<fileset dir="${dir.source}/" includes="${dir.js}/**/*.min.js" />
|
|
</copy>
|
|
<apply executable="java" parallel="false">
|
|
<fileset dir="${dir.source}/" >
|
|
<include name="${dir.js}/**/*.js"/>
|
|
<exclude name="${dir.js}/**/*.min.js"/>
|
|
</fileset>
|
|
<arg line="-jar"/>
|
|
<arg path="./${dir.build.tools}/${tool.yuicompressor}"/>
|
|
<srcfile/>
|
|
<arg line="--line-break"/>
|
|
<arg line="4000"/>
|
|
<arg line="-o"/>
|
|
<mapper type="glob" from="*.js" to="${basedir}/${dir.intermediate}/*.js"/>
|
|
<targetfile/>
|
|
</apply>
|
|
|
|
<!-- at this point all js files are minified with their original names -->
|
|
|
|
<copy todir="${dir.publish}/">
|
|
<fileset dir="${dir.intermediate}/">
|
|
<include name="${dir.js}/**/*.js"/>
|
|
<exclude name="${dir.js.mylibs}/**/*.js"/>
|
|
<exclude name="${dir.js}/scripts-concat.js"/>
|
|
<exclude name="${dir.js}/mylibs-concat.js"/>
|
|
<exclude name="${dir.js}/scripts-concat.min.js"/>
|
|
<exclude name="${dir.js}/plugins.js"/>
|
|
<exclude name="${dir.js}/script.js"/>
|
|
</fileset>
|
|
</copy>
|
|
<copy todir="${dir.publish}/${dir.js.mylibs}/">
|
|
<fileset dir="${dir.source}/${dir.js.mylibs}/"
|
|
includes="${file.js.bypass}"/>
|
|
</copy>
|
|
</target>
|
|
|
|
|
|
<!-- HTML -->
|
|
<target name="-usemin" depends="-js.scripts.concat,-css" description="(PRIVATE) Replaces references to non-minified scripts">
|
|
<echo message="Switching to minified js files..."/>
|
|
|
|
<!-- Changes to style.css or scripts.js mean that the html must be updated, and it will be.
|
|
Unfortunately, the html we want to update may not have the tags we want to replace(because it was updated before).
|
|
This outofdate check ensures that the html files have the markers for us to replace. -->
|
|
<outofdate property="needhtmlrefresh">
|
|
<sourcefiles>
|
|
<fileset dir="${dir.publish}" includes="${style.css}, ${scripts.js}"/>
|
|
</sourcefiles>
|
|
<targetfiles>
|
|
<fileset dir="${dir.intermediate}" includes="${page-files}"/>
|
|
</targetfiles>
|
|
</outofdate>
|
|
|
|
<!-- force the files to be overwritten with older copies from source if needhtmlrefresh is set -->
|
|
<copy todir="${dir.intermediate}" overwrite="${needhtmlrefresh}">
|
|
<fileset dir="${dir.source}" includes="${page-files}"/>
|
|
</copy>
|
|
|
|
<!-- switch from a regular jquery to minified -->
|
|
<replaceregexp match="jquery-(\d|\d(\.\d)+)\.js" replace="jquery-\1.min.js" flags="g">
|
|
<fileset dir="./${dir.intermediate}" includes="${page-files}"/>
|
|
</replaceregexp>
|
|
<!-- switch any google CDN reference to minified -->
|
|
<replaceregexp match="(\d|\d(\.\d)+)\/jquery\.js" replace="\1/jquery.min.js" flags="g">
|
|
<fileset dir="./${dir.intermediate}" includes="${page-files}"/>
|
|
</replaceregexp>
|
|
|
|
<echo>Kill off those versioning flags: ?v=2</echo>
|
|
<replaceregexp match='\?v=\d+">' replace='">' flags="g">
|
|
<fileset dir="./${dir.intermediate}" includes="${page-files}"/>
|
|
</replaceregexp>
|
|
|
|
<echo>Remove favicon.ico reference if it is pointing to the root</echo>
|
|
<replaceregexp match="<link rel=["']shortcut icon["'] href=["']/favicon\.ico["']>" replace="">
|
|
<fileset dir="${dir.intermediate}" includes="${page-files}"/>
|
|
</replaceregexp>
|
|
<!-- we maintain the apple-touch-icon reference for Android 2.2 www.ravelrumba.com/blog/android-apple-touch-icon
|
|
<replace token="<link rel="apple-touch-icon" href="/apple-touch-icon.png">" value="">
|
|
<fileset dir="${dir.intermediate}" includes="${page-files}"/>
|
|
</replace>
|
|
-->
|
|
|
|
<echo message="Update the HTML to reference our concatenated script file: ${scripts.js}"/>
|
|
<!-- style.css replacement handled as a replacetoken above -->
|
|
<replaceregexp match="<!-- scripts concatenated [\d\w\s\W]*?!-- end ((scripts)|(concatenated and minified scripts))-->" replace="<script defer src='${scripts.js}\'></script>" flags="m">
|
|
<fileset dir="${dir.intermediate}" includes="${page-files}"/>
|
|
</replaceregexp>
|
|
<!--[! use comments like this one to avoid having them get minified -->
|
|
|
|
<echo message="Updating the HTML with the new css filename: ${style.css}"/>
|
|
|
|
<replaceregexp match="<!-- CSS concatenated [\d\w\s\W]*?!-- end CSS-->" replace="<link rel='stylesheet' href='${style.css}'>" flags="m">
|
|
<fileset dir="${dir.intermediate}" includes="${page-files}"/>
|
|
</replaceregexp>
|
|
|
|
</target>
|
|
|
|
|
|
<target name="-manifest" depends="-usemin">
|
|
<if>
|
|
<isset property="file.manifest" />
|
|
<then>
|
|
<echo message="copying a fresh ${dir.build}/config/${file.manifest} to /${dir.intermediate}"/>
|
|
|
|
<delete file="${dir.intermediate}/${file.manifest}"/>
|
|
<copy file="${dir.build}/config/${file.manifest}" tofile="${dir.intermediate}/${file.manifest}" />
|
|
|
|
<echo message="manifest creation" />
|
|
|
|
<!-- update version -->
|
|
<echo message="Updating the site.manifest version date to today, current time"/>
|
|
<tstamp>
|
|
<format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss"/>
|
|
</tstamp>
|
|
<replaceregexp match="# version .+" replace="# version ${TODAY}" file="${dir.intermediate}/${file.manifest}"/>
|
|
|
|
<!-- add html files -->
|
|
<echo message="Updating the site.manifest with html files: ${page-files}"/>
|
|
<for list="${page-files}" param="file" delimiter="," trim="true">
|
|
<sequential>
|
|
<replaceregexp match="# html files" replace="# html files${line.separator}@{file}" file="${dir.intermediate}/${file.manifest}" />
|
|
</sequential>
|
|
</for>
|
|
|
|
<!-- add stylesheet files -->
|
|
<echo message="Updating the site.manifest with the new css filename: ${style.css}"/>
|
|
<replace token="# css files" value="# css files${line.separator}${style.css}" file="${dir.intermediate}/${file.manifest}" />
|
|
|
|
<!-- add javascript files -->
|
|
<echo message="Updating the site.manifest with the new js filename: ${scripts.js}"/>
|
|
<for param="file">
|
|
<path>
|
|
<fileset dir="./${dir.intermediate}/${dir.js.mylibs}/"
|
|
includes="${file.js.bypass}" />
|
|
</path>
|
|
<sequential>
|
|
<basename property="filename.@{file}" file="@{file}" />
|
|
<replaceregexp match="# js files" replace="# js files${line.separator}${dir.js.mylibs}/${filename.@{file}}" file="${dir.intermediate}/${file.manifest}" />
|
|
</sequential>
|
|
</for>
|
|
<for param="file">
|
|
<path>
|
|
<fileset dir="./${dir.intermediate}/${dir.js.libs}/"
|
|
includes="*.min.js"/>
|
|
</path>
|
|
<sequential>
|
|
<basename property="filename.@{file}" file="@{file}" />
|
|
<replaceregexp match="# js files" replace="# js files${line.separator}${dir.js.libs}/${filename.@{file}}" file="${dir.intermediate}/${file.manifest}" />
|
|
</sequential>
|
|
</for>
|
|
<replace token="# js files" value="# js files${line.separator}${scripts.js}" file="${dir.intermediate}/${file.manifest}" />
|
|
|
|
<echo message="copying ${file.manifest} to /${dir.publish}"/>
|
|
<copy file="${dir.intermediate}/${file.manifest}" tofile="${dir.publish}/${file.manifest}" />
|
|
|
|
<echo>Add manifest attribute to HTML: </echo>
|
|
<replaceregexp match="<html (.*?)>\s*?<!--<!\[endif" replace='<html \1 manifest="${file.manifest}"> <!--<![endif' flags="g">
|
|
<fileset dir="./${dir.intermediate}" includes="${page-files}"/>
|
|
</replaceregexp>
|
|
|
|
</then>
|
|
<else>
|
|
<echo message="no manifest.appcache generated!" />
|
|
</else>
|
|
</if>
|
|
</target>
|
|
|
|
<target name="-htmlclean" depends="-usemin">
|
|
<echo message="Run htmlcompressor on the HTML"/>
|
|
<echo message=" - maintaining whitespace"/>
|
|
<echo message=" - removing html comments"/>
|
|
<echo message=" - compressing inline style/script tag contents"/>
|
|
<apply executable="java" parallel="false" dest="./${dir.publish}/" >
|
|
<fileset dir="./${dir.intermediate}/" includes="${page-files}"/>
|
|
<arg value="-jar"/>
|
|
<arg path="./${dir.build.tools}/${tool.htmlcompressor}"/>
|
|
<arg line="--preserve-multi-spaces"/>
|
|
<arg line="--remove-quotes"/>
|
|
<arg line="--compress-js"/>
|
|
<arg line="--compress-css"/>
|
|
<arg line="--preserve-php"/>
|
|
<arg line="--preserve-ssi"/>
|
|
<srcfile/>
|
|
<arg value="-o"/>
|
|
<mapper type="glob" from="*" to="../${dir.publish}/*"/>
|
|
<targetfile/>
|
|
</apply>
|
|
</target>
|
|
|
|
|
|
<target name="-htmlbuildkit" depends="-usemin">
|
|
<echo message="Run htmlcompressor on the HTML"/>
|
|
<echo message=" - maintaining whitespace"/>
|
|
<echo message=" - retain html comments"/>
|
|
<echo message=" - compressing inline style/script tag contents"/>
|
|
<apply executable="java" parallel="false" dest="./${dir.publish}/" >
|
|
<fileset dir="./${dir.intermediate}/" includes="${page-files}"/>
|
|
<arg value="-jar"/>
|
|
<arg path="./${dir.build.tools}/${tool.htmlcompressor}"/>
|
|
<arg value="--preserve-comments"/>
|
|
<arg line="--preserve-multi-spaces"/>
|
|
<arg line="--compress-js"/>
|
|
<arg line="--compress-css"/>
|
|
<arg line="--preserve-php"/>
|
|
<arg line="--preserve-ssi"/>
|
|
<srcfile/>
|
|
<arg value="-o"/>
|
|
<mapper type="glob" from="*" to="../${dir.publish}/*"/>
|
|
<targetfile/>
|
|
</apply>
|
|
</target>
|
|
|
|
|
|
<target name="-htmlcompress" depends="-usemin">
|
|
<echo message="Run htmlcompressor on the HTML"/>
|
|
<echo message=" - removing unnecessary whitespace"/>
|
|
<echo message=" - removing html comments"/>
|
|
<echo message=" - compressing inline style/script tag contents"/>
|
|
<apply executable="java" parallel="false" dest="./${dir.publish}/" >
|
|
<fileset dir="./${dir.intermediate}/" includes="${page-files}"/>
|
|
<arg value="-jar"/>
|
|
<arg path="./${dir.build.tools}/${tool.htmlcompressor}"/>
|
|
<arg line="--remove-quotes"/>
|
|
<arg line="--compress-js"/>
|
|
<arg line="--compress-css"/>
|
|
<arg line="--preserve-php"/>
|
|
<arg line="--preserve-ssi"/>
|
|
<srcfile/>
|
|
<arg value="-o"/>
|
|
<mapper type="glob" from="*" to="../${dir.publish}/*"/>
|
|
<targetfile/>
|
|
</apply>
|
|
</target>
|
|
|
|
|
|
<!-- CSS -->
|
|
|
|
<target name="-css-remove-concatenated-stylesheets">
|
|
<echo>Removing ${css_file} from html</echo>
|
|
<replaceregexp match="<link.+href=".*${css_file}".*>" replace=" ">
|
|
<fileset dir="${dir.intermediate}" includes="${page-files}"/>
|
|
</replaceregexp>
|
|
</target>
|
|
|
|
|
|
<target name="css-split" description="turns style.css into multiple files @imported together">
|
|
<copy file="${dir.source}/${dir.css}/${file.root.stylesheet}" tofile="${dir.source}/${dir.css}/${file.root.stylesheet}.temp"/>
|
|
|
|
<replaceregexp file="${dir.source}/${dir.css}/${file.root.stylesheet}.temp"
|
|
match=".*"
|
|
replace="/* remove me */" flags="s" />
|
|
|
|
<loadfile property="root" srcfile="${dir.source}/${dir.css}/${file.root.stylesheet}"/>
|
|
<var name="curr.buffer" value=""/>
|
|
|
|
<for delimiter="${line.separator}" param="currline" list="${root}">
|
|
<sequential>
|
|
<!-- does this line contain an h5bp-import? -->
|
|
<propertyregex property="export.name" input="@{currline}" regexp="^.*==\|== +(.*) +==+$" select="\1" casesensitive="true" override="true" />
|
|
<if>
|
|
<isset property="export.name"/>
|
|
<then>
|
|
<propertyregex property="export.name" input="${export.name}" regexp=" " replace="." global="true" override="true" />
|
|
<var name="export.name" value="${export.name}.css"/>
|
|
|
|
<if>
|
|
<isset property="curr.file"/>
|
|
<then>
|
|
<!-- create curr.file -->
|
|
<copy file="${dir.source}/${dir.css}/${file.root.stylesheet}" tofile="${dir.source}/${dir.css}/${curr.file}" overwrite="true"/>
|
|
<!-- write the curr.buffer into the curr.file -->
|
|
<replaceregexp file="${dir.source}/${dir.css}/${curr.file}"
|
|
match=".*"
|
|
replace="${curr.buffer}" flags="s" />
|
|
|
|
<var name="curr.buffer" value=""/>
|
|
<var name="curr.file" unset="true"/>
|
|
</then>
|
|
</if>
|
|
<var name="curr.file" value="${export.name}"/>
|
|
<var name="export.name" unset="true"/>
|
|
|
|
<!-- insert import line into new root -->
|
|
<replace file="${dir.source}/${dir.css}/${file.root.stylesheet}.temp" token="/* remove me */" value="@import url(${curr.file});${line.separator}/* remove me */"/>
|
|
</then>
|
|
</if>
|
|
<var name="curr.buffer" value="${curr.buffer}@{currline}${line.separator}" />
|
|
</sequential>
|
|
</for>
|
|
<!-- one more time to write out the last file -->
|
|
<if>
|
|
<isset property="curr.file"/>
|
|
<then>
|
|
<!-- create curr.file -->
|
|
<copy file="${dir.source}/${dir.css}/${file.root.stylesheet}" tofile="${dir.source}/${dir.css}/${curr.file}" overwrite="true"/>
|
|
<!-- write the curr.buffer into the curr.file -->
|
|
<replaceregexp file="${dir.source}/${dir.css}/${curr.file}"
|
|
match=".*"
|
|
replace="${curr.buffer}" flags="s" />
|
|
|
|
<var name="curr.buffer" value=""/>
|
|
<var name="curr.file" unset="true"/>
|
|
</then>
|
|
</if>
|
|
<replace file="${dir.source}/${dir.css}/${file.root.stylesheet}.temp" token="/* remove me */" value="${curr.buffer}"/>
|
|
<copy file="${dir.source}/${dir.css}/${file.root.stylesheet}" tofile="${dir.source}/${dir.css}/${file.root.stylesheet}.orig" overwrite="false"/>
|
|
<move file="${dir.source}/${dir.css}/${file.root.stylesheet}.temp" tofile="${dir.source}/${dir.css}/${file.root.stylesheet}" overwrite="false"/>
|
|
</target>
|
|
|
|
<target name="-css" depends="-mkdirs" description="Concatenates and Minifies any stylesheets listed in the file.stylesheets property">
|
|
<echo message="Concatenating any @imports..."/>
|
|
|
|
<!-- copy source file to intermediate directory -->
|
|
<copy file="${dir.source}/${dir.css}/${file.root.stylesheet}" tofile="${dir.intermediate}/${dir.css}/${file.root.stylesheet}"/>
|
|
|
|
<!-- replace imports with h5bp-import tags (part 1) this one wraps @media types -->
|
|
<replaceregexp file="${dir.intermediate}/${dir.css}/${file.root.stylesheet}"
|
|
match="^@import\s+(?:url\s*\(\s*['"]?|['"])((?!http:|https:|ftp:)[^"^'^\s]+)(?:['"]?\s*\)|['"])\s*([\w\s,\-]*);.*$"
|
|
replace="@media \2{ /* h5bp-import: \1 */ }" byline="true" />
|
|
|
|
<!-- replace imports with h5bp-import tags (part 2) -->
|
|
<replaceregexp file="${dir.intermediate}/${dir.css}/${file.root.stylesheet}"
|
|
match="^@media \{ (/\* .* \*/) \}" replace="\1" byline="true" />
|
|
|
|
<!-- copy skeleton to concat file -->
|
|
<copy file="${dir.intermediate}/${dir.css}/${file.root.stylesheet}"
|
|
tofile="${dir.intermediate}/${dir.css}/style-concat.css" overwrite="true"/>
|
|
|
|
<!-- load the file into a property -->
|
|
<loadfile property="imports" srcfile="${dir.intermediate}/${dir.css}/${file.root.stylesheet}"/>
|
|
|
|
<var name="concat-files" value="${file.root.stylesheet}"/>
|
|
|
|
<!-- go over the file line by line -->
|
|
<for delimiter="${line.separator}" param="import" list="${imports}">
|
|
<sequential>
|
|
<!-- does this line contain an h5bp-import? -->
|
|
<propertyregex property="file.name" input="@{import}" regexp="/\* h5bp-import: (.*) \*/" select="\1" casesensitive="true" override="true" />
|
|
|
|
<if>
|
|
<isset property="file.name"/>
|
|
<then>
|
|
<var name="concat-files" value="${file.name},${concat-files}"/>
|
|
|
|
<!-- load the file into a variable -->
|
|
<loadfile property="file.contents" srcFile="${dir.source}/${dir.css}/${file.name}"/>
|
|
|
|
<!-- pop that file into the concatenated output file -->
|
|
<replace file="${dir.intermediate}/${dir.css}/style-concat.css" token="/* h5bp-import: ${file.name} */" value="${file.contents}"/>
|
|
|
|
<var name="file.contents" unset="true"/>
|
|
</then>
|
|
</if>
|
|
</sequential>
|
|
</for>
|
|
<echo message="Minifying css..."/>
|
|
|
|
<apply executable="java" parallel="false">
|
|
<fileset dir="${dir.intermediate}/${dir.css}/" includes="style-concat.css"/>
|
|
<arg line="-jar"/>
|
|
<arg path="${dir.build.tools}/${tool.yuicompressor}"/>
|
|
<srcfile/>
|
|
<arg line="-o"/>
|
|
<mapper type="merge" to="${basedir}/${dir.intermediate}/${dir.css}/style-concat.min.css"/>
|
|
<targetfile/>
|
|
</apply>
|
|
|
|
<checksum file="${dir.intermediate}/${dir.css}/style-concat.min.css" algorithm="sha" property="css.sha" />
|
|
<if>
|
|
<isset property="gae.css_dir" />
|
|
<then>
|
|
<property name="style.css" value="${gae.css_dir}/${css.sha}.css" />
|
|
</then>
|
|
<else>
|
|
<property name="style.css" value="${dir.css}/${css.sha}.css" />
|
|
</else>
|
|
</if>
|
|
<copy file="${dir.intermediate}/${dir.css}/style-concat.min.css" tofile="${dir.publish}/${dir.css}/${css.sha}.css" />
|
|
|
|
<echo message="Minifying any unconcatenated css files..."/>
|
|
|
|
<apply executable="java" parallel="false">
|
|
<fileset dir="${dir.source}/${dir.css}/" excludes="${concat-files}" includes="**/*.css"/>
|
|
<arg line="-jar"/>
|
|
<arg path="${dir.build.tools}/${tool.yuicompressor}"/>
|
|
<srcfile/>
|
|
<arg line="-o"/>
|
|
<mapper type="glob" from="*.css" to="${basedir}/${dir.publish}/${dir.css}/*.css"/>
|
|
<targetfile/>
|
|
</apply>
|
|
<foreach list="${file.stylesheets}" param="css_file" target="-css-remove-concatenated-stylesheets" />
|
|
</target>
|
|
|
|
|
|
<!-- IMAGES -->
|
|
<target name="-imagespng" depends="-mkdirs" description="(PRIVATE) Optimizes .png images using optipng">
|
|
<echo message="Optimizing images..."/>
|
|
<echo message="This part might take a while. But everything else is already done."/>
|
|
<echo message=" "/>
|
|
|
|
|
|
<echo message="First, we run optipng on the .png files..."/>
|
|
|
|
<!-- osfamily=unix is actually true on OS X as well -->
|
|
<!-- On *nix's and OS X, check for optipng and give a helpful message if it's not installed -->
|
|
<if>
|
|
<and>
|
|
<os family="unix" />
|
|
<available file="optipng" filepath="${ENV.PATH}" />
|
|
</and>
|
|
<then>
|
|
<!-- work around https://sourceforge.net/tracker/?func=detail&aid=2671422&group_id=151404&atid=780916 -->
|
|
<delete>
|
|
<fileset dir="./${dir.publish}/${dir.images}/">
|
|
<include name="**/*.png"/>
|
|
</fileset>
|
|
</delete>
|
|
<apply executable="optipng" dest="./${dir.publish}/${dir.images}/" osfamily="unix">
|
|
<fileset dir="./${dir.source}/${dir.images}/" includes="**/*.png" excludes="${images.bypass}, ${images.default.bypass}"/>
|
|
<arg value="-quiet"/>
|
|
<arg value="-o7"/>
|
|
<arg value="-out"/>
|
|
<targetfile/>
|
|
<srcfile/>
|
|
<mapper type="identity"/>
|
|
</apply>
|
|
</then>
|
|
<elseif>
|
|
<os family="unix" />
|
|
<then>
|
|
<echo message="*** optipng NOT INSTALLED. SKIPPING OPTIMIZATION OF PNGs." />
|
|
<echo message="*** Install optipng to enable png optimization." />
|
|
<echo message="*** For instructions see 'Dependencies' at: http://html5boilerplate.com/docs/#Build-script#dependencies" />
|
|
</then>
|
|
</elseif>
|
|
</if>
|
|
|
|
<!-- work around https://sourceforge.net/tracker/?func=detail&aid=2671422&group_id=151404&atid=780916 -->
|
|
<delete>
|
|
<fileset dir="./${dir.publish}/${dir.images}/">
|
|
<include name="**/*.png"/>
|
|
</fileset>
|
|
</delete>
|
|
<apply executable="${basedir}/${dir.build.tools}/optipng-0.6.4-exe/optipng.exe" dest="./${dir.publish}/${dir.images}/" osfamily="windows">
|
|
<fileset dir="./${dir.source}/${dir.images}/" includes="**/*.png" excludes="${images.bypass}, ${images.default.bypass}"/>
|
|
<arg value="-quiet"/>
|
|
<arg value="-o7"/>
|
|
<arg value="-out"/>
|
|
<targetfile/>
|
|
<srcfile/>
|
|
<mapper type="identity"/>
|
|
</apply>
|
|
</target>
|
|
|
|
|
|
<target name="-imagesjpg" depends="-mkdirs" description="(PRIVATE) Optimizes .jpg images using jpegtan">
|
|
<echo message="Now, we clean up those jpgs..."/>
|
|
|
|
<if>
|
|
<equals arg1="${images.strip.metadata}" arg2="true"/>
|
|
<then>
|
|
<var name="strip-meta-tags" value="none"/>
|
|
</then>
|
|
<else>
|
|
<var name="strip-meta-tags" value="all"/>
|
|
</else>
|
|
</if>
|
|
|
|
<!-- On *nix's and OS X, check for jpegtran and give a helpful message if it's not installed -->
|
|
<if>
|
|
<and>
|
|
<os family="unix" />
|
|
<available file="jpegtran" filepath="${ENV.PATH}" />
|
|
</and>
|
|
<then>
|
|
<apply executable="jpegtran" dest="./${dir.publish}/${dir.images}" osfamily="unix">
|
|
<fileset dir="${dir.source}/${dir.images}" includes="**/*.jpg" excludes="${images.bypass}, ${images.default.bypass}"/>
|
|
<arg value="-copy"/>
|
|
<arg value="${strip-meta-tags}"/>
|
|
<arg value="-optimize"/>
|
|
<arg value="-outfile"/>
|
|
<targetfile/>
|
|
<srcfile/>
|
|
<mapper type="identity"/>
|
|
<!-- you may want to flag optimized images. If so, do it here. Otherwise change this to type="identity" -->
|
|
<!--<mapper type="glob" from="*.jpg" to="*.jpg"/>-->
|
|
</apply>
|
|
</then>
|
|
<elseif>
|
|
<os family="unix" />
|
|
<then>
|
|
<echo message="*** jpegtran NOT INSTALLED. SKIPPING OPTIMIZATION OF JPEGs." />
|
|
<echo message="*** Install jpegtran to enable jpeg optimization." />
|
|
<echo message="*** For instructions see 'Dependencies' at: http://html5boilerplate.com/docs/#Build-script#dependencies" />
|
|
</then>
|
|
</elseif>
|
|
</if>
|
|
|
|
<apply executable="${basedir}/${dir.build.tools}/jpegtran.exe" dest="./${dir.publish}/${dir.images}" osfamily="windows">
|
|
<fileset dir="${dir.source}/${dir.images}" includes="**/*.jpg" excludes="${images.bypass}, ${images.default.bypass}"/>
|
|
<arg value="-copy"/>
|
|
<arg value="${strip-meta-tags}"/>
|
|
<arg value="-optimize"/>
|
|
<arg value="-outfile"/>
|
|
<targetfile/>
|
|
<srcfile/>
|
|
<mapper type="identity"/>
|
|
<!-- you may want to flag optimized images. If so, do it here. Otherwise change this to type="identity" -->
|
|
<!--<mapper type="glob" from="*.jpg" to="*.jpg"/>-->
|
|
</apply>
|
|
</target>
|
|
|
|
|
|
<target name="-imgcopy" depends="-mkdirs">
|
|
<echo message="Copying over the unmodified images."/>
|
|
|
|
<copy todir="./${dir.publish}/${dir.images}">
|
|
<fileset dir="${dir.source}/${dir.images}" includes="**/*.jpg, **/*.png"/>
|
|
</copy>
|
|
</target>
|
|
|
|
</project>
|