# =============================================================================
# This file defines properties used by build-impl.xml and the associated
# *-impl.xml files (sass-impl.xml, js-impl.xml, etc.), which are the core of
# the applications build process. 
#
# This file represents the lowest priority file for defining these properties
# as well as the place to look for documentation and learning what properties
# exist.
#
# The full set of these files is as follows (in priority order):
#
#   - One of these (based on build.environment):
#       - production.properties
#       - testing.properties
#       - native.properties
#       - package.properties
#
#   - build.properties
#
#   - One of these (based on app.framework):
#       - ext.properties
#       - touch.properties
#
#   - One of these (based on build.environment):
#       - production.defaults.properties
#       - testing.defaults.properties
#       - native.defaults.properties
#       - package.defaults.properties
#
#   - defaults.properties
#
# Properties are controlled by the first file in the above list to define the
# value. Values from all levels, however, can reference each other via the
# property expansion.
#
# IMPORTANT - This file should not be modified by an app as it is overwritten
# during each app upgrade.
# =============================================================================

# *****************************************************************************
# Global Build Properties
# these are cross-concern properties used by many build phases
# *****************************************************************************

# the default build environment type (production, testing, native, package)
# NOTE: this is only a default and will typically be set before this file is
# loaded, typically by the 'sencha app build" command.
# See "sencha help app build" for details.
#
# The corresponding properties files:
# (production.properties, testing.properties, etc.) provide examples of 
# overriding sets of properties depending on the selected environment
# NOTE: this replaces the deprecated args.environment
app.environment=production
build.environment=${app.environment}

# the directory to place built application files
build.dir=${workspace.build.dir}/${build.environment}/${app.name}

app.compressor.type=${app.compressor}

app.output=${build.dir}
app.output.base=${app.output}

app.output.page=index.html
app.output.page.path=${app.output.page}
app.output.page.enable=true

app.output.resources=resources
app.output.resources.path=${app.output.resources}
app.output.resources.enable=true
app.output.resources.compress=${app.output.js.compress}

app.output.css.dir=${app.output.resources.path}
app.output.css=${app.output.css.dir}/${app.name}-all.css
app.output.css.path=${app.output.css}
app.output.css.enable=true
app.output.css.compress=true
app.output.css.preprocess=true
app.output.css.split=4095

app.output.js=app.js
app.output.js.path=${app.output.js}
app.output.js.enable=true
app.output.js.compress=false
app.output.js.optimize=false
app.output.js.optimize.cssPrefix=${app.output.js.optimize}
app.output.js.optimize.xtemplate=false
app.output.js.optimize.propNames=${app.output.js.optimize}
app.output.js.optimize.defines=${app.output.js.optimize}
app.output.js.optimize.callParent=${app.output.js.optimize}
app.output.js.optimize.requires=${app.output.js.optimize}

app.output.framework=framework.js
app.output.framework.path=${app.output.framework}
app.output.framework.enable=false

app.output.microloader=microloader.js
app.output.microloader.path=${app.output.microloader}
app.output.microloader.enable=true
app.output.microloader.embed=true

app.output.manifest=app.json
app.output.manifest.path=${app.output.manifest}
app.output.manifest.enable=true
app.output.manifest.embed=false

app.output.slicer=${app.output.resources.path}
app.output.slicer.path=${app.output.slicer}
app.output.slicer.enable=true

app.output.archive=archive
app.output.archive.path=${app.output.archive}

app.cache.enable=${app.output.deltas.enable}

app.output.cache=cache.appcache
app.output.cache.path=${app.output.cache}
app.output.cache.enable=true
app.output.appCache.enable=${app.output.cache.enable}
app.output.appCache.path=${app.output.cache.path}

