Форк Rambox
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

401 lines
16 KiB

<project name="x-sass-impl">
<!--
Uses the compiler to generate the top-level scss file for the app
by using the current set of js files to determine the Components
used by the app, then including the corresponding scss files into the
app's style
-->
<target name="-compile-sass" depends="-init-app-js-files">
<local name="app.out.scss.tmp"/>
<local name="sass.name.filter"/>
<property name="app.out.scss.tmp" value="${app.out.scss}.tmp"/>
<x-normalize-path
path="${build.out.resources.dir}"
property="image.search.path"/>
<if>
<or>
<x-is-true value="${app.has.uses}" />
<x-is-true value="${build.include.all.scss}"/>
</or>
<then>
<property name="sass.name.filter">
include
-all
</property>
</then>
</if>
<property name="sass.name.filter">
restore
page
</property>
<local name="var.begin"/>
<local name="var.end"/>
<local name="resource.map.base"/>
<condition property="var.begin" value="dynamic(">
<isset property="framework.isV6"/>
</condition>
<condition property="var.end" value=")">
<isset property="framework.isV6"/>
</condition>
<property name="var.begin" value=""/>
<property name="var.end" value="!default"/>
<condition property="resource.map.base" value="${css.output.rel.path}">
<x-is-true value="${app.sass.dynamic}"/>
</condition>
<property name="resource.map.base" value=""/>
<if>
<x-is-true value="${app.sass.dynamic}"/>
<then>
<x-get-relative-path
from="${build.out.css.dir}"
to="${build.out.base.path}"
property="css.output.rel.path"/>
</then>
</if>
<property name="css.output.rel.path" value=""/>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
${sass.name.filter}
and
#only set variables for used classes eg. $include-class-name
sass
+class-name-vars
-variable=$app-name: ${var.begin} '${app.name}' ${var.end}
-variable=$image-search-path:'${image.search.path}'
-variable=$theme-name: ${var.begin} '${theme.name}' ${var.end}
-resourceMapBase=${css.output.rel.path}
-output=${app.out.scss.tmp}
-forward=${app.sass.dynamic}
and
include
-all
and
# include etc and vars from all classes
sass
+etc
+vars
+append
-output=${app.out.scss.tmp}
-forward=${app.sass.dynamic}
and
${sass.name.filter}
and
#only include rules from used classes
sass
+rules
+append
-output=${app.out.scss.tmp}
and
sass
+ruby
-sassCacheDir=${compass.cache.dir}
-output=${app.out.ruby}
]]>
</x-compile>
<if>
<not>
<filesmatch file1="${app.out.scss.tmp}" file2="${app.out.scss}"/>
</not>
<then>
<copy file="${app.out.scss.tmp}" tofile="${app.out.scss}" overwrite="true"/>
</then>
</if>
<if>
<equals arg1="development" arg2="${build.environment}"/>
<then>
<!--
app.out.css.path is relative to the app output index.html file
-->
<x-get-relative-path
from="${app.dir}"
to="${app.out.css}"
property="app.out.css.path"
/>
<!--update the application's bootstrap.css file to point to the build output-->
<x-file-write file="${build.bootstrap.css.path}">
<![CDATA[
/*
* This file is generated by Sencha Cmd and should NOT be edited. It redirects
* to the most recently built CSS file for the application to allow index.html
* in the development directory to load properly (i.e., "dev mode").
*/
@import '${app.out.css.path}';
]]>
</x-file-write>
</then>
</if>
</target>
<!--
This macrodef is used for post-processing Ext JS 4.2+ style theme css files
and will split based on selector thresholds, as well as run the css preprocessor
and compressor
-->
<macrodef name="x-compress-css-files">
<attribute name="dir"/>
<attribute name="prefix"/>
<attribute name="outprefix"/>
<attribute name="compress"/>
<attribute name="preprocess"/>
<sequential>
<x-split-css file="@{dir}/@{prefix}.css"
outdir="${build.resources.dir}"
limit="${build.css.selector.limit}"
compilerRefId="${compiler.ref.id}"/>
<for param="cssfile">
<fileset dir="@{dir}" includes="@{prefix}*.css"/>
<sequential>
<local name="css.output.name"/>
<local name="pattern"/>
<property name="pattern" value="(.*?)(@{prefix})(_\d{1,2})*\.css"/>
<propertyregex property="css.output.name"
input="@{cssfile}"
regexp="${pattern}"
select="\1@{outprefix}\3.css"
override="true"/>
<if>
<equals arg1="@{preprocess}" arg2="true"/>
<then>
<x-echo>Preprocessing @{cssfile} to ${css.output.name}</x-echo>
<x-css-preprocess
file="@{cssfile}"
tofile="${css.output.name}"
options="${build.css.preprocessor.opts}"/>
</then>
</if>
<if>
<equals arg1="@{compress}" arg2="true"/>
<then>
<x-echo>Compressing @{cssfile} to ${css.output.name}</x-echo>
<x-compress-css srcfile="@{cssfile}"
outfile="${css.output.name}"/>
</then>
</if>
</sequential>
</for>
</sequential>
</macrodef>
<!--
This target builds Ext JS 4.2+ style themes, first generating the top-level
scss file, then running compass with the css, sass, and config options set
-->
<target name="-compass-compile-theme-package" depends="-load-sass-page">
<if>
<x-is-true value="${skip.sass.rebuild}"/>
<then>
<x-run-if-true value="${enable.ext42.themes}">
<x-ant-call target="-compile-sass"/>
</x-run-if-true>
</then>
<else>
<x-run-if-true value="${enable.ext42.themes}">
<local name="compress.uptodate"/>
<x-ant-call target="-compile-sass"/>
<if>
<x-is-true value="${app.sass.fashion}"/>
<then>
<if>
<x-is-true value="${app.sass.rhino}"/>
<then>
<x-fashion-compile
file="${app.out.scss}"
toFile="${app.out.css}"/>
</then>
<else>
<x-fashion-live-update input="${app.out.scss}"
output="${app.out.css}"
refId="app.web.server"
split="${build.css.selector.limit}"
compress="${build.css.compress}"
compilerRefId="${compiler.ref.id}"/>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
microload
-operation=manifest
-fashion=false
-tpl=${build.microloader.json.tpl.standalone}
-out=${build.out.json.path}
-resourcePath=${build.out.base.path}
-basePath=${build.out.metadata.dir}
]]>
</x-compile>
<x-sencha-command>
fashion
-config=${build.out.json.path}
-compress=${build.css.compress}
-split=${build.css.selector.limit}
-saveFile=${app.dir}/${app.sass.generated.var}
-slicer=false
${app.out.scss}
${app.out.css}
</x-sencha-command>
<x-update-css-array input="${app.out.css}"
compilerRefId="${compiler.ref.id}"/>
<if>
<and>
<available file="${build.out.css.dir}/css-vars.js"/>
</and>
<then>
<if>
<not>
<equals arg1="${build.compression}" arg2=""/>
</not>
<then>
<x-compress-js srcFile="${build.out.css.dir}/css-vars.js"
outFile="${build.out.css.dir}/css-vars.js"/>
</then>
</if>
<if>
<not>
<equals arg1="${build.environment}" arg2="development"/>
</not>
<then>
<concat destfile="${build.out.js.path}" append="true">
<fileset dir="${build.out.css.dir}">
<include name="css-vars.js"/>
</fileset>
</concat>
</then>
</if>
</then>
</if>
</else>
</if>
</then>
<else>
<x-compass-compile
rubyPath="${build.ruby.path}"
dir="${compass.working.dir}"
trace="${compass.compile.trace}"
boring="${compass.compile.boring}"
force="${compass.compile.force}"
sassdir="${compass.sass.dir}"
cssdir="${compass.css.dir}"
config="${compass.config.file}"/>
<uptodate property="compress.uptodate"
value="true"
srcfile="${app.out.scss}.tmp"
targetfile="${app.out.css}"/>
<if>
<x-is-true value="${compress.uptodate}"/>
<!--<x-is-true value="true"/>-->
<then>
<x-compress-css-files dir="${build.out.css.dir}"
prefix="${app.out.base.debug}"
outprefix="${app.out.base}"
preprocess="${build.css.preprocess}"
compress="${build.css.compress}"/>
</then>
</if>
</else>
</if>
</x-run-if-true>
</else>
</if>
</target>
<!--
This is a legacy macrodef to support building Ext JS 4.1 themes, which have been
deprecated in favor of Ext JS 4.2 theme packages
-->
<macrodef name="x-build-sass">
<attribute name="theme"/>
<sequential>
<local name="sass.name"/>
<local name="use.shell"/>
<!--
convert abspath to just the leaf path name
-->
<basename property="sass.name" file="@{theme}"/>
<local name="sass.base.name"/>
<property name="sass.base.name" value="${sass.name}"/>
<echo>Compiling sass directory : @{theme}/sass</echo>
<x-compass-compile
rubyPath="${build.ruby.path}"
boring="${compass.compile.boring}"
force="${compass.compile.force}"
trace="${compass.compile.trace}"
dir="@{theme}/sass"/>
<x-compress-css srcfile="${app.dir}/resources/${sass.base.name}/*.css"
outdir="${app.dir}/resources/${sass.base.name}"/>
</sequential>
</macrodef>
<!--
This target builds Ext JS 4.1 style themes, iterating over each directory
under the specified ${app.theme.dir} directory and compiling the sass
located there
-->
<target name="-compass-compile-theme-folders">
<x-run-if-true value="${enable.ext41.themes}">
<!-- run sass compilation over the various themes -->
<for param="sass">
<dirset dir="${app.theme.dir}" includes="*"/>
<sequential>
<x-build-sass theme="@{sass}"/>
</sequential>
</for>
</x-run-if-true>
</target>
<!--
This target builds Touch style themes, by running compass
over the directory containing the manually maintined scss files
-->
<target name="-compass-compile-sass-dir">
<x-run-if-true value="${enable.touch.themes}">
<x-compass-compile
rubyPath="${build.ruby.path}"
trace="${compass.compile.trace}"
boring="${compass.compile.boring}"
force="${compass.compile.force}"
dir="${compass.sass.dir}"/>
</x-run-if-true>
</target>
<!--
This is a summation target triggering the three different supported
sass modes (ext 41, ext 42+, and touch).
-->
<target name="-compass-compile"
depends="-compass-compile-theme-package,
-compass-compile-theme-folders,
-compass-compile-sass-dir"/>
<!--
Build SASS
-->
<target name="-before-sass"/>
<target name="-sass" depends="-compass-compile"/>
<target name="-after-sass"/>
</project>