TT#4307 ngcp-csc theme roller

- module scaffolding, colors, font and logo customisation

Change-Id: I3a11b66c51e29aed0c5e6d2a8b3ec709eb576932
changes/61/9861/5
Carlo 9 years ago
parent 0e165d6553
commit a43901f8be

@ -311,7 +311,7 @@
// you can add "?platformTags=fashion:1" to the URL to enable Fashion
// without changing this file.
//
// "fashion"
"fashion"
]
},

File diff suppressed because it is too large Load Diff

@ -1,973 +0,0 @@
// here, the extra check for window['Ext'] is needed for use with cmd-test
// code injection. we need to make that this file will sync up with page global
// scope to avoid duplicate Ext.Boot state. That check is after the initial Ext check
// to allow the sandboxing template to inject an appropriate Ext var and prevent the
// global detection.
var Ext = Ext || window['Ext'] || {};
//<editor-fold desc="Microloader">
/**
* @class Ext.Microloader
* @private
* @singleton
*/
Ext.Microloader = Ext.Microloader || (function () {
var Boot = Ext.Boot,
//<debug>
_debug = function (message) {
//console.log(message);
},
//</debug>
_warn = function (message) {
console.log("[WARN] " + message);
},
_privatePrefix = '_ext:' + location.pathname,
/**
* @method getStorageKey
* The Following combination is used to create isolated local storage keys
* '_ext' is used to scope all the local storage keys that we internally by Ext
* 'location.pathname' is used to force each assets to cache by an absolute URL (/build/MyApp) (dev vs prod)
* 'url' is used to force each asset to cache relative to the page (app.json vs resources/app.css)
* 'profileId' is used to differentiate the builds of an application (neptune vs crisp)
* 'Microloader.appId' is unique to the application and will differentiate apps on the same host (dev mode running app watch against multiple apps)
*/
getStorageKey = function(url, profileId) {
return _privatePrefix + url + '-' + (profileId ? profileId + '-' : '') + Microloader.appId;
},
postProcessor, _storage;
try {
_storage = window['localStorage'];
} catch(ex) {
// ignore
}
var _cache = window['applicationCache'],
// Local Storage Controller
LocalStorage = {
clearAllPrivate: function(manifest) {
if(_storage) {
//Remove the entry for the manifest first
_storage.removeItem(manifest.key);
var i, key,
removeKeys = [],
suffix = manifest.profile + '-' + Microloader.appId,
ln = _storage.length;
for (i = 0; i < ln; i++) {
key = _storage.key(i);
// If key starts with the private key and the suffix is present we can clear this entry
if (key.indexOf(_privatePrefix) === 0 && key.indexOf(suffix) !== -1) {
removeKeys.push(key);
}
}
for(i in removeKeys) {
//<debug>
_debug("Removing "+ removeKeys[i] + " from Local Storage");
//</debug>
_storage.removeItem(removeKeys[i]);
}
}
},
/**
* @private
*/
retrieveAsset: function (key) {
try {
return _storage.getItem(key);
}
catch (e) {
// Private browsing mode
return null;
}
},
setAsset: function(key, content) {
try {
if (content === null || content == '') {
_storage.removeItem(key);
} else {
_storage.setItem(key, content);
}
}
catch (e) {
if (_storage && e.code == e.QUOTA_EXCEEDED_ERR) {
//<debug>
_warn("LocalStorage Quota exceeded, cannot store " + key + " locally");
//</debug>
}
}
}
};
var Asset = function (cfg) {
if (typeof cfg.assetConfig === 'string') {
this.assetConfig = {
path: cfg.assetConfig
};
} else {
this.assetConfig = cfg.assetConfig;
}
this.type = cfg.type;
this.key = getStorageKey(this.assetConfig.path, cfg.manifest.profile);
if (cfg.loadFromCache) {
this.loadFromCache();
}
};
Asset.prototype = {
shouldCache: function() {
return _storage && this.assetConfig.update && this.assetConfig.hash && !this.assetConfig.remote;
},
is: function (asset) {
return (!!asset && this.assetConfig && asset.assetConfig && (this.assetConfig.hash === asset.assetConfig.hash))
},
cache: function(content) {
if (this.shouldCache()) {
LocalStorage.setAsset(this.key, content || this.content);
}
},
uncache: function() {
LocalStorage.setAsset(this.key, null);
},
updateContent: function (content) {
this.content = content;
},
getSize: function () {
return this.content ? this.content.length : 0;
},
loadFromCache: function() {
if (this.shouldCache()) {
this.content = LocalStorage.retrieveAsset(this.key);
}
}
};
var Manifest = function (cfg) {
if (typeof cfg.content === "string") {
this.content = JSON.parse(cfg.content);
} else {
this.content = cfg.content;
}
this.assetMap = {};
this.url = cfg.url;
this.fromCache = !!cfg.cached;
this.assetCache = !(cfg.assetCache === false);
this.key = getStorageKey(this.url);
// Pull out select properties for repetitive use
this.profile = this.content.profile;
this.hash = this.content.hash;
this.loadOrder = this.content.loadOrder;
this.deltas = this.content.cache ? this.content.cache.deltas : null;
this.cacheEnabled = this.content.cache ? this.content.cache.enable : false;
this.loadOrderMap = (this.loadOrder) ? Boot.createLoadOrderMap(this.loadOrder) : null;
var tags = this.content.tags,
platformTags = Ext.platformTags;
if (tags) {
if (tags instanceof Array) {
for (var i = 0; i < tags.length; i++) {
platformTags[tags[i]] = true;
}
} else {
Boot.apply(platformTags, tags);
}
// re-apply the query parameters, so that the params as specified
// in the url always has highest priority
Boot.apply(platformTags, Boot.loadPlatformsParam());
}
// Convert all assets into Assets
this.js = this.processAssets(this.content.js, 'js');
this.css = this.processAssets(this.content.css, 'css');
};
Manifest.prototype = {
processAsset: function(assetConfig, type) {
var processedAsset = new Asset({
manifest: this,
assetConfig: assetConfig,
type: type,
loadFromCache: this.assetCache
});
this.assetMap[assetConfig.path] = processedAsset;
return processedAsset;
},
processAssets: function(assets, type) {
var results = [],
ln = assets.length,
i, assetConfig;
for (i = 0; i < ln; i++) {
assetConfig = assets[i];
results.push(this.processAsset(assetConfig, type));
}
return results;
},
useAppCache: function() {
return true;
},
// Concatenate all assets for easy access
getAssets: function () {
return this.css.concat(this.js);
},
getAsset: function (path) {
return this.assetMap[path];
},
shouldCache: function() {
return this.hash && this.cacheEnabled;
},
cache: function(content) {
if (this.shouldCache()) {
LocalStorage.setAsset(this.key, JSON.stringify(content || this.content));
}
//<debug>
else {
_debug("Manifest caching is disabled.");
}
//</debug>
},
is: function(manifest) {
//<debug>
_debug("Testing Manifest: " + this.hash + " VS " + manifest.hash);
//</debug>
return this.hash === manifest.hash;
},
// Clear the manifest from local storage
uncache: function() {
LocalStorage.setAsset(this.key, null);
},
exportContent: function() {
return Boot.apply({
loadOrderMap: this.loadOrderMap
}, this.content);
}
};
/**
* Microloader
* @type {Array}
* @private
*/
var _listeners = [],
_loaded = false,
Microloader = {
init: function () {
Ext.microloaded = true;
// data-app is in the dev template for an application and is also
// injected into the app my CMD for production
// We use this to prefix localStorage cache to prevent collisions
var microloaderElement = document.getElementById('microloader');
Microloader.appId = microloaderElement ? microloaderElement.getAttribute('data-app') : '';
if (Ext.beforeLoad) {
postProcessor = Ext.beforeLoad(Ext.platformTags);
}
var readyHandler = Ext._beforereadyhandler;
Ext._beforereadyhandler = function () {
if (Ext.Boot !== Boot) {
Ext.apply(Ext.Boot, Boot);
Ext.Boot = Boot;
}
if (readyHandler) {
readyHandler();
}
};
},
applyCacheBuster: function(url) {
var tstamp = new Date().getTime(),
sep = url.indexOf('?') === -1 ? '?' : '&';
url = url + sep + "_dc=" + tstamp;
return url;
},
run: function() {
Microloader.init();
var manifest = Ext.manifest;
if (typeof manifest === "string") {
var extension = ".json",
url = manifest.indexOf(extension) === manifest.length - extension.length
? manifest
: manifest + ".json",
key = getStorageKey(url),
content = LocalStorage.retrieveAsset(key);
// Manifest found in local storage, use this for immediate boot except in PhantomJS environments for building.
if (content) {
//<debug>
_debug("Manifest file, '" + url + "', was found in Local Storage");
//</debug>
manifest = new Manifest({
url: url,
content: content,
cached: true
});
if (postProcessor) {
postProcessor(manifest);
}
Microloader.load(manifest);
// Manifest is not in local storage. Fetch it from the server
} else {
//<debug>
_debug("Manifest file was not found in Local Storage, loading: " + url);
//</debug>
if (location.href.indexOf('file:/') === 0) {
Manifest.url = Microloader.applyCacheBuster(url + 'p');
Boot.load(Manifest.url);
}
else {
Boot.fetch(Microloader.applyCacheBuster(url), function(result) {
Microloader.setManifest(result.content);
});
}
}
// Embedded Manifest into JS file
} else {
//<debug>
_debug("Manifest was embedded into application javascript file");
//</debug>
manifest = new Manifest({
content: manifest
});
Microloader.load(manifest);
}
},
/**
*
* @param cfg
*/
setManifest: function(cfg) {
var manifest = new Manifest({
url: Manifest.url,
content: cfg
});
manifest.cache();
if (postProcessor) {
postProcessor(manifest);
}
Microloader.load(manifest);
},
/**
* @param {Manifest} manifest
*/
load: function (manifest) {
Microloader.urls = [];
Microloader.manifest = manifest;
Ext.manifest = Microloader.manifest.exportContent();
var assets = manifest.getAssets(),
cachedAssets = [],
asset, i, len, include, entry;
for (len = assets.length, i = 0; i < len; i++) {
asset = assets[i];
include = Microloader.filterAsset(asset);
if (include) {
// Asset is using the localStorage caching system
if (manifest.shouldCache() && asset.shouldCache()) {
// Asset already has content from localStorage, instantly seed that into boot
if (asset.content) {
//<debug>
_debug("Asset: " + asset.assetConfig.path + " was found in local storage. No remote load for this file");
//</debug>
entry = Boot.registerContent(asset.assetConfig.path, asset.type, asset.content);
if (entry.evaluated) {
_warn("Asset: " + asset.assetConfig.path + " was evaluated prior to local storage being consulted.");
}
//load via AJAX and seed content into Boot
} else {
//<debug>
_debug("Asset: " + asset.assetConfig.path + " was NOT found in local storage. Adding to load queue");
//</debug>
cachedAssets.push(asset);
}
}
Microloader.urls.push(asset.assetConfig.path);
Boot.assetConfig[asset.assetConfig.path] = Boot.apply({type: asset.type}, asset.assetConfig);
}
}
// If any assets are using the caching system and do not have local versions load them first via AJAX
if (cachedAssets.length > 0) {
Microloader.remainingCachedAssets = cachedAssets.length;
while (cachedAssets.length > 0) {
asset = cachedAssets.pop();
//<debug>
_debug("Preloading/Fetching Cached Assets from: " + asset.assetConfig.path);
//</debug>
Boot.fetch(asset.assetConfig.path, (function(asset) {
return function(result) {
Microloader.onCachedAssetLoaded(asset, result);
}
})(asset));
}
} else {
Microloader.onCachedAssetsReady();
}
},
// Load the asset and seed its content into Boot to be evaluated in sequence
onCachedAssetLoaded: function (asset, result) {
var checksum;
result = Microloader.parseResult(result);
Microloader.remainingCachedAssets--;
if (!result.error) {
checksum = Microloader.checksum(result.content, asset.assetConfig.hash);
if (!checksum) {
_warn("Cached Asset '" + asset.assetConfig.path + "' has failed checksum. This asset will be uncached for future loading");
// Un cache this asset so it is loaded next time
asset.uncache();
}
//<debug>
_debug("Checksum for Cached Asset: " + asset.assetConfig.path + " is " + checksum);
//</debug>
Boot.registerContent(asset.assetConfig.path, asset.type, result.content);
asset.updateContent(result.content);
asset.cache();
} else {
_warn("There was an error pre-loading the asset '" + asset.assetConfig.path + "'. This asset will be uncached for future loading");
// Un cache this asset so it is loaded next time
asset.uncache();
}
if (Microloader.remainingCachedAssets === 0) {
Microloader.onCachedAssetsReady();
}
},
onCachedAssetsReady: function(){
Boot.load({
url: Microloader.urls,
loadOrder: Microloader.manifest.loadOrder,
loadOrderMap: Microloader.manifest.loadOrderMap,
sequential: true,
success: Microloader.onAllAssetsReady,
failure: Microloader.onAllAssetsReady
});
},
onAllAssetsReady: function() {
_loaded = true;
Microloader.notify();
if (navigator.onLine !== false) {
//<debug>
_debug("Application is online, checking for updates");
//</debug>
Microloader.checkAllUpdates();
}
else {
//<debug>
_debug("Application is offline, adding online listener to check for updates");
//</debug>
if(window['addEventListener']) {
window.addEventListener('online', Microloader.checkAllUpdates, false);
}
}
},
onMicroloaderReady: function (listener) {
if (_loaded) {
listener();
} else {
_listeners.push(listener);
}
},
/**
* @private
*/
notify: function () {
//<debug>
_debug("notifying microloader ready listeners.");
//</debug>
var listener;
while((listener = _listeners.shift())) {
listener();
}
},
// Delta patches content
patch: function (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('');
},
checkAllUpdates: function() {
//<debug>
_debug("Checking for All Updates");
//</debug>
if(window['removeEventListener']) {
window.removeEventListener('online', Microloader.checkAllUpdates, false);
}
if(_cache) {
Microloader.checkForAppCacheUpdate();
}
// Manifest came from a cached instance, check for updates
if (Microloader.manifest.fromCache) {
Microloader.checkForUpdates();
}
},
checkForAppCacheUpdate: function() {
//<debug>
_debug("Checking App Cache status");
//</debug>
if (_cache.status === _cache.UPDATEREADY || _cache.status === _cache.OBSOLETE) {
//<debug>
_debug("App Cache is already in an updated");
//</debug>
Microloader.appCacheState = 'updated';
} else if (_cache.status !== _cache.IDLE && _cache.status !== _cache.UNCACHED) {
//<debug>
_debug("App Cache is checking or downloading updates, adding listeners");
//</debug>
Microloader.appCacheState = 'checking';
_cache.addEventListener('error', Microloader.onAppCacheError);
_cache.addEventListener('noupdate', Microloader.onAppCacheNotUpdated);
_cache.addEventListener('cached', Microloader.onAppCacheNotUpdated);
_cache.addEventListener('updateready', Microloader.onAppCacheReady);
_cache.addEventListener('obsolete', Microloader.onAppCacheObsolete);
} else {
//<debug>
_debug("App Cache is current or uncached");
//</debug>
Microloader.appCacheState = 'current';
}
},
checkForUpdates: function() {
// Fetch the Latest Manifest from the server
//<debug>
_debug("Checking for updates at: " + Microloader.manifest.url);
//</debug>
Boot.fetch(Microloader.applyCacheBuster(Microloader.manifest.url), Microloader.onUpdatedManifestLoaded);
},
onAppCacheError: function(e) {
_warn(e.message);
Microloader.appCacheState = 'error';
Microloader.notifyUpdateReady();
},
onAppCacheReady: function() {
_cache.swapCache();
Microloader.appCacheUpdated();
},
onAppCacheObsolete: function() {
Microloader.appCacheUpdated();
},
appCacheUpdated: function() {
//<debug>
_debug("App Cache Updated");
//</debug>
Microloader.appCacheState = 'updated';
Microloader.notifyUpdateReady();
},
onAppCacheNotUpdated: function() {
//<debug>
_debug("App Cache Not Updated Callback");
//</debug>
Microloader.appCacheState = 'current';
Microloader.notifyUpdateReady();
},
filterAsset: function(asset) {
var cfg = (asset && asset.assetConfig) || {};
if(cfg.platform || cfg.exclude) {
return Boot.filterPlatform(cfg.platform, cfg.exclude);
}
return true;
},
onUpdatedManifestLoaded: function (result) {
result = Microloader.parseResult(result);
if (!result.error) {
var currentAssets, newAssets, currentAsset, newAsset, prop,
assets, deltas, deltaPath, include,
updatingAssets = [],
manifest = new Manifest({
url: Microloader.manifest.url,
content: result.content,
assetCache: false
});
Microloader.remainingUpdatingAssets = 0;
Microloader.updatedAssets = [];
Microloader.removedAssets = [];
Microloader.updatedManifest = null;
Microloader.updatedAssetsReady = false;
// If the updated manifest has turned off caching we need to clear out all local storage
// and trigger a appupdate as all content is now uncached
if (!manifest.shouldCache()) {
//<debug>
_debug("New Manifest has caching disabled, clearing out any private storage");
//</debug>
Microloader.updatedManifest = manifest;
LocalStorage.clearAllPrivate(manifest);
Microloader.onAllUpdatedAssetsReady();
return;
}
// Manifest itself has changed
if (!Microloader.manifest.is(manifest)) {
Microloader.updatedManifest = manifest;
currentAssets = Microloader.manifest.getAssets();
newAssets = manifest.getAssets();
// Look through new assets for assets that do not exist or assets that have different versions
for (prop in newAssets) {
newAsset = newAssets[prop];
currentAsset = Microloader.manifest.getAsset(newAsset.assetConfig.path);
include = Microloader.filterAsset(newAsset);
if (include && (!currentAsset || (newAsset.shouldCache() && (!currentAsset.is(newAsset))))) {
//<debug>
_debug("New/Updated Version of Asset: " + newAsset.assetConfig.path + " was found in new manifest");
//</debug>
updatingAssets.push({_new: newAsset, _current: currentAsset});
}
}
// Look through current assets for stale/old assets that have been removed
for (prop in currentAssets) {
currentAsset = currentAssets[prop];
newAsset = manifest.getAsset(currentAsset.assetConfig.path);
//New version of this asset has been filtered out
include = !Microloader.filterAsset(newAsset);
if (!include || !newAsset || (currentAsset.shouldCache() && !newAsset.shouldCache())) {
//<debug>
_debug("Asset: " + currentAsset.assetConfig.path + " was not found in new manifest, has been filtered out or has been switched to not cache. Marked for removal");
//</debug>
Microloader.removedAssets.push(currentAsset);
}
}
// Loop through all assets that need updating
if (updatingAssets.length > 0) {
Microloader.remainingUpdatingAssets = updatingAssets.length;
while (updatingAssets.length > 0) {
assets = updatingAssets.pop();
newAsset = assets._new;
currentAsset = assets._current;
// Full Updates will simply download the file and replace its current content
if (newAsset.assetConfig.update === "full" || !currentAsset) {
//<debug>
if (newAsset.assetConfig.update === "delta") {
_debug("Delta updated asset found without current asset available: " + newAsset.assetConfig.path + " fetching full file");
} else {
_debug("Full update found for: " + newAsset.assetConfig.path + " fetching");
}
//</debug>
// Load the asset and cache its its content into Boot to be evaluated in sequence
Boot.fetch(newAsset.assetConfig.path, (function (asset) {
return function (result) {
Microloader.onFullAssetUpdateLoaded(asset, result)
};
}(newAsset))
);
// Delta updates will be given a delta patch
} else if (newAsset.assetConfig.update === "delta") {
deltas = manifest.deltas;
deltaPath = deltas + "/" + newAsset.assetConfig.path + "/" + currentAsset.assetConfig.hash + ".json";
// Fetch the Delta Patch and update the contents of the asset
//<debug>
_debug("Delta update found for: " + newAsset.assetConfig.path + " fetching");
//</debug>
Boot.fetch(deltaPath,
(function (asset, oldAsset) {
return function (result) {
Microloader.onDeltaAssetUpdateLoaded(asset, oldAsset, result)
};
}(newAsset, currentAsset))
);
}
}
} else {
//<debug>
_debug("No Assets needed updating");
//</debug>
Microloader.onAllUpdatedAssetsReady();
}
} else {
//<debug>
_debug("Manifest files have matching hash's");
//</debug>
Microloader.onAllUpdatedAssetsReady();
}
} else {
_warn("Error loading manifest file to check for updates");
Microloader.onAllUpdatedAssetsReady();
}
},
onFullAssetUpdateLoaded: function(asset, result) {
var checksum;
result = Microloader.parseResult(result);
Microloader.remainingUpdatingAssets--;
if (!result.error) {
checksum = Microloader.checksum(result.content, asset.assetConfig.hash);
//<debug>
_debug("Checksum for Full asset: " + asset.assetConfig.path + " is " + checksum);
//</debug>
if (!checksum) {
//<debug>
_debug("Full Update Asset: " + asset.assetConfig.path + " has failed checksum. This asset will be uncached for future loading");
//</debug>
// uncache this asset as there is a new version somewhere that has not been loaded.
asset.uncache();
} else {
asset.updateContent(result.content);
Microloader.updatedAssets.push(asset);
}
} else {
//<debug>
_debug("Error loading file at" + asset.assetConfig.path + ". This asset will be uncached for future loading");
//</debug>
// uncache this asset as there is a new version somewhere that has not been loaded.
asset.uncache();
}
if (Microloader.remainingUpdatingAssets === 0) {
Microloader.onAllUpdatedAssetsReady();
}
},
onDeltaAssetUpdateLoaded: function(asset, oldAsset, result) {
var json, checksum, content;
result = Microloader.parseResult(result);
Microloader.remainingUpdatingAssets--;
if (!result.error) {
//<debug>
_debug("Delta patch loaded successfully, patching content");
//</debug>
try {
json = JSON.parse(result.content);
content = Microloader.patch(oldAsset.content, json);
checksum = Microloader.checksum(content, asset.assetConfig.hash);
//<debug>
_debug("Checksum for Delta Patched asset: " + asset.assetConfig.path + " is " + checksum);
//</debug>
if (!checksum) {
//<debug>
_debug("Delta Update Asset: " + asset.assetConfig.path + " has failed checksum. This asset will be uncached for future loading");
//</debug>
// uncache this asset as there is a new version somewhere that has not been loaded.
asset.uncache();
} else {
asset.updateContent(content);
Microloader.updatedAssets.push(asset);
}
} catch (e) {
_warn("Error parsing delta patch for " + asset.assetConfig.path + " with hash " + oldAsset.assetConfig.hash + " . This asset will be uncached for future loading");
// uncache this asset as there is a new version somewhere that has not been loaded.
asset.uncache();
}
} else {
_warn("Error loading delta patch for " + asset.assetConfig.path + " with hash " + oldAsset.assetConfig.hash + " . This asset will be uncached for future loading");
// uncache this asset as there is a new version somewhere that has not been loaded.
asset.uncache();
}
if (Microloader.remainingUpdatingAssets === 0) {
Microloader.onAllUpdatedAssetsReady();
}
},
//TODO: Make this all transaction based to allow for reverting if quota is exceeded
onAllUpdatedAssetsReady: function() {
var asset;
Microloader.updatedAssetsReady = true;
if (Microloader.updatedManifest) {
while (Microloader.removedAssets.length > 0) {
asset = Microloader.removedAssets.pop();
//<debug>
_debug("Asset: " + asset.assetConfig.path + " was removed, un-caching");
//</debug>
asset.uncache();
}
if (Microloader.updatedManifest) {
//<debug>
_debug("Manifest was updated, re-caching");
//</debug>
Microloader.updatedManifest.cache();
}
while (Microloader.updatedAssets.length > 0) {
asset = Microloader.updatedAssets.pop();
//<debug>
_debug("Asset: " + asset.assetConfig.path + " was updated, re-caching");
//</debug>
asset.cache();
}
}
Microloader.notifyUpdateReady();
},
notifyUpdateReady: function () {
if (Microloader.appCacheState !== 'checking' && Microloader.updatedAssetsReady) {
if (Microloader.appCacheState === 'updated' || Microloader.updatedManifest) {
//<debug>
_debug("There was an update here you will want to reload the app, trigger an event");
//</debug>
Microloader.appUpdate = {
updated: true,
app: Microloader.appCacheState === 'updated',
manifest: Microloader.updatedManifest && Microloader.updatedManifest.exportContent()
};
Microloader.fireAppUpdate();
}
//<debug>
else {
_debug("AppCache and LocalStorage Cache are current, no updating needed");
Microloader.appUpdate = {};
}
//</debug>
}
},
fireAppUpdate: function() {
if (Ext.GlobalEvents) {
// We defer dispatching this event slightly in order to let the application finish loading
// as we are still very early in the lifecycle
Ext.defer(function() {
Ext.GlobalEvents.fireEvent('appupdate', Microloader.appUpdate);
}, 1000);
}
},
checksum: function(content, hash) {
if(!content || !hash) {
return false;
}
var passed = true,
hashLn = hash.length,
checksumType = content.substring(0, 1);
if (checksumType == '/') {
if (content.substring(2, hashLn + 2) !== hash) {
passed = false;
}
} else if (checksumType == 'f') {
if (content.substring(10, hashLn + 10) !== hash) {
passed = false;
}
} else if (checksumType == '.') {
if (content.substring(1, hashLn + 1) !== hash) {
passed = false;
}
}
return passed;
},
parseResult: function(result) {
var rst = {};
if ((result.exception || result.status === 0) && !Boot.env.phantom) {
rst.error = true;
} else if ((result.status >= 200 && result.status < 300) || result.status === 304
|| Boot.env.phantom
|| (result.status === 0 && result.content.length > 0)
) {
rst.content = result.content;
} else {
rst.error = true;
}
return rst;
}
};
return Microloader;
}());
/**
* @type {String/Object}
*/
Ext.manifest = Ext.manifest || "bootstrap";
Ext.Microloader.run();