build.out.base.path=${app.output.base}
build.out.page.path=${build.out.base.path}/${app.output.page.path}
build.out.resources.path=${build.out.base.path}/${app.output.resources.path}
build.out.css.path=${build.out.base.path}/${app.output.css.path}
build.out.js.path=${build.out.base.path}/${app.output.js.path}
build.out.framework.path=${build.out.base.path}/${app.output.framework.path}
build.out.archive.path=${build.out.base.path}/${app.output.archive.path}
build.out.manifest.path=${build.out.base.path}/${app.output.manifest.path}
build.out.microloader.path=${build.out.base.path}/${app.output.microloader.path}
build.out.appCache.path=${build.out.base.path}/${app.output.appCache.path}

# Moved to init-impl.xml to handle truthy special values
#build.out.deltas.path=${build.out.base.path}/${app.output.deltas.path}
build.out.slicer.path=${build.out.base.path}/${app.output.slicer.path}

# place holder properties to allow the newer .path property to control the existing .dir property
build.out.resources.dir=${build.out.resources.path}
build.out.css.dir=${build.out.base.path}/${app.output.css.dir}

build.out.metadata.path=${build.out.page.path}

# a temporary output directory used for staging intermediate build artifacts
build.temp.dir=${workspace.build.dir}/temp/${build.environment}/${app.name}

# the directory under the output folder for placing resources
build.resources.dir=${build.out.resources.path}

app.manifest.bootstrap=bootstrap.json

app.bootstrap=${app.dir}
app.bootstrap.base=${app.bootstrap}
app.bootstrap.page=${app.indexHtmlPath}
app.bootstrap.page.path=${app.bootstrap.page}
app.bootstrap.css=${app.bootstrap.css.name}
app.bootstrap.css.path=${app.bootstrap.css}
app.bootstrap.microloader=${app.bootstrap.js.name}
app.bootstrap.microloader.path=${app.bootstrap.microloader}
app.bootstrap.manifest=${app.manifest.bootstrap}
app.bootstrap.manifest.path=${app.bootstrap.manifest}

build.bootstrap.base.path=${app.bootstrap.base}
build.bootstrap.page.path=${build.bootstrap.base.path}/${app.bootstrap.page.path}
build.bootstrap.css.path=${build.bootstrap.base.path}/${app.bootstrap.css.path}
build.bootstrap.microloader.path=${build.bootstrap.base.path}/${app.bootstrap.microloader.path}
build.bootstrap.manifest.path=${build.bootstrap.base.path}/${app.bootstrap.manifest.path}

build.bootstrap.metadata.path=${build.bootstrap.page.path}

# *****************************************************************************
# JS
# these properties control various aspects of output js code construction
# *****************************************************************************

# the output js file that contains all needed js code

# deprecated, now controlled by app.output.js / app.output.js.path in app.json
build.classes.file=${build.out.js.path}

# the output js file for framework code, if the framework
# classes are not included in the default all-classes.js file
# deprecated, now controlled by app.output.framework / app.output.framework.path in app.json
build.framework.name=framework.js
build.framework.file=${build.out.framework.path}

# Don't use these - they are deprecated
build.options.debug.enable=debug:true
build.options.debug.disable=debug:false
build.options.logger.enable=logger:yes
build.options.logger.disable=logger:no

# This property enables/disables <feature logger> blocks in js output, see build.options
build.options.logger=no

# This property enables/disables <debug> blocks in js output, see build.options
build.options.debug=false

# This property can be used to pass custom build options in addition to any of the other
# build.options flags. When overlapping, these options take priority, see build.options
build.options.custom=

# This value is specified by the framework
build.options.default=

# This property contains the framework ("product") used for filtering of JavaScript using
# the preprocessor. This is set by either ext.properties or touch.properties.
#
#build.options.product=touch

# This property contains the desired API level used for preprocessor filtering of JavaScript.
# This is set by either ext.properties or touch.properties.
#
#build.options.minVersion=2.1

