diff --git a/lib/app/index.js b/lib/app/index.js index 23da907f3a..5f5cd0e3d6 100644 --- a/lib/app/index.js +++ b/lib/app/index.js @@ -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; diff --git a/lib/app/viewHelpers.js b/lib/app/viewHelpers.js new file mode 100644 index 0000000000..4b906ecddc --- /dev/null +++ b/lib/app/viewHelpers.js @@ -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"; + } + }); +}; diff --git a/src/app/index.coffee b/src/app/index.coffee index c5180a8362..51e1f96fe8 100644 --- a/src/app/index.coffee +++ b/src/app/index.coffee @@ -2,45 +2,13 @@ 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 ========== +scoring = require('./scoring') +schema = require('./schema') +require('./viewHelpers')(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" - # ========== ROUTES ========== get '/:uidParam?', (page, model, {uidParam}) -> @@ -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 ========== diff --git a/src/app/schema.coffee b/src/app/schema.coffee index 44075a4657..b3053cbdda 100644 --- a/src/app/schema.coffee +++ b/src/app/schema.coffee @@ -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 \ No newline at end of file + # 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 diff --git a/src/app/viewHelpers.coffee b/src/app/viewHelpers.coffee new file mode 100644 index 0000000000..ff5be234db --- /dev/null +++ b/src/app/viewHelpers.coffee @@ -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"