Merge branch 'develop'

This commit is contained in:
Tyler Renelle
2013-04-05 13:50:39 -04:00
9 changed files with 110 additions and 156 deletions
-7
View File
@@ -1,12 +1,5 @@
_ = require 'underscore'
moment = require 'moment'
#algos = require './algos'
restoreRefs = module.exports.restoreRefs = (model) ->
#refLists
_.each ['habit', 'daily', 'todo', 'reward'], (type) ->
model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids"
###
Loads JavaScript files from public/js/*
-49
View File
@@ -8,23 +8,6 @@ _ = require 'underscore'
lodash = require 'lodash'
derby = require 'derby'
module.exports.username = username = (auth) ->
if auth?.facebook?.displayName?
auth.facebook.displayName
else if auth?.facebook?
fb = auth.facebook
if fb._raw then "#{fb.name.givenName} #{fb.name.familyName}" else fb.name
else if auth?.local?
auth.local.username
else
'Anonymous'
module.exports.view = (view) ->
view.fn "username", (auth) -> username(auth)
view.fn "tnl", algos.tnl
module.exports.app = (appExports, model) ->
user = model.at '_user'
@@ -154,38 +137,6 @@ module.exports.newUserObject = ->
when 'reward' then newUser.rewardIds.push guid
return newUser
module.exports.updateUser = (model) ->
batch = new BatchUpdate(model)
user = batch.user
obj = batch.obj()
tasks = obj.tasks
# Remove corrupted tasks
_.each tasks, (task, key) ->
unless task?
user.del("tasks.#{key}")
delete tasks[key]
batch.startTransaction()
batch.set('apiToken', derby.uuid()) unless obj.apiToken
## Task List Cleanup
# FIXME temporary hack to fix lists (Need to figure out why these are happening)
_.each ['habit','daily','todo','reward'], (type) ->
# 1. remove duplicates
# 2. restore missing zombie tasks back into list
taskIds = _.pluck( _.where(tasks, {type:type}), 'id')
union = _.union obj[type + 'Ids'], taskIds
# 2. remove empty (grey) tasks
preened = _.filter union, (val) -> _.contains(taskIds, val) and val?
# There were indeed issues found, set the new list
batch.set("#{type}Ids", preened) # if _.difference(preened, userObj[path]).length != 0
batch.commit()
module.exports.BatchUpdate = BatchUpdate = (model) ->
user = model.at("_user")
transactionInProgress = false
+83 -1
View File
@@ -1,5 +1,6 @@
moment = require 'moment'
_ = require 'underscore'
algos = require './algos'
# Absolute diff between two dates
daysBetween = (yesterday, now, dayStart) ->
@@ -23,6 +24,17 @@ removeWhitespace = (str) ->
return '' unless str
str.replace /\s/g, ''
username = (auth) ->
if auth?.facebook?.displayName?
auth.facebook.displayName
else if auth?.facebook?
fb = auth.facebook
if fb._raw then "#{fb.name.givenName} #{fb.name.familyName}" else fb.name
else if auth?.local?
auth.local.username
else
'Anonymous'
viewHelpers = (view) ->
view.fn "percent", (x, y) ->
x=1 if x==0
@@ -59,4 +71,74 @@ viewHelpers = (view) ->
view.fn "truarr", (num) -> num-1
module.exports = { viewHelpers, removeWhitespace, randomVal, daysBetween, dayMapping }
###
User
###
view.fn "username", (auth) -> username(auth)
view.fn "tnl", algos.tnl
###
Items
###
view.fn 'equipped', (user, type) ->
{gender, armorSet} = user?.preferences || {'m', 'v1'}
if type=='armor'
armor = user?.items?.armor || 0
if gender == 'f'
return if (parseInt(armor) == 0) then "f_armor_#{armor}_#{armorSet}" else "f_armor_#{armor}"
else
return "m_armor_#{armor}"
else if type=='head'
head = user?.items?.head || 0
if gender == 'f'
return if (parseInt(head) > 1) then "f_head_#{head}_#{armorSet}" else "f_head_#{head}"
else
return "m_head_#{head}"
view.fn "gold", (num) ->
if num
return (num).toFixed(1).split('.')[0]
else
return "0"
view.fn "silver", (num) ->
if num
(num).toFixed(2).split('.')[1]
else
return "00"
###
Tasks
###
view.fn 'taskClasses', (task) ->
return unless task
{type, completed, value, repeat} = task
classes = type
# show as completed if completed (naturally) or not required for today
if type in ['todo', 'daily']
if completed or (repeat and repeat[dayMapping[moment().day()]]==false)
classes += " completed"
else
classes += " uncompleted"
if value < -20
classes += ' color-worst'
else if value < -10
classes += ' color-worse'
else if value < -1
classes += ' color-bad'
else if value < 1
classes += ' color-neutral'
else if value < 5
classes += ' color-good'
else if value < 10
classes += ' color-better'
else
classes += ' color-best'
return classes
module.exports = { viewHelpers, removeWhitespace, randomVal, daysBetween, dayMapping, username }
+22 -25
View File
@@ -12,21 +12,8 @@ i18n.localize app,
availableLocales: ['en', 'he']
defaultLocale: 'en'
# Custom requires
character = require './character'
tasks = require './tasks'
scoring = require './scoring'
helpers = require './helpers'
browser = require './browser'
party = require './party'
items = require './items'
profile = require './profile'
pets = require './pets'
helpers.viewHelpers view
character.view view
tasks.view view
items.view view
_ = require('underscore')
@@ -43,11 +30,21 @@ get '/', (page, model, params, next) ->
#if req.headers['x-forwarded-proto']!='https' and process.env.NODE_ENV=='production'
# return page.redirect 'https://' + req.headers.host + req.url
party.partySubscribe page, model, params, next, ->
character.updateUser(model)
items.server(model)
require('./party').partySubscribe page, model, params, next, ->
user = model.at('_user')
user.setNull('apiToken', derby.uuid())
# Remove corrupted tasks
tasks = user.get('tasks')
_.each tasks, (task, key) -> user.del("tasks.#{key}") unless task?
require('./items').server(model)
model.set '_view', _view
browser.restoreRefs model
#refLists
_.each ['habit', 'daily', 'todo', 'reward'], (type) ->
model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids"
page.render()
# ========== CONTROLLER FUNCTIONS ==========
@@ -59,15 +56,15 @@ ready (model) ->
lastCron = user.get('lastCron')
user.set('lastCron', +new Date) if (!lastCron? or lastCron == 'new')
scoring.cron(model)
require('./scoring').cron(model)
character.app(exports, model)
tasks.app(exports, model)
items.app(exports, model)
party.app(exports, model)
profile.app(exports, model)
pets.app(exports, model)
require('./character').app(exports, model)
require('./tasks').app(exports, model)
require('./items').app(exports, model)
require('./party').app(exports, model)
require('./profile').app(exports, model)
require('./pets').app(exports, model)
require('../server/private').app(exports, model)
require('./debug').app(exports, model) if model.get('_view.nodeEnv') != 'production'
browser.app(exports, model, app)
require('./browser').app(exports, model, app)
-40
View File
@@ -70,46 +70,6 @@ _.each ['weapon', 'armor', 'head', 'shield'], (key) ->
_.each items.pets, (pet) -> pet.notes = 'Find a hatching potion to pour on this egg, and one day it will hatch into a loyal pet.'
_.each items.hatchingPotions, (hatchingPotion) -> hatchingPotion.notes = "Pour this on an egg, and it will hatch as a #{hatchingPotion.text} pet."
###
view exports
###
module.exports.view = (view) ->
view.fn 'equipped', (user, type) ->
{gender, armorSet} = user?.preferences || {'m', 'v1'}
if type=='armor'
armor = user?.items?.armor || 0
if gender == 'f'
return if (parseInt(armor) == 0) then "f_armor_#{armor}_#{armorSet}" else "f_armor_#{armor}"
else
return "m_armor_#{armor}"
else if type=='head'
head = user?.items?.head || 0
if gender == 'f'
return if (parseInt(head) > 1) then "f_head_#{head}_#{armorSet}" else "f_head_#{head}"
else
return "m_head_#{head}"
view.fn "gold", (num) ->
if num
return (num).toFixed(1).split('.')[0]
else
return "0"
view.fn "silver", (num) ->
if num
(num).toFixed(2).split('.')[1]
else
return "00"
view.fn "copper", (num) ->
if num
c = (num).toFixed(4).split('.')[1]
c.toString().substr(2,2)
else
return "00"
###
server exports
###
+3 -2
View File
@@ -1,6 +1,4 @@
_ = require('underscore')
character = require './character'
browser = require './browser'
partyUnsubscribe = (model, cb) ->
if window?
@@ -69,6 +67,9 @@ module.exports.partySubscribe = partySubscribe = (page, model, params, next, cb)
return finished [partyQ, membersQ, selfQ], ['_party', '_partyMembers', '_user']
module.exports.app = (appExports, model) ->
character = require './character'
browser = require './browser'
user = model.at('_user')
user.on 'set', 'flags.partyEnabled', (captures, args) ->
+2 -1
View File
@@ -1,5 +1,6 @@
character = require './character'
browser = require './browser'
helpers = require './helpers'
module.exports.app = (appExports, model) ->
user = model.at('_user')
@@ -22,6 +23,6 @@ module.exports.app = (appExports, model) ->
uid = $(el).attr('data-uid')
model.ref '_profileActive', model.at("users.#{uid}")
model.set '_profileActiveMain', user.get('id') is uid
model.set '_profileActiveUsername', character.username model.get('_profileActive.auth')
model.set '_profileActiveUsername', helpers.username model.get('_profileActive.auth')
browser.setupTooltips(model)
-1
View File
@@ -1,4 +1,3 @@
async = require 'async'
moment = require 'moment'
_ = require 'underscore'
{ randomVal } = helpers = require './helpers'
-30
View File
@@ -4,36 +4,6 @@ _ = require 'underscore'
moment = require 'moment'
character = require './character'
module.exports.view = (view) ->
view.fn 'taskClasses', (task) ->
return unless task
{type, completed, value, repeat} = task
classes = type
# show as completed if completed (naturally) or not required for today
if type in ['todo', 'daily']
if completed or (repeat and repeat[helpers.dayMapping[moment().day()]]==false)
classes += " completed"
else
classes += " uncompleted"
if value < -20
classes += ' color-worst'
else if value < -10
classes += ' color-worse'
else if value < -1
classes += ' color-bad'
else if value < 1
classes += ' color-neutral'
else if value < 5
classes += ' color-good'
else if value < 10
classes += ' color-better'
else
classes += ' color-best'
return classes
module.exports.app = (appExports, model) ->
user = model.at('_user')