# This property holds the set of js preprocessor options in the form:
#
#       name1:value1,name2:value2,...
#
# (used by -init-compiler in init-impl.xml)
#
# This property is not likely to be set directly. Rather, you should set one of the
# contributing properties that are combined to form this one:
#
#       build.options.debug
#       build.options.logger
#       build.options.custom
#
# The other properties that contribute to this are typically not needing to be set:
#
#       build.options.product
#       build.options.minVersion
#
build.options=logger:${build.options.logger},debug:${build.options.debug},product:${build.options.product},minVersion:${build.options.minVersion},${build.options.default},${build.options.custom}

# This property can be modified to change general build options
# such as excluding files from the set.  The format expects newlines
# for each argument, for example:
#            
#   build.operations=\
#       exclude\n \
#       -namespace=Ext\n
#
# NOTE: modifications to build.operations are intended to be 
# placed in an override of the "-after-init" target, where it 
# can be calculated based on other
# ant properties
#
# build.operations=

# enables / disables the full class optimizer during js builds
# (used by the -compile-* targets in js-impl.xml)
build.optimize.defines=${app.output.js.optimize.defines}
build.optimize.callparent=${app.output.js.optimize.callParent}
build.optimize.cssPrefix=${app.output.js.optimize.cssPrefix}
build.optimize.xtemplate=${app.output.js.optimize.xtemplate}
build.optimize.propNames=${app.output.js.optimize.propNames}
build.optimize.include.metadata=${app.output.js.optimize.requires}
build.optimize.enable=\
        optimize\n \
            -property-name=${build.optimize.propNames}\n \
            -css-prefix=${build.optimize.cssPrefix}\n \
            -xtemplate=${build.optimize.xtemplate}\n \
            -define-rewrite=${build.optimize.defines}\n \
            -call-parent=${build.optimize.callparent}\n \
            -include-metadata=${build.optimize.include.metadata}

build.optimize.disable=
build.optimize=${build.optimize.disable}

# enables / disables removing text references from 
# package js build files
build.remove.references=true

# enables / disables removing "requires" and "uses" elements
# from class definitions
build.remove.requirement.nodes=true

# enables / disables de-quoting certain string references to classes
# like mixin references
build.optimize.string.references=true

# enables / disables yui compression
build.compression.yui=${app.output.js.compress}
 
# enables / disables closure compression
build.compression.closure=0
 
# enables / disables uglify compression
build.compression.ugilfy=0

build.compile.temp.dir=${build.temp.dir}/sencha-compiler

# controles whether to keep the temp compile dir after the build
build.compile.temp.dir.keep=true

# ------------------------------------------
# DOC ONLY - Do Not Set
# this variable will be set to the appropriate compressor 
# option, and is calculated in init-impl.xml, but may be overridded in 
# app.properties, <environment>.properties, or via command line
#
# build.compression=
# ------------------------------------------

# *****************************************************************************
# Page
# these variables control aspects of building the output markup page
# *****************************************************************************

# controls whether the microloader content will be embedded in the output
# markup, or left as a separate resource
build.enable.embedded.microloader=${app.output.microloader.embed}

# whether to include the page's manifest.json code with the 
# microloader content. Production.properties files should set this to 
# false to have manifest.json exist as a server resource.
build.enable.embedded.manifest=${app.output.manifest.embed}

# enables / disables compression of resources referenced in app.json / package.json
# js and css entries
enable.resource.compression=${app.output.resources.compress}

# defaults to index.html, but may be overridden in app.json
app.indexHtmlPath=index.html

# the input page file for the application
app.page.name=${app.indexHtmlPath}
app.page.file=${app.dir}/${app.page.name}

# the output page file
# deprecated, now controlled by app.output.page / app.output.page.path in app.json
build.page.name=${app.page.name}
build.page.dir=${build.out.base.path}
build.page.file=${build.out.page.path}

# the directory where the microloader files may be found
app.microloader.dir=${app.config.dir}/microloader

# the file names of the individual microloaders
app.microloader.development=development.js
app.microloader.testing=testing.js
app.microloader.production=production.js

