// Generated by CoffeeScript 1.3.3 var content, derby, get, getRoom, 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'); 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"; } }); get('/', function(page, model) { var userId; if (userId = model.get('_session.userId')) { return getRoom(page, model, userId); } return model.async.incr('configs.1.nextUserId', function(err, userId) { model.set('_session.userId', userId); model.set("users." + userId, { name: 'User ' + userId }); return getRoom(page, model, userId); }); }); getRoom = function(page, model, userId) { return model.subscribe("users." + userId, function(err, user) { var task, _i, _j, _k, _l, _len, _len1, _len2, _len3, _ref1, _ref2, _ref3, _ref4; model.ref('_user', user); /* Set User Defaults */ user.setNull('stats', { money: 0, exp: 0, lvl: 1, hp: 50 }); user.setNull('items', { itemsEnabled: false, armor: 0, weapon: 0 }); 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"); if (!model.get('_user.tasks')) { _ref1 = content.defaultTasks.habits; for (_i = 0, _len = _ref1.length; _i < _len; _i++) { task = _ref1[_i]; model.push('_habitList', task); } _ref2 = content.defaultTasks.dailys; for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { task = _ref2[_j]; model.push('_dailyList', task); } _ref3 = content.defaultTasks.todos; for (_k = 0, _len2 = _ref3.length; _k < _len2; _k++) { task = _ref3[_k]; model.push('_todoList', task); } _ref4 = content.defaultTasks.rewards; for (_l = 0, _len3 = _ref4.length; _l < _len3; _l++) { task = _ref4[_l]; model.push('_rewardList', task); } } return page.render(); }); }; ready(function(model) { var endOfDayTally, expModifier, hpModifier, poormanscron, setupSortable, step, tour, type, updateStats, _i, _j, _len, _len1, _ref1, _ref2; $('[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.loadDebugDefaults = function(e, el) { model.remove('_habitList', 0, 100, function() { var task, _k, _len2, _ref3, _results; _ref3 = content.tylerDefaultTasks.habits; _results = []; for (_k = 0, _len2 = _ref3.length; _k < _len2; _k++) { task = _ref3[_k]; _results.push(model.push('_habitList', task)); } return _results; }); model.remove('_dailyList', 0, 100, function() { var task, _k, _len2, _ref3, _results; _ref3 = content.tylerDefaultTasks.dailys; _results = []; for (_k = 0, _len2 = _ref3.length; _k < _len2; _k++) { task = _ref3[_k]; _results.push(model.push('_dailyList', task)); } return _results; }); model.remove('_todoList', 0, 100, function() { var task, _k, _len2, _ref3, _results; _ref3 = content.tylerDefaultTasks.todos; _results = []; for (_k = 0, _len2 = _ref3.length; _k < _len2; _k++) { task = _ref3[_k]; _results.push(model.push('_todoList', task)); } return _results; }); return model.remove('_rewardList', 0, 100, function() { var task, _k, _len2, _ref3, _results; _ref3 = content.tylerDefaultTasks.rewards; _results = []; for (_k = 0, _len2 = _ref3.length; _k < _len2; _k++) { task = _ref3[_k]; _results.push(model.push('_rewardList', task)); } return _results; }); }; 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; task = model.at($(el).parents('li')[0]); $('#\\' + task.get('id') + '-chart').hide(); return $('#\\' + task.get('id') + '-edit').toggle(); }; 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.getMonth()) + "+1/" + (date.getDate()) + "/" + (date.getFullYear()); 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]