Merge branch 'develop'
This commit is contained in:
@@ -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/*
|
||||
|
||||
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
###
|
||||
|
||||
@@ -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) ->
|
||||
|
||||
@@ -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,4 +1,3 @@
|
||||
async = require 'async'
|
||||
moment = require 'moment'
|
||||
_ = require 'underscore'
|
||||
{ randomVal } = helpers = require './helpers'
|
||||
|
||||
@@ -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')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user