// Generated by CoffeeScript 1.3.3 var Guid, content, debug, derby, get, ready, view, _ref; derby = require('derby'); _ref = derby.createApp(module), get = _ref.get, view = _ref.view, ready = _ref.ready; derby.use(require('derby-ui-boot')); derby.use(require('../../ui')); content = require('./content'); Guid = require('guid'); view.fn('taskClasses', function(type, completed, value, hideCompleted) { var classes; classes = type; if (completed) { classes += " completed"; } if (type === 'todo') { if ((hideCompleted && completed) || (!hideCompleted && !completed)) { classes += " hide"; } } 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"; } }); view.fn("silver", function(num) { if (num) { return num.toFixed(1).split('.')[1]; } else { return "0"; } }); debug = function(obj, message) { return console.log(obj, "[debug] " + message); }; get('/:userId?', function(page, model, _arg) { var userId; userId = _arg.userId; return model.subscribe("users", function(err, users) { var debuggingUsers, guid, newUser, task, user, _i, _len, _ref1; debuggingUsers = parseInt(userId) < 40; if ((userId != null) && (users.get(userId) || debuggingUsers)) { model.set('_userId', userId); } userId = model.get('_userId'); if (!model.get("users." + userId)) { newUser = { stats: { money: 0, exp: 0, lvl: 1, hp: 50 }, items: { itemsEnabled: false, armor: 0, weapon: 0 }, tasks: {}, habitIds: [], dailyIds: [], todoIds: [], rewardIds: [] }; _ref1 = content.defaultTasks; for (_i = 0, _len = _ref1.length; _i < _len; _i++) { task = _ref1[_i]; guid = Guid.raw(); newUser.tasks[guid] = task; switch (task.type) { case 'habit': newUser.habitIds.push(guid); break; case 'daily': newUser.dailyIds.push(guid); break; case 'todo': newUser.todoIds.push(guid); break; case 'reward': newUser.rewardIds.push(guid); } } users.set(userId, newUser, function(err, path, value) { return debug({ err: err, path: path, value: value }, 'new user'); }); } user = model.at("users." + userId); model.ref('_user', user); model.set('_items', { armor: content.items.armor[parseInt(user.get('items.armor')) + 1], weapon: content.items.weapon[parseInt(user.get('items.weapon')) + 1], potion: content.items.potion, reroll: content.items.reroll }); model.fn('_tnl', '_user.stats.lvl', function(lvl) { return 50 * Math.pow(lvl, 2) - 150 * lvl + 200; }); model.refList("_habitList", "_user.tasks", "_user.habitIds"); model.refList("_dailyList", "_user.tasks", "_user.dailyIds"); model.refList("_todoList", "_user.tasks", "_user.todoIds"); model.refList("_rewardList", "_user.tasks", "_user.rewardIds"); return page.render(); }); }); ready(function(model) { var endOfDayTally, expModifier, hpModifier, poormanscron, setupSortable, step, tour, type, updateStats, _i, _j, _len, _len1, _ref1, _ref2; model.set('_purl', window.location.origin + '/' + model.get('_userId')); $('[rel=popover]').popover(); model.on('set', '*', function() { return $('[rel=popover]').popover(); }); model.set('_hideCompleted', true); $('a[data-toggle="tab"]').on('shown', function(e) { var hideCompleted; hideCompleted = $(e.target).attr('href') === '#tab1' ? true : false; return model.set('_hideCompleted', hideCompleted); }); setupSortable = function(type) { return $("ul." + type + "s").sortable({ dropOnEmpty: false, cursor: "move", items: "li", opacity: 0.4, scroll: true, axis: 'y', update: function(e, ui) { var domId, id, item, to; item = ui.item[0]; domId = item.id; id = item.getAttribute('data-id'); to = $("ul." + type + "s").children().index(item); return model.at("_" + type + "List").pass({ ignore: domId }).move({ id: id }, to); } }); }; _ref1 = ['habit', 'daily', 'todo', 'reward']; for (_i = 0, _len = _ref1.length; _i < _len; _i++) { type = _ref1[_i]; setupSortable(type); } tour = new Tour(); _ref2 = content.tourSteps; for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { step = _ref2[_j]; tour.addStep({ element: step.element, title: step.title, content: step.content, placement: step.placement }); } tour.start(); exports.addTask = function(e, el, next) { var list, newModel, text; type = $(el).attr('data-task-type'); list = model.at("_" + type + "List"); newModel = model.at('_new' + type.charAt(0).toUpperCase() + type.slice(1)); if (!(text = view.escapeHtml(newModel.get()))) { return; } newModel.set(''); switch (type) { case 'habit': return list.push({ type: type, text: text, notes: '', value: 0, up: true, down: true }); case 'reward': return list.push({ type: type, text: text, notes: '', value: 20 }); case 'daily': case 'todo': return list.push({ type: type, text: text, notes: '', value: 0, completed: false }); } }; exports.del = function(e, el) { var task; task = model.at(e.target); model.del('_user.tasks.' + task.get('id')); return task.remove(); }; exports.toggleTaskEdit = function(e, el) { var task; return task = model.at($(el).parents('li')[0]); }; exports.toggleChart = function(e, el) { var chart, chartSelector, data, date, hideSelector, historyPath, matrix, obj, options, readableDate, _k, _len2, _ref3; hideSelector = $(el).attr('data-hide-selector'); chartSelector = $(el).attr('data-chart-selector'); historyPath = $(el).attr('data-history-path'); $(document.getElementById(hideSelector)).hide(); $(document.getElementById(chartSelector)).toggle(); matrix = [['Date', 'Score']]; _ref3 = model.get(historyPath); for (_k = 0, _len2 = _ref3.length; _k < _len2; _k++) { obj = _ref3[_k]; date = new Date(obj.date); readableDate = date.toISOString(); matrix.push([readableDate, obj.value]); } data = google.visualization.arrayToDataTable(matrix); options = { title: 'History', backgroundColor: 'whiteSmoke' }; chart = new google.visualization.LineChart(document.getElementById(chartSelector)); return chart.draw(data, options); }; exports.buyItem = function(e, el, next) { var hp, index, money, task, taskId, user, value, _ref3, _results; user = model.at('_user'); money = user.get('stats.money'); _ref3 = [$(el).attr('data-type'), $(el).attr('data-value'), $(el).attr('data-index')], type = _ref3[0], value = _ref3[1], index = _ref3[2]; if (money < value) { return; } user.set('stats.money', money - value); if (type === 'armor') { user.set('items.armor', index); return model.set('_items.armor', content.items.armor[parseInt(index) + 1]); } else if (type === 'weapon') { user.set('items.weapon', index); return model.set('_items.weapon', content.items.weapon[parseInt(index) + 1]); } else if (type === 'potion') { hp = user.get('stats.hp'); hp += 15; if (hp > 50) { hp = 50; } return user.set('stats.hp', hp); } else if (type === 'reroll') { _results = []; for (taskId in user.get('tasks')) { task = model.at('_user.tasks.' + taskId); if (task.get('type') !== 'reward') { _results.push(task.set('value', 0)); } else { _results.push(void 0); } } return _results; } }; exports.updateStats = updateStats = function(user, stats) { var money, tnl; if (stats.hp != null) { if (stats.hp < 0) { user.set('stats.lvl', 0); } else { user.set('stats.hp', stats.hp); } } if (stats.exp != null) { tnl = model.get('_tnl'); if (stats.exp >= tnl) { stats.exp -= tnl; user.set('stats.lvl', user.get('stats.lvl') + 1); } if (!user.get('items.itemsEnabled') && stats.exp >= 50) { user.set('items.itemsEnabled', true); $('ul.items').popover({ title: content.items.unlockedMessage.title, placement: 'left', trigger: 'manual', html: true, content: "
" + content.items.unlockedMessage.content + " [Close]