diff --git a/.sencha/app/build-impl.xml b/.sencha/app/build-impl.xml new file mode 100644 index 0000000..e9d332f --- /dev/null +++ b/.sencha/app/build-impl.xml @@ -0,0 +1,503 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +********************************** DO NOT EDIT ********************************** + +This file will be replaced during upgrades so DO NOT EDIT this file. If you need to +adjust the process, reading and understanding this file is the first step. + +In most cases, the adjustments can be achieved by setting properties or providing one +of the "hooks" in the form of a "-before-" or "-after-" target. Whenever possible, look +for one of these solutions. + +Failing that, you can copy whole targets to your build.xml file and it will overrride +the target provided here. Doing that can create problems for upgrading to newer +versions of Cmd so it is not recommended but it will be easier to manage than editing +this file in most cases. +--> +<project name="app-build-impl"> + <!-- + =============================================================== + helper targets for ant integrations with IDE's + (human readable target names) + =============================================================== + --> + <target name="-before-build-testing"/> + <target name="-build-testing" depends="testing,build"/> + <target name="-after-build-testing"/> + <target name="build-testing" + depends="-before-build-testing, + -build-testing, + -after-build-testing"/> + + <target name="Build - Testing" + description="Create a Testing build of this project" + depends="build-testing"/> + + <target name="-before-build-production"/> + <target name="-build-production" depends="production,build"/> + <target name="-after-build-production"/> + <target name="build-production" + depends="-before-build-production, + -build-production, + -after-build-production"/> + + <target name="Build - Production" + description="Create a Production build of this project" + depends="build-production"/> + + <target name="-before-build-native"/> + <target name="-build-native" depends="native,build"/> + <target name="-after-build-native"/> + <target name="build-native" + depends="-before-build-native, + -build-native, + -after-build-native"/> + + <target name="Build - Native" + description="Create a Native build of this project" + depends="build-native"/> + + <target name="-before-start-local-webserver"/> + <target name="-start-local-webserver" depends="init"> + <x-launch-terminal> + <![CDATA[ + ${cmd.dir}/sencha fs web -port=${build.web.port} start -map=${build.web.root} + ]]> + </x-launch-terminal> + </target> + <target name="-after-start-local-webserver"/> + <target name="start-local-webserver" + depends="-before-start-local-webserver, + -start-local-webserver, + -after-start-local-webserver"/> + + <target name="WebServer - Start Local" + description="Starts a local webserver for this project" + depends="start-local-webserver"/> + + <target name="-before-compass-watch"/> + <target name="-compass-watch" depends="init"> + <x-launch-terminal> + compass watch ${app.sass.dir} + </x-launch-terminal> + </target> + <target name="-after-compass-watch"/> + <target name="compass-watch" + depends="-before-compass-watch, + -compass-watch, + -after-compass-watch"/> + + <target name="Compass - Watch" + description="Opens terminal and watches for SASS updates" + depends="compass-watch"/> + + <!-- + =============================================================== + environment setters + =============================================================== + --> + <target name="production" + description="Sets the build environment to production."> + <property name="build.environment" value="production"/> + </target> + + <target name="testing" + description="Sets the build environment to testing."> + <property name="build.environment" value="testing"/> + </target> + + <target name="native" + description="Sets the build environment to native."> + <property name="build.environment" value="native"/> + </target> + + <target name="package" + description="Sets the build environment to package."> + <property name="build.environment" value="package"/> + </target> + + + <!-- + =============================================================== + Find Cmd + uses targets from find-cmd-impl.xml to detect the current + install of Sencha Cmd + =============================================================== + --> + <import file="${basedir}/.sencha/app/find-cmd-impl.xml"/> + <target name="init-cmd" + depends="find-cmd-in-path, + find-cmd-in-environment, + find-cmd-in-shell"> + <echo>Using Sencha Cmd from ${cmd.dir} for ${ant.file}</echo> + + <!-- + load the sencha.jar ant task definitions. + + NOTE: the 'loaderref' attribute stores this task def's class loader + on the project by that name, so it will be sharable across sub-projects. + This fixes out-of-memory issues, as well as increases performance. + + To supoprt this, it is recommended that any customizations that use + 'ant' or 'antcall' tasks set 'inheritrefs=true' on those tasks, in order + to propagate the senchaloader reference to those subprojects. + + The sencha 'x-ant-call' task, which extends 'antcall' and defaults + 'inheritrefs' to true, may be used in place of antcall in + build process customizations. + --> + <taskdef resource="com/sencha/ant/antlib.xml" + classpath="${cmd.dir}/sencha.jar" + loaderref="senchaloader"/> + + <!-- + Some operations require sencha.jar in the current java classpath, + so this will extend the java.lang.Thread#contextClassLoader with the + specified java classpath entries + --> + <x-extend-classpath> + <jar path="${cmd.dir}/sencha.jar"/> + </x-extend-classpath> + </target> + + <!-- + =============================================================== + Init + uses targets from init-impl.xml to load Sencha Cmd config + system properties and ant task definitions + =============================================================== + --> + <import file="${basedir}/.sencha/app/init-impl.xml"/> + <target name="init" + depends="init-local, + init-cmd, + -before-init, + -init, + -after-init, + -before-init-defaults, + -init-defaults, + -after-init-defaults, + -init-compiler"/> + + <!-- + =============================================================== + Build + this is the starting point for the build process. The 'depends' + attribute on the -build target controls the ordering of the + different build phases + =============================================================== + --> + <target name="-before-build"/> + <target name="-build" + depends="refresh, + resolve, + js, + resources, + sass, + slice, + page, + native-package"/> + <target name="-after-build"/> + <target name="build" + depends="init,-before-build,-build,-after-build" + description="Builds the application"/> + + <!-- + =============================================================== + Clean + removes all artifacts from the output build directories + =============================================================== + --> + <target name="-before-clean"/> + <target name="-clean"> + <delete dir="${build.dir}"/> + <delete dir="${build.temp.dir}"/> + </target> + <target name="-after-clean"/> + <target name="clean" + depends="init" + description="Removes all build output produced by the 'build' target"> + <x-ant-call unless="skip.clean"> + <target name="-before-clean"/> + <target name="-clean"/> + <target name="-after-clean"/> + </x-ant-call> + </target> + + <!-- + =============================================================== + Watch + uses targets from watch-impl.xml to initiate the application + watch process using instrumented state from the compiler + =============================================================== + --> + <import file="${basedir}/.sencha/app/watch-impl.xml"/> + <target name="watch"> + <property name="build.optimize" value=""/> + <x-ant-call> + <target name="-before-watch"/> + <target name="-watch"/> + <target name="-after-watch"/> + </x-ant-call> + </target> + + <!-- + =============================================================== + JS + uses targets from js-impl.xml to produce the output js files + containing needed application and framework js classes + =============================================================== + --> + <import file="${basedir}/.sencha/app/js-impl.xml"/> + <target name="js" + depends="init" + description="Builds the output javascript file(s)"> + <x-ant-call unless="skip.js"> + <target name="-before-js"/> + <target name="-js"/> + <target name="-after-js"/> + </x-ant-call> + </target> + + <!-- + =============================================================== + Sass + uses targets from sass-impl.xml to produce the output css + files for the application's styling + =============================================================== + --> + <import file="${basedir}/.sencha/app/sass-impl.xml"/> + <target name="sass" + depends="init" + description="Builds the Sass files using Compass."> + <x-ant-call unless="skip.sass"> + <target name="-before-sass"/> + <target name="-sass"/> + <target name="-after-sass"/> + </x-ant-call> + </target> + + <!-- + =============================================================== + Resources + uses targets from resources-impl.xml to copy resources from + the application and required packages to the output directory + =============================================================== + --> + <import file="${basedir}/.sencha/app/resources-impl.xml"/> + <target name="resources" + depends="init" + description="Copy resources to build folder."> + <x-ant-call unless="skip.resources"> + <target name="-before-resources"/> + + <!-- Legacy targets: --> + <target name="-before-inherit-resources"/> + <target name="-before-copy-resources"/> + + <target name="-resources"/> + + <!-- Legacy targets: --> + <target name="-after-copy-resources"/> + <target name="-after-inherit-resources"/> + + <target name="-after-resources"/> + </x-ant-call> + </target> + + + <!-- + =============================================================== + Slice + uses targets from slice-impl.xml to extract theme images from + the application for use with older browsers that don't + support modern css features + =============================================================== + --> + <import file="${basedir}/.sencha/app/slice-impl.xml"/> + <target name="slice" + depends="init" + description="Slices CSS3 theme to produce non-CSS3 images and sprites."> + <x-ant-call unless="skip.slice"> + <target name="-before-slice"/> + <target name="-slice"/> + <target name="-after-slice"/> + </x-ant-call> + </target> + + <!-- + Theme - this is a legacy support target for extjs 4.1 apps. It redirects + to the "slice" ant target + --> + <target name="theme" + depends="init" + description="Builds the application's theme(s) images using the slicer (Ext JS 4.1 only)."> + <x-ant-call unless="skip.theme"> + <target name="-before-theme"/> + <target name="slice"/> + <target name="-after-theme"/> + </x-ant-call> + </target> + + <!-- + Refresh Theme - uses targets from refresh-impl.xml to rebuild the current + theme + --> + <target name="refresh-theme" + depends="init" + description="Rebuilds the currently enabled app theme (Ext JS 4.1 only)."> + <x-ant-call unless="skip.theme"> + <target name="-before-refresh-theme"/> + <target name="-refresh-theme"/> + <target name="-after-refresh-theme"/> + </x-ant-call> + </target> + + <!-- + =============================================================== + Refresh + uses targets from refresh-impl.xml to generate bootstrapping + information for the application + =============================================================== + --> + <import file="${basedir}/.sencha/app/refresh-impl.xml"/> + <target name="refresh" + depends="init" + description="Refreshes the application bootstrap data."> + <x-ant-call unless="skip.refresh"> + <target name="-before-refresh"/> + <target name="-refresh"/> + <target name="-after-refresh"/> + </x-ant-call> + </target> + + <!-- + =============================================================== + Page + uses targets from page-impl.xml to generate the output markup + file and associated microloader / app manifest + =============================================================== + --> + <import file="${basedir}/.sencha/app/page-impl.xml"/> + <target name="page" + depends="init" + description="Builds the application's HTML page."> + <x-ant-call unless="skip.page"> + <target name="-before-page"/> + <target name="-page"/> + <target name="-after-page"/> + </x-ant-call> + </target> + + <!-- + =============================================================== + Resolve + uses targets from resolve-impl.xml to detect dynamic app + dependencies using phantomjs + =============================================================== + --> + <import file="${basedir}/.sencha/app/resolve-impl.xml"/> + <target name="resolve" + depends="init" + description="Resolve application dependencies dynamically."> + <x-ant-call unless="skip.resolve"> + <target name="-before-resolve"/> + <target name="-resolve"/> + <target name="-after-resolve"/> + </x-ant-call> + </target> + + <!-- + =============================================================== + Native Package + uses targets from packager-impl.xml to run native packager + applications to produce stand-alone installable web apps from + this built Cmd application + =============================================================== + --> + <import file="${basedir}/.sencha/app/packager-impl.xml"/> + <target name="native-package" + depends="init" + description="Builds native packages of the application"> + <x-ant-call unless="skip.native-package"> + <target name="-before-native-package"/> + <target name="-native-package"/> + <target name="-after-native-package"/> + </x-ant-call> + </target> + + <!-- + =============================================================== + Help - properties + displays all current ant properties + =============================================================== + --> + <target name=".props" depends="init" + description="Lists all properties defined for the build"> + <echoproperties/> + </target> + + <!-- + =============================================================== + Help - docs + displays the help message + =============================================================== + --> + <target name=".help" depends="init" + description="Provides help on the build script"> + <x-get-project-targets property="help.message"/> + + <echo><![CDATA[${help.message} +This is the main build script for your application. + +The following properties can be used to disable certain steps in the build +process. + + * skip.page Do not build the HTML page. + * skip.js Do not build the output js code file(s) + * skip.resources Do not copy resources to the build directory + * skip.sass Do not build the SASS. + * skip.slice Do not build the theme image slicer. + * skip.theme Do not build the theme images. + +The following properties can be used to modify the build process. + + * build.compression.yui Specify yui compression for the build + + * build.compression.closure Specify closure compression for the build + + * build.compression.uglify Specify uglify compression for the build + + * build.options Set general options for the build + (eg: enable a debug build) + + To modify any of the previous build specific options, see: + ${basedir}/.sencha/app/${build.environment}.properties + + * build.operations Insert commands into the compile command + for the build. + + * app.page.name Set the input and output page file + for the compile command. + + * build.classes.name Specify the compiled js file + + +For details about how these options affect your build, see + + ${basedir}/.sencha/app/build-impl.xml + +These options can be stored in a local.properties file in this folder or in the +local.properties file in the workspace. + +Alternatively, these can be supplied on the command line. For example: + + ant -Dskip.sass=1 build + +To see all currently defined properties, do this: + + ant .props + ]]></echo> + </target> + +</project> diff --git a/.sencha/app/build.properties b/.sencha/app/build.properties new file mode 100644 index 0000000..5f6d491 --- /dev/null +++ b/.sencha/app/build.properties @@ -0,0 +1,20 @@ +# ============================================================================= +# This file provides an override point for default variables defined in these +# lower priority files: +# +# - ext.properties +# - *.defaults.properties +# - defaults.properties +# +# To override a property based on build.environment instead add properties to +# one of these higher priority files: +# +# - production.properties +# - testing.properties +# - native.properties +# - package.properties +# +# IMPORTANT - Sencha Cmd will merge your changes with its own during upgrades. +# To avoid potential merge conflicts avoid making large, sweeping changes to +# this file. +# ============================================================================= diff --git a/.sencha/app/codegen.json b/.sencha/app/codegen.json new file mode 100644 index 0000000..3c42dfe --- /dev/null +++ b/.sencha/app/codegen.json @@ -0,0 +1,340 @@ +{ + "sources": { + "build.properties.merge": { + "d4613dc19be3ddb60e7ff5716e28c8b15d954f3a": "eJytUstOw0AMvPMVI/WGoB+AxAFx4sBD0B9ws05idbOOdp2E/j1OH6pEEKfuzR57POP1Co/XfDcrbFopqCUy+qyjBC6gBB05Zw/QqyRDrRmBaxqiYaQstI1e5xlJHCAJ1nJhZ4s6cXYm0Sy2P/CWh5uVI8A9+NvWPqXnbMLllLxdn5jLEvsTmUXrRSHhBO6xpeJyNGE7SAxrTqNkTR27A0nFmAIoBFzIYOpsmhhaHz2glab9x4L3hqEy0bRUa1xMUrMEEpmMvMz3VO2o4d/uXl4/3j83T28bL/niVLWE5y5gkhjRcW4Yex0yPJ8a9zCJtRAr0CkhDNklYOibTP6X6+OyaFRx32q+CqEzS6WpjlJ55xHvaDf3RnLwDmVi7uf4POewKzufy8x83Vv8AQy16fs\u003d" + }, + "sencha.cfg.tpl.merge": { + "8b88dc946a59c6ad6edb77744966e548250b33a3": "eJytVE1vEzEQvedXjASHVmo3vSEhwgFuHKASHLk43tmNU6+9sr35oMp/542dbDZN4QKRktge+703n2/ox4rJqY7JN5SwVn1vjVbJeDfDuhLb4ll+D7PZm6vrTcBm68MTDZFrWu5fgtAN7xLNKflBr24z5Phm8Twuv04JepVWN/EWby6Q1mqjog6mTxT9EDRHutG+6xRF7lVQietCoK2KUUAWb38ODw/vPslhbcJhjsXdK2fVOgr3tyH1QyLrj4SNDxcCloOxNamQTKN0ipkrnwnQiUu8Abnms+kwn3BehDJ4n3I88wtxGGGk7YoddbhsXEtRx0iBTx7jyjpS9pAjUIzLEY/Yz2PQpFxdNhsVCNyskw+Gi1gxVCPdJK2PCJZAywUKg2WquTHOlDAYC2LtA1T03tWiCne/IB3fSzqOcqozCaS8moCTzitSyDVq+e/EwPkzMYxXxM3gdGaTyHVmZ468E0xOf3EGxrmytpI8TcFR9kEhlmiJ4gfOjNN2qBn/2EjaWnacC7do0d41pq3C8g5AH8Aj9fGx8Iw22hpracknNFTkkHyHEtXQsSfTUI+AsUvZpdrnOnFSaIzLYMbb2LM2jeG6gm10VNRmT19rdZTMk2pZRCaFFEkycIwv7uQqlX45tn8OXjYtEIj7vLrP2TK6gJsImb7nkPaklRNRna+zJtGoV8q1GR1+SleKL740aC8yJKgEpDx3jl2AadDLcZ4Krq4wfNr3MNa8q1Tsd3fH9Tr2VFUVlXEhcGXOFesqdVY0nrlHwvN92V0VxGQ/gh4K1NTdU/AjKXoxwMiamCTikoY4iTVALoaA9v2ejlVU5tKp2fdZ5OlylYGulI5YULf4rx8I/TxEFCQ9Fn/Fz3t6tDLgdLaYX3meRuTc+m0JjjUuzz+18QZ9yKFlIEnRY/ymiKJHWznecqANhyjPZ78BlO9Yig\u003d\u003d" + }, + "production.properties.merge": { + "cbdf9712e9b5d37cecb4d0530ba1fccd0ed004a3": "eJytkUEOwjAMBO+8YkXv/QF/4MAHAnGpRbArxy3i97gFQbk3t6ycmbXS4LDl2TU49VzRcSEMphNnqkgCncgsLhiUxdGpIVOXxuKYknE6l5iLhIUyWBCgeJ7Hi7NK+xmtbWQDmTPVNkRUF8knQTKCSnmC74OaB+jRk+A8csks10DOWu8J+x97D5KJTeVO4u2uianjD7lq5N+9PN1mL6uxP5fN3o5Vuwh87hO0pVHRlAMz+//cy7sa2o2/4QV6LJW9" + }, + "native.properties.merge": { + "2c8c063f9588eecff09624782d7369a8a000d61c": "eJytkEsOwjAMRPecYkT3vQF3YMEFguJSi2BXjgni9rgfFQ5AdrEm743T4fTPc+hwGbli4EKYTBtnqkgCbWQWF0zK4hjUkGlIz+JoyThdS+RiwkIZLAiQJOdG/RarfeAmMmeqfUioLoJtgmQElfIGPyY1D8hrJMH1ySWz3AI3K30kHFfuESSNTeVB4v2hi8T5i/tp4vs+nu6zk9XY38tGK/+nWQx87hK0pU3RlAMzu3fv8qaG8s9f/wFV3ZB9" + }, + "testing.properties.merge": { + "360e715956c81757e53736789fe20be045acb544": "eJytkMENwjAMRe+d4oveuwE7cGCBoLjUItiVY4q6PW6pKAM0t1g/732nxfnI07S4DlzRcyGMphNnqkgCncgsLhiVxdGrIVOfXsUxJeN0K5GLCQtlsCBATtVZ7t2Wq13wRjJnql1YqK6GbYJkBJUyg5+jmgflPZDg9uKSgxK8xekD4bSBTyCZ2FSeJN41bUQuO++vi/828vRYpKzGPq87fQV/1WLgS5mgrXWKphyYRb6L10c1nAf//gdqIpHi" + }, + "package.properties.merge": { + "c6c1fb2fb1dda28480ad0f6e5caffc9b97d196ae": "eJytkUFygzAMRfc5hSZsOxygM11223aRCwgsQBNH8tiCTG5fGWjDAcLOsnjvS27g45XfqYHLxAUGjgQp68KBCqCALpSzHyApi8GgGQINOEeDBTNjF73PKywUgAUclLC/4kjt3lda5yXKxlRat1BZDXsFMBOoxAfwLWk2p9wnEuhmjoFldF512kRw3sFnIFk4q9xIrD013vLz5B2y2P9EhtcqZc1sj3WmTXCI5gWrYZy2xomKwTFV/hSvP5XN+fV9+Xzftjb7SDoc+jClWJmmIGi80N9SwnbVe1HlDUTdWfNvt1togpGEMkYoLP1K7tVfIHKXfeVU/S9+/V9rlbyW" + }, + "theme.html.tpl.merge": { + "79e5bc8b4cebd921ec602e9a67c0493c70d2d5ce": "eJydVFFv0zAQfs+vuPkJEE66wQPqkr6UIUBITLQ88Ogm18arEwffNW017b/PTsLWjSKmWlGi+LvvvvPns9Ozj9+n81/XV1ByZSZReiZlBABT2+ydXpUMr/LXcDE6v5D+9S6GGdZ5qeBLnceRlJ4w8EpUxSQwIWXNBidXO4avM5iXWCF8Vq5GojTpsT6uQlZelhuJvze6zcTU1ow1y/m+QQF5/5cJxh0nQeYSvLQj5Ozn/JP8ICZRn2ioGb5ZVYAyBlxI6LAAo+s1gaoLoNzphqmLC3V3xAD7YJMJ4r1BKhFZAHv5QTUnElA6XGYCd6pqDMbdVDIk6LMeMm5Uq/pZAeTyTMRx4p/bpVMVbq1bXysu7xIfKgts4xsSkzTpCS/PubCWiZ1qnvGP2MElwszoHJ031OFxH14g6bAu0P1fL9hfqVovkXhwvrSO880JmoN1jcrXaoX0A82jeRz6Si4UYUKKKBm2J/mjfaKzp0g+LPBEzXxDbKuj1nZt2WcKI97qYoUsw9FQuvZ7evuAhVEpt9L1GM5Hze7yCeKJXI7h/egvpLGkWVvP8gdBsW7xKW5bdEtjt2NoNemFOYDvosfKdpK6LpPsa0B++08E3jwr2nqzNe991YeZu+Unw/rT5OB6Wdhi743qPgHp7p972o53iQ\u003d\u003d" + }, + "config.rb.tpl.merge": { + "33f446bd02c3fd24eb27891582eff6a2e789796b": "eJxLLi2KT8ksUrBVcMvMSdUDMvMSc1M14uPdPH1c4+M1ufJLSwpKS+KLSypzUoGqrPJSi0tSU7gALskTcA\u003d\u003d" + }, + "app.json.tpl.merge": { + "5c35fa135e5c429faf9348c096b567a3079ad83b": "eJyr5lIAAqW8xNxUJSsFpWoQo1ZJhwsiXJRaWJpZlFoMlIoGi8TCZDJTwMpL8zILS1M9U2qVuGoByK4TZA\u003d\u003d" + }, + "app.js.tpl.merge": { + "adb7999f937a224ece5dc57252db7048652e6616": "eJxNj81uwjAQhO9+irnxIxTu9FQhrlxaVeK4iYfEUmJHzroBId69xkiFPXhH3v1m7O3aINd35yacXU/k3tIzitJCvEUabdH1FV/0TSfYD7bCKSQ04kHrFPqPy1T8PGkzcw4R15AiZBx714i64Deo04PgxAJPmF3fo5NfQgNqYmBsS2CxeoVi7ujze9oo1vm2MuutMYeLVm/uy9szXwbusLjlyTHL+2Jjyj0vSm/fJ9XnC85bj6VySNKwj8xf/3GcxxB1B42J5r76MH/syWTb" + }, + "index.html.tpl.merge": { + "f036c68a34ae0bc941832df08c406a00545dd9f6": "eJx9kT0PwiAQhnd/BbIjqwPt4kccNHaogyPSM1SpNHDRGuN/F4tRa1SWC/fe8x53iP54OcrX2YTM8sU87QmNlbkHkEXaI+GIClASpaXzgAld5VM2pA8JSzSQXg6ygqvg8RaVPmNENEzZqi5DkjAWhXdxYy16dLLuym2JKQ974sAk1OPZgNcASIl2sE3okxso7+kH6JUrayTeqYReti687GTdPpOorxwaZAUcB7tACR4r/+CvPt+BOAf/OUjHTNbfbJ4WnUUJHtcvNrY4B6IN92z7NzfHY30y" + }, + "{controllerFileName}.js.tpl.merge": { + "b092f4aad11d2f7eaab5ce3e2dcc2fc3134f3188": "eJxzrSjRS0lNy8xL1VCvTs7PKynKz8lJLfJLzE0tLkhMTq3VQxOtVddRqOZSAILUipLUvBQrBXVXoBmJBQV6znCF6ly1mtZcACwSIF0\u003d" + } + }, + "targets": { + ".sencha/app/build.properties": { + "source": "build.properties.merge", + "version": "d4613dc19be3ddb60e7ff5716e28c8b15d954f3a", + "parameters": { + "viewNamespace": "amdaApp.view", + "frameworkName": "ext", + "appName": "amdaApp", + "controllerNamespace": "amdaApp.controller", + "frameworkPath": "ext", + "packagesRelPath": "ext/packages", + "appModels": "", + "themeName": "default", + "library": "all", + "viewName": "Main", + "viewFileName": "Main", + "senchadir": ".sencha", + "controllerName": "Main", + "appStores": "", + "name": "amdaApp", + "appViews": "", + "appControllers": "", + "controllerFileName": "Main", + "modelNamespace": "amdaApp.model", + "uniqueId": "b85c0816-e68e-4737-a78e-2bf642f76ff7" + } + }, + ".sencha/app/sencha.cfg": { + "source": "sencha.cfg.tpl.merge", + "version": "8b88dc946a59c6ad6edb77744966e548250b33a3", + "parameters": { + "viewNamespace": "amdaApp.view", + "frameworkName": "ext", + "appName": "amdaApp", + "controllerNamespace": "amdaApp.controller", + "frameworkPath": "ext", + "packagesRelPath": "ext/packages", + "appModels": "", + "themeName": "default", + "library": "all", + "viewName": "Main", + "viewFileName": "Main", + "senchadir": ".sencha", + "controllerName": "Main", + "appStores": "", + "name": "amdaApp", + "appViews": "", + "appControllers": "", + "controllerFileName": "Main", + "modelNamespace": "amdaApp.model", + "uniqueId": "b85c0816-e68e-4737-a78e-2bf642f76ff7" + } + }, + ".sencha/app/production.properties": { + "source": "production.properties.merge", + "version": "cbdf9712e9b5d37cecb4d0530ba1fccd0ed004a3", + "parameters": { + "viewNamespace": "amdaApp.view", + "frameworkName": "ext", + "appName": "amdaApp", + "controllerNamespace": "amdaApp.controller", + "frameworkPath": "ext", + "packagesRelPath": "ext/packages", + "appModels": "", + "themeName": "default", + "library": "all", + "viewName": "Main", + "viewFileName": "Main", + "senchadir": ".sencha", + "controllerName": "Main", + "appStores": "", + "name": "amdaApp", + "appViews": "", + "appControllers": "", + "controllerFileName": "Main", + "modelNamespace": "amdaApp.model", + "uniqueId": "b85c0816-e68e-4737-a78e-2bf642f76ff7" + } + }, + ".sencha/app/native.properties": { + "source": "native.properties.merge", + "version": "2c8c063f9588eecff09624782d7369a8a000d61c", + "parameters": { + "viewNamespace": "amdaApp.view", + "frameworkName": "ext", + "appName": "amdaApp", + "controllerNamespace": "amdaApp.controller", + "frameworkPath": "ext", + "packagesRelPath": "ext/packages", + "appModels": "", + "themeName": "default", + "library": "all", + "viewName": "Main", + "viewFileName": "Main", + "senchadir": ".sencha", + "controllerName": "Main", + "appStores": "", + "name": "amdaApp", + "appViews": "", + "appControllers": "", + "controllerFileName": "Main", + "modelNamespace": "amdaApp.model", + "uniqueId": "b85c0816-e68e-4737-a78e-2bf642f76ff7" + } + }, + ".sencha/app/testing.properties": { + "source": "testing.properties.merge", + "version": "360e715956c81757e53736789fe20be045acb544", + "parameters": { + "viewNamespace": "amdaApp.view", + "frameworkName": "ext", + "appName": "amdaApp", + "controllerNamespace": "amdaApp.controller", + "frameworkPath": "ext", + "packagesRelPath": "ext/packages", + "appModels": "", + "themeName": "default", + "library": "all", + "viewName": "Main", + "viewFileName": "Main", + "senchadir": ".sencha", + "controllerName": "Main", + "appStores": "", + "name": "amdaApp", + "appViews": "", + "appControllers": "", + "controllerFileName": "Main", + "modelNamespace": "amdaApp.model", + "uniqueId": "b85c0816-e68e-4737-a78e-2bf642f76ff7" + } + }, + ".sencha/app/package.properties": { + "source": "package.properties.merge", + "version": "c6c1fb2fb1dda28480ad0f6e5caffc9b97d196ae", + "parameters": { + "viewNamespace": "amdaApp.view", + "frameworkName": "ext", + "appName": "amdaApp", + "controllerNamespace": "amdaApp.controller", + "frameworkPath": "ext", + "packagesRelPath": "ext/packages", + "appModels": "", + "themeName": "default", + "library": "all", + "viewName": "Main", + "viewFileName": "Main", + "senchadir": ".sencha", + "controllerName": "Main", + "appStores": "", + "name": "amdaApp", + "appViews": "", + "appControllers": "", + "controllerFileName": "Main", + "modelNamespace": "amdaApp.model", + "uniqueId": "b85c0816-e68e-4737-a78e-2bf642f76ff7" + } + }, + "sass/example/theme.html": { + "source": "theme.html.tpl.merge", + "version": "79e5bc8b4cebd921ec602e9a67c0493c70d2d5ce", + "parameters": { + "viewNamespace": "amdaApp.view", + "frameworkName": "ext", + "appName": "amdaApp", + "controllerNamespace": "amdaApp.controller", + "frameworkPath": "ext", + "packagesRelPath": "ext/packages", + "appModels": "", + "themeName": "default", + "library": "all", + "viewName": "Main", + "viewFileName": "Main", + "senchadir": ".sencha", + "controllerName": "Main", + "appStores": "", + "name": "amdaApp", + "appViews": "", + "appControllers": "", + "controllerFileName": "Main", + "modelNamespace": "amdaApp.model", + "uniqueId": "b85c0816-e68e-4737-a78e-2bf642f76ff7" + } + }, + "sass/config.rb": { + "source": "config.rb.tpl.merge", + "version": "33f446bd02c3fd24eb27891582eff6a2e789796b", + "parameters": { + "viewNamespace": "amdaApp.view", + "frameworkName": "ext", + "appName": "amdaApp", + "controllerNamespace": "amdaApp.controller", + "frameworkPath": "ext", + "packagesRelPath": "ext/packages", + "appModels": "", + "themeName": "default", + "library": "all", + "viewName": "Main", + "viewFileName": "Main", + "senchadir": ".sencha", + "controllerName": "Main", + "appStores": "", + "name": "amdaApp", + "appViews": "", + "appControllers": "", + "controllerFileName": "Main", + "modelNamespace": "amdaApp.model", + "uniqueId": "b85c0816-e68e-4737-a78e-2bf642f76ff7" + } + }, + "app.json": { + "source": "app.json.tpl.merge", + "version": "5c35fa135e5c429faf9348c096b567a3079ad83b", + "parameters": { + "viewNamespace": "amdaApp.view", + "frameworkName": "ext", + "appName": "amdaApp", + "controllerNamespace": "amdaApp.controller", + "frameworkPath": "ext", + "packagesRelPath": "ext/packages", + "appModels": "", + "themeName": "default", + "library": "all", + "viewName": "Main", + "viewFileName": "Main", + "senchadir": ".sencha", + "controllerName": "Main", + "appStores": "", + "name": "amdaApp", + "appViews": "", + "appControllers": "", + "controllerFileName": "Main", + "modelNamespace": "amdaApp.model", + "uniqueId": "b85c0816-e68e-4737-a78e-2bf642f76ff7" + } + }, + "app.js": { + "source": "app.js.tpl.merge", + "version": "adb7999f937a224ece5dc57252db7048652e6616", + "parameters": { + "viewNamespace": "amdaApp.view", + "frameworkName": "ext", + "appName": "amdaApp", + "controllerNamespace": "amdaApp.controller", + "frameworkPath": "ext", + "packagesRelPath": "ext/packages", + "appModels": "", + "themeName": "default", + "library": "all", + "viewName": "Main", + "viewFileName": "Main", + "senchadir": ".sencha", + "controllerName": "Main", + "appStores": "", + "name": "amdaApp", + "appViews": "", + "appControllers": "", + "controllerFileName": "Main", + "modelNamespace": "amdaApp.model", + "uniqueId": "b85c0816-e68e-4737-a78e-2bf642f76ff7" + } + }, + "index.html": { + "source": "index.html.tpl.merge", + "version": "f036c68a34ae0bc941832df08c406a00545dd9f6", + "parameters": { + "viewNamespace": "amdaApp.view", + "frameworkName": "ext", + "appName": "amdaApp", + "controllerNamespace": "amdaApp.controller", + "frameworkPath": "ext", + "packagesRelPath": "ext/packages", + "appModels": "", + "themeName": "default", + "library": "all", + "viewName": "Main", + "viewFileName": "Main", + "senchadir": ".sencha", + "controllerName": "Main", + "appStores": "", + "name": "amdaApp", + "appViews": "", + "appControllers": "", + "controllerFileName": "Main", + "modelNamespace": "amdaApp.model", + "uniqueId": "b85c0816-e68e-4737-a78e-2bf642f76ff7" + } + }, + "app/controller/Main.js": { + "source": "{controllerFileName}.js.tpl.merge", + "version": "b092f4aad11d2f7eaab5ce3e2dcc2fc3134f3188", + "parameters": { + "library": "all", + "appName": "amdaApp", + "controllerName": "Main", + "name": "amdaApp", + "controllerNamespace": "amdaApp.controller", + "controllerFileName": "Main" + } + } + } +} \ No newline at end of file diff --git a/.sencha/app/defaults.properties b/.sencha/app/defaults.properties new file mode 100644 index 0000000..408b91e --- /dev/null +++ b/.sencha/app/defaults.properties @@ -0,0 +1,592 @@ +# ============================================================================= +# 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 enviornment 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 properies 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 +build.environment=production + +# the directory to place built application files +build.dir=${workspace.build.dir}/${build.environment}/${app.name} + +# 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.dir}/resources + +# ***************************************************************************** +# JS +# these properties control various aspects of output js code construction +# ***************************************************************************** + +# the output js file that contains all needed js code +build.classes.name=app.js +build.classes.file=${build.dir}/${build.classes.name} + +# the output js file for framework code, if the framework +# classes are not included in the default all-classes.js file +build.framework.name=framework.js +build.framework.file=${build.dir}/${build.framework.name} + +# 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.enable=\ + optimize\n \ + -define-rewrite\n +build.optimize.disable= +build.optimize=${build.optimize.disable} + +# enables / disables yui compression +build.compression.yui=0 + +# 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 output will be microloader-enabled, or markup only +build.output.markuponly=false + +# controls whether the microloader content will be embedded in the output +# markup, or left as a separate resource +build.enable.embedded.microloader=true + +# whether to include the page's manifest.json code with the +# microloader content. Production.properties files should set this to +# false to have app.json exist as a server resource. +build.enable.embedded.manifest=true + +# enables / disables delta patch generation +enable.deltas=false + +# enables / disables generation of cache manifest +enable.cache.manifest=false + +# enables / disables compression of resources referenced in app.json / package.json +# js and css entries +enable.resource.compression=false + +# 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 +build.page.name=${app.page.name} +build.page.file=${build.dir}/${build.page.name} + +# 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.path=${app.microloader.dir}/${app.microloader.name} + +# 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 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 name of the output microloader file +build.microloader.name=microloader.js + +# the path to the microloader content file, if external to the outpout markup +build.microloader.path=${build.dir}/${build.microloader.name} + +# 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 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 +build.archive.name=archive +build.out.archive.path=${workspace.build.dir}/${build.archive.name}/${app.name} + +# the name of the output folder for calculated delta patches +build.deltas.name=deltas +build.out.delta.path=${build.dir}/${build.deltas.name} + +# the output cache manifest file +build.manifest.name=cache.appcache +build.manifest.path=${build.dir}/${build.manifest.name} + +# the path to the output markup page +build.out.page.path=${build.dir}/${app.page.name} + +# the name of the manifest json file +build.json.name=app.json + +# the full path to the manifest json file +build.out.json.path=${build.dir}/${build.json.name} + +# 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 +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 +app.bootstrap.js.name=bootstrap.js +app.bootstrap.js=${app.bootstrap.base.path}/${app.bootstrap.js.name} + +# 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 +app.bootstrap.css=${app.bootstrap.base.path}/${app.bootstrap.css.name} + +# 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=bootstrap.json + +# the full path to the bootstrap microloader manifest +build.json.bootstrap.path=${app.dir}/${build.json.bootstrap.name} + +# ***************************************************************************** +# 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=4095 + +# enables / disable css preprocessor (enable.ext42.themes only) +build.css.preprocess=true + +# 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=true + +# 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=resources/${app.out.css.name} + +# output css file path (full path) +app.out.css=${build.dir}/${app.out.css.rel} + +# 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.dir}/resources/${app.out.base}.css + +# 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.dir}/resources + +# 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 + +# the directory that will be the current working directory of the compass +# process (controls the location of .sass-cache folder creation) +# NOTE: this directory will also typically need to contain the config.rb file +# used for compass invocation, so it is ideal to set build.sass.dir instead of this +# variable, as that will control both the config.rb location as well as the +# .sass-cache location +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 + +# 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.theme.html=${app.example.dir}/${app.example.theme.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 sencha mobile packager (stbuild) or cordova/phonegap +skip.native-package=true + +# a property that controls whether a standalone manifest.json file will be +# generated for the native packaged application +enable.standalone.manifest=false + +# these set the name of the mobile native packager's config file +build.mobile.packager.name=packager.json +build.mobile.packager.file=${app.dir}/${build.mobile.packager.name} + +# the default mobile packager config to use when specifying the autorun argument +# with "sencha app build -run native" +build.mobile.packager.default.name=packager.json +build.mobile.packager.default.file=${app.dir}/${build.mobile.packager.default.name} + +# these set the name of the mobile native packager's temporary config file +# that will have the input and output path properties updated +build.mobile.packager.temp.name=packager.temp.json +build.mobile.packager.temp.file=${app.dir}/${build.mobile.packager.temp.name} + +# the input directory for the mobile native packager that contains the +# built Sencha Cmd application +build.mobile.packager.in.dir=${build.dir} + +# the output location of the mobile native packaged application +build.mobile.packager.out.dir.name=native-package-mobile +build.mobile.packager.out.dir=${workspace.build.dir}/${build.mobile.packager.out.dir.name}/${app.name} + +# ***************************************************************************** +# Resolve +# these properties control aspects of the dynamic dependency resolver, which +# uses phantomjs to load the applicaiton 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=54321 + +# 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,-compass-compile + +# the watcher targets to run that monitor for code changes +build.watcher.targets=-watch-compiler diff --git a/.sencha/app/ext.properties b/.sencha/app/ext.properties new file mode 100644 index 0000000..68a0e2e --- /dev/null +++ b/.sencha/app/ext.properties @@ -0,0 +1,28 @@ +# ============================================================================= +# This file defines default property values that apply to all builds based on +# Ext JS 4.2.x framework. +# +# Please use build.properties to customize these properties. +# +# To override a property based on build.environment instead add properties to +# one of these higher priority files: +# +# - production.properties +# - testing.properties +# - native.properties +# - package.properties +# +# The properties defined in this file take priority over defaults.properties +# and *.defaults.properties. +# +# IMPORTANT - This file should not be modified by an app as it is overwritten +# during each app upgrade. +# ============================================================================= + +enable.ext42.themes=true + +build.output.markuponly=true + +build.options.product=ext + +build.options.minVersion=4.2 diff --git a/.sencha/app/find-cmd-impl.xml b/.sencha/app/find-cmd-impl.xml new file mode 100644 index 0000000..55d6826 --- /dev/null +++ b/.sencha/app/find-cmd-impl.xml @@ -0,0 +1,58 @@ +<project name="find-cmd-impl"> + <!-- + Run "sencha which" to find the Sencha Cmd basedir and get "cmd.dir" setup. We + need to execute the command with curdir set properly for Cmd to pick up that we + are running for an application. + --> + <target name="find-cmd-in-path" unless="cmd.dir"> + <exec executable="sencha" + dir="${basedir}" + failifexecutionfails="false" + outputproperty="exec.error"> + <arg value="which"/> + <arg value="-p=cmd.dir"/> + <arg value="-o=$cmddir$"/> + </exec> + + <!-- Now read the generated properties file and delete it --> + <property file="$cmddir$"/> + <delete file="$cmddir$"/> + </target> + + <!-- + Run "sencha which" again, similar to the above target, but explicitly check + for the 'SENCHA_CMD' environment variable to have been set, in case sencha + cmd isn't on the current path settings for the user + --> + <target name="find-cmd-in-environment" unless="cmd.dir"> + <exec executable="${env.SENCHA_CMD}/sencha" + dir="${basedir}" + failifexecutionfails="false"> + <arg value="which"/> + <arg value="-p=cmd.dir"/> + <arg value="-o=$cmddir$"/> + </exec> + + <property file="$cmddir$"/> + <delete file="$cmddir$"/> + </target> + + <!-- + == Mac OSX launchd fix == + create a child shell process that will source in ~/.bash_profile + and then attempt to call 'sencha which' with the current user's + shell profile settings. sencha which will create a properties file + that can then be loaded into this (the parent) process. + + This allows ant integrations in IDE's like netbeans or eclipse to properly + locate Sencha Cmd, even if the IDE was launched via launchd (Finder) + --> + <target name="find-cmd-in-shell" unless="cmd.dir"> + <delete quiet="true" file="$cmddir$"/> + <echo file="tmp.sh"> source ~/.bash_profile; sencha which -p cmd.dir -o '$cmddir$'</echo> + <exec executable="/bin/sh"><arg value="tmp.sh"/></exec> + <property file="$cmddir$"/> + <delete file="tmp.sh"/> + <delete file="$cmddir$"/> + </target> +</project> \ No newline at end of file diff --git a/.sencha/app/init-impl.xml b/.sencha/app/init-impl.xml new file mode 100644 index 0000000..9d51916 --- /dev/null +++ b/.sencha/app/init-impl.xml @@ -0,0 +1,214 @@ +<project name="init-impl"> + <!-- + Init-Local + --> + <target name="-before-init-local"/> + <target name="-init-local"> + <!-- + ${basedir} is actually the basedir of build.xml, in the app root + so this imports ${app.dir}/local.properties, if present + --> + <property file="${basedir}/local.properties"/> + + <!-- + This will traverse upwards in the file system, starting at the + app root directory, looking for the workspace. Once found, + ${workspace.dir}/local.properties will be imported into this + project + --> + <script language="javascript"> + <![CDATA[ + var f = new java.io.File(project.getProperty("basedir")); + var sub = ".sencha/workspace/sencha.cfg"; + + for (var p = f; p; p = p.getParentFile()) { + var t = new java.io.File(p, sub); + if (t.exists()) { + // we found the workspace folder! + + t = new java.io.File(p, "local.properties"); + if (t.exists()) { + var loader = project.createTask("property"); + loader.setFile(new java.io.File(t.getCanonicalPath())); + loader.execute(); + } + + break; + } + } + ]]> + </script> + + </target> + <target name="-after-init-local"/> + <target name="init-local" + depends="-before-init-local,-init-local,-after-init-local"/> + + <target name="-before-init"/> + <target name="-init" unless="internal.x-sencha-initialized"> + <!-- + Now, apply various project updates, such as ant class loader path + updates, as well as loading Sencha Cmd config system properties + into ant property space + --> + <x-sencha-init prefix=""/> + + <!-- + default the build environment to production if it is unset by this point + --> + <property name="build.environment" value="production"/> + <property name="CR" value=" "/> + + <x-load-properties> + <!-- Load user-defined properties for environment then general: --> + <file path="${app.config.dir}/${build.environment}.properties" required="false"/> + <file path="${app.config.dir}/build.properties" required="false"/> + <!-- Pick up the defaults by framework/environment followed by general: --> + <file path="${app.config.dir}/${framework.name}.properties" required="true"/> + <file path="${app.config.dir}/${build.environment}.defaults.properties" required="true"/> + <file path="${app.config.dir}/defaults.properties" required="true"/> + </x-load-properties> + + <!-- + calculate the appropriate build.compression value + --> + <condition property="build.compression" value="-yui"> + <x-is-true value="${build.compression.yui}"/> + </condition> + + <condition property="build.compression" value="-closure"> + <x-is-true value="${build.compression.closure}"/> + </condition> + + <condition property="build.compression" value="-uglify"> + <x-is-true value="${build.compression.uglify}"/> + </condition> + + <property name="build.compression" value=""/> + + <x-verify-app-cmd-ver/> + + <!-- + this id string is used to share a common compiler instance + for all x-compile calls in this project + --> + <property name="compiler.ref.id" value="app-compiler"/> + + <!-- + this property is set indicating we've reached the end of the + core init phase. it's presence will indicate that we've already + executed this target, and will bypass firing the init code + repeatedly in sub projects (antcall, x-ant-call) + See the above 'unless' attribute on the -init target + --> + <property name="internal.x-sencha-initialized" value="true"/> + </target> + <target name="-after-init"/> + + <target name="-before-init-defaults"/> + <target name="-init-defaults"> + <!-- + 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: + + <property name="build.operations"/> + exclude + -namespace=Ext + </property> + --> + <property name="build.operations" value=""/> + + <!-- + This property can be modified to change concatenation + specific options + + -strip-comments: comment suppression + -remove-text-references: transform string literal class references to objects + -beautify: unpack the source + + <property name="build.concat.options"/> + -strip-comments + -remove-text-references + -beautify + </property> + --> + <property name="build.concat.options" value=""/> + + <!-- + This property can be modified to change page compilation options + + -scripts: inject the given script path into the generated markup ahead of the all classes file + + <property name="build.page.options"/> + -scripts=framework.js + </property> + --> + <property name="build.page.options" value=""/> + </target> + <target name="-after-init-defaults"/> + + <!-- + Initializes the compiler instances, reading in the app.json and package.json + definitions, as well as scanning and parsing all js files found on the + various classpath entries for the framework, workspace, packages, and app + --> + <target name="-init-compiler" depends="-init"> + <condition property="internal.app.css.rel" value="${app.out.css.rel}"> + <x-is-true value="${enable.ext42.themes}"/> + </condition> + <property name="internal.app.css.rel" value=""/> + + <x-compile refid="${compiler.ref.id}" + dir="${app.dir}" + initOnly="true" + inheritAll="true"> + <![CDATA[ + # base build command + -tempDir=${build.compile.temp.dir} + -keepTempDir=${build.compile.temp.dir.keep} + -options=${build.options} + load-app + -frameworkFile=${build.framework.name} + -jsBundleFile=${build.classes.name} + -cssBundleFile=${internal.app.css.rel} + -tempDir=${build.app.temp.dir} + -tag=${build.tag.name} + and + restore + ${build.tag.name} + and + meta + +packages + -out=${build.out.package.versions} + and + classpath + -path=${build.out.package.versions} + -name=framework + and + require + -source=@${build.tag.name} + -requires=@overrides + -allow-unmet=true + and + require + -scopeName=framework + -source=Ext.util.Observable + -requires=${build.out.package.versions} + -allow-unmet=false + and + union + -recursive + -tag=${build.tag.name} + and + save + ${build.tag.name}-overrides + and + ${build.operations} + and + save + page + ]]> + </x-compile> + </target> +</project> diff --git a/.sencha/app/js-impl.xml b/.sencha/app/js-impl.xml new file mode 100644 index 0000000..1583bce --- /dev/null +++ b/.sencha/app/js-impl.xml @@ -0,0 +1,78 @@ +<project name="js-impl"> + <!-- + this target extracts split mode information from the compiler's app + processor to determine various pieces of information + --> + <target name="-detect-app-build-properties" + depends="-init-compiler"> + <x-load-app-builder-properties + refid="${compiler.ref.id}" + splitModePropName="enable.split.mode" + pageModePropName="app.page.mode"/> + </target> + + <!-- + this is the standard js compile target that builds the output js file(s) + --> + <target name="-compile-js" depends="-detect-app-build-properties"> + <if> + <x-is-true value="${enable.split.mode}"/> + <then> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + # build a separate sdk-only js file + union + -tag=package-sencha-core,framework + and + ${build.optimize} + and + concat + ${build.compression} + -out=${build.framework.file} + ${build.concat.options} + + # now build the all-classes file, without + # the framework code included + and + restore + page + and + exclude + -tag=framework,package-sencha-core + and + ${build.optimize} + and + concat + ${build.compression} + -out=${build.classes.file} + ${build.concat.options} + ]]> + </x-compile> + </then> + <else> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + # build an all-classes.js file that contains + # all code needed by the app + restore + page + and + ${build.optimize} + and + concat + ${build.compression} + -out=${build.classes.file} + ${build.concat.options} + ]]> + </x-compile> + </else> + </if> + </target> + + <!-- + Build javascript + --> + <target name="-before-js"/> + <target name="-js" depends="-compile-js"/> + <target name="-after-js"/> +</project> \ No newline at end of file diff --git a/.sencha/app/microloader/development.js b/.sencha/app/microloader/development.js new file mode 100644 index 0000000..a183a7b --- /dev/null +++ b/.sencha/app/microloader/development.js @@ -0,0 +1,189 @@ +/** + * Sencha Blink - Development + * @author Jacky Nguyen <jacky@sencha.com> + */ +(function() { + var head = document.head || document.getElementsByTagName('head')[0]; + + function write(content) { + document.write(content); + } + + function addMeta(name, content) { + var meta = document.createElement('meta'); + + meta.setAttribute('name', name); + meta.setAttribute('content', content); + head.appendChild(meta); + } + + var xhr = new XMLHttpRequest(); + xhr.open('GET', 'bootstrap.json', false); + xhr.send(null); + + var options = eval("(" + xhr.responseText + ")"), + scripts = options.js || [], + styleSheets = options.css || [], + i, ln, path, platform, theme, exclude; + + if(options.platform && options.platforms && options.platforms[options.platform] && options.platforms[options.platform].js) { + scripts = options.platforms[options.platform].js.concat(scripts); + } + + if (navigator.userAgent.match(/IEMobile\/10\.0/)) { + var msViewportStyle = document.createElement("style"); + msViewportStyle.appendChild( + document.createTextNode( + "@media screen and (orientation: portrait) {" + + "@-ms-viewport {width: 320px !important;}" + + "}" + + "@media screen and (orientation: landscape) {" + + "@-ms-viewport {width: 560px !important;}" + + "}" + ) + ); + document.getElementsByTagName("head")[0].appendChild(msViewportStyle); + } + + addMeta('viewport', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'); + addMeta('apple-mobile-web-app-capable', 'yes'); + addMeta('apple-touch-fullscreen', 'yes'); + + if (!window.Ext) { + window.Ext = {}; + } + Ext.microloaded = true; + + var filterPlatform = window.Ext.filterPlatform = function(platform) { + var profileMatch = false, + ua = navigator.userAgent, + j, jln; + + platform = [].concat(platform); + + function isPhone(ua) { + var isMobile = /Mobile(\/|\s)/.test(ua); + + // Either: + // - iOS but not iPad + // - Android 2 + // - Android with "Mobile" in the UA + + return /(iPhone|iPod)/.test(ua) || + (!/(Silk)/.test(ua) && (/(Android)/.test(ua) && (/(Android 2)/.test(ua) || isMobile))) || + (/(BlackBerry|BB)/.test(ua) && isMobile) || + /(Windows Phone)/.test(ua); + } + + function isTablet(ua) { + return !isPhone(ua) && (/iPad/.test(ua) || /Android|Silk/.test(ua) || /(RIM Tablet OS)/.test(ua) || + (/MSIE 10/.test(ua) && /; Touch/.test(ua))); + } + + // Check if the ?platform parameter is set in the URL + var paramsString = window.location.search.substr(1), + paramsArray = paramsString.split("&"), + params = {}, + testPlatform, i; + + for (i = 0; i < paramsArray.length; i++) { + var tmpArray = paramsArray[i].split("="); + params[tmpArray[0]] = tmpArray[1]; + } + + testPlatform = params.platform; + if (testPlatform) { + return platform.indexOf(testPlatform) != -1; + } + + for (j = 0, jln = platform.length; j < jln; j++) { + switch (platform[j]) { + case 'phone': + profileMatch = isPhone(ua); + break; + case 'tablet': + profileMatch = isTablet(ua); + break; + case 'desktop': + profileMatch = !isPhone(ua) && !isTablet(ua); + break; + case 'ios': + profileMatch = /(iPad|iPhone|iPod)/.test(ua); + break; + case 'android': + profileMatch = /(Android|Silk)/.test(ua); + break; + case 'blackberry': + profileMatch = /(BlackBerry|BB)/.test(ua); + break; + case 'safari': + profileMatch = /Safari/.test(ua) && !(/(BlackBerry|BB)/.test(ua)); + break; + case 'chrome': + profileMatch = /Chrome/.test(ua); + break; + case 'ie10': + profileMatch = /MSIE 10/.test(ua); + break; + case 'windows': + profileMatch = /MSIE 10/.test(ua) || /Trident/.test(ua); + break; + case 'tizen': + profileMatch = /Tizen/.test(ua); + break; + case 'firefox': + profileMatch = /Firefox/.test(ua); + } + if (profileMatch) { + return true; + } + } + return false; + }; + + + for (i = 0,ln = styleSheets.length; i < ln; i++) { + path = styleSheets[i]; + + if (typeof path != 'string') { + platform = path.platform; + exclude = path.exclude; + theme = path.theme; + path = path.path; + } + + if (platform) { + if (!filterPlatform(platform) || filterPlatform(exclude)) { + continue; + } + + if(!Ext.theme) { + Ext.theme = {}; + } + if(!Ext.theme.name) { + Ext.theme.name = theme || 'Default'; + } + } + + write('<link rel="stylesheet" href="'+path+'">'); + } + + for (i = 0,ln = scripts.length; i < ln; i++) { + path = scripts[i]; + + if (typeof path != 'string') { + platform = path.platform; + exclude = path.exclude; + path = path.path; + } + + if (platform) { + if (!filterPlatform(platform) || filterPlatform(exclude)) { + continue; + } + } + + write('<script src="'+path+'"></'+'script>'); + } + +})(); \ No newline at end of file diff --git a/.sencha/app/microloader/production.js b/.sencha/app/microloader/production.js new file mode 100644 index 0000000..fc87a5f --- /dev/null +++ b/.sencha/app/microloader/production.js @@ -0,0 +1,788 @@ +/** + * Sencha Blink + * @author Jacky Nguyen <jacky@sencha.com> + */ +(function(global) { + var emptyFn = function(){}, + callbacks = [], + doc = global.document, + head = doc.head || doc.getElementsByTagName('head')[0], + addWindowListener = global.addEventListener, + removeWindowListener = global.removeEventListener, + jsonParse = JSON.parse, + a = doc.createElement('a'), + documentLocation = doc.location, + documentUri = documentLocation.protocol + '//' + documentLocation.hostname + documentLocation.pathname + documentLocation.search, + manifestFile = 'app.json', + isRefreshing = false, + activeManifest, appCache, storage; + + try { + storage = global.localStorage; + appCache = global.applicationCache; + } + catch(e) {} + + function getManifestStorageKey(id) { + return id + '-' + documentUri + manifestFile; + } + + function Manifest(manifest) { + var manifestContent; + + if (typeof manifest == 'string') { + manifestContent = manifest; + manifest = jsonParse(manifestContent); + } + else { + manifestContent = JSON.stringify(manifest); + } + + var applicationId = manifest.id, + key = getManifestStorageKey(applicationId), + assetMap = {}; + + function processAsset(asset) { + var uri; + + if (typeof asset == 'string') { + asset = { + path: asset + }; + } + + if (asset.shared) { + asset.version = asset.shared; + uri = asset.shared + asset.path; + } + else { + uri = toAbsoluteUri(asset.path); + } + + asset.uri = uri; + asset.key = applicationId + '-' + uri; + assetMap[uri] = asset; + + return asset; + } + + function processAssets(assets, type) { + var ln = assets.length, + i, asset; + + for (i = 0; i < ln; i++) { + asset = assets[i]; + + assets[i] = asset = processAsset(asset); + + asset.type = type; + asset.index = i; + asset.collection = assets; + asset.ready = false; + asset.evaluated = false; + } + + return assets; + } + + this.key = key; + this.css = processAssets(manifest.css, 'css'); + this.js = processAssets(manifest.js, 'js'); + + Ext.microloaded = true; + + var filterPlatform = window.Ext.filterPlatform = function(platform) { + var profileMatch = false, + ua = navigator.userAgent, + j, jln; + + platform = [].concat(platform); + + function isPhone(ua) { + var isMobile = /Mobile(\/|\s)/.test(ua); + + // Either: + // - iOS but not iPad + // - Android 2 + // - Android with "Mobile" in the UA + + return /(iPhone|iPod)/.test(ua) || + (!/(Silk)/.test(ua) && (/(Android)/.test(ua) && (/(Android 2)/.test(ua) || isMobile))) || + (/(BlackBerry|BB)/.test(ua) && isMobile) || + /(Windows Phone)/.test(ua); + } + + function isTablet(ua) { + return !isPhone(ua) && (/iPad/.test(ua) || /Android|Silk/.test(ua) || /(RIM Tablet OS)/.test(ua) || + (/MSIE 10/.test(ua) && /; Touch/.test(ua))); + } + + // Check if the ?platform parameter is set in the URL + var paramsString = window.location.search.substr(1), + paramsArray = paramsString.split("&"), + params = {}, + testPlatform, i; + + for (i = 0; i < paramsArray.length; i++) { + var tmpArray = paramsArray[i].split("="); + params[tmpArray[0]] = tmpArray[1]; + } + + testPlatform = params.platform; + if (testPlatform) { + return platform.indexOf(testPlatform) != -1; + } + + for (j = 0, jln = platform.length; j < jln; j++) { + switch (platform[j]) { + case 'phone': + profileMatch = isPhone(ua); + break; + case 'tablet': + profileMatch = isTablet(ua); + break; + case 'desktop': + profileMatch = !isPhone(ua) && !isTablet(ua); + break; + case 'ios': + profileMatch = /(iPad|iPhone|iPod)/.test(ua); + break; + case 'android': + profileMatch = /(Android|Silk)/.test(ua); + break; + case 'blackberry': + profileMatch = /(BlackBerry|BB)/.test(ua); + break; + case 'safari': + profileMatch = /Safari/.test(ua) && !(/(BlackBerry|BB)/.test(ua)); + break; + case 'chrome': + profileMatch = /Chrome/.test(ua); + break; + case 'ie10': + profileMatch = /MSIE 10/.test(ua); + break; + case 'windows': + profileMatch = /MSIE 10/.test(ua) || /Trident/.test(ua); + break; + case 'tizen': + profileMatch = /Tizen/.test(ua); + break; + case 'firefox': + profileMatch = /Firefox/.test(ua); + } + if (profileMatch) { + return true; + } + } + return false; + }; + + this.css = this.css.filter(function(css) { + var platform = css.platform, + exclude = css.exclude; + + css.type = "css"; + + if (platform) { + if (filterPlatform(platform) && !filterPlatform(exclude)) { + if(!Ext.theme) { + Ext.theme = {}; + } + if(!Ext.theme.name) { + Ext.theme.name = css.theme || 'Default'; + } + return true; + } + css.filtered = true; + return false; + } + return true; + }); + + this.js = this.js.filter(function(js) { + var platform = js.platform, + exclude = js.exclude; + + js.type = "js"; + + if (platform) { + if (filterPlatform(platform) && !filterPlatform(exclude)) { + return true; + } + else { + js.filtered = true; + return false; + } + } + return true; + }); + + this.assets = this.css.concat(this.js); + this.getAsset = function(uri) { + return assetMap[uri]; + }; + this.store = function() { + store(key, manifestContent); + }; + } + + if (typeof global.Ext === 'undefined') { + var Ext = global.Ext = {}; + } + + function toAbsoluteUri(uri) { + a.href = uri; + return a.href; + } + + function addMeta(name, content) { + var meta = document.createElement('meta'); + + meta.setAttribute('name', name); + meta.setAttribute('content', content); + head.appendChild(meta); + } + + function request(uri, isShared, onSuccess, onFailure) { + (isShared ? requestIframe : requestXhr)(uri, onSuccess, onFailure); + } + + function requestXhr(uri, onSuccess, onFailure) { + var xhr = new XMLHttpRequest(); + + onFailure = onFailure || emptyFn; + + uri = uri + ((uri.indexOf('?') == -1) ? '?' : '&') + Date.now(); + + try { + xhr.open('GET', uri, true); + xhr.onreadystatechange = function() { + if (xhr.readyState == 4) { + var status = xhr.status, + content = xhr.responseText; + + if ((status >= 200 && status < 300) || status == 304 || (status == 0 && content.length > 0)) { + onSuccess(content); + } + else { + onFailure(); + } + } + }; + xhr.send(null); + } catch (e) { + onFailure(); + } + } + + function requestIframe(uri, onSuccess) { + var iframe = doc.createElement('iframe'); + + callbacks.push({ + iframe: iframe, + callback: onSuccess + }); + + iframe.src = uri + '.html'; + iframe.style.cssText = 'width:0;height:0;border:0;position:absolute;z-index:-999;visibility:hidden'; + doc.body.appendChild(iframe); + } + + // for remote assets, inject a script element + function addRemoteScript(uri, onSuccess, onFailure) { + var script = document.createElement('script'); + script.src = uri; + script.type = "text/javascript"; + script.charset = "UTF-8"; + + script.onerror = onFailure; + + if ('addEventListener' in script ) { + script.onload = onSuccess; + } else if ('readyState' in script) { + script.onreadystatechange = function() { + if (this.readyState === 'loaded' || + this.readyState === 'complete') { + onSuccess(); + } + }; + } else { + script.onload = onSuccess; + } + + head.appendChild(script); + } + + function addRemoteLink(uri) { + var link = document.createElement('link'); + link.rel = "stylesheet"; + link.href = uri; + head.appendChild(link); + } + + function requestAsset(asset, onSuccess, onFailure) { + var isRemote = !!asset.remote, + isShared = !!asset.shared; + + if (isRemote) { + if(asset.type === "js") { + addRemoteScript(asset.uri, function(){ + onSuccess(''); + }, onFailure); + } else { + addRemoteLink(asset.uri); + onSuccess(''); + } + return; + } + + if (!isShared && asset.version && asset.version.length) { + var onRequestSuccess = onSuccess, + version = asset.version, + versionLn = version.length, + checksumFail, checksumType; + + onSuccess = function(content) { + checksumType = content.substring(0, 1); + if (checksumType == '/') { + if (content.substring(2, versionLn + 2) !== version) { + checksumFail = true; + } + } + else if (checksumType == 'f') { + if (content.substring(10, versionLn + 10) !== version) { + checksumFail = true; + } + } + else if (checksumType == '.') { + if (content.substring(1, versionLn + 1) !== version) { + checksumFail = true; + } + } + if (checksumFail === true) { + if (confirm("Requested: '" + asset.uri + " seems to have been changed. Attempt to refresh the application?")) { + refresh(); + } + return; + } + onRequestSuccess(content); + }; + } + + request(asset.uri, isShared, onSuccess, onFailure); + } + + function onMessage(e) { + var data = e.data, + sourceWindow = e.source.window, + i, ln, callback, iframe; + + for (i = 0, ln = callbacks.length; i < ln; i++) { + callback = callbacks[i]; + iframe = callback.iframe; + + if (iframe.contentWindow === sourceWindow) { + callback.callback(data); + doc.body.removeChild(iframe); + callbacks.splice(i, 1); + return; + } + } + } + + function patch(content, delta) { + var output = [], + chunk, i, ln; + + if (delta.length === 0) { + return content; + } + + for (i = 0,ln = delta.length; i < ln; i++) { + chunk = delta[i]; + + if (typeof chunk === 'number') { + output.push(content.substring(chunk, chunk + delta[++i])); + } + else { + output.push(chunk); + } + } + + return output.join(''); + } + + function log(message) { + if (typeof console != 'undefined') { + (console.error || console.log).call(console, message); + } + } + + function store(key, value) { + try { + storage.setItem(key, value); + } + catch (e) { + if (storage && e.code == e.QUOTA_EXCEEDED_ERR && activeManifest) { + log("LocalStorage Quota exceeded, cannot store " + key + " locally"); + // Quota exceeded, clean up unused items +// var items = activeManifest.assets.map(function(asset) { +// return asset.key; +// }), +// i = 0, +// ln = storage.length, +// cleaned = false, +// item; +// +// items.push(activeManifest.key); +// +// while (i <= ln - 1) { +// item = storage.key(i); +// +// if (items.indexOf(item) == -1) { +// storage.removeItem(item); +// cleaned = true; +// ln--; +// } +// else { +// i++; +// } +// } + + // Done cleaning up, attempt to store the value again + // If there's still not enough space, no other choice + // but to skip this item from being stored +// if (cleaned) { +// store(key, value); +// } + } + } + } + + function retrieve(key) { + try { + return storage.getItem(key); + } + catch (e) { + // Private browsing mode + return null; + } + } + + function retrieveAsset(asset) { + return retrieve(asset.key); + } + + function storeAsset(asset, content) { + return store(asset.key, content); + } + + function refresh() { + if (!isRefreshing) { + isRefreshing = true; + requestXhr(manifestFile, function(content) { + new Manifest(content).store(); + global.location.reload(); + }); + } + } + + function blink(currentManifest) { + var currentAssets = currentManifest.assets, + assetsCount = currentAssets.length, + newManifest; + + activeManifest = currentManifest; + + addWindowListener('message', onMessage, false); + + function onAssetReady(asset, content) { + var assets = asset.collection, + index = asset.index, + ln = assets.length, + i; + + asset.ready = true; + asset.content = content; + + for (i = index - 1; i >= 0; i--) { + asset = assets[i]; + if (!asset.filtered && (!asset.ready || !asset.evaluated)) { + return; + } + } + + for (i = index; i < ln; i++) { + asset = assets[i]; + if (asset.ready) { + if (!asset.evaluated) { + evaluateAsset(asset); + } + } + else { + return; + } + } + } + + function evaluateAsset(asset) { + asset.evaluated = true; + + if (asset.type == 'js') { + try { + eval(asset.content); + } + catch (e) { + log("Error evaluating " + asset.uri + " with message: " + e); + } + } + else { + var style = doc.createElement('style'), + base; + + style.type = 'text/css'; + style.textContent = asset.content; + + if ('id' in asset) { + style.id = asset.id; + } + + if ('disabled' in asset) { + style.disabled = asset.disabled; + } + + base = document.createElement('base'); + base.href = asset.path.replace(/\/[^\/]*$/, '/'); + head.appendChild(base); + head.appendChild(style); + head.removeChild(base); + } + + delete asset.content; + + if (--assetsCount == 0) { + onReady(); + } + } + + function onReady() { + var updatingAssets = [], + appCacheReady = false, + onAppCacheIdle = function() {}, + onAppCacheReady = function() { + appCache.swapCache(); + appCacheReady = true; + onAppCacheIdle(); + }, + updatingCount; + + removeWindowListener('message', onMessage, false); + + if (appCache.status == appCache.UPDATEREADY) { + onAppCacheReady(); + } + else if (appCache.status == appCache.CHECKING || appCache.status == appCache.DOWNLOADING) { + appCache.onupdateready = onAppCacheReady; + appCache.onnoupdate = appCache.onobsolete = function() { + onAppCacheIdle(); + }; + } + + function notifyUpdateIfAppCacheReady() { + if (appCacheReady) { + notifyUpdate(); + } + } + + function notifyUpdate() { + var updatedCallback = Ext.onUpdated || emptyFn; + + if ('onSetup' in Ext) { + Ext.onSetup(updatedCallback); + } + else { + updatedCallback(); + } + } + + function doUpdate() { + newManifest.store(); + + updatingAssets.forEach(function(asset) { + storeAsset(asset, asset.content); + }); + + notifyUpdate(); + } + + function onAssetUpdated(asset, content) { + asset.content = content; + + if (--updatingCount == 0) { + if (appCache.status == appCache.IDLE) { + doUpdate(); + } + else { + onAppCacheIdle = doUpdate; + } + } + } + + function checkForUpdate() { + removeWindowListener('online', checkForUpdate, false); + requestXhr(manifestFile, function(manifestContent) { + activeManifest = newManifest = new Manifest(manifestContent); + + var assets = newManifest.assets, + currentAsset; + + assets.forEach(function(asset) { + currentAsset = currentManifest.getAsset(asset.uri); + + if (!currentAsset || asset.version !== currentAsset.version) { + updatingAssets.push(asset); + } + }); + + updatingCount = updatingAssets.length; + + if (updatingCount == 0) { + if (appCache.status == appCache.IDLE) { + notifyUpdateIfAppCacheReady(); + } + else { + onAppCacheIdle = notifyUpdateIfAppCacheReady; + } + return; + } + + updatingAssets.forEach(function(asset) { + var currentAsset = currentManifest.getAsset(asset.uri), + path = asset.path, + update = asset.update; + + function updateFull() { + requestAsset(asset, function(content) { + onAssetUpdated(asset, content); + }); + } + + // New asset (never used before) + // OR Shared from CDN + // OR Missing local storage + // OR Full update + if (!currentAsset || !update || retrieveAsset(asset) === null || update != 'delta') { + updateFull(); + } + else { + requestXhr('deltas/' + path + '/' + currentAsset.version + '.json', + function(content) { + try { + onAssetUpdated(asset, patch(retrieveAsset(asset), jsonParse(content))); + } + catch (e) { + log("Malformed delta content received for " + asset.uri); + } + }, + updateFull + ); + } + }) + }); + } + + if (navigator.onLine !== false) { + checkForUpdate(); + } + else { + addWindowListener('online', checkForUpdate, false); + } + } + + if (assetsCount == 0) { + onReady(); + return; + } + + currentAssets.forEach(function(asset) { + var content = retrieveAsset(asset); + + if (content === null) { + requestAsset(asset, function(content) { + if (!asset.remote) { + storeAsset(asset, content); + } + onAssetReady(asset, content); + }, function() { + onAssetReady(asset, ''); + }); + } + else { + onAssetReady(asset, content); + } + }); + } + + function blinkOnDomReady(manifest) { + if (navigator.userAgent.match(/IEMobile\/10\.0/)) { + var msViewportStyle = document.createElement("style"); + msViewportStyle.appendChild( + document.createTextNode( + "@media screen and (orientation: portrait) {" + + "@-ms-viewport {width: 320px !important;}" + + "}" + + "@media screen and (orientation: landscape) {" + + "@-ms-viewport {width: 560px !important;}" + + "}" + ) + ); + document.getElementsByTagName("head")[0].appendChild(msViewportStyle); + } + + var readyStateRe = (/MSIE 10/.test(navigator.userAgent)) ? /complete|loaded/ : /interactive|complete|loaded/; + if (doc.readyState.match(readyStateRe) !== null) { + blink(manifest); + } + else { + addWindowListener('DOMContentLoaded', function() { + if (navigator.standalone) { + // When running from Home Screen, the splash screen will not disappear until all + // external resource requests finish. + // The first timeout clears the splash screen + // The second timeout allows inital HTML content to be displayed + setTimeout(function() { + setTimeout(function() { + blink(manifest); + }, 1); + }, 1); + } + else { + setTimeout(function() { + blink(manifest); + }, 1); + } + }, false); + } + } + + Ext.blink = function(manifest) { + var manifestContent = retrieve(getManifestStorageKey(manifest.id)); + + addMeta('viewport', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'); + addMeta('apple-mobile-web-app-capable', 'yes'); + addMeta('apple-touch-fullscreen', 'yes'); + + if (manifestContent) { + manifest = new Manifest(manifestContent); + blinkOnDomReady(manifest); + } + else { + requestXhr(manifestFile, function(content) { + manifest = new Manifest(content); + manifest.store(); + blinkOnDomReady(manifest); + }); + } + }; +})(this); \ No newline at end of file diff --git a/.sencha/app/microloader/testing.js b/.sencha/app/microloader/testing.js new file mode 100644 index 0000000..5f1f443 --- /dev/null +++ b/.sencha/app/microloader/testing.js @@ -0,0 +1,180 @@ +/** + * Sencha Blink - Testing + * @author Jacky Nguyen <jacky@sencha.com> + */ +(function(global) { + var head = global.document.head || global.document.getElementsByTagName('head')[0], + Ext = global.Ext; + + if (typeof Ext == 'undefined') { + global.Ext = Ext = {}; + } + + function write(content) { + document.write(content); + } + + function addMeta(name, content) { + var meta = document.createElement('meta'); + + meta.setAttribute('name', name); + meta.setAttribute('content', content); + head.appendChild(meta); + } + + Ext.blink = function(options) { + var scripts = options.js || [], + styleSheets = options.css || [], + i, ln, path, platform, theme, exclude; + + if (navigator.userAgent.match(/IEMobile\/10\.0/)) { + var msViewportStyle = document.createElement("style"); + msViewportStyle.appendChild( + document.createTextNode( + "@media screen and (orientation: portrait) {" + + "@-ms-viewport {width: 320px !important;}" + + "}" + + "@media screen and (orientation: landscape) {" + + "@-ms-viewport {width: 560px !important;}" + + "}" + ) + ); + document.getElementsByTagName("head")[0].appendChild(msViewportStyle); + } + addMeta('viewport', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'); + addMeta('apple-mobile-web-app-capable', 'yes'); + addMeta('apple-touch-fullscreen', 'yes'); + + Ext.microloaded = true; + + var filterPlatform = window.Ext.filterPlatform = function(platform) { + var profileMatch = false, + ua = navigator.userAgent, + j, jln; + + platform = [].concat(platform); + + function isPhone(ua) { + var isMobile = /Mobile(\/|\s)/.test(ua); + + // Either: + // - iOS but not iPad + // - Android 2 + // - Android with "Mobile" in the UA + + return /(iPhone|iPod)/.test(ua) || + (!/(Silk)/.test(ua) && (/(Android)/.test(ua) && (/(Android 2)/.test(ua) || isMobile))) || + (/(BlackBerry|BB)/.test(ua) && isMobile) || + /(Windows Phone)/.test(ua); + } + + function isTablet(ua) { + return !isPhone(ua) && (/iPad/.test(ua) || /Android|Silk/.test(ua) || /(RIM Tablet OS)/.test(ua) || + (/MSIE 10/.test(ua) && /; Touch/.test(ua))); + } + + // Check if the ?platform parameter is set in the URL + var paramsString = window.location.search.substr(1), + paramsArray = paramsString.split("&"), + params = {}, + testPlatform, i; + + for (i = 0; i < paramsArray.length; i++) { + var tmpArray = paramsArray[i].split("="); + params[tmpArray[0]] = tmpArray[1]; + } + + testPlatform = params.platform; + if (testPlatform) { + return platform.indexOf(testPlatform) != -1; + } + + for (j = 0, jln = platform.length; j < jln; j++) { + switch (platform[j]) { + case 'phone': + profileMatch = isPhone(ua); + break; + case 'tablet': + profileMatch = isTablet(ua); + break; + case 'desktop': + profileMatch = !isPhone(ua) && !isTablet(ua); + break; + case 'ios': + profileMatch = /(iPad|iPhone|iPod)/.test(ua); + break; + case 'android': + profileMatch = /(Android|Silk)/.test(ua); + break; + case 'blackberry': + profileMatch = /(BlackBerry|BB)/.test(ua); + break; + case 'safari': + profileMatch = /Safari/.test(ua) && !(/(BlackBerry|BB)/.test(ua)); + break; + case 'chrome': + profileMatch = /Chrome/.test(ua); + break; + case 'ie10': + profileMatch = /MSIE 10/.test(ua); + break; + case 'windows': + profileMatch = /MSIE 10/.test(ua) || /Trident/.test(ua); + break; + case 'tizen': + profileMatch = /Tizen/.test(ua); + break; + case 'firefox': + profileMatch = /Firefox/.test(ua); + } + if (profileMatch) { + return true; + } + } + return false; + }; + + for (i = 0,ln = styleSheets.length; i < ln; i++) { + path = styleSheets[i]; + + if (typeof path != 'string') { + platform = path.platform; + exclude = path.exclude; + theme = path.theme; + path = path.path; + } + + if (platform) { + if (!filterPlatform(platform) || filterPlatform(exclude)) { + continue; + } + if(!Ext.theme) { + Ext.theme = {}; + } + if(!Ext.theme.name) { + Ext.theme.name = theme || 'Default'; + } + } + write('<link rel="stylesheet" href="'+path+'">'); + } + + for (i = 0,ln = scripts.length; i < ln; i++) { + path = scripts[i]; + + if (typeof path != 'string') { + platform = path.platform; + exclude = path.exclude; + path = path.path; + } + + if (platform) { + if (!filterPlatform(platform) || filterPlatform(exclude)) { + continue; + } + } + + write('<script src="'+path+'"></'+'script>'); + } + } + +})(this); \ No newline at end of file diff --git a/.sencha/app/native.defaults.properties b/.sencha/app/native.defaults.properties new file mode 100644 index 0000000..9b64ecd --- /dev/null +++ b/.sencha/app/native.defaults.properties @@ -0,0 +1,28 @@ +# ============================================================================= +# This file defines default property values that apply to the "native" build +# environment. +# +# Please use native.properties to customize these properties unless you want +# your customizations to be for all environments. In that case, you can instead +# override these properties in build.properties. +# +# The properties defined in this file take priority over defaults.properties +# but are lower priority than build.properties which in turn is lower priority +# than native.properties. +# +# IMPORTANT - This file should not be modified by an app as it is overwritten +# during each app upgrade. +# ============================================================================= + +build.options.logger=no + +build.options.debug=false + +# enable yui compression +build.compression.yui=1 + +enable.standalone.manifest=true + +app.microloader.name=testing.js + +skip.native-package=false diff --git a/.sencha/app/native.properties b/.sencha/app/native.properties new file mode 100644 index 0000000..277ff19 --- /dev/null +++ b/.sencha/app/native.properties @@ -0,0 +1,8 @@ +# ============================================================================= +# This file provides an override point for default variables defined in +# native.defaults.properties. These properties are only imported when building +# for the "native" environment. +# +# Properties defined in this file take priority over build.properties but are +# only loaded for "native" builds. +# ============================================================================= diff --git a/.sencha/app/package.defaults.properties b/.sencha/app/package.defaults.properties new file mode 100644 index 0000000..e98b994 --- /dev/null +++ b/.sencha/app/package.defaults.properties @@ -0,0 +1,27 @@ +# ============================================================================= +# This file defines default property values that apply to the "package" build +# environment. +# +# Please use package.properties to customize these properties unless you want +# your customizations to be for all environments. In that case, you can instead +# override these properties in build.properties. +# +# The properties defined in this file take priority over defaults.properties +# but are lower priority than build.properties which in turn is lower priority +# than package.properties. +# +# IMPORTANT - This file should not be modified by an app as it is overwritten +# during each app upgrade. +# +# NOTE: This use of "package" applies to native packaged application, not a +# Package in the general since of code libraries. +# ============================================================================= + +build.options.logger=no + +build.options.debug=false + +# enable yui compression +build.compression.yui=1 + +app.microloader.name=testing.js diff --git a/.sencha/app/package.properties b/.sencha/app/package.properties new file mode 100644 index 0000000..3c59c31 --- /dev/null +++ b/.sencha/app/package.properties @@ -0,0 +1,11 @@ +# ============================================================================= +# This file provides an override point for default variables defined in +# package.defaults.properties. These properties are only imported when building +# for the "package" environment. +# +# Properties defined in this file take priority over build.properties but are +# only loaded for "package" builds. +# +# NOTE: This use of "package" applies to native packaged application, not a +# Package in the general since of code libraries. +# ============================================================================= diff --git a/.sencha/app/packager-impl.xml b/.sencha/app/packager-impl.xml new file mode 100644 index 0000000..7ae3a16 --- /dev/null +++ b/.sencha/app/packager-impl.xml @@ -0,0 +1,127 @@ +<project name="packager-impl"> + <macrodef name="x-run-mobile-packager"> + <attribute name="configfile"/> + <attribute name="action"/> + <sequential> + <echo>Running mobile packager action @{action} on file @{configFile}</echo> + <x-sencha-command dir="${app.dir}" inheritall="true"> + <![CDATA[ + app + package + @{action} + -path=@{configfile} + ]]> + </x-sencha-command> + </sequential> + </macrodef> + + + <macrodef name="x-run-mobile-packager-config"> + <attribute name="config"/> + <attribute name="run" default="${args.autorun}"/> + <sequential> + <if> + <not> + <available file="@{config}"/> + </not> + <then> + <!-- + if the input packager config file for stbuild is + not available, then create it + --> + <echo><![CDATA[ + Creating default mobile packager config file at : + @{config} + ]]></echo> + <x-run-mobile-packager + configfile="@{config}" + action="generate"/> + </then> + </if> + + <local name="local.build.mobile.out.dir"/> + <local name="local.build.mobile.config.name"/> + + <!-- + append the current config file name to the output directory + for mobile packages. this allows multiple config outputs to + be sandboxed by the name of the config file in the mobile + package output directory. + --> + <basename file="@{config}" property="local.build.mobile.config.name"/> + <property name="local.build.mobile.out.dir" + value="${build.mobile.packager.out.dir}/${local.build.mobile.config.name}"/> + + <!-- + duplicate the config file, so that we can set the + input and output properties w/o losing comment blocks + --> + <x-set-json-property file="@{config}" + tofile="${build.mobile.packager.temp.file}"> + <property name="inputPath" + value="${build.mobile.packager.in.dir}"/> + <property name="outputPath" + value="${local.build.mobile.out.dir}"/> + </x-set-json-property> + +<echo><![CDATA[ + Processing Mobile Packager config file + config: @{config} + inputPath: ${build.mobile.packager.in.dir} + outputPath: ${local.build.mobile.out.dir} +]]></echo> + + <local name="mobile.packager.platform"/> + + <x-load-properties file="${build.mobile.packager.temp.file}" + prefix="mobile.packager" + required="true"/> + + <if> + <contains string="${mobile.packager.platform}" substring="iOS"/> + <then> + <copy todir="${build.dir}"> + <fileset dir="${app.dir}/resources/icons" includes="**/*"/> + <fileset dir="${app.dir}/resources/loading" includes="**/*"/> + </copy> + </then> + </if> + + <local name="build.mobile.action"/> + <condition property="build.mobile.action" value="run"> + <x-is-true value="@{run}"/> + </condition> + <property name="build.mobile.action" value="build"/> + + <x-run-mobile-packager + configFile="${build.mobile.packager.temp.file}" + action="${build.mobile.action}"/> + </sequential> + </macrodef> + + <target name="-native-package-mobile"> + <if> + <x-is-true value="${args.autorun}"/> + <then> + <echo>Running default mobile packager config.</echo> + <x-run-mobile-packager-config config="${build.mobile.packager.default.file}" + run="true"/> + </then> + <else> + <echo>Building all specified mobile packager configs.</echo> + <for param="configfile" list="${build.mobile.packager.file}"> + <sequential> + <x-run-mobile-packager-config config="@{configfile}" run="false"/> + </sequential> + </for> + </else> + </if> + </target> + + <target name="-before-native-package"/> + <target name="-native-package" + depends="-native-package-mobile"> + </target> + <target name="-after-native-package"/> + +</project> \ No newline at end of file diff --git a/.sencha/app/page-impl.xml b/.sencha/app/page-impl.xml new file mode 100644 index 0000000..3dcb702 --- /dev/null +++ b/.sencha/app/page-impl.xml @@ -0,0 +1,186 @@ +<project name="page-impl.xml"> + <target name="-build-output-microload-page"> + <if> + <x-is-true value="${build.enable.embedded.manifest}"/> + <then> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + # generate microloader file + microload + -operation=microloader + -microloaderPath=${app.microloader.path} + -tpl=${build.microloader.code.tpl} + -out=${build.microloader.path} + and + # generate json file + microload + -operation=json + -append + -tpl=${build.microloader.json.tpl.embedded} + -out=${build.microloader.path} + ]]> + </x-compile> + </then> + <else> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + # generate json file + microload + -operation=json + -tpl=${build.microloader.json.tpl.standalone} + -out=${build.out.json.path} + and + # generate microloader file + microload + -operation=microloader + -microloaderPath=${app.microloader.path} + -tpl=${build.microloader.code.tpl} + -out=${build.microloader.path} + and + microload + -operation=json + -append + -tpl=${build.microloader.json.tpl.external} + -out=${build.microloader.path} + ]]> + </x-compile> + </else> + </if> + + <if> + <x-is-true value="${build.enable.embedded.microloader}"/> + <then> + <x-sencha-command dir="${app.dir}" inheritall="true"> + <![CDATA[ + fs + minify + ${build.embedded.microloader.compressor} + -from=${build.microloader.path} + -to=${build.microloader.path} + ]]> + </x-sencha-command> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + markup + -contentFile=${build.microloader.path} + -tpl=${build.embedded.microloader.tpl} + -out=${build.out.page.path} + ]]> + </x-compile> + + <!--once the generated microloader file is embedded, delete it--> + <delete file="${build.microloader.path}"/> + </then> + <else> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + markup + -markup=${build.external.microloader.markup} + -out=${build.out.page.path} + ]]> + </x-compile> + </else> + </if> + + </target> + + <!-- generates a separate json manifest for use with native packager --> + <target name="-build-standalone-json-manifest"> + <x-run-if-true value="${enable.standalone.manifest}"> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + # generate json file + microload + -operation=json + -tpl=${build.microloader.json.tpl.standalone} + -out=${build.out.json.path} + ]]> + </x-compile> + </x-run-if-true> + </target> + + <target name="-build-output-markup-page"> + <condition property="internal.app.css.rel" value="${app.out.css.rel}"> + <x-is-true value="${enable.ext42.themes}"/> + </condition> + <property name="internal.app.css.rel" value=""/> + + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + markup + -out=${build.out.page.path} + ]]> + </x-compile> + </target> + + <!-- '-detect-app-build-properties' is defined in js-impl.xml --> + <target name="-build-output-page" + depends="-detect-app-build-properties,-build-standalone-json-manifest"> + <if> + <x-is-true value="${build.output.markuponly}"/> + <then> + <x-ant-call target="-build-output-markup-page"/> + </then> + <else> + <x-ant-call target="-build-output-microload-page"/> + </else> + </if> + </target> + + <target name="-copy-app-resources" depends="-init-compiler"> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + app-resources + -compress=${enable.resource.compression} + -out=${build.dir} + ]]> + </x-compile> + </target> + + <target name="-generate-deltas" depends="-init-compiler"> + <if> + <and> + <x-is-true value="${enable.deltas}"/> + <x-is-false value="${build.output.markuponly}"/> + </and> + <then> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + deltas + -archivePath=${build.out.archive.path} + -deltaPath=${build.out.delta.path} + -resourcePath=${build.dir} + ]]> + </x-compile> + </then> + </if> + </target> + + <target name="-generate-cache-manifest" depends="-init-compiler"> + <if> + <and> + <x-is-true value="${enable.cache.manifest}"/> + <x-is-false value="${build.output.markuponly}"/> + </and> + <then> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + cache-manifest + -cacheManifestPath=${build.manifest.path} + ]]> + </x-compile> + <replace file="${build.out.page.path}" + token="<html manifest=""" + value="<html manifest="${build.manifest.name}""/> + </then> + </if> + </target> + + <target name="-before-page"/> + <target name="-page" + depends="-copy-app-resources, + -generate-deltas, + -build-output-page, + -generate-cache-manifest"/> + <target name="-after-page"/> +</project> \ No newline at end of file diff --git a/.sencha/app/plugin.xml b/.sencha/app/plugin.xml new file mode 100644 index 0000000..d57eba8 --- /dev/null +++ b/.sencha/app/plugin.xml @@ -0,0 +1,32 @@ +<project basedir="."> + <!-- + This file can be freely edited, so long as the <import file="${sencha.workspace.config.dir}/plugin.xml"/> + statement is not removed. + + One of the purposes of this file is to hook various Sencha Command operations and do + processing before or after the command is processed. To do this, simply provide the + logic in a <target> using one of these names: + + -before-generate-app Called before an application is generated + -after-generate-app Called after an application is generated + + -before-generate-controller Called before a controller is generated + -after-generate-controller Called after a controller is generated + + -before-generate-model Called before a model is generated + -after-generate-model Called after a model is generated + + -before-generate-profile Called before a profile is generated + -after-generate-profile Called after a profile is generated + --> + <import file="${workspace.config.dir}/plugin.xml"/> + + <!-- + <target name="-after-generate-model"> + ... use ${args.path}, ${args.name} and ${args.fields} as needed ... + </target> + + Other targets are similar. There are properties prefixed with "args." and the name of + the command line option that hold the parameters for the command. + --> +</project> diff --git a/.sencha/app/production.defaults.properties b/.sencha/app/production.defaults.properties new file mode 100644 index 0000000..93975d6 --- /dev/null +++ b/.sencha/app/production.defaults.properties @@ -0,0 +1,29 @@ +# ============================================================================= +# This file defines default property values that apply to the "production" build +# environment. +# +# Please use production.properties to customize these properties unless you want +# your customizations to be for all environments. In that case, you can instead +# override these properties in build.properties. +# +# The properties defined in this file take priority over defaults.properties +# but are lower priority than build.properties which in turn is lower priority +# than production.properties. +# +# IMPORTANT - This file should not be modified by an app as it is overwritten +# during each app upgrade. +# ============================================================================= + +build.options.logger=no + +build.options.debug=false + +# enable yui compression +build.compression.yui=1 + +# enable the full class system optimizer +build.optimize=${build.optimize.enable} + +build.enable.embedded.manifest=false + +app.microloader.name=production.js diff --git a/.sencha/app/production.properties b/.sencha/app/production.properties new file mode 100644 index 0000000..8f03e38 --- /dev/null +++ b/.sencha/app/production.properties @@ -0,0 +1,8 @@ +# ============================================================================= +# This file provides an override point for default variables defined in +# production.defaults.properties. These properties are only imported when building +# for the "production" environment. +# +# Properties defined in this file take priority over build.properties but are +# only loaded for "production" builds. +# ============================================================================= diff --git a/.sencha/app/refresh-impl.xml b/.sencha/app/refresh-impl.xml new file mode 100644 index 0000000..c7c2dd5 --- /dev/null +++ b/.sencha/app/refresh-impl.xml @@ -0,0 +1,152 @@ +<project name="refresh-impl"> + <!-- + This macrodef regenerates the bootstrap.js class system metadata, which includes + relative file paths, class names, alternate class names, and class alias data + --> + <macrodef name="x-run-bootstrap"> + <attribute name="file"/> + <attribute name="basedir"/> + <attribute name="appendMicroloader" default="false"/> + <sequential> + + <local name="tag.filter"/> + <local name="ux.include"/> + <local name="load.script.tpl"/> + + <condition property="tag.filter" value="package-sencha-core,core"> + <x-is-true value="${enable.sencha-core.filter}"/> + </condition> + <property name="tag.filter" value="core"/> + + <if> + <equals arg1="${framework.name}" arg2="ext"/> + <then> + <property name="ux.include"> + include + -namespace=Ext.ux + and + </property> + <property name="load.script.tpl" value="Ext.Loader.loadScript("{0}");"/> + </then> + <else> + <property name="ux.include" value=""/> + <property name="load.script.tpl" value="Ext.Loader.loadScriptFile("{0}", Ext.emptyFn);"/> + </else> + </if> + +<echo file="@{file}"> +/** + * This file is generated by Sencha Cmd and should NOT be edited. It is + * provided to support globbing requires, custom xtypes, and other + * metadata-driven class system features + */ +</echo> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + union + -not + -tag=${tag.filter} + and + metadata + +append + -base-path=@{basedir} + +loader-paths + -jsonp=Ext.Loader.addClassPathMappings + -out=@{file} + and + exclude + -tag=${tag.filter} + and + ${ux.include} + metadata + +append + -base-path=@{basedir} + +alternates + -out=@{file} + and + metadata + +append + -base-path=@{basedir} + +alias + -out=@{file} + and + meta + +append + +packages + -out=@{file} + and + union + -tag=overrides + and + metadata + -base-path=@{basedir} + +append + +filenames + -tpl=${load.script.tpl}; + -out=@{file} + ]]> + </x-compile> + </sequential> + </macrodef> + + <!-- + Refreshes the application's bootstrap javascript and microloader manifest + '-detect-app-build-properties' is defined in js-impl.xml + --> + <target name="-refresh-app" depends="-detect-app-build-properties"> + + <!--regenerate class system metadata--> + <x-run-bootstrap file="${app.bootstrap.js}" + basedir="${app.bootstrap.base.path}"/> + + <!--regenerate json manifest bootstrap data--> + <if> + <equals arg1="${app.page.mode}" arg2="xcompile"/> + <then> + <!-- + append the microloader and manifest to the end + of bootstrap.js + --> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + microload + -operation=microloader + -microloaderPath=${app.microloader.bootstrap} + -append + -out=${app.bootstrap.js} + ]]> + </x-compile> + </then> + </if> + + <!-- + create / overwrite bootstrap.json, which will be used + by the default development.js microloader + --> + +<echo file="${build.json.bootstrap.path}"> +/** + * This file is generated by Sencha Cmd and should NOT be edited. It is a + * combination of content from app.json, and all required package's package.json + * files. Customizations should be placed in app.json. + */ +</echo> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + microload + -operation=json + -bootstrap + -append + -tpl={0} + -out=${build.json.bootstrap.path} + ]]> + </x-compile> + </target> + + <!-- + Refresh app + --> + <target name="-before-refresh"/> + <target name="-refresh" depends="-refresh-app"/> + <target name="-after-refresh"/> +</project> \ No newline at end of file diff --git a/.sencha/app/resolve-impl.xml b/.sencha/app/resolve-impl.xml new file mode 100644 index 0000000..7f0e0a7 --- /dev/null +++ b/.sencha/app/resolve-impl.xml @@ -0,0 +1,83 @@ +<project name="resolve-impl"> + + <target name="-before-web-start"/> + <target name="-web-start"> + <property name="enable.background.server" value="false"/> + <x-sencha-command> + <![CDATA[ + fs + web + -port=${build.web.port} + -background=${enable.background.server} + start + -map=${build.web.root} + ]]> + </x-sencha-command> + </target> + <target name="-after-web-start"/> + <target name="web-start" + depends="-init,-before-web-start,-web-start,-after-web-start"/> + + <target name="-before-web-stop"/> + <target name="-web-stop"> + <!-- + This needs to be in it's own process due to threading issues when called from a + target. + --> + <x-shell dir="${app.dir}"> + ${cmd.dir}/sencha fs web -port ${build.web.port} stop + </x-shell> + </target> + <target name="-after-web-stop"/> + <target name="web-stop" + depends="-init,-before-web-stop,-web-stop,-after-web-stop"/> + + <target name="-resolve-impl" depends="-refresh"> + <x-ant-call target="web-start" unless="skip.web.start"> + <param name="enable.background.server" value="true"/> + </x-ant-call> + + <local name="app.relative.url"/> + <local name="build.resolve.relative.url"/> + + <!--calculate the relative path from the web root to the index page--> + <x-get-relative-path from="${build.web.root}" + to="${app.page.file}" + property="app.relative.url"/> + + <property name="build.resolve.relative.url" + value="${build.resolve.url}/${app.relative.url}"/> + + <x-sencha-command dir="${app.dir}" inheritall="true"> + <![CDATA[ + app + resolve + -mode=${build.resolve.mode} + -uri=${build.resolve.relative.url} + -tpl=${build.resolve.tpl} + -out=${build.resolve.file} + ]]> + </x-sencha-command> + <x-ant-call target="web-stop" unless="skip.web.start"/> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + restore + page + and + load-refs + -file=${build.resolve.file} + -defaultSrcName=@${build.tag.name} + -allowUnmatched=${build.resolve.allow.unmatched} + and + save + page + ]]> + </x-compile> + </target> + + <target name="-before-resolve"/> + <target name="-resolve"> + <x-ant-call target="-resolve-impl"/> + </target> + <target name="-after-resolve"/> + </project> \ No newline at end of file diff --git a/.sencha/app/resources-impl.xml b/.sencha/app/resources-impl.xml new file mode 100644 index 0000000..e6e00da --- /dev/null +++ b/.sencha/app/resources-impl.xml @@ -0,0 +1,25 @@ +<project name="resources-impl"> + <target name="-before-resources"/> + <target name="-after-resources"/> + + <!--'-init-compiler' defined in init-impl.xml--> + <target name="-resources" depends="-init-compiler"> + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + resources + -excludes=-all*.css + -out=${build.resources.dir} + and + resources + -model=true + -out=${build.dir} + ]]> + </x-compile> + </target> + + <!-- Legacy targets (implement -before-resources or -after-resources instead): --> + <target name="-after-copy-resources"/> + <target name="-after-inherit-resources"/> + <target name="-before-copy-resources"/> + <target name="-before-inherit-resources"/> +</project> diff --git a/.sencha/app/sass-impl.xml b/.sencha/app/sass-impl.xml new file mode 100644 index 0000000..0bc68ac --- /dev/null +++ b/.sencha/app/sass-impl.xml @@ -0,0 +1,225 @@ +<project name="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-compiler"> + <x-normalize-path + path="${build.dir}/resources" + property="image.search.path"/> + + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + restore + page + and + #only set variables for used classes eg. $include-class-name + sass + +class-name-vars + -variable=$image-search-path:'${image.search.path}' + -variable=$theme-name: '${app.theme}' !default + -output=${app.out.scss} + and + include + -all + and + # include etc and vars from all classes + sass + +etc + +vars + +append + -output=${app.out.scss} + and + restore + page + and + #only include rules from used classes + sass + +rules + +append + -output=${app.out.scss} + and + sass + +ruby + -output=${app.out.ruby} + ]]> + </x-compile> + <!-- + 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--> +<echo file="${app.bootstrap.css}"> +<![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}'; +]]> +</echo> + </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}"/> + + <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> + <echo>Preprocessing @{cssfile} to ${css.output.name}</echo> + <x-css-preprocess + file="@{cssfile}" + tofile="${css.output.name}" + options="${build.css.preprocessor.opts}"/> + </then> + </if> + <if> + <equals arg1="@{compress}" arg2="true"/> + <then> + <echo>Compressing @{cssfile} to ${css.output.name}</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"> + <x-run-if-true value="${enable.ext42.themes}"> + <x-ant-call target="-compile-sass"/> + + <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}"/> + + <x-compress-css-files dir="${build.dir}/resources" + prefix="${app.out.base.debug}" + outprefix="${app.out.base}" + preprocess="${build.css.preprocess}" + compress="${build.css.compress}"/> + </x-run-if-true> + </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> \ No newline at end of file diff --git a/.sencha/app/sencha.cfg b/.sencha/app/sencha.cfg new file mode 100644 index 0000000..d2ff666 --- /dev/null +++ b/.sencha/app/sencha.cfg @@ -0,0 +1,50 @@ +# The name of the application +app.name=amdaApp + +# The name of the framework used by the application (ext / touch) +app.framework=ext + +# The path(s) to application javascript sources (comma separated) +app.classpath=${app.dir}/js/app,${app.dir}/js/lib/ux,${app.dir}/js/lib/SAMP,${app.dir}/js/lib/ext-override.js + +# Output location for application build artifacts +app.build.dir=${workspace.build.dir}/${app.name} + +# The root namespace to use when mapping scss resources to js classes +# in the sass/src and sass/var directories +app.sass.namespace=amdaApp + +# Path to sass rule definition files corresponding to JavaScript classes. +app.sass.srcpath=${app.dir}/sass/src + +# Path to sass variable definition files corresponding to JavaScript classes. +app.sass.varpath=${app.dir}/sass/var + +# Path to sass function and mixin files. +app.sass.etcpath=${app.dir}/sass/etc/all.scss + +# Path to extra ruby files to include into the generated sass config.rb, +# <approot>/sass/config.rb will be included automatically if present and does +# not need to be specified. +# app.sass.rubypath= + +# The name of the package containing the theme scss for the app +app.theme=ext-theme-classic + +# This property can be modified to change the input and output page file +# used in the compile command. (eg: index.aspx, index.jsp ... ) +app.page.name=index.html + +# the input page file +app.page.file=${app.dir}/${app.page.name} + +# this property specifies a comma separated list of paths containing +# resources to copy to the build directory +app.resource.paths=${app.dir}/resources + +#============================================================================== +# Custom Properties - Place customizations below this line to avoid merge +# conflicts with newer versions + +app.framework.version=4.2.4.1664 +app.cmd.version=4.0.5.87 diff --git a/.sencha/app/slice-impl.xml b/.sencha/app/slice-impl.xml new file mode 100644 index 0000000..7bc5521 --- /dev/null +++ b/.sencha/app/slice-impl.xml @@ -0,0 +1,236 @@ +<project name="slice-impl"> + <!-- + Uses the compiler to generate a special theme-only scss file containing + rules for all framework / package / app components. This is then used + by the slicer example page to capture theme sprites + --> + <target name="-compile-slicer-sass" depends="-init-compiler"> + <x-normalize-path + path="${build.dir}/resources" + property="image.search.path"/> + + <x-compile refid="${compiler.ref.id}"> + <![CDATA[ + restore + page + and + include + -all + and + sass + +class-name-vars + +etc + +vars + +rules + -variable=$image-search-path:'${image.search.path}' + -variable=$theme-name: '${app.theme}' !default + -output=${app.example.scss} + and + restore + page + and + sass + +ruby + -output=${app.example.out.ruby} + ]]> + </x-compile> + + <x-get-relative-path from="${app.example.dir}" + to="${app.example.css}" + property="app.example.css.path"/> + +<!--update the app's example to point to the build output--> +<echo file="${app.example.css.file}"> +<![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 theme.html + * to load properly for image slicing (required to support non-CSS3 browsers + * such as IE9 and below). + */ +@import '${app.example.css.path}'; +]]> +</echo> + </target> + + <!-- + Compiles the scss file for the theme slicer page + --> + <target name="-compass-compile-slicer-css" depends="-compile-slicer-sass"> + <x-compass-compile + dir="${app.example.build.dir}" + trace="${compass.compile.trace}" + boring="${compass.compile.boring}" + force="${compass.compile.force}" + sassdir="${app.example.build.dir}" + cssdir="${app.example.build.dir}" + config="${app.example.compass.config}"/> + </target> + + <!-- + Generates theme images for Ext JS 4.2+ apps using theme packages + '-detect-app-build-properties' is defined in js-impl.xml + --> + <target name="-slice-app-theme" depends="-detect-app-build-properties"> + <x-ant-call target="-compass-compile-slicer-css"/> + <x-run-bootstrap file="${bootstrap.example.js}" + basedir="${bootstrap.base.path}"/> + + <echo>Capture theme image to ${build.capture.png}</echo> + <x-sencha-command> + <![CDATA[ + theme + capture + -page=${app.example.theme.html} + -image=${build.capture.png} + -manifest=${build.capture.json} + ]]> + </x-sencha-command> + + <echo>Slicing theme images to ${build.resources.dir}</echo> + <x-sencha-command> + <![CDATA[ + fs + slice + ${build.slice.options} + -image=${build.capture.png} + -manifest=${build.capture.json} + -out=${build.resources.dir} + ]]> + </x-sencha-command> + </target> + + <macrodef name="x-build-theme"> + <attribute name="theme" description="the path of the theme folder"/> + <attribute name="buildsass" default="false"/> + <attribute name="basetheme" default="default"/> + <sequential> + <local name="theme.name"/> + + <local name="framework.theme.dir"/> + <local name="tmp.theme.dir"/> + <local name="tmp.img.dir"/> + + <basename property="theme.name" file="@{theme}"/> + <local name="theme.base.name"/> + <property name="theme.base.name" value="${theme.name}"/> + <property name="theme.images.dir" location="@{theme}/images"/> + <property name="theme.page.dir" location="@{theme}/${theme.page.name}"/> + + <property name="tmp.res.dir" value="${app.resources.dir}"/> + <property name="tmp.theme.dir" value="${tmp.res.dir}/${theme.base.name}"/> + <property name="tmp.img.dir" value="${tmp.theme.dir}/images"/> + + <property name="app.res.dir" location="${app.dir}/packages"/> + <property name="app.img.dir" location="${app.res.dir}/images"/> + + <property name="framework.res.dir" location="${framework.dir}/resources"/> + <property name="framework.img.dir" location="${framework.res.dir}/themes/images"/> + <property name="framework.theme.dir" location="${framework.img.dir}/@{basetheme}"/> + + <echo>Copying base framework images from ${framework.theme.dir} to ${tmp.img.dir}</echo> + <copy todir="${tmp.img.dir}"> + <fileset dir="${framework.theme.dir}" includes="**/*"/> + </copy> + + <if> + <equals arg1="@{buildsass}" arg2="true"/> + <then> + <echo>Building sass for theme ${theme.name}</echo> + <!--x-build-sass is defined in sass-impl.xml--> + <x-build-sass theme="@{theme}"/> + </then> + </if> + + <echo>Slicing images for theme ${theme.name} to ${tmp.img.dir}</echo> + <x-sencha-command> + <![CDATA[ + theme + build + -data-file=${build.capture.json} + -image-file=${build.capture.png} + -page=${theme.page.dir} + -out=${tmp.img.dir} + ]]> + </x-sencha-command> + + <if> + <available file="${theme.images.dir}"/> + <then> + <echo>Copying user defined images from @{theme}/images to ${tmp.img.dir}</echo> + <copy todir="${tmp.img.dir}"> + <fileset dir="${theme.images.dir}" includes="**/*"/> + </copy> + </then> + </if> + + </sequential> + </macrodef> + + <!-- + This is a legacy macrodef for copying resources in theme-directory based themes. + It is provided to support building Ext JS 4.1 app themes + --> + <macrodef name="x-copy-resources"> + <sequential> + <copy todir="${build.resources.dir}" includeEmptyDirs="false"> + <fileset dir="${app.resources.dir}" + includes="**/*"/> + </copy> + + <x-get-relative-path from="${app.dir}" + to="${framework.dir}" + property="framework.rel.path"/> + + <copy toDir="${build.dir}/${framework.rel.path}"> + <fileset dir="${framework.dir}" + includes="src/ux/**/css/**/*"/> + </copy> + </sequential> + </macrodef> + + <!-- + Generates theme images for Ext JS 4.1 apps that use directory based + themes. These have been deprecated in favor of ExtJS 4.2 theme packages + --> + <target name="-slice-theme-directories"> + <echo>Processing theme directories from ${app.theme.dir}</echo> + <for param="theme"> + <dirset dir="${app.theme.dir}" includes="*"/> + <sequential> + <x-build-theme theme="@{theme}"/> + </sequential> + </for> + <x-copy-resources/> + </target> + + <target name="-slice-images"> + <x-run-if-true value="${enable.ext42.themes}"> + <x-ant-call target="-slice-app-theme"/> + </x-run-if-true> + <x-run-if-true value="${enable.ext41.themes}"> + <x-ant-call target="-slice-theme-directories"/> + </x-run-if-true> + </target> + + <target name="-before-slice"/> + <target name="-slice" depends="-slice-images"/> + <target name="-after-slice"/> + + <!-- + Refresh Individual Theme + --> + <target name="-before-refresh-theme"/> + <target name="-refresh-theme"> + <if> + <x-is-true value="${enable.ext41.themes}"/> + <then> + <local name="theme.dir"/> + <property name="theme.dir" location="${app.theme.dir}/${args.themeName}"/> + <x-build-theme theme="${theme.dir}" buildsass="true"/> + <x-copy-resources/> + </then> + </if> + </target> + <target name="-after-refresh-theme"/> +</project> \ No newline at end of file diff --git a/.sencha/app/testing.defaults.properties b/.sencha/app/testing.defaults.properties new file mode 100644 index 0000000..76b5072 --- /dev/null +++ b/.sencha/app/testing.defaults.properties @@ -0,0 +1,23 @@ +# ============================================================================= +# This file defines default property values that apply to the "testing" build +# environment. +# +# Please use testing.properties to customize these properties unless you want +# your customizations to be for all environments. In that case, you can instead +# override these properties in build.properties. +# +# The properties defined in this file take priority over defaults.properties +# but are lower priority than build.properties which in turn is lower priority +# than testing.properties. +# +# IMPORTANT - This file should not be modified by an app as it is overwritten +# during each app upgrade. +# ============================================================================= + +build.options.logger=yes + +build.options.debug=true + +build.css.compress=false + +app.microloader.name=testing.js diff --git a/.sencha/app/testing.properties b/.sencha/app/testing.properties new file mode 100644 index 0000000..39b1727 --- /dev/null +++ b/.sencha/app/testing.properties @@ -0,0 +1,8 @@ +# ============================================================================= +# This file provides an override point for default variables defined in +# testing.defaults.properties. These properties are only imported when building +# for the "testing" environment. +# +# Properties defined in this file take priority over build.properties but are +# only loaded for "testing" builds. +# ============================================================================= diff --git a/.sencha/app/watch-impl.xml b/.sencha/app/watch-impl.xml new file mode 100644 index 0000000..0799a18 --- /dev/null +++ b/.sencha/app/watch-impl.xml @@ -0,0 +1,53 @@ +<project name="watch-impl"> + + <target name="-watch-impl"> + <x-ant-call target="${build.trigger.targets}"/> + </target> + + <target name="-watch-compiler"> + <x-watch compilerRef="${compiler.ref.id}" targets="-watch-impl"/> + </target> + + <target name="-watch-theme-package-css"> + <x-compass-watch + 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}" + fork="true"/> + </target> + + <macrodef name="x-run-compass-watch"> + <attribute name="directory"/> + <sequential> + <x-compass-watch + rubyPath="${build.ruby.path}" + dir="@{directory}" + trace="${compass.compile.trace}" + boring="${compass.compile.boring}" + force="${compass.compile.force}" + fork="true"/> + </sequential> + </macrodef> + + <target name="-watch-sass-dir"> + <x-run-compass-watch directory="${app.sass.dir}"/> + </target> + + <target name="-watch-theme-dir"> + <local name="watch.sass.dir"/> + <property name="watch.sass.dir" + value="${app.theme.dir}/${watch.theme.name}/sass"/> + <x-run-compass-watch directory="${watch.sass.dir}"/> + </target> + + <target name="-before-watch" depends="init"/> + <target name="-watch" depends="app-build-impl.build"> + <x-ant-call target="${build.watcher.targets}"/> + </target> + <target name="-after-watch" depends="init"/> +</project> \ No newline at end of file diff --git a/.sencha/workspace/plugin.xml b/.sencha/workspace/plugin.xml new file mode 100644 index 0000000..54626e9 --- /dev/null +++ b/.sencha/workspace/plugin.xml @@ -0,0 +1,11 @@ +<project basedir="."> + <!-- + If framework.config.dir is already set, this next task will do nothing and + the original value will remain... but if framework.config.dir is not yet + defined, we are running in a workspace sans framework and so we need to go + directly to the plugin base from cmd.config.dir instead. + --> + <property name="framework.config.dir" value="${cmd.config.dir}"/> + + <import file="${framework.config.dir}/plugin.xml"/> +</project> diff --git a/.sencha/workspace/sencha.cfg b/.sencha/workspace/sencha.cfg new file mode 100644 index 0000000..cd2db5a --- /dev/null +++ b/.sencha/workspace/sencha.cfg @@ -0,0 +1,35 @@ +#Wed, 29 May 2019 09:59:25 +0200 +# ----------------------------------------------------------------------------- +# This file contains configuration options that apply to all applications in +# the workspace. By convention, these options start with "workspace." but any +# option can be set here. Options specified in an application's sencha.cfg will +# take priority over those values contained in this file. These options will +# take priority over configuration values in Sencha Cmd or a framework plugin. + +# ----------------------------------------------------------------------------- +# This configuration property (if set) is included by default in all compile +# commands executed according to this formulation: +# +# sencha compile -classpath=...,${framework.classpath},${workspace.classpath},${app.classpath} + +#workspace.classpath= + +#------------------------------------------------------------------------------ +# This is the folder for build outputs in the workspace + +workspace.build.dir=${workspace.dir}/build + +#------------------------------------------------------------------------------ +# This folder contains all generated and extracted packages. + +workspace.packages.dir=${workspace.dir}/packages + +workspace.theme.dir=${workspace.packages.dir}/${args.themeName} + +# ============================================================================= +# Customizations go below this divider to avoid merge conflicts on upgrade +# ============================================================================= + +workspace.cmd.version=4.0.5.87 + +ext.dir=/opt/tools/extjs diff --git a/app.json b/app.json new file mode 100644 index 0000000..7b27b6b --- /dev/null +++ b/app.json @@ -0,0 +1,8 @@ +{ + "name": "amdaApp", + + "requires": [ + ], + + "id": "b85c0816-e68e-4737-a78e-2bf642f76ff7" +} \ No newline at end of file diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..125e4c7 --- /dev/null +++ b/build.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<project name="amdaApp" default=".help"> + <!-- + The build-impl.xml file imported here contains the guts of the build process. It is + a great idea to read that file to understand how the process works, but it is best to + limit your changes to this file. + --> + <import file="${basedir}/.sencha/app/build-impl.xml"/> + + <!-- + The following targets can be provided to inject logic before and/or after key steps + of the build process: + + The "init-local" target is used to initialize properties that may be personalized + for the local machine. + + <target name="-before-init-local"/> + <target name="-after-init-local"/> + + The "clean" target is used to clean build output from the build.dir. + + <target name="-before-clean"/> + <target name="-after-clean"/> + + The general "init" target is used to initialize all other properties, including + those provided by Sencha Cmd. + + <target name="-before-init"/> + <target name="-after-init"/> + + The "page" target performs the call to Sencha Cmd to build the 'all-classes.js' file. + + <target name="-before-page"/> + <target name="-after-page"/> + + The "build" target performs the call to Sencha Cmd to build the application. + + <target name="-before-build"/> + <target name="-after-build"/> + --> + +</project> -- libgit2 0.21.2