<?xml version="1.0" encoding="iso-8859-1"?>

<!--
	jQuery UI Release!

	Call task called 'deploy-release' to build a full release.
	The release built will be stored on 'dist' dir.

-->

<project name="jquery-ui" default="deploy-release" basedir=".">
	
	<taskdef resource="net/sf/antcontrib/antcontrib.properties">
		<classpath>
			<pathelement location="build/ant-contrib-0.6.jar"/>
		</classpath>
	</taskdef>
	
	<property file="ant.properties" />

	<loadfile failonerror="no" srcFile="../version.txt" property="release.version">
		<filterchain><striplinebreaks/></filterchain>
	</loadfile>
	<property name="release.filename" value="jquery-ui-${release.version}" />

	<property name="dist.dir" value="dist/${release.filename}/" />
	<property name="cdndist.dir" value="dist/${release.filename}-cdn" />
	<property name="build.dir" value="build" />
	<property name="ui.dir" value="../" />
	<property name="src.dir" value="${ui.dir}/ui/" />
	<property name="theme.dir" value="${ui.dir}/themes/base/" />
	<property name="docs.dir" value="${dist.dir}/docs/" />

	<property name="min.dir" value="${dist.dir}/ui/minified" />

	<property name="concatenated" value="jquery-ui" />
	<property name="concatenated.i18n" value="jquery-ui-i18n" />

	<property name="core.files" value="jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.effects.core.js" />
	<property name="core.files.min" value="jquery.ui.core.min.js, jquery.ui.widget.min.js, jquery.ui.mouse.min.js, jquery.ui.draggable.min.js, jquery.ui.droppable.min.js, jquery.ui.resizable.min.js, jquery.ui.selectable.min.js, jquery.ui.sortable.min.js, jquery.effects.core.min.js" />

	<property description="Google Closure" name="closure-jar" value="${build.dir}/google-compiler-20091218.jar" />
	<property description="YUI Compressor" name="yuicompressor-jar" value="${build.dir}/yuicompressor-2.4.2.jar" />
	
	<target name="deploy-release" depends="clean, docs-download, copy, minify, replace-version, prepend-header, zip" description="Release builder">
	</target>
	
	<target name="replace-version">
		<replaceregexp match="@VERSION" replace="${release.version}" flags="g" byline="true">
		    <fileset dir="${dist.dir}/ui/" includes="*.js"/>
			<fileset dir="${dist.dir}/ui/minified/" includes="*.js"/>
			<fileset dir="${dist.dir}/themes/" includes="**/*.css"/>
		</replaceregexp>
		<echo message="Replaced all @VERSION to ${release.version}." />
	</target>
	
	<target name="prepend-header">
		<copy todir="${dist.dir}/headers/">
			<fileset dir="${dist.dir}/ui/" includes="*.js" />
		</copy>
		<replaceregexp match="^(\/\*.*?\*\/\s).+" replace="\1" flags="s">
		    <fileset dir="${dist.dir}/headers/" includes="*.js"/>
		</replaceregexp>
		<for param="file">
			<path><fileset dir="${min.dir}/" includes="*.js" /></path>
			<sequential>
				<propertyregex override="yes" property="target" input="@{file}" regexp=".*[\\/](.+)\.min\.js$" replace="\1"/>
				<concat destfile="${dist.dir}/ui-headered/${target}.min.js">
					<header file="${dist.dir}/headers/${target}.js" />
					<fileset file="@{file}" />
				</concat>
			</sequential>
		</for>
		<copy todir="${min.dir}" overwrite="true">
			<fileset dir="${dist.dir}/ui-headered/" includes="*.js" />
		</copy>
		
		<copy todir="${dist.dir}/headers/">
			<fileset dir="${dist.dir}/themes/base" includes="*.css" />
		</copy>
		<replaceregexp match="^(\/\*.*?\*\/\s).+" replace="\1" flags="s">
		    <fileset dir="${dist.dir}/headers/" includes="*.css"/>
		</replaceregexp>
		<for param="file">
			<path><fileset dir="${dist.dir}/themes/base/minified" includes="*.css" /></path>
			<sequential>
				<propertyregex override="yes" property="target" input="@{file}" regexp=".*[\\/](.+)\.min\.css$" replace="\1"/>
				<concat destfile="${dist.dir}/ui-headered/${target}.min.css">
					<header file="${dist.dir}/headers/${target}.css" />
					<fileset file="@{file}" />
				</concat>
			</sequential>
		</for>
		<copy todir="${dist.dir}/themes/base/minified" overwrite="true">
			<fileset dir="${dist.dir}/ui-headered/" includes="*.css" />
		</copy>
		
		<!-- once more for the i18n files -->
		<!-- need to clean up headers in those files first
		<copy todir="${dist.dir}/headers/i18n/">
			<fileset dir="${dist.dir}/ui/i18n/" includes="*.js" />
		</copy>
		<replaceregexp match="^(\/\*.*?\*\/\s).+" replace="\1" flags="s">
		    <fileset dir="${dist.dir}/headers/i18n/" includes="*.js"/>
		</replaceregexp>
		<for param="file">
			<path><fileset dir="${min.dir}/i18n/" includes="*.js" /></path>
			<sequential>
				<propertyregex override="yes" property="target" input="@{file}" regexp=".*[\\/](.+)\.min\.js$" replace="\1"/>
				<concat destfile="${dist.dir}/ui-headered/i18n/${target}.min.js">
					<header file="${dist.dir}/headers/i18n/${target}.js" />
					<fileset file="@{file}" />
				</concat>
			</sequential>
		</for>
		<copy todir="${min.dir}/i18n/">
			<fileset dir="${dist.dir}/ui-headered/i18n/" includes="*.js" />
		</copy>
		-->

		<delete dir="${dist.dir}/headers/" />
		<delete dir="${dist.dir}/ui-headered/" />
	</target>

	<target description="Zip the package" name="zip">
		<zip destfile="${dist.dir}/../${release.filename}.zip">
			<zipfileset dir="dist/" />
		</zip>
	</target>

	<target name="concatenate">
		<echo message="Building concatenated" />
		<mkdir dir="${dist.dir}/ui/" />
		<delete file="${dist.dir}/ui/${concatenated}.js" />

		<concat destfile="${dist.dir}/ui/${concatenated}.js">
			<filelist dir="${src.dir}/" files="${core.files}" />
			<fileset dir="${src.dir}/" includes="jquery.ui.*.js, jquery.effects.*.js" excludes="${core.files}" />
		</concat>
		<echo message="Concatenated built." />

		<concat destfile="${dist.dir}/themes/base/${concatenated}.css">
			<fileset dir="${theme.dir}/" includes="jquery.ui.core.css" />
			<fileset dir="${theme.dir}/" includes="jquery.ui.*.css" excludes="jquery.ui.all.css, jquery.ui.core.css, jquery.ui.base.css, jquery.ui.theme.css" />
			<fileset dir="${theme.dir}/" includes="jquery.ui.theme.css" />
		</concat>
		<echo message="Concatenated theme." />

		<mkdir dir="${dist.dir}/ui/i18n/" />
		<delete file="${dist.dir}/ui/i18n/${concatenated.i18n}.js" />

		<concat destfile="${dist.dir}/ui/i18n/${concatenated.i18n}.js" encoding="utf-8">
			<fileset dir="${src.dir}/i18n/" includes="jquery.ui.*.js" />
		</concat>
		<echo message="Concatenated i18n built." />
	</target>

	<target name="minify" depends="concatenate" description="Remove all comments and whitespace, no compression, great in combination with GZip">
		<echo message="Building minified" />
		<mkdir dir="${min.dir}" />
		<mkdir dir="${min.dir}/i18n/" />
		<mkdir dir="${dist.dir}/themes/base/minified" />
		
		<apply executable="java" parallel="false">
			<fileset dir="${dist.dir}/ui" includes="*.js" />
			<arg line="-jar" />
			<arg path="${closure-jar}" />
			<arg value="--warning_level" />
			<arg value="QUIET" />
			<arg value="--js_output_file" />
			<targetfile />
			<arg value="--js" />
			<mapper type="glob" from="*.js" to="${min.dir}/*.min.js" />
		</apply>

		<apply executable="java" parallel="false">
			<fileset dir="${dist.dir}/ui/i18n" includes="*.js" />
			<arg line="-jar" />
			<arg path="${closure-jar}" />
			<arg value="--warning_level" />
			<arg value="QUIET" />
			<arg value="--js_output_file" />
			<targetfile />
			<arg value="--js" />
			<mapper type="glob" from="*.js" to="${min.dir}/i18n/*.min.js" />
		</apply>

		<apply executable="java" parallel="false">
			<fileset dir="${dist.dir}/themes/base" includes="*.css" />
			<arg line="-jar" />
			<arg path="${yuicompressor-jar}" />
			<arg line="--charset utf-8" />
			<arg line="-v" />
			<srcfile />
			<arg line="-o" />
			<mapper type="glob" from="*.css" to="${dist.dir}/themes/base/minified/*.min.css" />
			<targetfile/>
		</apply>
		
		<replaceregexp match=".css" replace=".min.css" flags="g">
			<fileset dir="${dist.dir}/themes/base/minified/">
				<include name="*.base.min.css"/>
				<include name="*.all.min.css"/>
			</fileset>
		</replaceregexp>
		
		<!-- make a copy of all theme images to ensure that relative paths in minified css files work -->
		<copy todir="${dist.dir}/themes/base/minified/images" >
			<fileset dir="${ui.dir}/themes/base/images" />
		</copy>
		
		<echo message="Minified ui/ built." />
	</target>
	
	<target description="Copy needed folders" name="copy">
		<echo message="Copying files" />
		<mkdir dir="${dist.dir}" />

		<copy overwrite="true" todir="${dist.dir}/">
			<fileset dir="${ui.dir}/" includes="jquery-*.js" />
		</copy>

		<copy overwrite="true" todir="${dist.dir}/ui/">
			<fileset dir="${src.dir}/" includes="jquery.ui.*.js, jquery.effects.*.js" />
		</copy>

		<copy overwrite="true" todir="${dist.dir}/ui/i18n/" >
			<fileset dir="${src.dir}/i18n/" />
		</copy>

		<copy overwrite="true" todir="${dist.dir}/">
			<fileset dir="${ui.dir}/" includes="*.txt" />
		</copy>

		<copy overwrite="true" todir="${dist.dir}/demos/" >
			<fileset dir="${ui.dir}/demos/" />
		</copy>

		<copy overwrite="true" todir="${dist.dir}/external/" >
			<fileset dir="${ui.dir}/external/" />
		</copy>

		<copy overwrite="true" todir="${dist.dir}/tests/" >
			<fileset dir="${ui.dir}/tests/" />
		</copy>

		<copy overwrite="true" todir="${dist.dir}/themes/" >
			<fileset dir="${ui.dir}/themes/" />
		</copy>
		<echo message="Files copied." />
	</target>
	
	 <target name="clean">
	 	<delete dir="dist" />
    </target>
	
	<target name="docs-download">
		<mkdir dir="${docs.dir}" />
		<property name="url" value="http://docs.jquery.com/action/render/UI/API/${release.version}/" />

		<get src="${url}Draggable" dest="${docs.dir}draggable.html" />
		<get src="${url}Droppable" dest="${docs.dir}droppable.html" />
		<get src="${url}Resizable" dest="${docs.dir}resizable.html" />
		<get src="${url}Selectable" dest="${docs.dir}selectable.html" />
		<get src="${url}Sortable" dest="${docs.dir}sortable.html" />

		<get src="${url}Accordion" dest="${docs.dir}accordion.html" />
		<get src="${url}Autocomplete" dest="${docs.dir}autocomplete.html" />
		<get src="${url}Button" dest="${docs.dir}button.html" />
		<get src="${url}Datepicker" dest="${docs.dir}datepicker.html" />
		<get src="${url}Dialog" dest="${docs.dir}dialog.html" />
		<get src="${url}Progressbar" dest="${docs.dir}progressbar.html" />
		<get src="${url}Slider" dest="${docs.dir}slider.html" />
		<get src="${url}Tabs" dest="${docs.dir}tabs.html" />

		<get src="${url}Position" dest="${docs.dir}position.html" />
		
		<get src="http://docs.jquery.com/action/render/UI/Effects/animate" dest="${docs.dir}animate.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/addClass" dest="${docs.dir}addClass.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/effect" dest="${docs.dir}effect.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/hide" dest="${docs.dir}hide.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/removeClass" dest="${docs.dir}removeClass.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/show" dest="${docs.dir}show.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/switchClass" dest="${docs.dir}switchClass.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/toggle" dest="${docs.dir}toggle.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/toggleClass" dest="${docs.dir}toggleClass.html" />
		
		
		<get src="http://docs.jquery.com/action/render/UI/Effects/Blind" dest="${docs.dir}effect-blind.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/Clip" dest="${docs.dir}effect-clip.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/Drop" dest="${docs.dir}effect-drop.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/Explode" dest="${docs.dir}effect-explode.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/Fade" dest="${docs.dir}effect-fade.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/Fold" dest="${docs.dir}effect-fold.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/Puff" dest="${docs.dir}effect-puff.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/Slide" dest="${docs.dir}effect-slide.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/Scale" dest="${docs.dir}effect-scale.html" />
		
		<get src="http://docs.jquery.com/action/render/UI/Effects/Bounce" dest="${docs.dir}effect-bounce.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/Highlight" dest="${docs.dir}effect-highlight.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/Pulsate" dest="${docs.dir}effect-pulsate.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/Shake" dest="${docs.dir}effect-shake.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/Size" dest="${docs.dir}effect-size.html" />
		<get src="http://docs.jquery.com/action/render/UI/Effects/Transfer" dest="${docs.dir}effect-transfer.html" />
	</target>
	
	<target name="themes-download">
		<!-- to create/update query strings for the theme-file, execute this in Firebug on /download page:
		$("select option[value!=none]").map(function() { $(this).parent().val(this.value).change(); return $(this).parents("form").serialize(); }).get().join(",");
		-->
		<loadfile srcFile="themes" property="urls" />
		<property name="zip" value="${dist.dir}themes/tmp.zip" />
		<mkdir dir="${dist.dir}themes" />
		<for list="${urls}" param="url">
			<sequential>
				<get src="http://ui-dev.jquery.com/download/?@{url}" dest="${zip}" />
				<unzip src="${zip}"
				       dest="${dist.dir}themes/">
				    <patternset>
				        <include name="development-bundle/themes/**"/>
				        <exclude name="development-bundle/themes/base/**"/>
				    </patternset>
					<mapper type="glob" from="development-bundle/themes/*" to="*" />
				</unzip>
				<delete file="${zip}" />
			</sequential>
		</for>
		<move todir="${dist.dir}themes/">
			<fileset dir="${dist.dir}themes/" />
			<mapper>
				<mapper type="regexp" from="(.*)jquery-ui-.*custom.css" to="\1jquery-ui.css" />
			</mapper>
		</move>
		<copy todir="dist/jquery-ui-themes-${release.version}">
			<fileset dir="${dist.dir}/" includes="AUTHORS.txt,GPL-LICENSE.txt,MIT-LICENSE.txt,version.txt,themes/**" />
		</copy>
		<zip destfile="${dist.dir}/../jquery-ui-themes-${release.version}.zip">
			<zipfileset dir="dist/" includes="jquery-ui-themes-${release.version}/" />
		</zip>
	</target>

	<target name="whitespace">
		<replaceregexp match="[\t ]+$" replace="" flags="g" byline="true">
		    <fileset dir="${src.dir}" includes="*.js"/>
		    <fileset dir="${src.dir}/i18n/" includes="*.js"/>
		</replaceregexp>
		<echo message="All trailing spaces removed." />
	</target>
	
	<target name="cdn">
    	<delete dir="${cdndist.dir}" />
    	<mkdir dir="${cdndist.dir}" />
		<copy todir="${cdndist.dir}">
			<fileset dir=".." includes="AUTHORS.txt, GPL-LICENSE.txt, MIT-LICENSE.txt, version.txt" />
		</copy>
		<copy todir="${cdndist.dir}">
			<fileset dir="${dist.dir}ui" includes="jquery-ui.js" />
			<fileset dir="${dist.dir}ui/minified" includes="jquery-ui.min.js" />
		</copy>
		<copy todir="${cdndist.dir}/i18n">
			<fileset dir="${dist.dir}ui/i18n" />
			<fileset dir="${dist.dir}ui/minified/i18n" />
		</copy>
		<copy todir="${cdndist.dir}/themes">
			<fileset dir="${dist.dir}themes" />
		</copy>
		<checksum>
			<fileset dir="${cdndist.dir}" />
		</checksum>
		<for param="file">
    		<path><fileset dir="${cdndist.dir}" includes="**/" excludes="**/*.MD5" /></path>
			<sequential>
				<!-- @{file} is an absolute path, use that ugly regexes to make it relative --> 
				<propertyregex override="yes" property="relativepath" input="@{file}" regexp=".+?cdn[\\/](.+)$" replace="\1"/>
				<propertyregex override="yes" property="relativepath" input="${relativepath}" regexp="\\" replace="/" global="true" />
				<concat destfile="${cdndist.dir}/MANIFEST" append="yes">${relativepath} </concat>
				<concat destfile="${cdndist.dir}/MANIFEST" append="yes"><file file="@{file}.MD5" /></concat>
			</sequential>
		</for>
		<delete dir="${cdndist.dir}" includes="**/*.MD5" />
		<zip destfile="${dist.dir}/../${release.filename}-googlecdn.zip">
			<zipfileset dir="dist/" includes="${release.filename}-cdn/" />
		</zip>
		<zip destfile="${dist.dir}/../${release.filename}-mscdn.zip">
			<zipfileset dir="dist/${release.filename}-cdn/" />
		</zip>
    </target>

</project>
