put stuff in viewHelpers file

This commit is contained in:
Tyler Renelle 2012-07-28 17:02:09 -04:00
parent 86dffb87a6
commit 035a705805
5 changed files with 128 additions and 111 deletions

View file

@ -1,5 +1,5 @@
// Generated by CoffeeScript 1.3.3
var Scoring, content, derby, get, getHabits, ready, view, _ref;
var content, derby, get, getHabits, ready, schema, scoring, view, _ref;
derby = require('derby');
@ -11,65 +11,11 @@ derby.use(require('../../ui'));
content = require('./content');
Scoring = require('./scoring');
scoring = require('./scoring');
view.fn('taskClasses', function(type, completed, value) {
var classes;
classes = type;
if (completed) {
classes += " completed";
}
switch (false) {
case !(value < -8):
classes += ' color-worst';
break;
case !(value >= -8 && value < -5):
classes += ' color-worse';
break;
case !(value >= -5 && value < -1):
classes += ' color-bad';
break;
case !(value >= -1 && value < 1):
classes += ' color-neutral';
break;
case !(value >= 1 && value < 5):
classes += ' color-good';
break;
case !(value >= 5 && value < 10):
classes += ' color-better';
break;
case !(value >= 10):
classes += ' color-best';
}
return classes;
});
schema = require('./schema');
view.fn("percent", function(x, y) {
if (x === 0) {
x = 1;
}
return Math.round(x / y * 100);
});
view.fn("round", function(num) {
return Math.round(num);
});
view.fn("gold", function(num) {
if (num) {
return num.toFixed(1).split('.')[0];
} else {
return "0";
}
});
view.fn("silver", function(num) {
if (num) {
return num.toFixed(1).split('.')[1];
} else {
return "0";
}
});
require('./viewHelpers')(view);
get('/:uidParam?', function(page, model, _arg) {
var uidParam;
@ -83,7 +29,7 @@ get('/:uidParam?', function(page, model, _arg) {
userId = model.get('_userId');
user = users.get(userId);
if (user == null) {
newUser = require('./schema').userSchema;
newUser = schema.userSchema;
_ref1 = content.defaultTasks;
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
task = _ref1[_i];
@ -195,7 +141,7 @@ ready(function(model) {
throw new Error("Direction neither 'up' nor 'down' on checkbox set.");
};
task = model.at("_user.tasks." + i);
Scoring.score({
scoring.score({
user: model.at('_user'),
task: task,
direction: direction()
@ -336,7 +282,7 @@ ready(function(model) {
}
user = model.at('_user');
task = model.at($(el).parents('li')[0]);
return Scoring.score({
return scoring.score({
user: user,
task: task,
direction: direction
@ -371,7 +317,7 @@ ready(function(model) {
daysPassed: daysPassed,
n: n
}, "[debug] Cron (" + today + ", " + n + ")");
_results.push(Scoring.tally(model));
_results.push(scoring.tally(model));
}
return _results;
}
@ -381,10 +327,10 @@ ready(function(model) {
return poormanscron();
}), 3600000);
exports.endOfDayTally = function(e, el) {
return Scoring.tally(model);
return scoring.tally(model);
};
exports.updateSchema = function(e, el) {
return require('./schema').updateSchema(model);
return schema.updateSchema(model);
};
exports.shortcuts = function(e) {
var code, command;

57
lib/app/viewHelpers.js Normal file
View file

@ -0,0 +1,57 @@
// Generated by CoffeeScript 1.3.3
module.exports = function(view) {
view.fn('taskClasses', function(type, completed, value) {
var classes;
classes = type;
if (completed) {
classes += " completed";
}
switch (false) {
case !(value < -8):
classes += ' color-worst';
break;
case !(value >= -8 && value < -5):
classes += ' color-worse';
break;
case !(value >= -5 && value < -1):
classes += ' color-bad';
break;
case !(value >= -1 && value < 1):
classes += ' color-neutral';
break;
case !(value >= 1 && value < 5):
classes += ' color-good';
break;
case !(value >= 5 && value < 10):
classes += ' color-better';
break;
case !(value >= 10):
classes += ' color-best';
}
return classes;
});
view.fn("percent", function(x, y) {
if (x === 0) {
x = 1;
}
return Math.round(x / y * 100);
});
view.fn("round", function(num) {
return Math.round(num);
});
view.fn("gold", function(num) {
if (num) {
return num.toFixed(1).split('.')[0];
} else {
return "0";
}
});
return view.fn("silver", function(num) {
if (num) {
return num.toFixed(1).split('.')[1];
} else {
return "0";
}
});
};

View file

@ -2,44 +2,12 @@ derby = require('derby')
{get, view, ready} = derby.createApp module
derby.use require('derby-ui-boot')
derby.use(require('../../ui'))
# Custom requires
content = require('./content')
Scoring = require('./scoring')
# ========== VIEW HELPERS ==========
view.fn 'taskClasses', (type, completed, value) ->
#TODO figure out how to just pass in the task model, so i can access all these properties from one object
classes = type
classes += " completed" if completed
switch
when value<-8 then classes += ' color-worst'
when value>=-8 and value<-5 then classes += ' color-worse'
when value>=-5 and value<-1 then classes += ' color-bad'
when value>=-1 and value<1 then classes += ' color-neutral'
when value>=1 and value<5 then classes += ' color-good'
when value>=5 and value<10 then classes += ' color-better'
when value>=10 then classes += ' color-best'
return classes
view.fn "percent", (x, y) ->
x=1 if x==0
Math.round(x/y*100)
view.fn "round", (num) ->
Math.round num
view.fn "gold", (num) ->
if num
return num.toFixed(1).split('.')[0]
else
return "0"
view.fn "silver", (num) ->
if num
num.toFixed(1).split('.')[1]
else
return "0"
scoring = require('./scoring')
schema = require('./schema')
require('./viewHelpers')(view)
# ========== ROUTES ==========
@ -59,7 +27,7 @@ get '/:uidParam?', (page, model, {uidParam}) ->
# Else, select a new userId and initialize user
unless user?
newUser = require('./schema').userSchema
newUser = schema.userSchema
for task in content.defaultTasks
guid = task.id = require('derby/node_modules/racer').uuid()
newUser.tasks[guid] = task
@ -159,7 +127,7 @@ ready (model) ->
# Score the user based on todo task
task = model.at("_user.tasks.#{i}")
Scoring.score({user:model.at('_user'), task:task, direction:direction()})
scoring.score({user:model.at('_user'), task:task, direction:direction()})
# Then move the todos to/from _todoList/_completedList
if task.get('type') == 'todo'
@ -272,7 +240,7 @@ ready (model) ->
user = model.at('_user')
task = model.at $(el).parents('li')[0]
Scoring.score({user:user, task:task, direction:direction})
scoring.score({user:user, task:task, direction:direction})
exports.revive = (e, el) ->
stats = model.at '_user.stats'
@ -295,7 +263,7 @@ ready (model) ->
model.set('_user.lastCron', today) # reset cron
for n in [1..daysPassed]
console.log {today: today, lastCron: lastCron, daysPassed: daysPassed, n:n}, "[debug] Cron (#{today}, #{n})"
Scoring.tally(model)
scoring.tally(model)
poormanscron() # Run once on refresh
setInterval (-> # Then run once every hour
poormanscron()
@ -304,11 +272,11 @@ ready (model) ->
# ========== DEBUGGING ==========
exports.endOfDayTally = (e, el) ->
Scoring.tally(model)
scoring.tally(model)
# Temporary solution to running updates against the schema when the code changes
exports.updateSchema = (e, el) ->
require('./schema').updateSchema(model)
schema.updateSchema(model)
# ========== SHORTCUTS ==========

View file

@ -11,7 +11,19 @@ module.exports.userSchema = userSchema = {
}
module.exports.updateSchema = (model) ->
# removed old update code, dangerous to run twice.
# I'm placing db-update code in this function while still in dev, then running
# once on the server, then removing the code. FIXME figure out something better
return
# users = model.get('users')
# console.log _.size(users), 'users.size before'
# for uid,userObj of users
# # remove if they don't have a lastCron (older accounts didn't)
# unless userObj.lastCron?
# model.del "users.#{uid}"
#
# # remove if they haven't logged in in 30 days
# lastCron = new Date( (new Date(userObj.lastCron)).toDateString() ) # calculate as midnight
# today = new Date((new Date).toDateString()) # calculate as midnight
# DAY = 1000 * 60 * 60 * 24
# daysPassed = Math.floor((today.getTime() - lastCron.getTime()) / DAY)
# if daysPassed > 30
# model.del "users.#{uid}"
# TODO instead of the above, remove all users who's tasks compare directly to require('./content).defaultTasks

View file

@ -0,0 +1,34 @@
module.exports = (view) ->
view.fn 'taskClasses', (type, completed, value) ->
#TODO figure out how to just pass in the task model, so i can access all these properties from one object
classes = type
classes += " completed" if completed
switch
when value<-8 then classes += ' color-worst'
when value>=-8 and value<-5 then classes += ' color-worse'
when value>=-5 and value<-1 then classes += ' color-bad'
when value>=-1 and value<1 then classes += ' color-neutral'
when value>=1 and value<5 then classes += ' color-good'
when value>=5 and value<10 then classes += ' color-better'
when value>=10 then classes += ' color-best'
return classes
view.fn "percent", (x, y) ->
x=1 if x==0
Math.round(x/y*100)
view.fn "round", (num) ->
Math.round num
view.fn "gold", (num) ->
if num
return num.toFixed(1).split('.')[0]
else
return "0"
view.fn "silver", (num) ->
if num
num.toFixed(1).split('.')[1]
else
return "0"