PointsWatcher/www/js/viewAssembler.js

177 lines
5.8 KiB
JavaScript

var templates = {
pointsViewTemplate:"views/pointsViewTemplate.html",
aboutViewTemplate:"views/aboutViewTemplate.html",
defaultViewTemplate:"views/defaultViewTemplate.html",
searchResultsViewTemplate:"views/searchResultsViewTemplate.html",
searchViewTemplate:"views/searchViewTemplate.html",
calcPointsViewTemplate:"views/calcPointsViewTemplate.html",
calcAllowanceViewTemplate:"views/calcAllowanceViewTemplate.html",
loaded: 0,
requested: 0
};
var ___templatesLoadedCallback;
function loadTemplates(callback) {
___templatesLoadedCallback = callback;
//load Mousetache HTML templates
for (var key in templates) {
(function() {
var _key = key.toString();
if ( _key != "loaded" && _key != "requested" ){
templates.requested ++;
var templateLoaded = function( template ){
onTemplateLoaded( template, _key );
}
$.get( templates[ _key ], templateLoaded, "html" );
}
})();
}
}
function onTemplateLoaded(template, key) {
//alert( key + ": " + template);
templates[ key ] = template;
templates.loaded ++;
if ( templates.loaded == templates.requested ) {
___templatesLoadedCallback();
}
}
function isTablet() {
var _w = $(window).width();
var _h = $(window).height();
return (Math.min(_w,_h) >= 600);
}
function onViewClick(event, title, viewTxt) {
var view = { title: title,
backLabel: backButtonLabel,
view: viewAssembler[viewTxt.toString()]()
};
window.viewNavigator.pushView(view);
event.stopPropagation();
return false;
}
function registerViewClick(that, el, id, title, func){
//alert(el.find(id).toString());
el.find(id).on( that.CLICK_EVENT, function(evt){onViewClick(evt, title, func);} );
}
function ViewAssembler() {
this.touchSupported = 'ontouchstart' in window;
//this.CLICK_EVENT = this.touchSupported ? 'touchend' : 'click';
this.CLICK_EVENT = 'click';
return this;
}
ViewAssembler.prototype.defaultView = function() {
var el = $( templates.defaultViewTemplate );
registerViewClick(this, el, "#points", "My Points", "pointsView");
registerViewClick(this, el, "#search", "Food Search", "searchView");
registerViewClick(this, el, "#calculate", "Calculate Points", "calcPointsView");
registerViewClick(this, el, "#calculateAllowance", "Calculate Allowance", "calcAllowanceView");
registerViewClick(this, el, "#about", "About", "aboutView");
return el;
}
ViewAssembler.prototype.pointsView = function () {
var viewModel = {};
viewModel.allowance = dbGet("allowance", 0);
viewModel.dailyPoints = dbGet("dailyPoints", viewModel.allowance);
viewModel.dailyUsed = roundPoints(viewModel.allowance - viewModel.dailyPoints);
viewModel.weeklyPointsAllowed = weeklyPointsAllowed;
viewModel.weeklyPoints = dbGet("weeklyPointsAllowed", viewModel.weeklyPointsAllowed);
viewModel.weeklyUsed = roundPoints(viewModel.weeklyPointsAllowed - viewModel.weeklyPoints);
viewModel.amount = dbGetNum("amount");
var el = $( Mustache.to_html(templates.pointsViewTemplate, viewModel) );
el.find( "#subtractButton" ).on( this.CLICK_EVENT, onSubtractPointsButtonClick );
el.find( "#resetDayButton" ).on( this.CLICK_EVENT, function(evt){onResetPointsButtonClick(true);} );
el.find( "#resetWeekButton" ).on( this.CLICK_EVENT, function(evt){onResetPointsButtonClick(false);} );
return el;
}
ViewAssembler.prototype.aboutView = function() {
var el = $( templates.aboutViewTemplate );
return el;
}
ViewAssembler.prototype.calcPointsView = function () {
var viewModel = {};
viewModel.amount = dbGetNum("calcPointsAmount");
viewModel.protein = dbGetNum("protein");
viewModel.carbs = dbGetNum("carbs");
viewModel.fat = dbGetNum("fat");
viewModel.fiber = dbGetNum("fiber");
var el = $( Mustache.to_html(templates.calcPointsViewTemplate, viewModel) );
el.find( "#calcButton" ).on( this.CLICK_EVENT, onCalcPointsButtonClick );
el.find("#calcSubtractButton").on( this.CLICK_EVENT, pushPointsPage );
return el;
}
ViewAssembler.prototype.calcAllowanceView = function () {
var viewModel = {};
viewModel.allowance = dbGetNum("allowance");
viewModel.weight = dbGetNum("weight");
viewModel.height = dbGetNum("height");
viewModel.age = dbGetNum("age");
var maleNotFemale = dbGet("maleNotFemale", "false") == "true";
if(maleNotFemale){
viewModel.gender = "male";
viewModel.otherGender = "female";
}else{
viewModel.gender = "female";
viewModel.otherGender = "male";
}
var el = $( Mustache.to_html(templates.calcAllowanceViewTemplate, viewModel) );
el.find( "#calcButton" ).on( this.CLICK_EVENT, onCalcAllowanceButtonClick );
return el;
}
ViewAssembler.prototype.searchView = function () {
prepareSearch();
var el = $( templates.searchViewTemplate );
el.find( "#searchButton" ).on( this.CLICK_EVENT, onSearchButtonClick );
return el;
}
ViewAssembler.prototype.searchResultsView = function( foodSearchResults, searchPhrase ) {
var viewModel = {};
viewModel.values = foodSearchResults;
/*
viewModel.values.sort( function(a, b){
if ( a.foodName < b.foodName ) { return -1; }
else if (a.foodName > b.foodName ) { return 1; }
else return 0;
});
*/
if(viewModel.values.length >= maxSearchLength)
viewModel.maxSearchLength = maxSearchLength;
viewModel.criteria = searchPhrase;
var template = templates.searchResultsViewTemplate;
var el = $( Mustache.to_html(template, viewModel) );
el.find( "li" ).on( this.CLICK_EVENT, onNearbyListItemClick );
return el;
}