@ -1,30 +0,0 @@
# ./controller
This folder contains the application's global controllers. ViewControllers are located
alongside their respective view class in `"./view"`. These controllers are used for routing
and other activities that span all views.
# ./model
This folder contains the application's (data) Model classes.
# ./view
This folder contains the views as well as ViewModels and ViewControllers depending on the
application's architecture. Pure MVC applications may not have ViewModels, for example. For
MVCVM applications or MVC applications that use ViewControllers, the following directory
structure is recommended:
./view/
foo/ # Some meaningful grouping of one or more views
Foo.js # The view class
FooController.js # The controller for Foo (a ViewController)
FooModel.js # The ViewModel for Foo
This structure helps keep these closely related classes together and easily identifiable in
most tabbed IDE's or text editors.
# ./store
This folder contains any number of store instances or types that can then be reused in the
application.

@ -1,433 +0,0 @@
{
/**
* The relative path to the appliaction's markup file (html, jsp, asp, etc.)
*/
"indexHtmlPath": "index.html",
/**
* List of all JavaScript assets in the right execution order.
*
* Each item is an object with the following format:
*
* {
* // Path to file. If the file is local this must be a relative path from
* // this app.json file.
* //
* "path": "path/to/script.js", // REQUIRED
*
* // Set to true on one file to indicate that it should become the container
* // for the concatenated classes.
* //
* "bundle": false, // OPTIONAL
*
* // Set to true to include this file in the concatenated classes.
* //
* "includeInBundle": false, // OPTIONAL
*
* // Specify as true if this file is remote and should not be copied into the
* // build folder. Defaults to false for a local file which will be copied.
* //
* "remote": false, // OPTIONAL
*
* // If not specified, this file will only be loaded once, and cached inside
* // localStorage until this value is changed. You can specify:
* //
* // - "delta" to enable over-the-air delta update for this file
* // - "full" means full update will be made when this file changes
* //
* "update": "", // OPTIONAL
*
* // A value of true indicates that is a development mode only dependency.
* // These files will not be copied into the build directory or referenced
* // in the generate app.json manifest for the micro loader.
* //
* "bootstrap": false // OPTIONAL
* }
*
* To use ext-all-debug.js instead of explicitly loading all framework files at
* dev time, add the following entry to this js list :
*
* {
* "path": "${ext.dir}/build/ext-all-debug.js"
* }
*
* Note: when using ext-all-debug.js, you also need to disable the loadOrder portion
* of the bootstrap manifest. See the "bootstrap" property for details.
*
*/
"js": [
{
"path": "app.js",
"bundle": true
}
],
/**
* List of all CSS assets in the right inclusion order.
*
* Each item is an object with the following format:
*
* {
* // Path to file. If the file is local this must be a relative path from
* // this app.json file.
* //
* "path": "path/to/stylesheet.css", // REQUIRED
*
* // Specify as true if this file is remote and should not be copied into the
* // build folder. Defaults to false for a local file which will be copied.
* //
* "remote": false, // OPTIONAL
*
* // If not specified, this file will only be loaded once, and cached inside
* // localStorage until this value is changed. You can specify:
* //
* // - "delta" to enable over-the-air delta update for this file
* // - "full" means full update will be made when this file changes
* //
* "update": "" // OPTIONAL
* }
*/
"css": [
{
// this entry uses an ant variable that is the calculated
// value of the generated output css file for the app,
// defined in .sencha/app/defaults.properties
"path": "${build.out.css.path}",
"bundle": true
}
],
/**
* This option is used to configure the dynamic loader. At present these options
* are supported.
*
* "loader": {
* // This property controls how the loader manages caching for requests:
* //
* // - true: allows requests to receive cached responses
* // - false: disable cached responses by adding a random "cache buster"
* // - other: a string (such as the build.timestamp shown here) to allow
* // requests to be cached for this build.
* //
* "cache": "${build.timestamp}",
*
* // When "cache" is not true, this value is the request parameter used
* // to control caching.
* //
* "cacheParam": "_dc"
* },
*
*/
/**
* "compressor": {
* "type": "closure",
* "languageIn": "ECMASCRIPT5"
* }
*
*/
"compressor": null,
/**
* override objects for setting build environment specific
* settings.
*/
"production": {
"compressor": {
"type": "yui"
},
"cache": {
"enable": true
}
},
"testing": {
},
"development": {
},
/**
* Controls the output structure of bootstrap artifacts. May be specified by a string:
*
* "bootstrap": "${app.dir}"
*
* to adjust the base path for all bootstrap objects, or expanded into object form:
*
* "bootstrap": {
* "base": "${app.dir},
* "manifest": "bootstrap.json",
* "microloader": "bootstrap.js",
* "css": "bootstrap.css"
* }
*
* To disable "loadOrder" metadata when using a framwork build file such as
* ext-all-debug.js, use the expanded form of the manifest property:
*
* "bootstrap": {
* "manifest": {
* "path": "bootstrap.json",
* "exclude": "loadOrder"
* }
* }
*
*/
"bootstrap":{
"base": "${app.dir}"
},
/**
* Controls the output directory for build resources. May be set with
* either a string:
*
* output: ""
*
* or an object containing values for various types of
* build artifacts:
*
* "output": {
* "base": "${workspace.build.dir}/${build.environment}/${app.name}",
* "page": {
* "path": "../index.html",
* "enable": false
* },
* "css": "${app.output.resources}/${app.name}-all.css",
* "js": {
* "path": "app.js",
* "enable": true,
* "optimize": {
* "defines": true,
* "callParent": true,
* "requires": true,
* }
* },
* "microloader": {
* "path": "microloader.js",
* "embed": true,
* "enable": true
* },
* "manifest": {
* "path": "app.json",
* "embed": false,
* "enable": "${app.output.microloader.enable}"
* },
* "resources": "resources",
* "slicer": {
* "path": "${app.output.resources}/images",
* "enable": false
* },
* // Setting the "enable" property of this object to a Truthy value will cause a Application Cache
* // manifest file to be generated based on this files appCache object. This file will then be injected
* // into the index.html file of the built application
* "appCache":{
* "enable": false"
* }
* }
*/
"output": {
"base": "${workspace.build.dir}/${build.environment}/${app.name}",
"appCache": {
"enable": false
},
"microloader": {
"enable": true
}
},
/**
* Controls for localStorage caching
* "cache": {
* // This property controls whether localStorage caching of this manifest file is on or off.
* // if disabled no deltas will be generated during a build and full updates will be disabled
* "enable": false,
*
* // This property allows for global toggle of deltas.
* // If set to a string the value will be used as the path to where deltas will be generated relative to you build.
* // If set to a Truthy Value the default path ok "deltas" will be used
* // If set to a Falsey value or if this property is not present deltas will be disabled and not generated.
* //
* "deltas": "deltas"
* }
*/
"cache": {
"enable": false,
"deltas": "deltas"
},
/**
* This sets the default output folder for cordova packagers builds
*
* // Cordova Packager Config options
* "config": {
*
* // 'name' This is the name of your cordova application. This will default to your Sencha App name.
* // This is only used once during Cordova app creation and cannot be changed after.
* "name": "AppNameForCordova",
*
* // 'id' This will be your package name for Android and your Bundle Identifier for iOS
* // This is only used once during Cordova app creation and cannot be changed after
* "id": "com.domain.AppName",
*
* // 'platform' can be a platform or a space seperated list of platform (ios android)
* // platform supported on mac: ios, amazon-fireos, android, blackberry10, firefoxos
* // platform supported on win: wp7, wp8, windows8, amazon-fireos, android, blackberry10, firefoxos
* "platform": "ios"
*
* // 'verbose' This boolean will determine if all cordova commands will have verbose output or not.
* // to properly see this run sencha command with the '-info' flag like the following
* // sencha -info app run [buildname]
*
* // 'path' The path this builds cordova project should be created in.
* // This defaults to your {app.dir}/cordova
*
* // 'target' This is the target for emulator/simulator commands.
* // On Android is the name of your Android Virtual Device
* // For iOS it is one of the following:
* // "iPhone (Retina 3.5-inch)"
* // "iPhone (Retina 4-inch)"
* // "iPhone"
* // "iPad"
* // "iPad (Retina)"
*
*/
"cordova": {
"config": {
"name": "${app.name}",
"id": "com.domain.${app.name}",
"verbose": false,
"target": "",
"path": "${app.dir}/cordova"
},
"js": [
{
"path": "cordova.js",
"remote": true,
"priority": 1000
}
],
"microloader": "${app.config.dir}/Microloader.js",
"output": {
"base": "${app.cordova.config.path}/www",
"page": "index.html",
"manifest": "${build.id}.json",
"appCache": {
"enable": false
}
},
"cache": {
"enable": false
}
},
/**
* This sets the default output folder for phonegap packagers builds
*
* // Phonegap Packager Config options
* "config": {
*
* // 'name' This is the name of your phonegap application. This will default to your Sencha App name.
* // This is only used once during Phonegap app creation and cannot be changed after.
* "name": "AppNameForCordova",
*
* // 'id' This will be your package name for Android and your Bundle Identifier for iOS
* // This is only used once during Phonegap app creation and cannot be changed after
* "id": "com.domain.AppName",
*
* // 'platform' a single platform to build, run or emulate
* // platform supported locally: android, ios, wp8, Blackberry 10
* // platform supported remotely: android, ios, wp8
* //"platform": "ios"
*
* // 'remote' This boolean will determine if the build should be run on Phonegap's remove server 'http://build.phonegap.com'
* // setting remote to true will attempt to build on the cloud.
* // To properly use this one must set the following properties in there local.properties file (if this file does not exist create it in your app root)
* // phonegap.remote.username=myname@domain.com
* // phonegap.remote.password=mys3cr3tp@ssw0rd
*
* // 'verbose' This boolean will determine if all phonegap commands will have verbose output or not.
* // to properly see this run sencha command with the '-info' flag like the following
* // sencha -info app run [buildname]
*
* // 'path' The path this builds phonegap project should be created in.
* // This is only used once during Phonegap app creation if changed this will result in a new phonegap application being generated
* // This defaults to your {app.dir}/phonegap
*
*/
"phonegap": {
"config": {
"name": "${app.name}",
"id": "com.domain.${app.name}",
"remote": false,
"verbose": false,
"path": "${app.dir}/phonegap"
},
"js": [
{
"path": "cordova.js",
"remote": true,
"priority": 1000
}
],
"microloader": "${app.config.dir}/Microloader.js",
"output": {
"base": "${app.phonegap.config.path}/www",
"page": "index.html",
"manifest": "${build.id}.json",
"appCache": {
"enable": false
}
},
"cache": {
"enable": false
}
},
/**
* Additional resources used during theme slicing operations
*/
"slicer": {
"js": [
{
"path": "${app.dir}/sass/example/custom.js",
"isWidgetManifest": true
}
],
"output": {
"appCache": {
"enable": false
}
},
"cache": {
"enable": false
}
},
/**
*
*/
"fashion": {
"inliner": {
"enable": false
}
}
/**
* The manager config object is used by the sencha app publish command to deploy this application to sencha web application manager
* "manager": {
* // the space id for this application
* "id": 12345,
* // name of app in space deployments
* "name": "${app.name}",
* // space host
* "host": "https://api.space.sencha.com/json.rpc",
* // can be a zip file path, or a folder to be zipped and deployd to sencha space
* "file": "${app.output.base}",
* // These may be specified here, but are best specified in your user
* // ~/.sencha/cmd/sencha.cfg file
* "apiKey": "",
* "secret": ""
* }
*/
}