# the target microloader to use for builds
app.microloader.name=${app.microloader.development}
app.microloader=${app.microloader.dir}/${app.microloader.name}
app.microloader.path=${app.microloader}

# specifies how to embed the microloader code into the output markup
# {0} is replaced with the content of the microloader file specified 
# by app.microloader.path
build.microloader.code.tpl={0}

# the template to use when generating a stand-alone json manifest file
build.microloader.json.tpl.standalone={0}

# the template to use when embedding the manifest json directly next to the 
# microloader in the output microloader content
build.microloader.json.tpl.embedded=Ext.blink({0});

# the template to use in the output microloader content when supplying 
# the manifest json as a separate server-side resource ('production' builds)
build.microloader.json.tpl.external=Ext.blink('{'id:''${app.id}'''}');

# the template string to use when embedding the microloader content
# into the output markup
build.embedded.microloader.tpl=<script id="microloader" data-app="${app.id}" type="text/javascript">{0}</script>

# the compressor to use when embedding the microloader into a page
# can be -closure or -yui, or leave empty to disable compression
build.embedded.microloader.compressor=

# the path to the microloader content file, if external to the outpout markup
build.microloader.path=${build.out.microloader.path}

# the inner markup to embed into the output markup when not including
# the microloader content directly into the output markup
build.embedded.microloader.src=${build.microloader.name}
build.external.microloader.markup=<script  id="microloader" data-app="${app.id}" src="${build.embedded.microloader.src}"></script>

# a flag indicating which mode the microloader should run in (production, testing, etc.)
# currently unused : is a placeholder for future microloader interactions
build.microloader.mode=${build.environment}

# the tag name to use when generating the compiler save set for 
# the page's js code
build.tag.name=full-page

# the name of the archive folder containing source versions for
# delta patch generation
# deprecated, now controlled by app.output.archive / app.output.archive.path in app.json
build.archive.name=archive

# the output cache manifest file
build.manifest.name=${app.output.appCache.path}
build.manifest.path=${build.out.appCache.path}

# the name of the manifest json file
build.json.name=${app.manifest.name}

# the full path to the manifest json file
build.out.json.path=${build.out.manifest.path}

# Defines the file that will contain Ext.setVersion calls for each used package.
build.out.package.versions=${build.compile.temp.dir}/cmd-packages.js

# a temp directory for managing extracted resources during the page build
build.app.temp.dir=${build.compile.temp.dir}/app

# controls the format of checksum headers injected into microloaded content
# either comment style, or code style for js and css files
delta.comment.checksums=false

# *****************************************************************************
# Refresh
# these properties are used for generating bootstrap js and css
# files to support dev-time interaction with the app
# *****************************************************************************

# the base path to use for generating / calculating bootstrap info
# this property is not longer defaulted here, but calculated in refresh-impl.xml
# based on new app.bootstrap properties
# app.bootstrap.base.path=${app.dir}

# these control the name of the bootstrap js file
# note: there will be corresponding entries in either the index page
# or app.json that reference these names
# deprecated, use app.bootstrap.microloader
app.bootstrap.js.name=bootstrap.js
app.bootstrap.js=${build.bootstrap.microloader.path}

# these control the name of the bootstrap css file (for ext 4.2+ apps)
# note: there will be corresponding entries in either the index page
# or app.json that reference these names
app.bootstrap.css.name=bootstrap.css

# the microloader to use for bootstrapping operations
app.microloader.bootstrap=${app.microloader.dir}/${app.microloader.development}

# the name of the bootstrap microloader manifest
build.json.bootstrap.name=${app.manifest.bootstrap}

# the full path to the bootstrap microloader manifest
build.json.bootstrap.path=${build.bootstrap.manifest.path}

# enables inclusion of override files in the generated bootstrap
bootstrap.include.overrides=true

# enables inclusion of the Boot.js code in the generated bootstrap
bootstrap.include.boot=false

# controls the template used to generate load calls for override files
bootstrap.override.tpl=Ext.Loader.loadScriptFile(''{0}'', Ext.emptyFn);

build.boot.name=Boot.js
build.boot.file=${app.config.dir}/${build.boot.name}
build.slicer.microloader.name=Microloader.js
build.slicer.microloader.file=${app.config.dir}/${build.slicer.microloader.name}

# the type of the override template ('tpl' or 'jsonp')
bootstrap.override.tpltype=tpl

# *****************************************************************************
# Sass / Css
# properties for controling features of sass generation and compilation
# *****************************************************************************

# controls the ruby command that is used to execute compasss
# a full path to ruby may be specified rather than allowing the system
# shell to resolve the command
build.ruby.path=ruby

# --------------------
# these control properties select the mode used to build the app's styling
# see sass-impl.xml for how then are used

# enables theme builds for apps using ext 41 style themes
enable.ext41.themes=false

# enables theme builds for apps using ext 42 style themes
enable.ext42.themes=false

# enables theme builds for apps using touch style themes
enable.touch.themes=false
# --------------------

# selector count threshold to use when 
# splitting a single css file into multiple
# css files (IE selector limit workaround)
#
# NOTE: applies only to ext js 4.2+ style theme management, currently
# see the above theme control variables for details
build.css.selector.limit=${app.output.css.split}

# enables / disable css preprocessor (enable.ext42.themes only)
build.css.preprocess=${app.output.css.preprocess}

# sets the css preprocessor options, in the form:
# name1:value1,name2:value2,...                                                            
build.css.preprocessor.opts=

# enables / disable css compressor (enable.ext42.themes only)
build.css.compress=${app.output.css.compress}

# controls the directory used to generate the output app scss file
# for apps that use theme packages
build.sass.dir=${build.temp.dir}/sass

# Specify the name for the individual resource dirs in the app
# (enable.touch.themes only)
app.sass.name=sass

# Specify the sass path in the app
# (enable.touch.themes only)
app.sass.dir=${app.dir}/resources/${app.sass.name}

# name prefix to use for output css / sass files
app.out.base=${app.name}-all
app.out.base.debug=${app.out.base}

# the output sass file to generate (used with enable.ext42.themes)
app.out.scss=${build.sass.dir}/${app.out.base.debug}.scss
# the output ruby compass config file to generate (used with enable.ext42.themes)
app.out.ruby=${build.sass.dir}/config.rb

# output css file prefix
app.out.css.prefix=${app.out.base.debug}

# output css file name
app.out.css.name=${app.out.css.prefix}.css

# output css file path (relative to build directory root
app.out.css.rel=${app.output.resources}/${app.out.css.name}

# output css file path (full path)
app.out.css=${build.out.css.path}

# separate file name to use for generating a compressed copy
# of the output css file (this default will compress the file in-place)
app.out.css.compressed=${build.out.css.path}

# the directory containing sass files for compass to compile
compass.sass.dir=${build.sass.dir}

# the output directory where compass should place built css files
compass.css.dir=${build.out.css.dir}

# the directory containing the ruby config file for compass
compass.config.file=${app.out.ruby}

# enables / disables console highlighting for compass
compass.compile.boring=false

# enables / disables forced rebuilds for compass
compass.compile.force=true

# enables / disables stack traces in compass failure output
compass.compile.trace=true

compass.cache.dir=${workspace.build.dir}/.sass-cache

compass.working.dir=${build.sass.dir}

# ---------------------------------------------------
# Legacy properties for ext41 theme directories
# Specify the resources path in the app
app.packages.dir=${app.dir}/packages

# Specify the theme path in the app (this directory contains the themes)
app.theme.dir=${app.packages.dir}

# the currently selected ext 41 theme name
theme.name=default
# ---------------------------------------------------

# *****************************************************************************
# Slice
# these properties control features of the theme slice build phase
# *****************************************************************************

# the resources directory of the application
# note: this property is currently only used for building ext 4.1 style themes 
# (used by x-build-theme and x-copy-resources in slice-impl.xml)
app.resources.dir=${app.dir}/resources

# the directory containing the slicer widget example page
app.example.dir=${app.dir}/sass/example

# properties to control the recirect css file that is
# generated for the slicer example page
app.example.css.name=example.css
app.example.css.file=${app.example.dir}/${app.example.css.name}

# the base path for generating the bootstrap code for the 
# slicer page
bootstrap.base.path=${app.example.dir}

# the full file name of the slicer page's bootstrap js file
bootstrap.example.js=${app.example.dir}/bootstrap.js

# the full file name of the slicer page's bootstrap js file
bootstrap.example.json.name=bootstrap.json
bootstrap.example.json=${app.example.dir}/${bootstrap.example.json.name}

# this is the directory used for intermediate build artifacts used 
# by the slicer for generating theme images
app.example.build.dir=${build.temp.dir}/slicer-temp

# the name of the intermediate screenshot file used for image slicing
build.capture.png=${app.example.build.dir}/theme-capture.png

# the name of the intermediate widget manifest file used for image slicing
build.capture.json=${app.example.build.dir}/theme-capture.json

# the location of the slicer widget page
app.example.theme.html.name=theme.html
app.example.fashion.html.name=fashion.html
app.example.theme.html=${app.example.dir}/${app.example.theme.html.name}
app.example.fashion.html=${app.example.dir}/${app.example.fashion.html.name}

# a name prefix used for slicer page temporary artifacts
app.example.base=${app.name}-example

# the special slicer page scss file name to generate
app.example.scss=${app.example.build.dir}/${app.example.base}.scss

# the relative path from the slicer css file to the slicer html file
app.example.css.rel=${app.example.base}.css

# the path to the css file that will be built for the slicer page
app.example.css=${app.example.build.dir}/${app.example.css.rel}

# the ruby compass config file to generate for slicer page scss
app.example.out.ruby=${app.example.build.dir}/config.rb
app.example.compass.config=${app.example.out.ruby}

# legacy ext 41 theme property indicating the name of the
# slicer example page contained in the theme directory
theme.page.name=theme.html

# Options to pass to the "sencha fs slice" command.
build.slice.options=

# *****************************************************************************
# Packager
# these properties control features of the native packaging phase of the 
# build process
# *****************************************************************************

# enables packaging the built application with the Sencha Desktop Packager
# NOTE: currently unsupported
enable.desktop.packager=false

# skips packaging the built application with cordova/phonegap
skip.native-package=false

# a property that controls whether a standalone manifest.json file will be 
# generated for the native packaged application
enable.standalone.manifest=false

# *****************************************************************************
# Resolve
# these properties control aspects of the dynamic dependency resolver, which 
# uses phantomjs to load the application and extract Ext.Loader class load
# history.
# *****************************************************************************

# enables / disables dynamic dependency resolution
skip.resolve=true

# enables the local web server.  this may be disabled to load the application's
# page from an existing web server.
skip.web-start=false

# the port number to start the local web server on
build.web.port=1841

# the directory representing the root web folder
build.web.root=${workspace.dir}

# the base url to access the local web server
build.resolve.url=http://localhost:${build.web.port}

# a template string used to format the detected dynamic dependencies
build.resolve.tpl={0}

# the mode to use when formatting the detected dynamic dependencies
build.resolve.mode=references

# the output file for the detected dynamic dependencies
build.resolve.file=${build.temp.dir}/resolve.json

# controls whether unmatched external references in the specified file will 
# generate build warnings or build failures
build.resolve.allow.unmatched=true

# *****************************************************************************
# Watch
# these properties adjust the behavior of the app watch process.
# *****************************************************************************

# the default set of actions to run when triggering a rebuild
build.trigger.targets=refresh,resources,sass

# the watcher targets to run that monitor for code changes
build.watcher.targets=-watch-compiler