@ -1,62 +0,0 @@
<project name="bootstrap-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-bootstrap">
<attribute name="file"/>
<attribute name="basedir"/>
<attribute name="coreFilesFile" default="@{file}"/>
<attribute name="classMetadataFile" default="@{file}"/>
<attribute name="overridesFile" default="@{file}"/>
<attribute name="includeBoot" default="true"/>
<attribute name="includeManifest" default="false"/>
<attribute name="includeCoreFiles" default="false"/>
<attribute name="includeMetadata" default="true"/>
<attribute name="includeOverrides" default="true"/>
<attribute name="appendCoreFiles" default="true"/>
<attribute name="appendClassMetadata" default="true"/>
<attribute name="appendOverrides" default="true"/>
<attribute name="manifestTpl" default="var Ext = Ext || '{' '}'; Ext.manifest = {0};"/>
<attribute name="coreFilesJsonpTpl" default="Ext.Boot.loadSync"/>
<attribute name="loaderConfigJsonpTpl" default="Ext.Loader.addClassPathMappings"/>
<attribute name="overrideTpl" default='Ext.Loader.loadScriptsSync'/>
<attribute name="overrideTplType" default="jsonp"/>
<attribute name="overrideExcludeTags" default="package-core,package-sencha-core,package-${framework.name},package-${toolkit.name}"/>
<text name="launchcode" optional="true"/>
<sequential>
<local name="temp.file"/>
<tempfile property="temp.file"
deleteonexit="true"
createfile="true"/>
<echo file="${temp.file}">@{launchcode}</echo>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
bootstrap
-baseDir=@{basedir}
-file=@{file}
-coreFilesFile=@{coreFilesFile}
-classMetadataFile=@{classMetadataFile}
-overridesFile=@{overridesFile}
-includeBoot=@{includeBoot}
-includeManifest=@{includeManifest}
-includeCoreFiles=@{includeCoreFiles}
-includeMetadata=@{includeMetadata}
-includeOverrides=@{includeOverrides}
-appendCoreFiles=@{appendCoreFiles}
-appendClassMetadata=@{appendClassMetadata}
-appendOverrides=@{appendOverrides}
-manifestTpl=@{manifestTpl}
-coreFilesJsonpTpl=@{coreFilesJsonpTpl}
-loaderConfigJsonpTpl=@{loaderConfigJsonpTpl}
-overrideTpl=@{overrideTpl}
-overrideType=@{overrideTplType}
-overrideExcludeTags=@{overrideExcludeTags}
-launchContentFile=${temp.file}
]]>
</x-compile>
<delete file="${temp.file}"/>
</sequential>
</macrodef>
</project>

@ -1,553 +0,0 @@
<?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="x-app-build-impl" default=".help">
<!--
===============================================================
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>
<target name="development"
description="Sets the build environment to development.">
<property name="build.environment" value="development"/>
</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"/>
<import file="${basedir}/.sencha/app/resolve-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,
-init-native-package"/>
<!--
===============================================================
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,
slice,
sass,
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="${app.output.base}"/>
<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-init">
<property name="app.watch.enabled" value="true"/>
</target>
<target name="watch"
depends="-watch-init,development,init"
description="Starts Watch to keep your app ready for dev mode">
<x-ant-call>
<param name="build.id" value="${build.id}"/>
<param name="build.name" value="${build.name}"/>
<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"/>
<target name="refresh"/>
</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
===============================================================
-->
<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"/>
<import file="${basedir}/.sencha/app/cordova-impl.xml"/>
<import file="${basedir}/.sencha/app/phonegap-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>
<target name="-before-publish"/>
<target name="-after-publish"/>
<target name="-publish">
<property name="app.manager.file" value="${app.output.base}"/>
<x-sencha-command>
<![CDATA[
manager
version
create
-id=${app.manager.id}
-name=${app.version}
-host=${app.manager.host}
-secret=${app.manager.secret}
-apiKey=${app.manager.apiKey}
-file=${app.manager.file}
]]>
</x-sencha-command>
</target>
<target name="publish"
depends="init,-before-publish,-publish,-after-publish"
description="Publish app to Sencha Web Application Manager"/>
<!--
===============================================================
Build Dependencies
uses the compiler to build metadata files for all detected
file-to-file dependencies
===============================================================
-->
<target name="build-dependencies" depends="init, -detect-app-build-properties">
<x-compile refid="${compiler.ref.id}">
<![CDATA[
restore
page
and
meta
-infoType=Dependencies
-basePath=${build.dir}
-tpl={0}
-out=${build.dir}/dependencies.json
and
meta
-infoType=AppManifest
-basePath=${build.dir}
-tpl={0}
-out=${build.dir}/bootsequence.json
]]>
</x-compile>
</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.
Most build options are controlled by the app manifest. For details see:
${basedir}/app.json
For more specific controls over the build process, see:
${basedir}/.sencha/app/defaults.properties
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. This file should not be included in
source control.
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>

@ -1,20 +0,0 @@
# =============================================================================
# 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.
# =============================================================================

@ -1,286 +0,0 @@
{
"sources": {
"config.rb.tpl.merge": {
"33f446bd02c3fd24eb27891582eff6a2e789796b": "eJxLLi2KT8ksUrBVcMvMSdUDMvMSc1M14uPdPH1c4+M1ufJLSwpKS+KLSypzUoGqrPJSi0tSU7gALskTcA\u003d\u003d"
},
"package.properties.merge": {
"c6c1fb2fb1dda28480ad0f6e5caffc9b97d196ae": "eJytkUFygzAMRfc5hSZsOxygM11223aRCwgsQBNH8tiCTG5fGWjDAcLOsnjvS27g45XfqYHLxAUGjgQp68KBCqCALpSzHyApi8GgGQINOEeDBTNjF73PKywUgAUclLC/4kjt3lda5yXKxlRat1BZDXsFMBOoxAfwLWk2p9wnEuhmjoFldF512kRw3sFnIFk4q9xIrD013vLz5B2y2P9EhtcqZc1sj3WmTXCI5gWrYZy2xomKwTFV/hSvP5XN+fV9+Xzftjb7SDoc+jClWJmmIGi80N9SwnbVe1HlDUTdWfNvt1togpGEMkYoLP1K7tVfIHKXfeVU/S9+/V9rlbyW"
},
"testing.properties.merge": {
"360e715956c81757e53736789fe20be045acb544": "eJytkMENwjAMRe+d4oveuwE7cGCBoLjUItiVY4q6PW6pKAM0t1g/732nxfnI07S4DlzRcyGMphNnqkgCncgsLhiVxdGrIVOfXsUxJeN0K5GLCQtlsCBATtVZ7t2Wq13wRjJnql1YqK6GbYJkBJUyg5+jmgflPZDg9uKSgxK8xekD4bSBTyCZ2FSeJN41bUQuO++vi/828vRYpKzGPq87fQV/1WLgS5mgrXWKphyYRb6L10c1nAf//gdqIpHi"
},
"native.properties.merge": {
"2c8c063f9588eecff09624782d7369a8a000d61c": "eJytkEsOwjAMRPecYkT3vQF3YMEFguJSi2BXjgni9rgfFQ5AdrEm743T4fTPc+hwGbli4EKYTBtnqkgCbWQWF0zK4hjUkGlIz+JoyThdS+RiwkIZLAiQJOdG/RarfeAmMmeqfUioLoJtgmQElfIGPyY1D8hrJMH1ySWz3AI3K30kHFfuESSNTeVB4v2hi8T5i/tp4vs+nu6zk9XY38tGK/+nWQx87hK0pU3RlAMzu3fv8qaG8s9f/wFV3ZB9"
},
"production.properties.merge": {
"cbdf9712e9b5d37cecb4d0530ba1fccd0ed004a3": "eJytkUEOwjAMBO+8YkXv/QF/4MAHAnGpRbArxy3i97gFQbk3t6ycmbXS4LDl2TU49VzRcSEMphNnqkgCncgsLhiUxdGpIVOXxuKYknE6l5iLhIUyWBCgeJ7Hi7NK+xmtbWQDmTPVNkRUF8knQTKCSnmC74OaB+jRk+A8csks10DOWu8J+x97D5KJTeVO4u2uianjD7lq5N+9PN1mL6uxP5fN3o5Vuwh87hO0pVHRlAMz+//cy7sa2o2/4QV6LJW9"
},
"sencha.cfg.tpl.merge": {
"37e77998d0cc69cbe4c0c2d4481f2e6c43b55a8f": "eJytkMENwkAMBP9XxUp5Qwe8aIAWzMUhli7nk+0Qheq5gOgAf/xY72rHA2IWRzNtbLHDG2eZhB2ErMtCcG5kFDyiiAd0QqOYvas1SKrURxpg7Lpa7rbQrrT92DEz7quUEaMY51DbE7V2/h2fP0GXlIbLX6f3ua4euuD2xTpwTrgVyoz8UeRFIVoddy66fX9QpPJRm54qIxa2B/ekjjkVyeHYJGZU3tjwZPPDnt66VmnK"
},
"build.properties.merge": {
"d4613dc19be3ddb60e7ff5716e28c8b15d954f3a": "eJytUstOw0AMvPMVI/WGoB+AxAFx4sBD0B9ws05idbOOdp2E/j1OH6pEEKfuzR57POP1Co/XfDcrbFopqCUy+qyjBC6gBB05Zw/QqyRDrRmBaxqiYaQstI1e5xlJHCAJ1nJhZ4s6cXYm0Sy2P/CWh5uVI8A9+NvWPqXnbMLllLxdn5jLEvsTmUXrRSHhBO6xpeJyNGE7SAxrTqNkTR27A0nFmAIoBFzIYOpsmhhaHz2glab9x4L3hqEy0bRUa1xMUrMEEpmMvMz3VO2o4d/uXl4/3j83T28bL/niVLWE5y5gkhjRcW4Yex0yPJ8a9zCJtRAr0CkhDNklYOibTP6X6+OyaFRx32q+CqEzS6WpjlJ55xHvaDf3RnLwDmVi7uf4POewKzufy8x83Vv8AQy16fs\u003d"
},
"development.properties.merge": {
"c45c602c9b6f6f73cace183e9f0bf09c00a3ccf6": "eJytkUuOAjEMBfec4one9w24wyy4QFDc0xbBjhyTEbcfp0F89mRny6l6liccvvl2E44rNyxcCNW0c6aGJNBOZlGgKotjUUOmJV2LoyfjdCoxFx0WymBBgJyas/zOj7k2B6+SOVObw0JtMzw6SEZQKTfwpap5UP5WEpyuXHJQgjecvhL2mToVrRcS34Oks6mMYt5NMfbzYr7l8edWns5DzGrst22vu+QtXjR8BAraFqloyoEZAT7l28cW3i9f4R+b7pUs"
}
},
"targets": {
"sass/config.rb": {
"source": "config.rb.tpl.merge",
"version": "33f446bd02c3fd24eb27891582eff6a2e789796b",
"parameters": {
"appControllers": "",
"appModels": "",
"appName": "Ngpc.csc",
"appStores": "",
"appViews": "",
"classic": false,
"controllerFileName": "Main",
"controllerName": "Main",
"controllerNamespace": "Ngpc.csc.controller",
"frameworkKey": "ext",
"frameworkName": "ext",
"frameworkPath": "ext",
"frameworkVer": "6.2.0.981",
"fwIs60": false,
"modelNamespace": "Ngpc.csc.model",
"modern": false,
"name": "Ngpc.csc",
"packagesRelPath": "ext/packages",
"senchadir": ".sencha",
"themeName": "default",
"toolkit": "",
"uniqueId": "55948c26-d0ca-43e7-add2-2ac8d857c478",
"universal": true,
"viewFileName": "Main",
"viewName": "Main",
"viewNamespace": "Ngpc.csc.view"
}
},
".sencha/app/package.properties": {
"source": "package.properties.merge",
"version": "c6c1fb2fb1dda28480ad0f6e5caffc9b97d196ae",
"parameters": {
"appControllers": "",
"appModels": "",
"appName": "Ngpc.csc",
"appStores": "",
"appViews": "",
"classic": false,
"controllerFileName": "Main",
"controllerName": "Main",
"controllerNamespace": "Ngpc.csc.controller",
"frameworkKey": "ext",
"frameworkName": "ext",
"frameworkPath": "ext",
"frameworkVer": "6.2.0.981",
"fwIs60": false,
"modelNamespace": "Ngpc.csc.model",
"modern": false,
"name": "Ngpc.csc",
"packagesRelPath": "ext/packages",
"senchadir": ".sencha",
"themeName": "default",
"toolkit": "",
"uniqueId": "55948c26-d0ca-43e7-add2-2ac8d857c478",
"universal": true,
"viewFileName": "Main",
"viewName": "Main",
"viewNamespace": "Ngpc.csc.view"
}
},
".sencha/app/testing.properties": {
"source": "testing.properties.merge",
"version": "360e715956c81757e53736789fe20be045acb544",
"parameters": {
"appControllers": "",
"appModels": "",
"appName": "Ngpc.csc",
"appStores": "",
"appViews": "",
"classic": false,
"controllerFileName": "Main",
"controllerName": "Main",
"controllerNamespace": "Ngpc.csc.controller",
"frameworkKey": "ext",
"frameworkName": "ext",
"frameworkPath": "ext",
"frameworkVer": "6.2.0.981",
"fwIs60": false,
"modelNamespace": "Ngpc.csc.model",
"modern": false,
"name": "Ngpc.csc",
"packagesRelPath": "ext/packages",
"senchadir": ".sencha",
"themeName": "default",
"toolkit": "",
"uniqueId": "55948c26-d0ca-43e7-add2-2ac8d857c478",
"universal": true,
"viewFileName": "Main",
"viewName": "Main",
"viewNamespace": "Ngpc.csc.view"
}
},
".sencha/app/native.properties": {
"source": "native.properties.merge",
"version": "2c8c063f9588eecff09624782d7369a8a000d61c",
"parameters": {
"appControllers": "",
"appModels": "",
"appName": "Ngpc.csc",
"appStores": "",
"appViews": "",
"classic": false,
"controllerFileName": "Main",
"controllerName": "Main",
"controllerNamespace": "Ngpc.csc.controller",
"frameworkKey": "ext",
"frameworkName": "ext",
"frameworkPath": "ext",
"frameworkVer": "6.2.0.981",
"fwIs60": false,
"modelNamespace": "Ngpc.csc.model",
"modern": false,
"name": "Ngpc.csc",
"packagesRelPath": "ext/packages",
"senchadir": ".sencha",
"themeName": "default",
"toolkit": "",
"uniqueId": "55948c26-d0ca-43e7-add2-2ac8d857c478",
"universal": true,
"viewFileName": "Main",
"viewName": "Main",
"viewNamespace": "Ngpc.csc.view"
}
},
".sencha/app/production.properties": {
"source": "production.properties.merge",
"version": "cbdf9712e9b5d37cecb4d0530ba1fccd0ed004a3",
"parameters": {
"appControllers": "",
"appModels": "",
"appName": "Ngpc.csc",
"appStores": "",
"appViews": "",
"classic": false,
"controllerFileName": "Main",
"controllerName": "Main",
"controllerNamespace": "Ngpc.csc.controller",
"frameworkKey": "ext",
"frameworkName": "ext",
"frameworkPath": "ext",
"frameworkVer": "6.2.0.981",
"fwIs60": false,
"modelNamespace": "Ngpc.csc.model",
"modern": false,
"name": "Ngpc.csc",
"packagesRelPath": "ext/packages",
"senchadir": ".sencha",
"themeName": "default",
"toolkit": "",
"uniqueId": "55948c26-d0ca-43e7-add2-2ac8d857c478",
"universal": true,
"viewFileName": "Main",
"viewName": "Main",
"viewNamespace": "Ngpc.csc.view"
}
},
".sencha/app/sencha.cfg": {
"source": "sencha.cfg.tpl.merge",
"version": "37e77998d0cc69cbe4c0c2d4481f2e6c43b55a8f",
"parameters": {
"appControllers": "",
"appModels": "",
"appName": "Ngpc.csc",
"appStores": "",
"appViews": "",
"classic": false,
"controllerFileName": "Main",
"controllerName": "Main",
"controllerNamespace": "Ngpc.csc.controller",
"frameworkKey": "ext",
"frameworkName": "ext",
"frameworkPath": "ext",
"frameworkVer": "6.2.0.981",
"fwIs60": false,
"modelNamespace": "Ngpc.csc.model",
"modern": false,
"name": "Ngpc.csc",
"packagesRelPath": "ext/packages",
"senchadir": ".sencha",
"themeName": "default",
"toolkit": "",
"uniqueId": "55948c26-d0ca-43e7-add2-2ac8d857c478",
"universal": true,
"viewFileName": "Main",
"viewName": "Main",
"viewNamespace": "Ngpc.csc.view"
}
},
".sencha/app/build.properties": {
"source": "build.properties.merge",
"version": "d4613dc19be3ddb60e7ff5716e28c8b15d954f3a",
"parameters": {
"appControllers": "",
"appModels": "",
"appName": "Ngpc.csc",
"appStores": "",
"appViews": "",
"classic": false,
"controllerFileName": "Main",
"controllerName": "Main",
"controllerNamespace": "Ngpc.csc.controller",
"frameworkKey": "ext",
"frameworkName": "ext",
"frameworkPath": "ext",
"frameworkVer": "6.2.0.981",
"fwIs60": false,
"modelNamespace": "Ngpc.csc.model",
"modern": false,
"name": "Ngpc.csc",
"packagesRelPath": "ext/packages",
"senchadir": ".sencha",
"themeName": "default",
"toolkit": "",
"uniqueId": "55948c26-d0ca-43e7-add2-2ac8d857c478",
"universal": true,
"viewFileName": "Main",
"viewName": "Main",
"viewNamespace": "Ngpc.csc.view"
}
},
".sencha/app/development.properties": {
"source": "development.properties.merge",
"version": "c45c602c9b6f6f73cace183e9f0bf09c00a3ccf6",
"parameters": {
"appControllers": "",
"appModels": "",
"appName": "Ngpc.csc",
"appStores": "",
"appViews": "",
"classic": false,
"controllerFileName": "Main",
"controllerName": "Main",
"controllerNamespace": "Ngpc.csc.controller",
"frameworkKey": "ext",
"frameworkName": "ext",
"frameworkPath": "ext",
"frameworkVer": "6.2.0.981",
"fwIs60": false,
"modelNamespace": "Ngpc.csc.model",
"modern": false,
"name": "Ngpc.csc",
"packagesRelPath": "ext/packages",
"senchadir": ".sencha",
"themeName": "default",
"toolkit": "",
"uniqueId": "55948c26-d0ca-43e7-add2-2ac8d857c478",
"universal": true,
"viewFileName": "Main",
"viewName": "Main",
"viewNamespace": "Ngpc.csc.view"
}
}
}
}

@ -1,180 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="Cordova" default="cordova-help">
<!--Legacy properties file support-->
<property file="${app.dir}/cordova.local.properties"/>
<!--Init for All Cordova Task-->
<target name="-before-cordova-init"/>
<target name="-cordova-init">
<if>
<x-is-true value="app.cordova.config.verbose"/>
<then>
<property name="cordova.cli.options" value="-d"/>
</then>
<else>
<property name="cordova.cli.options" value=""/>
</else>
</if>
</target>
<target name="-after-cordova-init"/>
<target name="cordova-init"
depends="-init, -before-cordova-init, -cordova-init, -after-cordova-init"/>
<target name="cordova-help"/>
<!-- Create Cordova Application-->
<target name="cordova-create" depends="cordova-init">
<if>
<not>
<available file="${app.cordova.config.path}" type="dir"/>
</not>
<then>
<cordova-echo message="Creating Cordova Application with ID &quot;${app.cordova.config.id}&quot; and Name &quot;${app.cordova.config.name}&quot;"/>
<x-shell reloadprofile="true" dir="${app.dir}">
cordova ${cordova.cli.options} create "${app.cordova.config.path}" ${app.cordova.config.id} "${app.cordova.config.name}"
</x-shell>
</then>
</if>
</target>
<!-- Prepares application for all platforms -->
<target name="-before-cordova-prepare"/>
<target name="-cordova-prepare" if="args.prepare">
<cordova-echo message="Attempting Cordova Prepare for platforms &quot;${cordova.platforms.clean}&quot;"/>
<x-shell reloadprofile="true" dir="${app.cordova.config.path}">
cordova ${cordova.cli.options} prepare ${cordova.platforms.clean}
</x-shell>
</target>
<target name="-after-cordova-prepare"/>
<target name="cordova-prepare" depends="cordova-init, -before-cordova-prepare, -cordova-prepare, -after-cordova-prepare"/>
<!-- Emulates application on all platforms -->
<target name="-before-cordova-emulate"/>
<target name="-cordova-emulate" if="args.emulate" depends="cordova-platform-add">
<cordova-echo message="Attempting Cordova Emulate for platforms &quot;${cordova.platforms.clean}&quot;"/>
<x-shell reloadprofile="true" dir="${app.cordova.config.path}">
cordova ${cordova.cli.options} emulate ${cordova.platforms.clean} --target=${app.cordova.config.target}
</x-shell>
</target>
<target name="-after-cordova-emulate"/>
<target name="cordova-emulate" depends="cordova-init, -before-cordova-emulate, -cordova-emulate, -after-cordova-emulate"/>
<!-- Runs application on device for all platforms -->
<target name="-before-cordova-run"/>
<target name="-cordova-run" if="args.autorun" depends="cordova-platform-add">
<cordova-echo message="Attempting Cordova Run for platforms &quot;${cordova.platforms.clean}&quot;"/>
<x-shell reloadprofile="true" dir="${app.cordova.config.path}">
cordova ${cordova.cli.options} run ${cordova.platforms.clean} --target=${app.cordova.config.target}
</x-shell>
</target>
<target name="-after-cordova-run"/>
<target name="cordova-run" depends="cordova-init, -before-cordova-run, -cordova-run, -after-cordova-run"/>
<!-- Builds application for all platforms -->
<target name="-before-cordova-build"/>
<target name="-cordova-build" depends="cordova-platform-add">
<cordova-echo message="Attempting Cordova Build for platforms &quot;${cordova.platforms.clean}&quot;"/>
<x-shell reloadprofile="true" dir="${app.cordova.config.path}">
cordova ${cordova.cli.options} build ${cordova.platforms.clean}
</x-shell>
</target>
<target name="-after-cordova-build"/>
<target name="cordova-build" depends="cordova-init, -before-cordova-build, -cordova-build, -after-cordova-build"/>
<!-- Adds all missing Platforms from properties file to the project-->
<target name="-before-cordova-platform-add"/>
<target name="-cordova-platform-add">
<fail status="0" message="No platforms were specified, add a platform to ${build.name}'s -> cordova -> config -> platforms property in app.json">
<condition>
<or>
<not>
<isset property="cordova.platforms"/>
</not>
<contains string="${cordova.platforms}" substring="$"/>
</or>
</condition>
</fail>
<script language="javascript">
var platforms = project.getProperty("cordova.platforms");
if (!platforms) {
platforms = ""
}
platforms = platforms.replace("/,/g", " ");
project.setProperty("cordova.platforms.clean", platforms);
</script>
<x-shell reloadprofile="true" dir="${app.cordova.config.path}" outputproperty="cordova.platforms.list">
cordova ${cordova.cli.options} platform list
</x-shell>
<script language="javascript">
var target_platforms = project.getProperty("cordova.platforms.clean").split(" ");
var existing_platforms = project.getProperty("cordova.platforms.list");
var available = existing_platforms.indexOf("Available");
if (available >= 0) {
existing_platforms = existing_platforms.substring(0, available);
}
var missing_platforms = [], platformIndex, platform;
for (platformIndex in target_platforms) {
platform = target_platforms[platformIndex];
if(existing_platforms.indexOf(platform) === -1){
missing_platforms.push(platform);
}
}
if(missing_platforms.length > 0) {
self.log("Cordova: Missing platforms " + missing_platforms.toString() + ". Attempting add.");
project.setProperty("cordova.platforms.missing", missing_platforms.join(" "));
} else if(existing_platforms.length() >0){
self.log("Cordova: All requested platforms exist");
} else {
self.log("Cordova: No platforms exist");
}
</script>
<if>
<isset property="cordova.platforms.missing"/>
<then>
<cordova-echo message="Cordova is adding platforms &quot;${cordova.platforms.missing}&quot;"/>
<x-shell reloadprofile="true" dir="${app.cordova.config.path}">
cordova ${cordova.cli.options} platform add ${cordova.platforms.missing}
</x-shell>
</then>
</if>
</target>
<target name="-after-cordova-platform-add"/>
<target name="cordova-platform-add" depends="cordova-init, -before-cordova-platform-add, -cordova-platform-add, -after-cordova-platform-add"/>
<target name="-before-cordova-init-native-package"/>
<target name="-cordova-init-native-package" depends="cordova-create"/>
<target name="-after-cordova-init-native-package"/>
<target name="cordova-init-native-package" depends="cordova-init, -before-cordova-init-native-package, -cordova-init-native-package, -after-cordova-init-native-package"/>
<target name="-before-cordova-native-package"/>
<target name="-cordova-native-package" depends="cordova-platform-add, cordova-build, cordova-prepare, cordova-emulate, cordova-run"/>
<target name="-after-cordova-native-package"/>
<target name="cordova-native-package" depends="cordova-init, -before-cordova-native-package, -cordova-native-package, -after-cordova-native-package"/>
<macrodef name="cordova-echo">
<text name="text" optional="true"/>
<attribute name="message" default=""/>
<attribute name="level" default="info"/>
<sequential>
<if>
<equals arg1="@{message}" arg2=""/>
<then>
<x-echo message="[Cordova] @{text}" level="@{level}"/>
</then>
<else>
<x-echo message="[Cordova] @{message}" level="@{level}"/>
</else>
</if>
</sequential>
</macrodef>
</project>

@ -1,6 +0,0 @@
#
# Copyright (c) 2012-2014. Sencha Inc.
#
# Legacy support here for old build workflow.
cordova.platforms=${app.cordova.config.platforms}

@ -1,707 +0,0 @@
# =============================================================================
# This file defines properties used by build-impl.xml and the associated
# *-impl.xml files (sass-impl.xml, js-impl.xml, etc.), which are the core of
# the applications build process.
#
# This file represents the lowest priority file for defining these properties
# as well as the place to look for documentation and learning what properties
# exist.
#
# The full set of these files is as follows (in priority order):
#
# - One of these (based on build.environment):
# - production.properties
# - testing.properties
# - native.properties
# - package.properties
#
# - build.properties
#
# - One of these (based on app.framework):
# - ext.properties
# - touch.properties
#
# - One of these (based on build.environment):
# - production.defaults.properties
# - testing.defaults.properties
# - native.defaults.properties
# - package.defaults.properties
#
# - defaults.properties
#
# Properties are controlled by the first file in the above list to define the
# value. Values from all levels, however, can reference each other via the
# property expansion.
#
# IMPORTANT - This file should not be modified by an app as it is overwritten
# during each app upgrade.
# =============================================================================
# *****************************************************************************
# Global Build Properties
# these are cross-concern properties used by many build phases
# *****************************************************************************
# the default build environment type (production, testing, native, package)
# NOTE: this is only a default and will typically be set before this file is
# loaded, typically by the 'sencha app build" command.
# See "sencha help app build" for details.
#
# The corresponding properties files:
# (production.properties, testing.properties, etc.) provide examples of
# overriding sets of properties depending on the selected environment
# NOTE: this replaces the deprecated args.environment
app.environment=production
build.environment=${app.environment}
# the directory to place built application files
build.dir=${workspace.build.dir}/${build.environment}/${app.name}
app.compressor.type=${app.compressor}
app.output=${build.dir}
app.output.base=${app.output}
app.output.page=index.html
app.output.page.path=${app.output.page}
app.output.page.enable=true
app.output.resources=resources
app.output.resources.path=${app.output.resources}
app.output.resources.enable=true
app.output.resources.compress=${app.output.js.compress}
app.output.css.dir=${app.output.resources.path}
app.output.css=${app.output.css.dir}/${app.name}-all.css
app.output.css.path=${app.output.css}
app.output.css.enable=true
app.output.css.compress=true
app.output.css.preprocess=true
app.output.css.split=4095
app.output.js=app.js
app.output.js.path=${app.output.js}
app.output.js.enable=true
app.output.js.compress=false
app.output.js.optimize=false
app.output.js.optimize.cssPrefix=${app.output.js.optimize}
app.output.js.optimize.xtemplate=false
app.output.js.optimize.propNames=${app.output.js.optimize}
app.output.js.optimize.defines=${app.output.js.optimize}
app.output.js.optimize.callParent=${app.output.js.optimize}
app.output.js.optimize.requires=${app.output.js.optimize}
app.output.framework=framework.js
app.output.framework.path=${app.output.framework}
app.output.framework.enable=false
app.output.microloader=microloader.js
app.output.microloader.path=${app.output.microloader}
app.output.microloader.enable=true
app.output.microloader.embed=true
app.output.manifest=app.json
app.output.manifest.path=${app.output.manifest}
app.output.manifest.enable=true
app.output.manifest.embed=false
app.output.slicer=${app.output.resources.path}
app.output.slicer.path=${app.output.slicer}
app.output.slicer.enable=true
app.archivePath=archive
app.output.archive=${app.archivePath}
app.output.archive.path=${app.output.archive}
app.cache.enable=${app.output.deltas.enable}
app.output.cache=cache.appcache
app.output.cache.path=${app.output.cache}
app.output.cache.enable=true
app.output.appCache.enable=${app.output.cache.enable}
app.output.appCache.path=${app.output.cache.path}
build.out.base.path=${app.output.base}
build.out.page.path=${build.out.base.path}/${app.output.page.path}
build.out.resources.path=${build.out.base.path}/${app.output.resources.path}
build.out.css.path=${build.out.base.path}/${app.output.css.path}
build.out.js.path=${build.out.base.path}/${app.output.js.path}
build.out.framework.path=${build.out.base.path}/${app.output.framework.path}
build.out.archive.path=${build.out.base.path}/${app.output.archive.path}
build.out.manifest.path=${build.out.base.path}/${app.output.manifest.path}
build.out.microloader.path=${build.out.base.path}/${app.output.microloader.path}
build.out.appCache.path=${build.out.base.path}/${app.output.appCache.path}
# Moved to init-impl.xml to handle truthy special values
#build.out.deltas.path=${build.out.base.path}/${app.output.deltas.path}
build.out.slicer.path=${build.out.base.path}/${app.output.slicer.path}
# place holder properties to allow the newer .path property to control the existing .dir property
build.out.resources.dir=${build.out.resources.path}
build.out.css.dir=${build.out.base.path}/${app.output.css.dir}
build.out.metadata.path=${build.out.page.path}
# a temporary output directory used for staging intermediate build artifacts
build.temp.dir=${workspace.build.dir}/temp/${build.environment}/${app.name}
# the directory under the output folder for placing resources
build.resources.dir=${build.out.resources.path}
app.manifest.bootstrap=bootstrap.json
app.bootstrap=${app.dir}
app.bootstrap.base=${app.bootstrap}
app.bootstrap.page=${app.indexHtmlPath}
app.bootstrap.page.path=${app.bootstrap.page}
app.bootstrap.css=${app.bootstrap.css.name}
app.bootstrap.css.path=${app.bootstrap.css}
app.bootstrap.microloader=${app.bootstrap.js.name}
app.bootstrap.microloader.path=${app.bootstrap.microloader}
app.bootstrap.manifest=${app.manifest.bootstrap}
app.bootstrap.manifest.path=${app.bootstrap.manifest}
build.bootstrap.base.path=${app.bootstrap.base}
build.bootstrap.page.path=${build.bootstrap.base.path}/${app.bootstrap.page.path}
build.bootstrap.css.path=${build.bootstrap.base.path}/${app.bootstrap.css.path}
build.bootstrap.microloader.path=${build.bootstrap.base.path}/${app.bootstrap.microloader.path}
build.bootstrap.manifest.path=${build.bootstrap.base.path}/${app.bootstrap.manifest.path}
build.bootstrap.metadata.path=${build.bootstrap.page.path}
# *****************************************************************************
# JS
# these properties control various aspects of output js code construction
# *****************************************************************************
# the output js file that contains all needed js code
# deprecated, now controlled by app.output.js / app.output.js.path in app.json
build.classes.file=${build.out.js.path}
# the output js file for framework code, if the framework
# classes are not included in the default all-classes.js file
# deprecated, now controlled by app.output.framework / app.output.framework.path in app.json
build.framework.file=${build.out.framework.path}
# Don't use these - they are deprecated
build.options.debug.enable=debug:true
build.options.debug.disable=debug:false
build.options.logger.enable=logger:yes
build.options.logger.disable=logger:no
# This property enables/disables <feature logger> blocks in js output, see build.options
build.options.logger=no
# This property enables/disables <debug> blocks in js output, see build.options
build.options.debug=false
# This property can be used to pass custom build options in addition to any of the other
# build.options flags. When overlapping, these options take priority, see build.options
build.options.custom=
# This value is specified by the framework
build.options.default=
# This property contains the framework ("product") used for filtering of JavaScript using
# the preprocessor. This is set by either ext.properties or touch.properties.
#
#build.options.product=touch
# This property contains the desired API level used for preprocessor filtering of JavaScript.
# This is set by either ext.properties or touch.properties.
#
#build.options.minVersion=2.1
# This property holds the set of js preprocessor options in the form:
#
# name1:value1,name2:value2,...
#
# (used by -init-compiler in init-impl.xml)
#
# This property is not likely to be set directly. Rather, you should set one of the
# contributing properties that are combined to form this one:
#
# build.options.debug
# build.options.logger
# build.options.custom
#
# The other properties that contribute to this are typically not needing to be set:
#
# build.options.product
# build.options.minVersion
#
build.options=logger:${build.options.logger},debug:${build.options.debug},product:${build.options.product},minVersion:${build.options.minVersion},${build.options.default},${build.options.custom}
# This property can be modified to change general build options
# such as excluding files from the set. The format expects newlines
# for each argument, for example:
#
# build.operations=\
# exclude\n \
# -namespace=Ext\n
#
# NOTE: modifications to build.operations are intended to be
# placed in an override of the "-after-init" target, where it
# can be calculated based on other
# ant properties
#
# build.operations=
# enables / disables the full class optimizer during js builds
# (used by the -compile-* targets in js-impl.xml)
build.optimize.defines=${app.output.js.optimize.defines}
build.optimize.callparent=${app.output.js.optimize.callParent}
build.optimize.cssPrefix=${app.output.js.optimize.cssPrefix}
build.optimize.xtemplate=${app.output.js.optimize.xtemplate}
build.optimize.propNames=${app.output.js.optimize.propNames}
build.optimize.include.metadata=${app.output.js.optimize.requires}
build.optimize.enable=\
optimize\n \
-property-name=${build.optimize.propNames}\n \
-css-prefix=${build.optimize.cssPrefix}\n \
-xtemplate=${build.optimize.xtemplate}\n \
-define-rewrite=${build.optimize.defines}\n \
-call-parent=${build.optimize.callparent}\n \
-include-metadata=${build.optimize.include.metadata}
build.optimize.disable=
build.optimize=${build.optimize.disable}
# enables / disables removing text references from
# package js build files
build.remove.references=true
# enables / disables removing "requires" and "uses" elements
# from class definitions
build.remove.requirement.nodes=true
# enables / disables de-quoting certain string references to classes
# like mixin references
build.optimize.string.references=true
# enables / disables yui compression
build.compression.yui=${app.output.js.compress}
# enables / disables closure compression
build.compression.closure=0
# enables / disables uglify compression
build.compression.ugilfy=0
build.compile.temp.dir=${build.temp.dir}/sencha-compiler
# controles whether to keep the temp compile dir after the build
build.compile.temp.dir.keep=true
# ------------------------------------------
# DOC ONLY - Do Not Set
# this variable will be set to the appropriate compressor
# option, and is calculated in init-impl.xml, but may be overridded in
# app.properties, <environment>.properties, or via command line
#
# build.compression=
# ------------------------------------------
# *****************************************************************************
# Page
# these variables control aspects of building the output markup page
# *****************************************************************************
# controls whether the microloader content will be embedded in the output
# markup, or left as a separate resource
build.enable.embedded.microloader=${app.output.microloader.embed}
# whether to include the page's manifest.json code with the
# microloader content. Production.properties files should set this to
# false to have manifest.json exist as a server resource.
build.enable.embedded.manifest=${app.output.manifest.embed}
# enables / disables compression of resources referenced in app.json / package.json
# js and css entries
enable.resource.compression=${app.output.resources.compress}
# defaults to index.html, but may be overridden in app.json
app.indexHtmlPath=index.html
# the input page file for the application
app.page.name=${app.indexHtmlPath}
app.page.file=${app.dir}/${app.page.name}
# the output page file
# deprecated, now controlled by app.output.page / app.output.page.path in app.json
build.page.name=${app.page.name}
build.page.dir=${build.out.base.path}
build.page.file=${build.out.page.path}
# the directory where the microloader files may be found
app.microloader.dir=${app.config.dir}/microloader
# the file names of the individual microloaders
app.microloader.development=development.js
app.microloader.testing=testing.js
app.microloader.production=production.js
# the target microloader to use for builds
app.microloader.name=${app.microloader.development}
app.microloader=${app.microloader.dir}/${app.microloader.name}
app.microloader.path=${app.microloader}
# specifies how to embed the microloader code into the output markup
# {0} is replaced with the content of the microloader file specified
# by app.microloader.path
build.microloader.code.tpl={0}
# the template to use when generating a stand-alone json manifest file
build.microloader.json.tpl.standalone={0}
# the template to use when embedding the manifest json directly next to the
# microloader in the output microloader content
build.microloader.json.tpl.embedded=Ext.blink({0});
# the template to use in the output microloader content when supplying
# the manifest json as a separate server-side resource ('production' builds)
build.microloader.json.tpl.external=Ext.blink('{'id:''${app.id}'''}');
# the template string to use when embedding the microloader content
# into the output markup
build.embedded.microloader.tpl=<script id="microloader" data-app="${app.id}" type="text/javascript">{0}</script>
# the compressor to use when embedding the microloader into a page
# can be -closure or -yui, or leave empty to disable compression
build.embedded.microloader.compressor=
# the path to the microloader content file, if external to the outpout markup
build.microloader.path=${build.out.microloader.path}
# the inner markup to embed into the output markup when not including
# the microloader content directly into the output markup
build.embedded.microloader.src=${build.microloader.name}
build.external.microloader.markup=<script id="microloader" data-app="${app.id}" src="${build.embedded.microloader.src}"></script>
# a flag indicating which mode the microloader should run in (production, testing, etc.)
# currently unused : is a placeholder for future microloader interactions
build.microloader.mode=${build.environment}
# the tag name to use when generating the compiler save set for
# the page's js code
build.tag.name=full-page
# the name of the archive folder containing source versions for
# delta patch generation
# deprecated, now controlled by app.output.archive / app.output.archive.path in app.json
build.archive.name=archive
# the output cache manifest file
build.manifest.name=${app.output.appCache.path}
build.manifest.path=${build.out.appCache.path}
# the name of the manifest json file
build.json.name=${app.manifest.name}
# the full path to the manifest json file
build.out.json.path=${build.out.manifest.path}
# Defines the file that will contain Ext.setVersion calls for each used package.
build.out.package.versions=${build.compile.temp.dir}/cmd-packages.js
# a temp directory for managing extracted resources during the page build
build.app.temp.dir=${build.compile.temp.dir}/app
# controls the format of checksum headers injected into microloaded content
# either comment style, or code style for js and css files
delta.comment.checksums=false
# *****************************************************************************
# Refresh
# these properties are used for generating bootstrap js and css
# files to support dev-time interaction with the app
# *****************************************************************************
# the base path to use for generating / calculating bootstrap info
# this property is not longer defaulted here, but calculated in refresh-impl.xml
# based on new app.bootstrap properties
# app.bootstrap.base.path=${app.dir}
# these control the name of the bootstrap js file
# note: there will be corresponding entries in either the index page
# or app.json that reference these names
# deprecated, use app.bootstrap.microloader
app.bootstrap.js.name=bootstrap.js
app.bootstrap.js=${build.bootstrap.microloader.path}
# these control the name of the bootstrap css file (for ext 4.2+ apps)
# note: there will be corresponding entries in either the index page
# or app.json that reference these names
app.bootstrap.css.name=bootstrap.css
# the microloader to use for bootstrapping operations
app.microloader.bootstrap=${app.microloader.dir}/${app.microloader.development}
# the name of the bootstrap microloader manifest
build.json.bootstrap.name=${app.manifest.bootstrap}
# the full path to the bootstrap microloader manifest
build.json.bootstrap.path=${build.bootstrap.manifest.path}
# enables inclusion of override files in the generated bootstrap
bootstrap.include.overrides=true
# enables inclusion of the Boot.js code in the generated bootstrap
bootstrap.include.boot=false
# controls the template used to generate load calls for override files
bootstrap.override.tpl=Ext.Loader.loadScriptFile(''{0}'', Ext.emptyFn);
build.boot.name=Boot.js
build.boot.file=${app.config.dir}/${build.boot.name}
build.slicer.microloader.name=Microloader.js
build.slicer.microloader.file=${app.config.dir}/${build.slicer.microloader.name}
# the type of the override template ('tpl' or 'jsonp')
bootstrap.override.tpltype=tpl
# *****************************************************************************
# Sass / Css
# properties for controling features of sass generation and compilation
# *****************************************************************************
# controls the ruby command that is used to execute compasss
# a full path to ruby may be specified rather than allowing the system
# shell to resolve the command
build.ruby.path=ruby
# --------------------
# these control properties select the mode used to build the app's styling
# see sass-impl.xml for how then are used
# enables theme builds for apps using ext 41 style themes
enable.ext41.themes=false
# enables theme builds for apps using ext 42 style themes
enable.ext42.themes=false
# enables theme builds for apps using touch style themes
enable.touch.themes=false
# --------------------
# selector count threshold to use when
# splitting a single css file into multiple
# css files (IE selector limit workaround)
#
# NOTE: applies only to ext js 4.2+ style theme management, currently
# see the above theme control variables for details
build.css.selector.limit=${app.output.css.split}
# enables / disable css preprocessor (enable.ext42.themes only)
build.css.preprocess=${app.output.css.preprocess}
# sets the css preprocessor options, in the form:
# name1:value1,name2:value2,...
build.css.preprocessor.opts=
# enables / disable css compressor (enable.ext42.themes only)
build.css.compress=${app.output.css.compress}
# controls the directory used to generate the output app scss file
# for apps that use theme packages
build.sass.dir=${build.temp.dir}/sass
# Specify the name for the individual resource dirs in the app
# (enable.touch.themes only)
app.sass.name=sass
# Specify the sass path in the app
# (enable.touch.themes only)
app.sass.dir=${app.dir}/resources/${app.sass.name}
# name prefix to use for output css / sass files
app.out.base=${app.name}-all
app.out.base.debug=${app.out.base}
# the output sass file to generate (used with enable.ext42.themes)
app.out.scss=${build.sass.dir}/${app.out.base.debug}.scss
# the output ruby compass config file to generate (used with enable.ext42.themes)
app.out.ruby=${build.sass.dir}/config.rb
# output css file prefix
app.out.css.prefix=${app.out.base.debug}
# output css file name
app.out.css.name=${app.out.css.prefix}.css
# output css file path (relative to build directory root
app.out.css.rel=${app.output.resources.path}/${app.out.css.name}
# output css file path (full path)
app.out.css=${build.out.css.path}
# separate file name to use for generating a compressed copy
# of the output css file (this default will compress the file in-place)
app.out.css.compressed=${build.out.css.path}
# the directory containing sass files for compass to compile
compass.sass.dir=${build.sass.dir}
# the output directory where compass should place built css files
compass.css.dir=${build.out.css.dir}
# the directory containing the ruby config file for compass
compass.config.file=${app.out.ruby}
# enables / disables console highlighting for compass
compass.compile.boring=false
# enables / disables forced rebuilds for compass
compass.compile.force=true
# enables / disables stack traces in compass failure output
compass.compile.trace=true
compass.cache.dir=${workspace.build.dir}/.sass-cache
compass.working.dir=${build.sass.dir}
# ---------------------------------------------------
# Legacy properties for ext41 theme directories
# Specify the resources path in the app
app.packages.dir=${app.dir}/packages
# Specify the theme path in the app (this directory contains the themes)
app.theme.dir=${app.packages.dir}
# the currently selected ext 41 theme name
theme.name=default
# ---------------------------------------------------
# *****************************************************************************
# Slice
# these properties control features of the theme slice build phase
# *****************************************************************************
# the resources directory of the application
# note: this property is currently only used for building ext 4.1 style themes
# (used by x-build-theme and x-copy-resources in slice-impl.xml)
app.resources.dir=${app.dir}/resources
# the directory containing the slicer widget example page
app.example.dir=${app.dir}/sass/example
# properties to control the recirect css file that is
# generated for the slicer example page
app.example.css.name=example.css
app.example.css.file=${app.example.dir}/${app.example.css.name}
# the base path for generating the bootstrap code for the
# slicer page
bootstrap.base.path=${app.example.dir}
# the full file name of the slicer page's bootstrap js file
bootstrap.example.js=${app.example.dir}/bootstrap.js
# the full file name of the slicer page's bootstrap js file
bootstrap.example.json.name=bootstrap.json
bootstrap.example.json=${app.example.dir}/${bootstrap.example.json.name}
# this is the directory used for intermediate build artifacts used
# by the slicer for generating theme images
app.example.build.dir=${build.temp.dir}/slicer-temp
# the name of the intermediate screenshot file used for image slicing
build.capture.png=${app.example.build.dir}/theme-capture.png
# the name of the intermediate widget manifest file used for image slicing
build.capture.json=${app.example.build.dir}/theme-capture.json
# the location of the slicer widget page
app.example.theme.html.name=theme.html
app.example.fashion.html.name=fashion.html
app.example.theme.html=${app.example.dir}/${app.example.theme.html.name}
app.example.fashion.html=${app.example.dir}/${app.example.fashion.html.name}
# a name prefix used for slicer page temporary artifacts
app.example.base=${app.name}-example
# the special slicer page scss file name to generate
app.example.scss=${app.example.build.dir}/${app.example.base}.scss
# the relative path from the slicer css file to the slicer html file
app.example.css.rel=${app.example.base}.css
# the path to the css file that will be built for the slicer page
app.example.css=${app.example.build.dir}/${app.example.css.rel}
# the ruby compass config file to generate for slicer page scss
app.example.out.ruby=${app.example.build.dir}/config.rb
app.example.compass.config=${app.example.out.ruby}
# legacy ext 41 theme property indicating the name of the
# slicer example page contained in the theme directory
theme.page.name=theme.html
# Options to pass to the "sencha fs slice" command.
build.slice.options=
# *****************************************************************************
# Packager
# these properties control features of the native packaging phase of the
# build process
# *****************************************************************************
# enables packaging the built application with the Sencha Desktop Packager
# NOTE: currently unsupported
enable.desktop.packager=false
# skips packaging the built application with cordova/phonegap
skip.native-package=false
# a property that controls whether a standalone manifest.json file will be
# generated for the native packaged application
enable.standalone.manifest=false
# *****************************************************************************
# Resolve
# these properties control aspects of the dynamic dependency resolver, which
# uses phantomjs to load the application and extract Ext.Loader class load
# history.
# *****************************************************************************
# enables / disables dynamic dependency resolution
skip.resolve=true
# enables the local web server. this may be disabled to load the application's
# page from an existing web server.
skip.web-start=false
# the port number to start the local web server on
build.web.port=1841
# the directory representing the root web folder
build.web.root=${workspace.dir}
# the base url to access the local web server
build.resolve.url=http://localhost:${build.web.port}
# a template string used to format the detected dynamic dependencies
build.resolve.tpl={0}
# the mode to use when formatting the detected dynamic dependencies
build.resolve.mode=references
# the output file for the detected dynamic dependencies
build.resolve.file=${build.temp.dir}/resolve.json
# controls whether unmatched external references in the specified file will
# generate build warnings or build failures
build.resolve.allow.unmatched=true
# *****************************************************************************
# Watch
# these properties adjust the behavior of the app watch process.
# *****************************************************************************
# the default set of actions to run when triggering a rebuild
build.trigger.targets=refresh,resources,sass
# the watcher targets to run that monitor for code changes
build.watcher.targets=-watch-compiler

@ -1,30 +0,0 @@
# =============================================================================
# This file defines default property values that apply to the "development" 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 development.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
build.include.all.scss=true
# By default we don't need to build an "all.js" file, or a new markup page or
# slice images for IE8/9. These can be added to "development.properties" and
# set to 0 to enable them if needed.
skip.page=1
skip.js=1
skip.slice=1

@ -1,8 +0,0 @@
# =============================================================================
# This file provides an override point for default variables defined in
# testing.defaults.properties. These properties are only imported when building
# for the "development" environment.
#
# Properties defined in this file take priority over build.properties but are
# only loaded for "development" builds.
# =============================================================================

@ -1,45 +0,0 @@
# =============================================================================
# This file defines default property values that apply to all builds based on
# Ext JS 5.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
enable.sencha-core.filter=true
build.options.product=ext
build.options.minVersion=5
bootstrap.include.boot=true
bootstrap.override.tpl=Ext.Loader.loadScriptsSync
bootstrap.override.tpltype=jsonp
app.microloader.name=Microloader.js
app.microloader.dir=${app.config.dir}
app.microloader.bootstrap=${app.microloader.dir}/${app.microloader.name}
app.microloader.path=${app.microloader.dir}/${app.microloader.name}
build.microloader.json.tpl.embedded=var Ext = Ext || '{' '}'; Ext.manifest = Ext.manifest || {0};
build.microloader.manifest.name=${app.manifest.name}
build.microloader.json.tpl.external=var Ext = Ext || '{' '}'; Ext.manifest = Ext.manifest || "${build.microloader.manifest.name}";
build.skip.versions.file=true
build.enable.appmanifest=true
compass.compile.force=false

@ -1,58 +0,0 @@
<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>

@ -1,418 +0,0 @@
<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="&#10;"/>
<tstamp>
<!-- sets DSTAMP=yyyyMMdd, TSTAMP=hhmm -->
<format property="build.year" pattern="yyyy"/>
<format property="build.datetime" pattern="yyyy-MM-dd HH:mm:ss"/>
<format property="build.date" pattern="MMMM d, yyyy"/>
<format property="build.timestamp" pattern="yyyyMMddHHmmss"/>
</tstamp>
<x-load-properties>
<!-- If available, load user-defined properties for this build identifier -->
<file path="${app.config.dir}/${build.id}.properties" required="false"/>
<file path="${app.config.dir}/${app.locale}.properties" required="false"/>
<file path="${app.config.dir}/${app.theme}.properties" required="false"/>
<file path="${app.config.dir}/${build.name}.properties" required="false"/>
<file path="${app.config.dir}/multi-build.properties" required="false"/>
<!-- 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}/${app.packager}.defaults.properties" required="false"/>
<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">
<or>
<x-is-true value="${build.compression.yui}"/>
<equals arg1="yui" arg2="${app.compressor.type}"/>
</or>
</condition>
<condition property="build.compression" value="-closure">
<or>
<x-is-true value="${build.compression.closure}"/>
<equals arg1="closure" arg2="${app.compressor.type}"/>
</or>
</condition>
<condition property="build.compression" value="-uglify">
<or>
<x-is-true value="${build.compression.uglify}"/>
<equals arg1="uglify" arg2="${app.compressor.type}"/>
</or>
</condition>
<property name="build.compression" value=""/>
<!--
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"/>
<!--
this is a helper property that is the relative path prefix from the
application's root directory to the root of the build directory
-->
<x-get-relative-path from="${app.dir}"
to="${build.out.base.path}"
property="build.dir.relative"/>
<if>
<isset property="app.toolkit"/>
<then>
<property name="app.sass.fashion" value="true"/>
</then>
</if>
<property name="app.sass.fashion" value="false"/>
<property name="app.sass.rhino" value="false"/>
<property name="app.sass.dynamic" value="false"/>
<property name="app.sass.generated.var" value="${app.sass.save}"/>
</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=""/>
<dirname property="build.out.page.dir" file="${build.out.page.path}"/>
<dirname property="build.out.js.dir" file="${build.out.js.path}"/>
<dirname property="build.out.framework.dir" file="${build.out.framework.path}"/>
<dirname property="build.out.css.dir" file="${build.out.css.path}"/>
<dirname property="build.out.microloader.dir" file="${build.out.microloader.path}"/>
<dirname property="build.out.manifest.dir" file="${build.out.manifest.path}"/>
<dirname property="build.out.metadata.dir" file="${build.out.metadata.path}"/>
<dirname property="build.bootstrap.page.dir" file="${build.bootstrap.page.path}"/>
<dirname property="build.bootstrap.css.dir" file="${build.bootstrap.css.path}"/>
<dirname property="build.bootstrap.microloader.dir" file="${build.bootstrap.microloader.path}"/>
<dirname property="build.bootstrap.manifest.dir" file="${build.bootstrap.manifest.path}"/>
<dirname property="build.bootstrap.metadata.dir" file="${build.bootstrap.metadata.path}"/>
<x-get-relative-path from="${build.out.base.path}" to="${build.out.js.path}" property="build.classes.name"/>
<x-get-relative-path from="${build.out.base.path}" to="${build.out.framework.path}" property="build.framework.name"/>
<x-get-relative-path from="${build.out.page.dir}" to="${build.out.microloader.path}" property="build.microloader.name"/>
<x-get-relative-path from="${build.out.page.dir}" to="${build.out.manifest.path}" property="app.manifest.name"/>
<x-get-relative-path from="${build.out.page.dir}" to="${build.out.appCache.path}" property="build.out.appCache.name"/>
<if>
<x-is-true value="${app.output.microloader.enable}"/>
<then>
<property name="build.output.markuponly" value="false"/>
</then>
<else>
<property name="build.output.markuponly" value="true"/>
</else>
</if>
<if>
<equals arg1="${app.toolkit}" arg2="modern"/>
<then>
<property name="skip.slice" value="1"/>
</then>
</if>
<if>
<!--If AppCache is FALSE or non-existent skip it-->
<or>
<x-is-false value="${app.output.appCache.enable}"/>
<not>
<isset property="app.output.appCache.enable"/>
</not>
</or>
<then>
<property name="skip.appCache" value="1"/>
</then>
</if>
<if>
<!--If Deltas are FALSE, deltas do not exist, or caching is disabled then skip delta patching-->
<or>
<x-is-false value="${app.cache.enable}"/>
<!-- This was done because deltas is possibly a boolean OR a string. x-is-false on any normal string appears a falsey value-->
<equals arg1="${app.cache.deltas}" arg2="false"/>
<not>
<isset property="app.cache.deltas"/>
</not>
</or>
<then>
<property name="skip.deltas" value="1"/>
</then>
</if>
<!-- If Deltas are True, 'yes' or 'on' default to 'deltas' otherwise set the appropriate delta path -->
<if>
<x-is-true value="${app.cache.deltas}"/>
<then>
<property name="build.out.deltas.path" location="${build.out.base.path}/deltas"/>
</then>
<else>
<property name="build.out.deltas.path" location="${build.out.base.path}/${app.cache.deltas}"/>
</else>
</if>
<!--<if>-->
<!--<not>-->
<!--<equals arg1="${build.environment}" arg2="development"/>-->
<!--</not>-->
<!--<then>-->
<!--<property name="skip.refresh" value="true"/>-->
<!--</then>-->
<!--</if>-->
</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">
<local name="include.versions.file"/>
<local name="include.versions.file.command"/>
<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=""/>
<property name="include.versions.file.command">
<![CDATA[
meta
+packages
-out=${build.out.package.versions}
and
classpath
-path=${build.out.package.versions}
-name=framework
and
require
-scopeName=framework
-source=Ext.Base
-requires=${build.out.package.versions}
-allow-unmet=false
and
]]>
</property>
<property name="exclude.boot.command">
<![CDATA[
exclude
-class=Ext.Boot
and
]]>
</property>
<condition property="include.versions.file" value="${include.versions.file.command}">
<x-is-false value="${build.skip.versions.file}"/>
</condition>
<property name="include.versions.file" value="#skip"/>
<condition property="exclude.boot" value="${exclude.boot.command}">
<not>
<x-is-true value="${build.output.markuponly}"/>
</not>
</condition>
<property name="exclude.boot" value="#skip"/>
<condition property="enable.split.framework" value="true">
<x-is-true value="${enable.split.mode}"/>
</condition>
<condition property="enable.split.framework" value="true">
<x-is-true value="${app.output.framework.enable}"/>
</condition>
<property name="enable.split.framework" value="false"/>
<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
-splitFramework=${enable.split.framework}
-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
${include.versions.file}
union
-recursive
-tag=${build.tag.name}
and
save
${build.tag.name}-overrides
and
${build.operations}
and
${exclude.boot}
save
page
]]>
</x-compile>
</target>
<target name="-init-app-js-files" depends="-init-compiler">
<x-compile refid="${compiler.ref.id}">
<![CDATA[
union
-recursive
-tag=${build.tag.name}
and
save
${build.tag.name}-overrides
and
${build.operations}
and
${exclude.boot}
save
page
]]>
</x-compile>
</target>
<target name="-init-web-server" unless="skip.web.start">
<x-server port="${build.web.port}"
portPropertyName="build.web.port"
defaultSassFile="${app.out.scss}"
defaultCssFile="${app.out.css}"
refid="app.web.server"
saveVariablesProp="app.sass.generated.var"
uiDirProp="app.sass.generated.src"
sassNamespaceProp="app.sass.namespace"
j2eeMode="${use.webxml}">
<mapping name="~cmd" path="${cmd.dir}"/>
<mapping name="" path="${build.web.root}"/>
</x-server>
<x-echo>Application available at http://localhost:${build.web.port}</x-echo>
</target>
</project>

@ -1,111 +0,0 @@
<project name="x-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-app-js-files">
<x-load-app-builder-properties
refid="${compiler.ref.id}"
splitModePropName="enable.split.mode"
pageModePropName="app.page.mode"
hasJsSdkPropName="app.has.js.sdk"
hasCssSdkPropName="app.has.css.sdk"/>
</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>
<property name="app.output.framework.include"
value="package-sencha-core,framework,toolkit,package-core"/>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
# build a separate sdk-only js file
restore
page
and
${build.optimize}
and
exclude
-all
and
include
-tag=${app.output.framework.include}
and
save
allframework
and
intersect
-set=page,allframework
and
save
frameworkdeps
and
include
-tag=Ext.cmd.derive
and
concat
-remove-text-references=${build.remove.references}
-optimize-string-references=${build.optimize.string.references}
-remove-requirement-nodes=${build.remove.requirement.nodes}
${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
-set=frameworkdeps
and
exclude
-tag=Ext.cmd.derive,derive
and
concat
-remove-text-references=${build.remove.references}
-optimize-string-references=${build.optimize.string.references}
-remove-requirement-nodes=${build.remove.requirement.nodes}
${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
-remove-text-references=${build.remove.references}
-optimize-string-references=${build.optimize.string.references}
-remove-requirement-nodes=${build.remove.requirement.nodes}
${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>

@ -748,43 +748,43 @@ Ext.define('Ngcp.csc.locales', {
sp: 'Create new contact'
}
},
reminder:{
title:{
reminder: {
title: {
en: 'Set your personal alarm.',
it: 'Set your personal alarm.',
de: 'Set your personal alarm.',
fr: 'Set your personal alarm.',
sp: 'Set your personal alarm.'
},
subtitle:{
subtitle: {
en: 'Reminder',
it: 'Reminder',
de: 'Reminder',
fr: 'Reminder',
sp: 'Reminder'
},
settings:{
settings: {
en: 'Settings for',
it: 'Settings for',
de: 'Settings for',
fr: 'Settings for',
sp: 'Settings for'
},
is:{
is: {
en: 'Reminder is',
it: 'Reminder is',
de: 'Reminder is',
fr: 'Reminder is',
sp: 'Reminder is'
},
time:{
time: {
en: 'Time of the day',
it: 'Time of the day',
de: 'Time of the day',
fr: 'Time of the day',
sp: 'Time of the day'
},
recurrence:{
recurrence: {
en: 'Recurrence',
it: 'Recurrence',
de: 'Recurrence',
@ -792,7 +792,7 @@ Ext.define('Ngcp.csc.locales', {
sp: 'Recurrence'
},
never:{
never: {
en: 'never',
it: 'never',
de: 'never',
@ -800,7 +800,7 @@ Ext.define('Ngcp.csc.locales', {
sp: 'never'
},
weekdays:{
weekdays: {
en: 'on weekedays',
it: 'on weekedays',
de: 'on weekedays',
@ -808,7 +808,7 @@ Ext.define('Ngcp.csc.locales', {
sp: 'on weekedays'
},
always:{
always: {
en: 'every day',
it: 'every day',
de: 'every day',
@ -816,8 +816,8 @@ Ext.define('Ngcp.csc.locales', {
sp: 'every day'
}
},
webrtc:{
title:{
webrtc: {
title: {
en: 'Webrtc',
it: 'Webrtc',
de: 'Webrtc',
@ -1017,6 +1017,64 @@ Ext.define('Ngcp.csc.locales', {
sp: 'Choose file'
}
},
themeroller: {
title: {
en: 'Theme roller',
it: 'Theme roller',
de: 'Theme roller',
fr: 'Theme roller',
sp: 'Theme roller'
},
first_section_title: {
en: 'Colors',
it: 'Colors',
de: 'Colors',
fr: 'Colors',
sp: 'Colors'
},
second_section_title: {
en: 'Fonts',
it: 'Fonts',
de: 'Fonts',
fr: 'Fonts',
sp: 'Fonts'
},
third_section_title: {
en: 'Logo',
it: 'Logo',
de: 'Logo',
fr: 'Logo',
sp: 'Logo'
},
fontfamily: {
en: 'Font family',
it: 'Font family',
de: 'Font family',
fr: 'Font family',
sp: 'Font family'
},
fontsize: {
en: 'Font size',
it: 'Font size',
de: 'Font size',
fr: 'Font size',
sp: 'Font size'
},
fontweight: {
en: 'Font weight',
it: 'Font weight',
de: 'Font weight',
fr: 'Font weight',
sp: 'Font weight'
},
logo: {
en: 'Logo',
it: 'Logo',
de: 'Logo',
fr: 'Logo',
sp: 'Logo'
}
},
common: {
today: {
en: 'Today',

@ -1,28 +0,0 @@
# =============================================================================
# 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

@ -1,8 +0,0 @@
# =============================================================================
# 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.
# =============================================================================

@ -1,27 +0,0 @@
# =============================================================================
# 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

@ -1,11 +0,0 @@
# =============================================================================
# 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.
# =============================================================================

@ -1,22 +0,0 @@
<project name="packager-impl" default="-native-package">
<target name="-init-native-package">
<if>
<isset property="app.packager"/>
<then>
<x-ant-call target="${app.packager}-init-native-package" inheritall="true" inheritrefs="true"/>
</then>
</if>
</target>
<!--Sencha App build will land here after everything is done-->
<target name="-before-native-package"/>
<target name="-native-package">
<if>
<isset property="app.packager"/>
<then>
<x-ant-call target="${app.packager}-native-package" inheritall="true" inheritrefs="true"/>
</then>
</if>
</target>
<target name="-after-native-package"/>
</project>

@ -1,327 +0,0 @@
<project name="x-page-impl.xml">
<macrodef name="x-build-microload-markup">
<sequential>
<if>
<not>
<equals arg1="${build.compression}" arg2=""/>
</not>
<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>
</then>
</if>
<if>
<x-is-true value="${build.enable.embedded.microloader}"/>
<then>
<x-run-if-true value="${app.output.page.enable}">
<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}"/>
</x-run-if-true>
</then>
<else>
<x-run-if-true value="${app.output.page.enable}">
<x-compile refid="${compiler.ref.id}">
<![CDATA[
markup
-markup=${build.external.microloader.markup}
-out=${build.out.page.path}
]]>
</x-compile>
</x-run-if-true>
</else>
</if>
</sequential>
</macrodef>
<target name="-build-output-manifest-page">
<local name="metadata.base.path"/>
<property name="metadata.base.path" value="${build.out.metadata.dir}"/>
<x-run-if-true value="${app.output.manifest.enable}">
<if>
<x-is-true value="${build.enable.embedded.manifest}"/>
<then>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
# generate microloader file
# generate json file
microload
-operation=manifest
-jsonp=Ext.Microloader.setManifest
-fashion=${use.fashion}
-tpl=${build.microloader.json.tpl.embedded}
-out=${build.microloader.path}
-resourcePath=${build.out.base.path}
-basePath=${metadata.base.path}
and
microload
-append
-operation=microloader
-microloaderPath=${app.microloader.path}
-bootPath=${build.boot.file}
-tpl=${build.microloader.code.tpl}
-out=${build.microloader.path}
]]>
</x-compile>
</then>
<else>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
# generate json file
microload
-operation=manifest
-jsonp=Ext.Microloader.setManifest
-fashion=${use.fashion}
-tpl=${build.microloader.json.tpl.standalone}
-out=${build.out.json.path}
-resourcePath=${build.out.base.path}
-basePath=${metadata.base.path}
and
microload
-operation=manifest
-jsonp=Ext.Microloader.setManifest
-fashion=${use.fashion}
-tpl=${build.microloader.json.tpl.external}
-out=${build.microloader.path}
-resourcePath=${build.out.base.path}
-basePath=${metadata.base.path}
and
# generate microloader file
microload
-append
-operation=microloader
-microloaderPath=${app.microloader.path}
-bootPath=${build.boot.file}
-tpl=${build.microloader.code.tpl}
-out=${build.microloader.path}
]]>
</x-compile>
</else>
</if>
</x-run-if-true>
<x-build-microload-markup/>
</target>
<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>
<x-build-microload-markup/>
</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=""/>
<if>
<isset property="framework.isV5"/>
<then>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
markup
-out=${build.out.page.path}
-basePath=${build.out.metadata.dir}
-resourcePath=${build.out.base.path}
and
# generate microloader file
# generate json file
microload
-operation=manifest
-fashion=${use.fashion}
-tpl=${build.microloader.json.tpl.embedded}
-out=${build.microloader.path}
-resourcePath=${build.out.base.path}
-basePath=${build.out.metadata.dir}
]]>
</x-compile>
<x-compress-js srcFile="${build.microloader.path}" outFile="${build.microloader.path}"/>
<concat destfile="${build.out.js.path}.tmp">
<fileset file="${build.microloader.path}"/>
<fileset file="${build.out.js.path}"/>
</concat>
<delete file="${build.microloader.path}"/>
<delete file="${build.out.js.path}"/>
<move file="${build.out.js.path}.tmp" tofile="${build.out.js.path}"/>
</then>
<else>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
markup
-out=${build.out.page.path}
-resourcePath=${build.out.base.path}
-basePath=${build.out.metadata.dir}
]]>
</x-compile>
</else>
</if>
</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>
<if>
<x-is-true value="${build.enable.appmanifest}"/>
<then>
<x-ant-call target="-build-output-manifest-page"/>
</then>
<else>
<x-ant-call target="-build-output-microload-page"/>
</else>
</if>
</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.out.base.path}
]]>
</x-compile>
</target>
<target name="-apply-version-stamps" depends="-init-compiler">
<x-run-if-true value="${app.cache.enable}">
<x-compile refid="${compiler.ref.id}">
<![CDATA[
versions
-resourcePath=${build.out.base.path}
]]>
</x-compile>
</x-run-if-true>
</target>
<target name="-generate-deltas" depends="-apply-version-stamps">
<if>
<and>
<x-is-false value="${skip.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.deltas.path}
-resourcePath=${build.out.base.path}
]]>
</x-compile>
</then>
</if>
</target>
<target name="-generate-cache-manifest" depends="-init-compiler">
<if>
<and>
<x-is-false value="${skip.appCache}"/>
<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="&lt;html manifest=&quot;&quot;"
value="&lt;html manifest=&quot;${build.out.appCache.name}&quot;"/>
</then>
</if>
<!--remove manifest placeholder if present-->
<replace file="${build.out.page.path}"
token="&lt;html manifest=&quot;&quot;"
value="&lt;html"/>
</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>

@ -1,231 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="PhoneGap" default="phonegap-help">
<!--Legacy properties file support-->
<property file="${app.dir}/phonegap.local.properties"/>
<!--Init for All PhoneGap Tasks-->
<target name="-before-phonegap-init"/>
<target name="-phonegap-init">
<if>
<or>
<x-is-true value="${args.emulate}"/>
<x-is-true value="${args.autorun}"/>
</or>
<then>
<property name="phonegap.skip.build" value="true"/>
</then>
</if>
<!--Check for verbose output config from the user-->
<if>
<x-is-true value="app.phonegap.config.verbose"/>
<then>
<property name="phonegap.cli.options" value="-d"/>
</then>
<else>
<property name="phonegap.cli.options" value=""/>
</else>
</if>
</target>
<target name="-after-phonegap-init"/>
<target name="phonegap-init"
depends="-init, -before-phonegap-init, -phonegap-init, -after-phonegap-init"/>
<!--Default target outputs help information-->
<target name="phonegap-help"/>
<!-- Create Phonegap Application-->
<target name="phonegap-create" depends="phonegap-init">
<if>
<not>
<available file="${app.phonegap.config.path}" type="dir"/>
</not>
<then>
<phonegap-echo message="Creating Phonegap Application with ID &quot;${app.phonegap.config.id}&quot; and Name &quot;${app.phonegap.config.name}&quot;"/>
<x-shell reloadprofile="true" dir="${app.dir}">
phonegap ${phonegap.cli.options} create "${app.phonegap.config.path}" ${app.phonegap.config.id} ${app.phonegap.config.name}
</x-shell>
<!--
Phonegap puts config.xml in the www root folder, this is dangerous due to how we clean this folder out
we will move it up to the phonegap root in order to keep parity with cordova.
Later we will copy this file back into www during remote builds
-->
<move file="${build.out.base.path}/config.xml" todir="${app.phonegap.config.path}" failonerror="false" overwrite="false" />
</then>
</if>
</target>
<!-- Prepares application for specified platform -->
<target name="-before-phonegap-prepare"/>
<target name="-phonegap-prepare" if="args.prepare">
<fail status="0" message="Phonegap does not currently support prepare command, if this is required for your workflow please try Apache Cordova "/>
</target>
<target name="-after-phonegap-prepare"/>
<target name="phonegap-prepare" depends="phonegap-init, -before-phonegap-prepare, -phonegap-prepare, -after-phonegap-prepare"/>
<!-- Emulates application for the specified platform -->
<target name="-before-phonegap-emulate"/>
<target name="-phonegap-emulate" depends="-phonegap-check-platform, -phonegap-check-config-xml" if="args.emulate">
<if>
<x-is-true value="${phonegap.build.remote}"/>
<then>
<x-ant-call target="-phonegap-remote-emulate"/>
</then>
<else>
<x-ant-call target="-phonegap-local-emulate"/>
</else>
</if>
</target>
<target name="-after-phonegap-emulate"/>
<target name="phonegap-emulate" depends="phonegap-init, -before-phonegap-emulate, -phonegap-emulate, -after-phonegap-emulate"/>
<!-- Runs application on a device for the specified platform -->
<target name="-before-phonegap-run"/>
<target name="-phonegap-run" depends="-phonegap-check-platform, -phonegap-check-config-xml" if="args.autorun">
<if>
<x-is-true value="${phonegap.build.remote}"/>
<then>
<x-ant-call target="-phonegap-remote-run"/>
</then>
<else>
<x-ant-call target="-phonegap-local-run"/>
</else>
</if>
</target>
<target name="-after-phonegap-run"/>
<target name="phonegap-run" depends="phonegap-init, -before-phonegap-run, -phonegap-run, -after-phonegap-run"/>
<!-- Overall Phonegap Build Target. Determines type of build to use -->
<target name="-before-phonegap-build"/>
<target name="-phonegap-build" depends="-phonegap-check-platform, -phonegap-check-config-xml" unless="phonegap.skip.build">
<if>
<x-is-true value="${phonegap.build.remote}"/>
<then>
<x-ant-call target="-phonegap-remote-build"/>
</then>
<else>
<x-ant-call target="-phonegap-local-build"/>
</else>
</if>
</target>
<target name="-after-phonegap-build"/>
<target name="phonegap-build" depends="phonegap-init, -before-phonegap-build, -phonegap-build, -after-phonegap-build" />
<!-- Private Utility Target to make sure users have declared a platform to take action on -->
<target name="-phonegap-check-platform">
<fail status="0" message="No platforms were specified, add a platform to ${build.name}'s -> phonegap -> config -> platform property in app.json">
<condition>
<or>
<not>
<isset property="phonegap.platform"/>
</not>
<contains string="${phonegap.platform}" substring="$"/>
</or>
</condition>
</fail>
</target>
<!-- Private Utility target to copy the config.xml file back into the WWW folder -->
<target name="-phonegap-check-config-xml">
<copy todir="${build.out.base.path}" file="${app.phonegap.config.path}/config.xml" failonerror="false" overwrite="true" quiet="true"/>
</target>
<!-- Private Remote Build Targets-->
<target name="-phonegap-remote-login">
<phonegap-echo message="Attempting login to PhoneGap Build"/>
<if>
<not>
<and>
<isset property="phonegap.build.remote.username"/>
<isset property="phonegap.build.remote.password"/>
</and>
</not>
<then>
<phonegap-echo level="warning">
Phonegap Build login credentials were was not found. If you have not logged in prior to running this command.
Please either login via &quot;phonegap remote login&quot; or edit your [APP_ROOT]/local.properties and set &quot;phonegap.username&quot; and &quot;phonegap.password&quot; appropriately
</phonegap-echo>
</then>
</if>
<x-shell reloadprofile="true" dir="${app.phonegap.config.path}">
phonegap ${phonegap.cli.options} remote login --username="${phonegap.build.remote.username}" --password="${phonegap.build.remote.password}"
</x-shell>
</target>
<target name="-phonegap-remote-build" depends="-phonegap-remote-login">
<phonegap-echo message="Attempting PhoneGap remote build for ${phonegap.platform}"/>
<x-shell reloadprofile="true" dir="${app.phonegap.config.path}">
phonegap ${phonegap.cli.options} remote build ${phonegap.platform}
</x-shell>
</target>
<target name="-phonegap-remote-run" depends="-phonegap-remote-login">
<phonegap-echo message="Attempting PhoneGap remote run for ${phonegap.platform}"/>
<x-shell reloadprofile="true" dir="${app.phonegap.config.path}">
phonegap ${phonegap.cli.options} remote run ${phonegap.platform}
</x-shell>
</target>
<target name="-phonegap-remote-emulate" depends="-phonegap-remote-login">
<phonegap-echo message="Attempting PhoneGap remote emulate for ${phonegap.platform}"/>
<x-shell reloadprofile="true" dir="${app.phonegap.config.path}">
phonegap ${phonegap.cli.options} remote run ${phonegap.platform} --emulator
</x-shell>
</target>
<!-- Private Local Build Targets-->
<target name="-phonegap-local-build">
<phonegap-echo message="Attempting PhoneGap local build for ${phonegap.platform}"/>
<x-shell reloadprofile="true" dir="${app.phonegap.config.path}">
phonegap ${phonegap.cli.options} local build ${phonegap.platform}
</x-shell>
</target>
<target name="-phonegap-local-run">
<phonegap-echo message="Attempting PhoneGap local run for ${phonegap.platform}"/>
<x-shell reloadprofile="true" dir="${app.phonegap.config.path}">
phonegap ${phonegap.cli.options} local run ${phonegap.platform}
</x-shell>
</target>
<target name="-phonegap-local-emulate">
<phonegap-echo message="Attempting PhoneGap local emulate for ${phonegap.platform}"/>
<x-shell reloadprofile="true" dir="${app.phonegap.config.path}">
phonegap ${phonegap.cli.options} local run ${phonegap.platform} --emulator
</x-shell>
</target>
<!-- Internal Packager Hooks -->
<target name="-before-phonegap-init-native-package"/>
<target name="-phonegap-init-native-package" depends="phonegap-init, phonegap-create"/>
<target name="-after-phonegap-init-native-package"/>
<target name="phonegap-init-native-package" depends="-before-phonegap-init-native-package, -phonegap-init-native-package, -after-phonegap-init-native-package"/>
<target name="-before-phonegap-native-package"/>
<target name="-phonegap-native-package" depends="phonegap-build, phonegap-emulate, phonegap-run"/>
<target name="-after-phonegap-native-package"/>
<target name="phonegap-native-package" depends="phonegap-init, -before-phonegap-native-package, -phonegap-native-package, -after-phonegap-native-package"/>
<macrodef name="phonegap-echo">
<text name="text" optional="true"/>
<attribute name="message" default=""/>
<attribute name="level" default="info"/>
<sequential>
<if>
<equals arg1="@{message}" arg2=""/>
<then>
<x-echo message="[Phonegap] @{text}" level="@{level}"/>
</then>
<else>
<x-echo message="[Phonegap] @{message}" level="@{level}"/>
</else>
</if>
</sequential>
</macrodef>
</project>

@ -1,15 +0,0 @@
#
# Copyright (c) 2012-2014. Sencha Inc.
#
# Original PhoneGap Packager used the following properties
# here we map in the app space properties to allow for app.json
# setting of these instead of properties files
phonegap.platform=${app.phonegap.config.platform}
phonegap.build.remote=${app.phonegap.config.remote}
# These are simply shorthanded as the user must specify them in
# a local.properties file anyway.
# No need for the user to type all this out.
phonegap.build.remote.username=${phonegap.username}
phonegap.build.remote.password=${phonegap.password}

@ -1,32 +0,0 @@
<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>

@ -1,27 +0,0 @@
# =============================================================================
# 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 the full class system optimizer
app.output.js.optimize=true
build.optimize=${build.optimize.enable}
enable.resource.compression=true
build.embedded.microloader.compressor=-closure

@ -1,8 +0,0 @@
# =============================================================================
# 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.
# =============================================================================

@ -1,143 +0,0 @@
<project name="x-refresh-impl">
<import file="bootstrap-impl.xml"/>
<target name="-init-refresh" depends="-detect-app-build-properties">
<property name="app.bootstrap.base.path"
value="${build.bootstrap.metadata.dir}"/>
</target>
<target name="-refresh-app-manifest" if="build.enable.appmanifest" depends="-init-refresh">
<local name="manifest.root.excludes"/>
<condition property="manifest.root.excludes" value="${app.bootstrap.manifest.exclude}">
<isset property="app.bootstrap.manifest.exclude"/>
</condition>
<condition property="manifest.root.excludes" value="loadOrder">
<and>
<x-is-true value="${app.has.js.sdk}"/>
<not>
<isset property="app.watch.enabled"/>
</not>
</and>
</condition>
<property name="manifest.root.excludes" value=""/>
<property name="metadata.bootstrap.base.path" value="${build.bootstrap.metadata.dir}"/>
<condition property="refresh.file.filter" value="framework,package-core,package-${toolkit.name}">
<x-is-true value="${framework.isV6}"/>
</condition>
<property name="refresh.file.filter" value="framework,package-sencha-core"/>
<if>
<x-is-true value="${app.has.js.sdk}"/>
<then>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
include
-all
and
exclude
-tag=${refresh.file.filter}
and
save
bootstrap
]]>
</x-compile>
</then>
<else>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
include
-all
and
save
bootstrap
]]>
</x-compile>
</else>
</if>
<x-get-relative-path from="${build.bootstrap.page.dir}"
to="${build.json.bootstrap.path}"
property="build.json.bootstrap.rel.path"/>
<echo file="${app.bootstrap.js}">var Ext = Ext || {};
Ext.manifest = Ext.manifest || "${build.json.bootstrap.rel.path}";
</echo>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
microload
-operation=microloader
-microloaderPath=${app.microloader.bootstrap}
-bootPath=${build.boot.file}
+append
-out=${app.bootstrap.js}
and
microload
-operation=manifest
-jsonp=Ext.Microloader.setManifest
-fashion=${use.fashion}
-bootstrap
+ignoreDisabled
-exclude=${manifest.root.excludes}
-tpl={0}
-basePath=${metadata.bootstrap.base.path}
-out=${build.json.bootstrap.path}
]]>
</x-compile>
</target>
<target name="-refresh-app-bootstrap" unless="build.enable.appmanifest" depends="-init-refresh">
<!--regenerate class system metadata-->
<x-bootstrap file="${app.bootstrap.js}"
basedir="${app.bootstrap.base.path}"
overrideTpl="${bootstrap.override.tpl}"
overrideTplType="${bootstrap.override.tpltype}"
includeOverrides="${bootstrap.include.overrides}"
includeBoot="${bootstrap.include.boot}"/>
<!--
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}
-basePath=${app.bootstrap.base.path}
-out=${build.json.bootstrap.path}
]]>
</x-compile>
</target>
<!--
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,
-refresh-app-manifest,
-refresh-app-bootstrap"/>
<!--
Refresh app
-->
<target name="-before-refresh"/>
<target name="-refresh" depends="-refresh-app"/>
<target name="-after-refresh"/>
</project>

@ -1,88 +0,0 @@
<project name="x-resolve-impl">
<target name="-before-web-start"/>
<target name="-web-start">
<if>
<x-is-true value="enable.browser.launch"/>
<then>
<x-launch-browser url="http://localhost:${build.web.port}"/>
</then>
</if>
</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">
<x-server stop="true" port="${build.web.port}"/>
</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"/>
<target name="-before-explain"/>
<target name="-explain" depends="-init-compiler">
<x-compile refid="${compiler.ref.id}">
<![CDATA[
explain
-alias
${build.app.temp.dir}/${build.tag.name}-master-bundle.js=APPLICATION
${build.app.temp.dir}/${build.tag.name}-master-bundle.js
${args.targetName}
]]>
</x-compile>
</target>
<target name="-after-explain"/>
<target name="explain" depends="init,-before-explain,-explain,-after-explain"/>
</project>

@ -1,27 +0,0 @@
<project name="x-resources-impl">
<target name="-before-resources"/>
<target name="-after-resources"/>
<!--'-init-compiler' defined in init-impl.xml-->
<target name="-resources" depends="-init-compiler">
<property name="target.json.resources.dir" value="${build.out.base.path}"/>
<property name="target.config.resources.dir" value="${build.resources.dir}"/>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
resources
-excludes=-all*.css
-out=${target.config.resources.dir}
and
resources
-model=true
-out=${target.json.resources.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>

@ -1,392 +0,0 @@
<project name="x-sass-impl">
<!--
Uses the compiler to generate the top-level scss file for the app
by using the current set of js files to determine the Components
used by the app, then including the corresponding scss files into the
app's style
-->
<target name="-compile-sass" depends="-init-app-js-files">
<local name="app.out.scss.tmp"/>
<local name="sass.name.filter"/>
<property name="app.out.scss.tmp" value="${app.out.scss}.tmp"/>
<x-normalize-path
path="${build.out.resources.dir}"
property="image.search.path"/>
<if>
<x-is-true value="${build.include.all.scss}"/>
<then>
<property name="sass.name.filter">
include
-all
</property>
</then>
</if>
<property name="sass.name.filter">
restore
page
</property>
<local name="var.begin"/>
<local name="var.end"/>
<local name="resource.map.base"/>
<condition property="var.begin" value="dynamic(">
<isset property="framework.isV6"/>
</condition>
<condition property="var.end" value=")">
<isset property="framework.isV6"/>
</condition>
<property name="var.begin" value=""/>
<property name="var.end" value="!default"/>
<condition property="resource.map.base" value="${css.output.rel.path}">
<x-is-true value="${app.sass.dynamic}"/>
</condition>
<property name="resource.map.base" value=""/>
<if>
<x-is-true value="${app.sass.dynamic}"/>
<then>
<x-get-relative-path
from="${build.out.css.dir}"
to="${build.out.base.path}"
property="css.output.rel.path"/>
</then>
</if>
<property name="css.output.rel.path" value=""/>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
${sass.name.filter}
and
#only set variables for used classes eg. $include-class-name
sass
+class-name-vars
-variable=$app-name: ${var.begin} '${app.name}' ${var.end}
-variable=$image-search-path:'${image.search.path}'
-variable=$theme-name: ${var.begin} '${theme.name}' ${var.end}
-resourceMapBase=${css.output.rel.path}
-output=${app.out.scss.tmp}
-forward=${app.sass.dynamic}
and
include
-all
and
# include etc and vars from all classes
sass
+etc
+vars
+append
-output=${app.out.scss.tmp}
-forward=${app.sass.dynamic}
and
${sass.name.filter}
and
#only include rules from used classes
sass
+rules
+append
-output=${app.out.scss.tmp}
and
sass
+ruby
-sassCacheDir=${compass.cache.dir}
-output=${app.out.ruby}
]]>
</x-compile>
<if>
<not>
<filesmatch file1="${app.out.scss.tmp}" file2="${app.out.scss}"/>
</not>
<then>
<copy file="${app.out.scss.tmp}" tofile="${app.out.scss}" overwrite="true"/>
</then>
</if>
<!--
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="${build.bootstrap.css.path}">
<![CDATA[
/*
* This file is generated by Sencha Cmd and should NOT be edited. It redirects
* to the most recently built CSS file for the application to allow index.html
* in the development directory to load properly (i.e., "dev mode").
*/
@import '${app.out.css.path}';
]]>
</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}"
compilerRefId="${compiler.ref.id}"/>
<for param="cssfile">
<fileset dir="@{dir}" includes="@{prefix}*.css"/>
<sequential>
<local name="css.output.name"/>
<local name="pattern"/>
<property name="pattern" value="(.*?)(@{prefix})(_\d{1,2})*\.css"/>
<propertyregex property="css.output.name"
input="@{cssfile}"
regexp="${pattern}"
select="\1@{outprefix}\3.css"
override="true"/>
<if>
<equals arg1="@{preprocess}" arg2="true"/>
<then>
<x-echo>Preprocessing @{cssfile} to ${css.output.name}</x-echo>
<x-css-preprocess
file="@{cssfile}"
tofile="${css.output.name}"
options="${build.css.preprocessor.opts}"/>
</then>
</if>
<if>
<equals arg1="@{compress}" arg2="true"/>
<then>
<x-echo>Compressing @{cssfile} to ${css.output.name}</x-echo>
<x-compress-css srcfile="@{cssfile}"
outfile="${css.output.name}"/>
</then>
</if>
</sequential>
</for>
</sequential>
</macrodef>
<!--
This target builds Ext JS 4.2+ style themes, first generating the top-level
scss file, then running compass with the css, sass, and config options set
-->
<target name="-compass-compile-theme-package" depends="-load-sass-page">
<x-run-if-true value="${enable.ext42.themes}">
<local name="compress.uptodate"/>
<x-ant-call target="-compile-sass"/>
<if>
<x-is-true value="${app.sass.fashion}"/>
<then>
<if>
<x-is-true value="${app.sass.rhino}"/>
<then>
<x-fashion-compile
file="${app.out.scss}"
toFile="${app.out.css}"/>
</then>
<else>
<x-fashion-live-update input="${app.out.scss}"
output="${app.out.css}"
refId="app.web.server"
split="${build.css.selector.limit}"
compress="${build.css.compress}"
compilerRefId="${compiler.ref.id}"/>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
microload
-operation=manifest
-fashion=false
-tpl=${build.microloader.json.tpl.standalone}
-out=${build.out.json.path}
-resourcePath=${build.out.base.path}
-basePath=${build.out.metadata.dir}
]]>
</x-compile>
<x-sencha-command>
fashion
-config=${build.out.json.path}
-compress=${build.css.compress}
-split=${build.css.selector.limit}
-saveFile=${app.dir}/${app.sass.generated.var}
${app.out.scss}
${app.out.css}
</x-sencha-command>
<x-update-css-array input="${app.out.css}"
compilerRefId="${compiler.ref.id}"/>
<if>
<and>
<available file="${build.out.css.dir}/css-vars.js"/>
</and>
<then>
<x-sencha-command>
<![CDATA[
fs
concat
-to=${build.out.css.dir}/css-vars.js.tmp
${cmd.dir}/extensions/sencha-fashion/fashion/fashion-export-min.js
${build.out.css.dir}/css-vars.js
]]>
</x-sencha-command>
<if>
<not>
<equals arg1="${build.compression}" arg2=""/>
</not>
<then>
<x-compress-js srcFile="${build.out.css.dir}/css-vars.js.tmp"
outFile="${build.out.css.dir}/css-vars.js.tmp"/>
</then>
</if>
<delete file="${build.out.css.dir}/css-vars.js"/>
<move file="${build.out.css.dir}/css-vars.js.tmp"
tofile="${build.out.css.dir}/css-vars.js"/>
<if>
<not>
<equals arg1="${build.environment}" arg2="development"/>
</not>
<then>
<concat destfile="${build.out.js.path}" append="true">
<filelist files="${build.out.css.dir}/css-vars.js"/>
</concat>
</then>
</if>
</then>
</if>
</else>
</if>
</then>
<else>
<x-compass-compile
rubyPath="${build.ruby.path}"
dir="${compass.working.dir}"
trace="${compass.compile.trace}"
boring="${compass.compile.boring}"
force="${compass.compile.force}"
sassdir="${compass.sass.dir}"
cssdir="${compass.css.dir}"
config="${compass.config.file}"/>
<uptodate property="compress.uptodate"
value="true"
srcfile="${app.out.scss}.tmp"
targetfile="${app.out.css}"/>
<if>
<x-is-true value="${compress.uptodate}"/>
<!--<x-is-true value="true"/>-->
<then>
<x-compress-css-files dir="${build.out.css.dir}"
prefix="${app.out.base.debug}"
outprefix="${app.out.base}"
preprocess="${build.css.preprocess}"
compress="${build.css.compress}"/>
</then>
</if>
</else>
</if>
</x-run-if-true>
</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>

@ -1,14 +0,0 @@
# this property specifies a comma separated list of paths containing
# resources to copy to the build directory
app.resource.paths=
#==============================================================================
# Custom Properties - Place customizations below this line to avoid merge
# conflicts with newer versions
app.framework.version=6.2.0.981
app.cmd.version=6.2.0.103

@ -1,388 +0,0 @@
<project name="x-slice-impl">
<target name="-load-sass-page"
depends="-detect-app-build-properties,
-generate-slicer-bootstrap,
-generate-slicer-manifest">
</target>
<!--
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">
<local name="app.example.scss.tmp"/>
<property name="app.example.scss.tmp" value="${app.example.scss}.tmp"/>
<x-normalize-path
path="${build.out.resources.dir}"
property="image.search.path"/>
<local name="var.begin"/>
<local name="var.end"/>
<condition property="var.begin" value="dynamic(">
<isset property="framework.isV6"/>
</condition>
<condition property="var.end" value=")">
<isset property="framework.isV6"/>
</condition>
<property name="var.begin" value=""/>
<property name="var.end" value="!default"/>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
restore
page
and
include
-all
and
sass
+class-name-vars
+etc
+vars
+rules
-variable=$app-name: ${var.begin} '${app.name}' ${var.end}
-variable=$image-search-path:'${image.search.path}'
-variable=$theme-name: ${var.begin} '${theme.name}' ${var.end}
-output=${app.example.scss.tmp}
-forward=${app.sass.dynamic}
and
restore
page
and
sass
+ruby
-output=${app.example.out.ruby}
]]>
</x-compile>
<if>
<not>
<filesmatch file1="${app.example.scss.tmp}" file2="${app.example.scss}"/>
</not>
<then>
<copy file="${app.example.scss.tmp}" tofile="${app.example.scss}" overwrite="true"/>
</then>
</if>
<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">
<if>
<x-is-true value="${app.sass.fashion}"/>
<then>
<if>
<x-is-true value="${app.sass.rhino}"/>
<then>
<x-fashion-compile
file="${app.example.build.dir}"
toFile="${app.example.build.dir}"/>
</then>
<else>
<x-sencha-command>
fashion
-compress=${build.css.compress}
-split=${build.css.selector.limit}
${app.example.build.dir}
${app.example.build.dir}
</x-sencha-command>
</else>
</if>
</then>
<else>
<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}"/>
</else>
</if>
</target>
<!-- Produces a bootstrap.js file for ext 4.2 slicer pages -->
<target name="-generate-slicer-bootstrap" unless="framework.isV5">
<local name="relpath"/>
<x-get-relative-path from="${bootstrap.base.path}"
to="${framework.packages.dir}"
property="relpath"/>
<x-bootstrap file="${bootstrap.example.js}"
basedir="${bootstrap.base.path}"
includeBoot="true"
includeCoreFiles="true"
overrideTpl="${bootstrap.override.tpl}"
overrideTplType="${bootstrap.override.tpltype}"
overrideExcludeTags="">
<![CDATA[
Ext.Boot.loadSync([
"render.js",
"${relpath}/ext-theme-base/sass/example/manifest.js",
"${relpath}/ext-theme-base/sass/example/shortcuts.js",
"custom.js"
]);
]]>
</x-bootstrap>
</target>
<!-- Produces a bootstrap.js / bootstrap.json pair for ext 5 slicer pages -->
<target name="-generate-slicer-manifest" if="framework.isV5" depends="-detect-app-build-properties">
<local name="manifest.root.excludes"/>
<condition property="manifest.root.excludes" value="${app.bootstrap.manifest.exclude}">
<isset property="app.bootstrap.manifest.exclude"/>
</condition>
<property name="manifest.root.excludes" value=""/>
<if>
<x-is-true value="${app.has.js.sdk}"/>
<then>
<property name="manifest.bootstrap.js.exclude">
exclude
-tag=framework,package-sencha-core,package-core,package-${toolkit.name}
</property>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
restore
page
and
${manifest.bootstrap.js.exclude}
]]>
</x-compile>
</then>
</if>
<property name="remove.slicer.css.bootstrap.entries" value="false"/>
<x-compile refid="${compiler.ref.id}">
<![CDATA[
slicer-manifest
-exclude=${manifest.root.excludes}
-jsonp=Ext.Microloader.setManifest
-removeBootstrapCssEntries=${remove.slicer.css.bootstrap.entries}
+ignoreDisabled
-basePath=${bootstrap.base.path}
-cssFile=${app.example.css.file}
-out=${bootstrap.example.json}
and
microload
-operation=microloader
-microloaderPath=${build.slicer.microloader.file}
-bootPath=${build.boot.file}
-out=${bootstrap.example.js}
]]>
</x-compile>
</target>
<target name="-capture-theme-image">
<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>
</target>
<target name="-capture-sass-page-image">
<if>
<and>
<x-is-true value="${app.sass.fashion}"/>
<x-is-false value="${app.sass.rhino}"/>
</and>
<then>
<echo>Capture theme image to ${build.capture.png}</echo>
<x-capture-slicer-data manifestPath="${build.capture.json}"
imagePath="${build.capture.png}"
refId="app.web.server"/>
</then>
</if>
</target>
<target name="-slice-theme-images">
<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.out.slicer.path}
]]>
</x-sencha-command>
</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="-load-sass-page,
-compass-compile-slicer-css,
-capture-theme-image,
-slice-theme-images">
</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.out.base.path}/${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>

@ -86,6 +86,14 @@ Ext.define('NgcpCsc.store.NavigationTree', {
routeId: 'account',
acl: ['administrator', 'restricted', 'host'],
leaf: true
},
{
text: 'Theme roller',
iconCls: 'x-fa fa-paint-brush',
viewType: 'themeroller',
routeId: 'themeroller',
acl: ['administrator'],
leaf: true
}]
}
});

@ -1,21 +0,0 @@
# =============================================================================
# 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

@ -1,8 +0,0 @@
# =============================================================================
# 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.
# =============================================================================

@ -1,75 +0,0 @@
<project name="x-watch-impl">
<target name="-watch-impl">
<x-ant-call target="${build.trigger.targets}">
<param name="build.id" value="${build.id}"/>
<param name="build.name" value="${build.name}"/>
</x-ant-call>
</target>
<target name="-watch-compiler">
<x-watch compilerRef="${compiler.ref.id}"
targets="-watch-impl"
webServerRefId="app.web.server"/>
</target>
<target name="-watch-theme-package-css">
<x-compass-watch
refName="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
refName="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="-stop-compass-watch">
<x-compass-watch refName="compass-watch" stop="true"/>
</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"/>
<target name="-watch" depends="-init-web-server">
<x-ant-call target="${build.trigger.targets}"/>
<x-ant-call target="web-start" unless="skip.web.start">
<param name="enable.background.server" value="true"/>
</x-ant-call>
<x-ant-call target="${build.watcher.targets}">
<param name="build.id" value="${build.id}"/>
<param name="build.name" value="${build.name}"/>
</x-ant-call>
<x-ant-call target="web-stop" unless="skip.web.start">
<param name="enable.background.server" value="true"/>
</x-ant-call>
<x-ant-call target="-stop-compass-watch"/>
</target>
<target name="-after-watch" depends="init"/>
</project>

@ -54,4 +54,3 @@
.boldFont {
font-weight: bold;
}

@ -48,6 +48,36 @@
$row-indicator-over-color: transparent
);
// override of extjs classes to add css variables defined in sass/var/view/main:
.x-form-text-default {
color: var(--color);
padding: 5px 10px 4px;
background-color: var(--body-background-color);
font: var(--font-weight) var(--font-size) var(--font-family);
min-height: 30px;
}
.x-form-item-label-default {
color: var(--color);
font: var(--font-weight) var(--font-size) var(--font-family);
min-height: 32px;
padding-top: 8px;
padding-right: 5px;
}
.x-btn-inner-default-small {
font: 500 calc(#{var(--font-size)} - 1px) var(--font-family);
color: #f0f0f0;
padding: 0 5px;
max-width: 100%;
}
//$var: dynamic(mix(#000, var(--font-size), 10%));
.x-btn-over.x-btn-default-small {
border-color: #578e3e;
background-image: none;
background-color: var(--base-color);
opacity:0.8;
}
//--------------------------------------------------------
// Create classes for full-size responsive items
@ -126,21 +156,20 @@
.logo {
background-color: $base-color;
height: 65px;
height: 65px !important;
line-height: 65px;
font-size: 16px;
color: $lightest-color;
margin-left: 17px;
.main-logo {
line-height: 65px;
img{
margin-left: 22px;
margin-right: 22px;
top: 8px;
width: 70px;
position: relative;
}
img{
position: absolute;
margin: auto;
top: 0;
left: 0;
right: 0;
bottom: 0;
height: 100%;
}
}
@ -380,11 +409,11 @@
.white-box {
border: 1px lightgray solid;
background-color: #fff;
background-color: $body-background-color;
border-radius:10px;
margin: 0px 20px 10px 0px;
.x-panel-body{
background-color: #fff;
background-color: $body-background-color;
}
}
.reduced-margin {

@ -0,0 +1,3 @@
$accordion-header-color: white;
$accordion-header-background-color: $base-color;
$accordion-header-over-background-color: $base-color;

@ -29,10 +29,11 @@ Ext.define('NgcpCsc.view.main.Main', {
height: 64,
itemId: 'headerBar',
items: [{
xtype: 'component',
xtype: 'container',
reference: 'logo',
id:'logoContainer',
cls: 'logo',
html: '<div class="main-logo"></div>',
html:'&nbsp;', // workaround to set the height
width: (Ext.isIE9m || !Ext.os.is.Desktop) ? 64 : 250
}, {
margin: '0 0 0 8',
@ -78,7 +79,7 @@ Ext.define('NgcpCsc.view.main.Main', {
id: 'main-view-detail-wrap',
reference: 'mainContainerWrap',
flex: 1,
scrollable: false,
scrollable: true,
height: '100%',
items: [{
xtype: 'treelist',

@ -28,7 +28,7 @@ Ext.define('NgcpCsc.view.main.MainContainerWrap', {
height = Ext.Element.getViewportHeight() - 64, // offset by topmost toolbar height
// We use itemId/getComponent instead of "reference" because the initial
// layout occurs too early for the reference to be resolved
navTree = me.getComponent('navigationTreeList'),
navTree = me.down('#navigationTreeList'),
acl = localStorage.getItem('acl');
me.minHeight = height;

@ -0,0 +1,177 @@
Ext.define('NgcpCsc.view.pages.themeroller.ThemeRoller', {
extend: 'Ext.form.Panel',
xtype: 'themeroller',
viewModel: 'themeroller',
controller: 'themeroller',
title: Ngcp.csc.locales.themeroller.title[localStorage.getItem('languageSelected')],
scrollable: true,
items: [{
margin: '20 0 20 20',
defaults: {
bodyPadding: 20,
userCls: 'white-box',
collapsible: true,
collapsed: false,
layout: 'responsivecolumn'
},
items: [{
title: Ngcp.csc.locales.themeroller.first_section_title[localStorage.getItem('languageSelected')],
items: [{
userCls: 'big-50 small-100',
items: [{
xtype: 'container',
defaults: {
width: '100%'
},
items: [{
xtype: 'colorfield',
fieldLabel: 'Base color',
bind: '{basecolor}',
listeners: {
change: 'applyTheme'
}
}, {
xtype: 'colorselector',
hidden: true
}]
}, {
xtype: 'container',
defaults: {
width: '100%'
},
items: [{
xtype: 'colorfield',
fieldLabel: 'Font color',
bind: '{fontcolor}',
listeners: {
change: 'applyTheme'
}
}, {
xtype: 'colorselector',
hidden: true
}]
}, {
xtype: 'container',
defaults: {
width: '100%'
},
items: [{
xtype: 'colorfield',
fieldLabel: 'Body bgcolor',
bind: '{bodybgcolor}',
listeners: {
change: 'applyTheme'
}
}, {
xtype: 'colorselector',
hidden: true
}]
}, {
layout: 'hbox',
margin: '10 0 0 0',
defaults: {
xtype: 'button',
flex: 1
},
items: [{
text: 'reset',
handler: 'resetTheme',
margin: '0 5 0 0'
}, {
text: 'save',
handler: 'saveTheme'
}]
}]
}]
}, {
title: Ngcp.csc.locales.themeroller.second_section_title[localStorage.getItem('languageSelected')],
items: [{
userCls: 'big-50 small-100',
defaults: {
width: '100%',
listeners: {
change: 'applyTheme'
}
},
items: [{
xtype: 'textfield',
fieldLabel: Ngcp.csc.locales.themeroller.fontfamily[localStorage.getItem('languageSelected')],
bind: '{fontfamily}'
}, {
xtype: 'combo',
fieldLabel: Ngcp.csc.locales.themeroller.fontweight[localStorage.getItem('languageSelected')],
bind: '{fontweight}',
editable: false,
store: Ext.create('Ext.data.Store', {
fields: ['id'],
data: [{
"id": "normal"
}, {
"id": "bold"
}]
}),
valueField: 'id',
displayField: 'id'
}, {
xtype: 'numberfield',
minValue: 6,
editable: false,
bind: '{fontsize}',
fieldLabel: Ngcp.csc.locales.themeroller.fontsize[localStorage.getItem('languageSelected')]
}, {
layout: 'hbox',
margin: '10 0 0 0',
defaults: {
xtype: 'button',
flex: 1
},
items: [{
text: 'reset',
handler: 'resetTheme',
margin: '0 5 0 0'
}, {
text: 'save',
handler: 'saveTheme'
}]
}]
}]
}, {
title: Ngcp.csc.locales.themeroller.third_section_title[localStorage.getItem('languageSelected')],
items: [{
userCls: 'big-50 small-100',
defaults: {
width: '100%'
},
items: [{
xtype: 'filefield',
fieldLabel: Ngcp.csc.locales.themeroller.logo[localStorage.getItem('languageSelected')],
reference:'logoField',
listeners: {
change: 'toggleLogo'
}
}, {
layout: 'hbox',
margin: '10 0 0 0',
defaults: {
xtype: 'button',
flex: 1
},
items: [{
text: 'reset',
handler: 'resetTheme',
margin: '0 5 0 0'
}, {
text: 'save',
handler: 'saveTheme'
}]
}]
}]
}]
}]
});

@ -0,0 +1,66 @@
Ext.define('NgcpCsc.view.pages.themeroller.ThemeRollerController', {
extend: 'Ext.app.ViewController',
alias: 'controller.themeroller',
applyTheme: function() {
var vm = this.getViewModel();
// defer is needded becuse binding is slower than change listener callback
Ext.Function.defer(function() {
Fashion.css.setVariables({
'base-color': '#' + vm.get('basecolor'),
'color': '#' + vm.get('fontcolor'),
'body-background-color': '#' + vm.get('bodybgcolor'),
'font-family': vm.get('fontfamily'),
'font-weight': vm.get('fontweight'),
'font-size': vm.get('fontsize') + 'px',
'form-field-font-size': vm.get('fontsize') + 'px'
});
this.getView().updateLayout()
}, 300, this);
},
resetTheme: function() {
var vm = this.getViewModel();
var logoCont = Ext.getCmp('logoContainer');
var logoField = this.lookupReference('logoField');
// TODO use model and model.reset()
vm.setData({
basecolor: '66A648',
fontcolor: '000',
bodybgcolor: 'fff',
fontfamily: 'Open Sans, Helvetica Neue',
fontweight: 'normal',
fontsize: '13'
});
logoCont.removeAll();
logoField.reset();
this.applyTheme();
},
toggleLogo: function(field) {
var logoCont = Ext.getCmp('logoContainer');
if (field && field.getValue()) {
var reader = new FileReader();
var file = field.getEl().down('input[type=file]').dom.files[0];
reader.onload = function(e) {
logoCont.removeAll();
logoCont.add(Ext.create('Ext.Img', {
src: e.target.result
}));
}
reader.readAsDataURL(file);
}
},
saveTheme: function() {
this.fireEvent('showmessage', true, Ngcp.csc.locales.common.save_success[localStorage.getItem('languageSelected')]);
}
});

@ -0,0 +1,12 @@
Ext.define('NgcpCsc.view.pages.themeroller.ThemeRollerModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.themeroller',
data: {
basecolor: '66A648',
fontcolor: '000',
bodybgcolor: 'fff',
fontfamily: 'Open Sans, Helvetica Neue',
fontweight: 'normal',
fontsize: '13'
}
});

@ -1 +1,18 @@
$base-color: rgb(102, 166, 72);
// using CSS Variables feature
// http://docs.sencha.com/extjs/6.2.1/guides/whats_new/whats_new.html#whats_new-_-whats_new_-_css_variables
$base-color: dynamic(rgb(102, 166, 72));
$body-background-color: dynamic(white) ;
$color: dynamic(black);
$font-family: dynamic('Open Sans', 'Helvetica Neue');
$font-size: dynamic(13px);
$font-weight: dynamic('normal');
html {
--base-color: export;
--body-background-color: export;
--color: export;
--font-family: export;
--font-size: export;
--font-weight: export;
}

Loading…
Cancel
Save