From 348d7c356d7e8a8e99d306bd4e3b537fc6de1502 Mon Sep 17 00:00:00 2001 From: melarish Date: Mon, 31 Aug 2015 13:54:33 +0100 Subject: [PATCH 01/19] Added missing modules to package.json --- .gitignore | 5 +++-- package.json | 26 +++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index dd55d8ea09..ece3f8bf67 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,8 @@ node_modules *.swp .idea* config.json -npm-debug.log +npm-debug.log* +logfile.txt lib website/public/bower_components website/public/new-stuff.html @@ -28,4 +29,4 @@ coverage coverage.html common/dist/scripts/habitrpg-shared.js -test/spec/mocks/translations.js +test/spec/mocks/translations.js \ No newline at end of file diff --git a/package.json b/package.json index c903625b79..c7bc9fb996 100644 --- a/package.json +++ b/package.json @@ -9,15 +9,23 @@ "async": "~0.9.0", "aws-sdk": "^2.0.25", "babel": "^5.5.4", + "bl": "~1.0.0", "bower": "~1.3.12", "browserify": "~3.30.2", - "coffee-script": "1.6.x", + "buffer-to-vinyl": "~1.0.1", + "chalk": "~1.1.1", + "clean-css": "~3.3.9", + "coffee-script": "~1.6.3", "coffeeify": "0.6.0", + "concat-stream": "~1.5.0", "connect-ratelimit": "0.0.7", + "core-util-is": "~1.0.1", "coupon-code": "~0.3.0", "domain-middleware": "~0.1.0", "express": "~3.17.5", "express-csv": "~0.6.0", + "filenamify-url": "~1.0.0", + "got": "~4.1.1", "grunt": "~0.4.1", "grunt-browserify": "^3.3.0", "grunt-cli": "~0.1.9", @@ -33,37 +41,49 @@ "grunt-nodemon": "~0.3.0", "grunt-spritesmith": "~3.5.0", "gulp": "^3.9.0", + "he": "~0.5.0", "icalendar": "lefnire/node-icalendar#e06da0e55901f0ba940dfadc42c158ed0b1fead9", "image-size": "~0.3.2", "in-app-purchase": "^0.2.0", + "inherits": "~2.0.1", "jade": "~1.11.0", "js2xmlparser": "~0.1.2", "lodash": "~2.4.1", "loggly": "~1.0.8", "method-override": "~2.2.0", - "moment": "~2.8.3", + "mkdirp": "~0.5.1", + "moment": "~2.10.6", "mongoose": "~3.8.23", "mongoose-id-autoinc": "~2013.7.14-4", "nconf": "~0.6.9", "newrelic": "~1.11.2", "nib": "~1.0.1", - "nodemailer": "~0.5.2", + "node-uuid": "~1.4.3", + "nodemailer": "~0.5.15", + "nopt": "~3.0.3", "pageres": "^1.0.1", "passport": "~0.2.1", "passport-facebook": "2.0.0", "paypal-ipn": "2.1.0", "paypal-rest-sdk": "^1.2.1", + "pretty-bytes": "~2.0.1", "pretty-data": "^0.40.0", + "protocolify": "~1.0.1", "ps-tree": "^1.0.0", "push-notify": "^1.1.1", "q": "^1.4.1", "qs": "^2.3.2", "request": "~2.44.0", "s3-upload-stream": "^1.0.6", + "screenshot-stream": "~2.1.0", + "stream-combiner2": "~1.0.2", "stripe": "*", "swagger-node-express": "lefnire/swagger-node-express#habitrpg", + "through2": "~2.0.0", "universal-analytics": "~0.3.2", "validator": "~3.19.0", + "viewport-list": "~3.0.1", + "which": "~1.1.1", "winston": "~0.8.0", "winston-mail": "~0.2.9", "winston-newrelic": "~0.1.4" From b2bb6016fa5c84407f4c5522d0ef61245c5832e3 Mon Sep 17 00:00:00 2001 From: melarish Date: Wed, 2 Sep 2015 18:12:48 +0100 Subject: [PATCH 02/19] Added +1 Hourglass to debug menu --- common/locales/en/subscriber.json | 7 ++++--- website/public/js/controllers/footerCtrl.js | 7 ++++++- website/views/options/inventory/time-travelers.jade | 1 + website/views/shared/footer.jade | 3 ++- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/common/locales/en/subscriber.json b/common/locales/en/subscriber.json index c448afe75f..2e37fc78c6 100644 --- a/common/locales/en/subscriber.json +++ b/common/locales/en/subscriber.json @@ -59,9 +59,10 @@ "timeTravelers": "Time Travelers", "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> and <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Mysterious Time Travelers", - "timeTravelersPopoverNoSub": "You'll need a Mystic Hourglass to summon the mysterious Time Travelers! <%= linkStart %>Subscribers<%= linkEnd %> earn one Mystic Hourglass for every three months of consecutive subscribing. Come back when you have a Mystic Hourglass, and the Time Travelers will fetch you a Subscriber Item Set from the past.... or maybe even the future.", - "timeTravelersPopover": "We see you have a Mystic Hourglass, so we will happily travel back in time for you! Please choose the Mystery Item Set you would like. You can see a list of the past item sets <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", - "mysticHourglassPopover": "Mystic Hourglass allow you to purchase previous months' subscriber sets.", + "timeTravelersPopoverNoSub": "You'll need a Mystic Hourglass trinket to summon the mysterious Time Travelers! <%= linkStart %>Subscribers<%= linkEnd %> earn one Mystic Hourglass for every three months of consecutive subscribing. Come back when you have a Mystic Hourglass, and the Time Travelers will fetch you a Subscriber Item Set from the past.... or maybe even the future.", + "timeTravelersPopover": "We see you have a Mystic Hourglass thingamajig, so we will happily travel back in time for you! Please choose the Mystery Item Set you would like. You can see a list of the past item sets <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "timeTravelersAlreadyOwned": "Congratulations! You already own all of the Mystery Items. Thanks for supporting the site!", + "mysticHourglassPopover": "Mystic Hourglass allows you to purchase previous months' subscriber sets.", "subUpdateCard": "Update Card", "subUpdateTitle": "Update", "subUpdateDescription": "Update the card to be charged." diff --git a/website/public/js/controllers/footerCtrl.js b/website/public/js/controllers/footerCtrl.js index a12225f8e3..4c65545eb3 100644 --- a/website/public/js/controllers/footerCtrl.js +++ b/website/public/js/controllers/footerCtrl.js @@ -85,8 +85,13 @@ function($scope, $rootScope, User, $http, Notification, ApiUrl) { User.log({}); }) } - $scope.addGold = function(){ + $scope.addHourglass = function(){ User.set({ + 'purchased.plan.consecutive.trinkets': User.user.purchased.plan.consecutive.trinkets + 1, + }); + } + $scope.addGold = function(){ + User.set({ 'stats.gp': User.user.stats.gp + 500, }); } diff --git a/website/views/options/inventory/time-travelers.jade b/website/views/options/inventory/time-travelers.jade index 7e7332429a..ebba0b782f 100644 --- a/website/views/options/inventory/time-travelers.jade +++ b/website/views/options/inventory/time-travelers.jade @@ -20,6 +20,7 @@ .row: .col-md-12 li.customize-menu.inventory-gear + p!=env.t('timeTravelersAlreadyOwned', {linkStart: "", linkEnd: ""}) menu.pets-menu(label='{{::set.text}}', ng-repeat='set in Content.timeTravelerStore(user.items.gear.owned)') div(ng-repeat='item in set.items') button.customize-option(class='shop_{{::item.key}}', diff --git a/website/views/shared/footer.jade b/website/views/shared/footer.jade index 2e81898d9c..06bfb26e7c 100644 --- a/website/views/shared/footer.jade +++ b/website/views/shared/footer.jade @@ -80,7 +80,8 @@ footer.footer(ng-controller='FooterCtrl') a.btn.btn-default(ng-click='addMissedDay(1)') +1 Missed Day a.btn.btn-default(ng-click='addMissedDay(2)') +2 Missed Days a.btn.btn-default(ng-click='addTenGems()') +10 Gems - a.btn.btn-default(ng-click='addGold()') +GP + a.btn.btn-default(ng-click='addHourglass()') +1 Mystic Hourglass + a.btn.btn-default(ng-click='addGold()') +500GP a.btn.btn-default(ng-click='addMana()') +MP a.btn.btn-default(ng-click='addLevelsAndGold()') +Exp +GP +MP a.btn.btn-default(ng-click='addOneLevel()') +1 Level From 2bddd79ffd928b32bf6f45ac151e734e9a2eaf9e Mon Sep 17 00:00:00 2001 From: Mel Marley Date: Tue, 8 Sep 2015 13:59:34 +0100 Subject: [PATCH 03/19] Some things I tried --- common/locales/en/subscriber.json | 4 ++-- website/views/options/inventory/time-travelers.jade | 11 +++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/common/locales/en/subscriber.json b/common/locales/en/subscriber.json index 2e37fc78c6..64db64bb2d 100644 --- a/common/locales/en/subscriber.json +++ b/common/locales/en/subscriber.json @@ -59,8 +59,8 @@ "timeTravelers": "Time Travelers", "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> and <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitle": "Mysterious Time Travelers", - "timeTravelersPopoverNoSub": "You'll need a Mystic Hourglass trinket to summon the mysterious Time Travelers! <%= linkStart %>Subscribers<%= linkEnd %> earn one Mystic Hourglass for every three months of consecutive subscribing. Come back when you have a Mystic Hourglass, and the Time Travelers will fetch you a Subscriber Item Set from the past.... or maybe even the future.", - "timeTravelersPopover": "We see you have a Mystic Hourglass thingamajig, so we will happily travel back in time for you! Please choose the Mystery Item Set you would like. You can see a list of the past item sets <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", + "timeTravelersPopoverNoSub": "You'll need a Mystic Hourglass to summon the mysterious Time Travelers! <%= linkStart %>Subscribers<%= linkEnd %> earn one Mystic Hourglass for every three months of consecutive subscribing. Come back when you have a Mystic Hourglass, and the Time Travelers will fetch you a Subscriber Item Set from the past.... or maybe even the future.", + "timeTravelersPopover": "We see you have a Mystic Hourglass, so we will happily travel back in time for you! Please choose the Mystery Item Set you would like. You can see a list of the past item sets <%= linkStart %>here<%= linkEnd %>! If those don't satisfy you, perhaps you'd be interested in one of our fashionably futuristic Steampunk Item Sets?", "timeTravelersAlreadyOwned": "Congratulations! You already own all of the Mystery Items. Thanks for supporting the site!", "mysticHourglassPopover": "Mystic Hourglass allows you to purchase previous months' subscriber sets.", "subUpdateCard": "Update Card", diff --git a/website/views/options/inventory/time-travelers.jade b/website/views/options/inventory/time-travelers.jade index ebba0b782f..9643ecfb27 100644 --- a/website/views/options/inventory/time-travelers.jade +++ b/website/views/options/inventory/time-travelers.jade @@ -20,11 +20,18 @@ .row: .col-md-12 li.customize-menu.inventory-gear - p!=env.t('timeTravelersAlreadyOwned', {linkStart: "", linkEnd: ""}) + p(ng-if='Object.keys(Content.timeTravelerStore(user.items.gear.owned)).length == 0')=env.t('timeTravelersAlreadyOwned') + b {{Object.keys(Content.timeTravelerStore(user.items.gear.owned)).length}} + b {{Object.keys(user.items.gear.owned).length}} + b {{Object.keys(user.items.gear.owned)}} + b {{Object.getOwnPropertyNames(user.items.gear.owned).length}} + b {{Object.getOwnPropertyNames(user.items.gear.owned)}} + b {{user.items.gear.owned}} + b {{Content.timeTravelerStore(user.items.gear.owned)}} menu.pets-menu(label='{{::set.text}}', ng-repeat='set in Content.timeTravelerStore(user.items.gear.owned)') div(ng-repeat='item in set.items') button.customize-option(class='shop_{{::item.key}}', popover='{{::item.notes()}}', popover-title='{{::item.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', - ng-click='user.ops.buyMysterySet({params:{key:set.key}})') + ng-click='user.ops.buyMysterySet({params:{key:set.key}})') \ No newline at end of file From def3eb5c3605b9e32bd279d3fd8c5e77bee6beb4 Mon Sep 17 00:00:00 2001 From: Mel Marley Date: Tue, 8 Sep 2015 17:49:56 +0100 Subject: [PATCH 04/19] Now correctly displays message when user owns all Mystery items --- website/views/options/inventory/time-travelers.jade | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/website/views/options/inventory/time-travelers.jade b/website/views/options/inventory/time-travelers.jade index 9643ecfb27..760b7e9fc3 100644 --- a/website/views/options/inventory/time-travelers.jade +++ b/website/views/options/inventory/time-travelers.jade @@ -20,14 +20,7 @@ .row: .col-md-12 li.customize-menu.inventory-gear - p(ng-if='Object.keys(Content.timeTravelerStore(user.items.gear.owned)).length == 0')=env.t('timeTravelersAlreadyOwned') - b {{Object.keys(Content.timeTravelerStore(user.items.gear.owned)).length}} - b {{Object.keys(user.items.gear.owned).length}} - b {{Object.keys(user.items.gear.owned)}} - b {{Object.getOwnPropertyNames(user.items.gear.owned).length}} - b {{Object.getOwnPropertyNames(user.items.gear.owned)}} - b {{user.items.gear.owned}} - b {{Content.timeTravelerStore(user.items.gear.owned)}} + p(ng-if='_.isEmpty(Content.timeTravelerStore(user.items.gear.owned))')=env.t('timeTravelersAlreadyOwned') menu.pets-menu(label='{{::set.text}}', ng-repeat='set in Content.timeTravelerStore(user.items.gear.owned)') div(ng-repeat='item in set.items') button.customize-option(class='shop_{{::item.key}}', From f3ec5ccb896a4cc7eee314ef953f5c78fac24fab Mon Sep 17 00:00:00 2001 From: melarish Date: Wed, 9 Sep 2015 17:40:59 +0100 Subject: [PATCH 05/19] Added whitespace before all items owned message --- website/views/options/inventory/time-travelers.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/views/options/inventory/time-travelers.jade b/website/views/options/inventory/time-travelers.jade index 760b7e9fc3..97e7d01159 100644 --- a/website/views/options/inventory/time-travelers.jade +++ b/website/views/options/inventory/time-travelers.jade @@ -20,7 +20,7 @@ .row: .col-md-12 li.customize-menu.inventory-gear - p(ng-if='_.isEmpty(Content.timeTravelerStore(user.items.gear.owned))')=env.t('timeTravelersAlreadyOwned') + p(style='margin-top:1em', ng-if='_.isEmpty(Content.timeTravelerStore(user.items.gear.owned))')=env.t('timeTravelersAlreadyOwned') menu.pets-menu(label='{{::set.text}}', ng-repeat='set in Content.timeTravelerStore(user.items.gear.owned)') div(ng-repeat='item in set.items') button.customize-option(class='shop_{{::item.key}}', From dab6b555c4f06e329c8a5ad4adfb709f1759526e Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sat, 12 Sep 2015 22:32:13 -0500 Subject: [PATCH 06/19] Revert files --- .gitignore | 1 - package.json | 26 +++----------------------- 2 files changed, 3 insertions(+), 24 deletions(-) diff --git a/.gitignore b/.gitignore index 7069f7bc92..88e3ef3032 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,6 @@ node_modules .idea* config.json npm-debug.log* -logfile.txt lib website/public/bower_components website/public/new-stuff.html diff --git a/package.json b/package.json index 40c78a8452..8c1203bcf4 100644 --- a/package.json +++ b/package.json @@ -9,23 +9,15 @@ "async": "~0.9.0", "aws-sdk": "^2.0.25", "babel": "^5.5.4", - "bl": "~1.0.0", "bower": "~1.3.12", "browserify": "~3.30.2", - "buffer-to-vinyl": "~1.0.1", - "chalk": "~1.1.1", - "clean-css": "~3.3.9", - "coffee-script": "~1.6.3", + "coffee-script": "1.6.x", "coffeeify": "0.6.0", - "concat-stream": "~1.5.0", "connect-ratelimit": "0.0.7", - "core-util-is": "~1.0.1", "coupon-code": "~0.3.0", "domain-middleware": "~0.1.0", "express": "~3.17.5", "express-csv": "~0.6.0", - "filenamify-url": "~1.0.0", - "got": "~4.1.1", "firebase": "^2.2.9", "firebase-token-generator": "^2.0.0", "grunt": "~0.4.1", @@ -41,51 +33,39 @@ "grunt-karma": "~0.6.2", "grunt-spritesmith": "~3.5.0", "gulp": "^3.9.0", - "he": "~0.5.0", "gulp-grunt": "^0.5.2", "icalendar": "lefnire/node-icalendar#e06da0e55901f0ba940dfadc42c158ed0b1fead9", "image-size": "~0.3.2", "in-app-purchase": "^0.2.0", - "inherits": "~2.0.1", "jade": "~1.11.0", "js2xmlparser": "~0.1.2", "lodash": "~2.4.1", "loggly": "~1.0.8", "marked": "^0.3.5", "method-override": "~2.2.0", - "mkdirp": "~0.5.1", - "moment": "~2.10.6", + "moment": "~2.8.3", "mongoose": "~3.8.23", "mongoose-id-autoinc": "~2013.7.14-4", "nconf": "~0.6.9", "newrelic": "~1.11.2", "nib": "~1.0.1", - "node-uuid": "~1.4.3", - "nodemailer": "~0.5.15", - "nopt": "~3.0.3", + "nodemailer": "~0.5.2", "pageres": "^1.0.1", "passport": "~0.2.1", "passport-facebook": "2.0.0", "paypal-ipn": "2.1.0", "paypal-rest-sdk": "^1.2.1", - "pretty-bytes": "~2.0.1", "pretty-data": "^0.40.0", - "protocolify": "~1.0.1", "ps-tree": "^1.0.0", "push-notify": "^1.1.1", "q": "^1.4.1", "qs": "^2.3.2", "request": "~2.44.0", "s3-upload-stream": "^1.0.6", - "screenshot-stream": "~2.1.0", - "stream-combiner2": "~1.0.2", "stripe": "*", "swagger-node-express": "lefnire/swagger-node-express#habitrpg", - "through2": "~2.0.0", "universal-analytics": "~0.3.2", "validator": "~3.19.0", - "viewport-list": "~3.0.1", - "which": "~1.1.1", "winston": "~0.8.0", "winston-mail": "~0.2.9", "winston-newrelic": "~0.1.4" From 14fabfbe40580571c2500a47c9a74ae47ed2020b Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sat, 12 Sep 2015 22:34:58 -0500 Subject: [PATCH 07/19] Remove excess white space --- website/public/js/controllers/footerCtrl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/public/js/controllers/footerCtrl.js b/website/public/js/controllers/footerCtrl.js index 4c65545eb3..c568b2ffb0 100644 --- a/website/public/js/controllers/footerCtrl.js +++ b/website/public/js/controllers/footerCtrl.js @@ -91,7 +91,7 @@ function($scope, $rootScope, User, $http, Notification, ApiUrl) { }); } $scope.addGold = function(){ - User.set({ + User.set({ 'stats.gp': User.user.stats.gp + 500, }); } From cd4ec5bd12c8bc22a9990b10efb5c4b79738eb5b Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 13 Sep 2015 02:19:34 -0500 Subject: [PATCH 08/19] Adjust formatting in footer controller --- website/public/js/controllers/footerCtrl.js | 27 ++++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/website/public/js/controllers/footerCtrl.js b/website/public/js/controllers/footerCtrl.js index c568b2ffb0..40975a4c0c 100644 --- a/website/public/js/controllers/footerCtrl.js +++ b/website/public/js/controllers/footerCtrl.js @@ -69,53 +69,62 @@ function($scope, $rootScope, User, $http, Notification, ApiUrl) { * Debug functions. Note that the server route for gems is only available if process.env.DEBUG=true */ if (_.contains(['development','test'],window.env.NODE_ENV)) { + $scope.setHealthLow = function(){ User.set({ 'stats.hp': 1 }); - } + }; + $scope.addMissedDay = function(numberOfDays){ if (!confirm("Are you sure you want to reset the day by " + numberOfDays + " day(s)?")) return; var dayBefore = moment(User.user.lastCron).subtract(numberOfDays, 'days').toDate(); User.set({'lastCron': dayBefore}); Notification.text('-' + numberOfDays + ' day(s), remember to refresh'); - } + }; + $scope.addTenGems = function(){ $http.post(ApiUrl.get() + '/api/v2/user/addTenGems').success(function(){ User.log({}); }) - } + }; + $scope.addHourglass = function(){ User.set({ 'purchased.plan.consecutive.trinkets': User.user.purchased.plan.consecutive.trinkets + 1, }); - } + }; + $scope.addGold = function(){ User.set({ 'stats.gp': User.user.stats.gp + 500, }); - } + }; + $scope.addMana = function(){ User.set({ 'stats.mp': User.user.stats.mp + 500, }); - } + }; + $scope.addLevelsAndGold = function(){ User.set({ 'stats.exp': User.user.stats.exp + 10000, 'stats.gp': User.user.stats.gp + 10000, 'stats.mp': User.user.stats.mp + 10000 }); - } + }; + $scope.addOneLevel = function(){ User.set({ 'stats.exp': User.user.stats.exp + (Math.round(((Math.pow(User.user.stats.lvl, 2) * 0.25) + (10 * User.user.stats.lvl) + 139.75) / 10) * 10) }); - } + }; + $scope.addBossQuestProgressUp = function(){ User.set({ 'party.quest.progress.up': User.user.party.quest.progress.up + 1000 }); - } + }; } }]) From 7c8a46b1785c810dd612bbe06ebc63ec2faa3147 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 13 Sep 2015 09:34:54 -0500 Subject: [PATCH 09/19] Move message into alert box --- website/views/options/inventory/time-travelers.jade | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/website/views/options/inventory/time-travelers.jade b/website/views/options/inventory/time-travelers.jade index 97e7d01159..c339e6bff1 100644 --- a/website/views/options/inventory/time-travelers.jade +++ b/website/views/options/inventory/time-travelers.jade @@ -19,12 +19,14 @@ p!=env.t('timeTravelersPopover', {linkStart: "", linkEnd: ""}) .row: .col-md-12 + .row: .col-md-6 + .alert.alert-info(ng-if='_.isEmpty(Content.timeTravelerStore(user.items.gear.owned))')=env.t('timeTravelersAlreadyOwned') + li.customize-menu.inventory-gear - p(style='margin-top:1em', ng-if='_.isEmpty(Content.timeTravelerStore(user.items.gear.owned))')=env.t('timeTravelersAlreadyOwned') menu.pets-menu(label='{{::set.text}}', ng-repeat='set in Content.timeTravelerStore(user.items.gear.owned)') div(ng-repeat='item in set.items') button.customize-option(class='shop_{{::item.key}}', popover='{{::item.notes()}}', popover-title='{{::item.text()}}', popover-trigger='mouseenter', popover-placement='right', popover-append-to-body='true', - ng-click='user.ops.buyMysterySet({params:{key:set.key}})') \ No newline at end of file + ng-click='user.ops.buyMysterySet({params:{key:set.key}})') From edbdab5912819cf90ef6f822ee9fd89ff30b4eb1 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 13 Sep 2015 09:47:34 -0500 Subject: [PATCH 10/19] Add test shells for debug mode functions --- test/spec/controllers/footerCtrlSpec.js | 63 +++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 test/spec/controllers/footerCtrlSpec.js diff --git a/test/spec/controllers/footerCtrlSpec.js b/test/spec/controllers/footerCtrlSpec.js new file mode 100644 index 0000000000..177700933d --- /dev/null +++ b/test/spec/controllers/footerCtrlSpec.js @@ -0,0 +1,63 @@ +'use strict'; + +describe('Footer Controller', function() { + var scope, user; + + beforeEach(inject(function($rootScope, $controller) { + user = specHelper.newUser(); + scope = $rootScope.$new(); + $controller('FooterCtrl', {$scope: scope, User: {set: sandbox.stub(), user: user}}); + })); + + context('Debug mode', function() { + describe('#setHealthLow', function(){ + it('sets user health to 1'); + }); + + describe('#addMissedDay', function(){ + beforeEach(function() { + sandbox.stub(confirm).returns(true); + }); + + it('Cancels if confirm box is not confirmed'); + + it('allows multiple days'); + + it('sets users last cron'); + + it('notifies uers'); + }); + + describe('#addTenGems', function() { + it('posts to /user/addTenGems'); + }); + + describe('#addHourglass', function() { + it('posts to /user/addHourglass'); + }); + + describe('#addGold', function() { + it('adds 500 gold to user'); + }); + + describe('#addMana', function() { + it('adds 500 mana to user'); + }); + + describe('#addLevelsAndGold', function() { + it('adds 10000 experience to user'); + + it('adds 10000 gp to user'); + + it('adds 10000 mp to user'); + }); + + describe('#addOneLevel', function() { + it('adds one level to user'); + }); + + describe('#addBossQuestProgressUp', function() { + it('adds 1000 progress to quest.progress.up'); + }); + }); +}); From 7e97b73e8b6899385a6e6fdff202681fd39b2433 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 13 Sep 2015 09:59:46 -0500 Subject: [PATCH 11/19] Add test for addTenGems --- test/spec/controllers/footerCtrlSpec.js | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/test/spec/controllers/footerCtrlSpec.js b/test/spec/controllers/footerCtrlSpec.js index 177700933d..e7e76ecc03 100644 --- a/test/spec/controllers/footerCtrlSpec.js +++ b/test/spec/controllers/footerCtrlSpec.js @@ -1,15 +1,25 @@ 'use strict'; -describe('Footer Controller', function() { +describe.only('Footer Controller', function() { var scope, user; beforeEach(inject(function($rootScope, $controller) { + console.log(window.env.NODE_ENV); user = specHelper.newUser(); + var User = {log: sandbox.stub(), set: sandbox.stub(), user: user}; scope = $rootScope.$new(); - $controller('FooterCtrl', {$scope: scope, User: {set: sandbox.stub(), user: user}}); + $controller('FooterCtrl', {$scope: scope, User: User}); })); context('Debug mode', function() { + before(function() { + window.env.NODE_ENV = 'test'; + }); + + after(function() { + delete window.env.NODE_ENV; + }); + describe('#setHealthLow', function(){ it('sets user health to 1'); }); @@ -29,7 +39,13 @@ describe('Footer Controller', function() { }); describe('#addTenGems', function() { - it('posts to /user/addTenGems'); + it('posts to /user/addTenGems', inject(function($httpBackend) { + $httpBackend.expectPOST('/api/v2/user/addTenGems').respond({}); + + scope.addTenGems(); + + $httpBackend.flush(); + })); }); describe('#addHourglass', function() { @@ -56,7 +72,7 @@ describe('Footer Controller', function() { it('adds one level to user'); }); - describe('#addBossQuestProgressUp', function() { + describe.only('#addBossQuestProgressUp', function() { it('adds 1000 progress to quest.progress.up'); }); }); From 5e9b74a2b9ab8049423f07458f9f6a1a97edecff Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 13 Sep 2015 10:01:14 -0500 Subject: [PATCH 12/19] Add test for addHourglass --- test/spec/controllers/footerCtrlSpec.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/spec/controllers/footerCtrlSpec.js b/test/spec/controllers/footerCtrlSpec.js index e7e76ecc03..f24c762e83 100644 --- a/test/spec/controllers/footerCtrlSpec.js +++ b/test/spec/controllers/footerCtrlSpec.js @@ -49,7 +49,13 @@ describe.only('Footer Controller', function() { }); describe('#addHourglass', function() { - it('posts to /user/addHourglass'); + it('posts to /user/addHourglass', inject(function($httpBackend) { + $httpBackend.expectPOST('/api/v2/user/addHourglass').respond({}); + + scope.addHourglass(); + + $httpBackend.flush(); + })); }); describe('#addGold', function() { From 33c51a77d9b3f8c8151c51a5460c347c1e0f1994 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 13 Sep 2015 14:42:10 -0500 Subject: [PATCH 13/19] Add unit test for addTenGems route --- test/server_side/controllers/user.test.js | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/test/server_side/controllers/user.test.js b/test/server_side/controllers/user.test.js index ec3b447630..47a360fb98 100644 --- a/test/server_side/controllers/user.test.js +++ b/test/server_side/controllers/user.test.js @@ -552,4 +552,35 @@ describe('User Controller', function() { }); }); }); + + describe('#addTenGems', function() { + var req, res, user; + + beforeEach(function() { + user = { + _id: 'user-id', + balance: 5, + save: sinon.stub().yields() + }; + req = { }; + res = { + locals: { user: user }, + send: sinon.spy() + }; + }); + + it('adds 2.5 to user balance', function() { + userController.addTenGems(req, res); + + expect(user.balance).to.eql(7.5); + expect(user.save).to.be.calledOnce; + }); + + it('sends back 204', function() { + userController.addTenGems(req, res); + + expect(res.send).to.be.calledOnce; + expect(res.send).to.be.calledWith(204); + }); + }); }); From e554309822f9e5f9dff2a0ea12583b7d12deaeb1 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 13 Sep 2015 14:57:18 -0500 Subject: [PATCH 14/19] Add route to add a hourglass --- test/server_side/controllers/user.test.js | 31 +++++++++++++++++++++++ website/src/controllers/user.js | 19 ++++++++++++++ website/src/routes/apiv2.coffee | 4 +++ 3 files changed, 54 insertions(+) diff --git a/test/server_side/controllers/user.test.js b/test/server_side/controllers/user.test.js index 47a360fb98..aac7bf69b7 100644 --- a/test/server_side/controllers/user.test.js +++ b/test/server_side/controllers/user.test.js @@ -583,4 +583,35 @@ describe('User Controller', function() { expect(res.send).to.be.calledWith(204); }); }); + + describe('#addHourglass', function() { + var req, res, user; + + beforeEach(function() { + user = { + _id: 'user-id', + purchased: { plan: { consecutive: { trinkets: 3 } } }, + save: sinon.stub().yields() + }; + req = { }; + res = { + locals: { user: user }, + send: sinon.spy() + }; + }); + + it('adds an hourglass to user', function() { + userController.addHourglass(req, res); + + expect(user.purchased.plan.consecutive.trinkets).to.eql(4); + expect(user.save).to.be.calledOnce; + }); + + it('sends back 204', function() { + userController.addHourglass(req, res); + + expect(res.send).to.be.calledOnce; + expect(res.send).to.be.calledWith(204); + }); + }); }); diff --git a/website/src/controllers/user.js b/website/src/controllers/user.js index f961ee5918..80a8321191 100644 --- a/website/src/controllers/user.js +++ b/website/src/controllers/user.js @@ -412,6 +412,25 @@ api.addTenGems = function(req, res, next) { }) } +/* + ------------------------------------------------------------------------ + Hourglass + ------------------------------------------------------------------------ + */ + +// api.unlock // see Shared.ops + +api.addHourglass = function(req, res, next) { + var user = res.locals.user; + + user.purchased.plan.consecutive.trinkets += 1; + + user.save(function(err){ + if (err) return next(err); + res.send(204); + }) +} + /* ------------------------------------------------------------------------ Tags diff --git a/website/src/routes/apiv2.coffee b/website/src/routes/apiv2.coffee index 396747fcf4..db26ac57a7 100644 --- a/website/src/routes/apiv2.coffee +++ b/website/src/routes/apiv2.coffee @@ -783,6 +783,10 @@ module.exports = (swagger, v2) -> spec: method:'POST' action: user.addTenGems + api["/user/addHourglass"] = + spec: method:'POST' + action: user.addHourglass + _.each api, (route, path) -> ## Spec format is: # spec: From 50b709045db1616019e03a002167433a16aae5b1 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 13 Sep 2015 16:24:46 -0500 Subject: [PATCH 15/19] Remove only from test --- test/spec/controllers/footerCtrlSpec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/spec/controllers/footerCtrlSpec.js b/test/spec/controllers/footerCtrlSpec.js index f24c762e83..7b12bc2875 100644 --- a/test/spec/controllers/footerCtrlSpec.js +++ b/test/spec/controllers/footerCtrlSpec.js @@ -1,6 +1,6 @@ 'use strict'; -describe.only('Footer Controller', function() { +describe('Footer Controller', function() { var scope, user; beforeEach(inject(function($rootScope, $controller) { @@ -78,7 +78,7 @@ describe.only('Footer Controller', function() { it('adds one level to user'); }); - describe.only('#addBossQuestProgressUp', function() { + describe('#addBossQuestProgressUp', function() { it('adds 1000 progress to quest.progress.up'); }); }); From b6f02d388f353e82aeb548f63cd33fcb8bf9748f Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 13 Sep 2015 16:25:57 -0500 Subject: [PATCH 16/19] Correct method to correctly add an hourglass in debug menu --- website/public/js/controllers/footerCtrl.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/public/js/controllers/footerCtrl.js b/website/public/js/controllers/footerCtrl.js index 40975a4c0c..a25972fc81 100644 --- a/website/public/js/controllers/footerCtrl.js +++ b/website/public/js/controllers/footerCtrl.js @@ -90,9 +90,9 @@ function($scope, $rootScope, User, $http, Notification, ApiUrl) { }; $scope.addHourglass = function(){ - User.set({ - 'purchased.plan.consecutive.trinkets': User.user.purchased.plan.consecutive.trinkets + 1, - }); + $http.post(ApiUrl.get() + '/api/v2/user/addHourglass').success(function(){ + User.log({}); + }) }; $scope.addGold = function(){ From 5553d74334c6d20e840c13c59fb6ecb3c0e9a5f6 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 13 Sep 2015 16:26:29 -0500 Subject: [PATCH 17/19] Create method to calculate whether or not user has attained all mystery equipment --- test/spec/controllers/inventoryCtrlSpec.js | 13 +++++++++++++ website/public/js/controllers/inventoryCtrl.js | 7 +++++++ website/views/options/inventory/time-travelers.jade | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/test/spec/controllers/inventoryCtrlSpec.js b/test/spec/controllers/inventoryCtrlSpec.js index f9afeb0449..acdcc86840 100644 --- a/test/spec/controllers/inventoryCtrlSpec.js +++ b/test/spec/controllers/inventoryCtrlSpec.js @@ -12,6 +12,7 @@ describe('Inventory Controller', function() { user = specHelper.newUser({ balance: 4, items: { + gear: { owned: {} }, eggs: { Cactus: 1 }, hatchingPotions: { Base: 1 }, food: { Meat: 1 }, @@ -155,4 +156,16 @@ describe('Inventory Controller', function() { expect(possibleValues).to.contain(cardsModalScope.cardMessage); }); }); + + describe('#hasAllTimeTravelerItems', function() { + it('returns false if there are items left in the time traveler store', function() { + expect(scope.hasAllTimeTravelerItems()).to.eql(false); + }); + + it('returns true if there are no items left to purchase', inject(function(Content) { + sandbox.stub(Content, 'timeTravelerStore').returns({}); + + expect(scope.hasAllTimeTravelerItems()).to.eql(true); + })); + }); }); diff --git a/website/public/js/controllers/inventoryCtrl.js b/website/public/js/controllers/inventoryCtrl.js index 4edad98680..e140a3798e 100644 --- a/website/public/js/controllers/inventoryCtrl.js +++ b/website/public/js/controllers/inventoryCtrl.js @@ -228,6 +228,13 @@ habitrpg.controller("InventoryCtrl", }); }; + $scope.hasAllTimeTravelerItems = function(items) { + var itemsLeftInTimeTravlerStore = Content.timeTravelerStore(user.items.gear.owned); + var keys = Object.keys(itemsLeftInTimeTravlerStore); + + return keys.length === 0; + }; + function _updateDropAnimalCount(items) { $scope.petCount = Shared.count.beastMasterProgress(items.pets); $scope.mountCount = Shared.count.mountMasterProgress(items.mounts); diff --git a/website/views/options/inventory/time-travelers.jade b/website/views/options/inventory/time-travelers.jade index c339e6bff1..b90c3e77f5 100644 --- a/website/views/options/inventory/time-travelers.jade +++ b/website/views/options/inventory/time-travelers.jade @@ -20,7 +20,7 @@ .row: .col-md-12 .row: .col-md-6 - .alert.alert-info(ng-if='_.isEmpty(Content.timeTravelerStore(user.items.gear.owned))')=env.t('timeTravelersAlreadyOwned') + .alert.alert-info(ng-if='hasAllTimeTravelerItems()')=env.t('timeTravelersAlreadyOwned') li.customize-menu.inventory-gear menu.pets-menu(label='{{::set.text}}', ng-repeat='set in Content.timeTravelerStore(user.items.gear.owned)') From d5eaaefa72ff53f93299ca828aa2c83ab7172afa Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 13 Sep 2015 16:56:39 -0500 Subject: [PATCH 18/19] Adjust positioning of alert message --- website/views/options/inventory/time-travelers.jade | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/views/options/inventory/time-travelers.jade b/website/views/options/inventory/time-travelers.jade index b90c3e77f5..b07a533852 100644 --- a/website/views/options/inventory/time-travelers.jade +++ b/website/views/options/inventory/time-travelers.jade @@ -18,10 +18,10 @@ b x{{user.purchased.plan.consecutive.trinkets}} p!=env.t('timeTravelersPopover', {linkStart: "", linkEnd: ""}) - .row: .col-md-12 - .row: .col-md-6 - .alert.alert-info(ng-if='hasAllTimeTravelerItems()')=env.t('timeTravelersAlreadyOwned') + .row: .col-md-7 + .alert.alert-info(ng-if='hasAllTimeTravelerItems()')=env.t('timeTravelersAlreadyOwned') + .row: .col-md-12 li.customize-menu.inventory-gear menu.pets-menu(label='{{::set.text}}', ng-repeat='set in Content.timeTravelerStore(user.items.gear.owned)') div(ng-repeat='item in set.items') From 5974c7e0792ec5cb53f95b211fe6c2950da5b3d5 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 13 Sep 2015 18:27:57 -0500 Subject: [PATCH 19/19] Simplify time travelers page --- .../options/inventory/time-travelers.jade | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/website/views/options/inventory/time-travelers.jade b/website/views/options/inventory/time-travelers.jade index b07a533852..4b8277038f 100644 --- a/website/views/options/inventory/time-travelers.jade +++ b/website/views/options/inventory/time-travelers.jade @@ -1,18 +1,14 @@ .container-fluid - .stable.row(ng-if='user.purchased.plan.consecutive.trinkets <= 0'): .col-xs-12 - .npc_timetravelers.pull-left-sm.col-centered + .stable.row: .col-xs-12 + - var hasTrinkets = 'user.purchased.plan.consecutive.trinkets > 0' + .pull-left-sm.col-centered(ng-class='#{hasTrinkets} ? "npc_timetravelers_active" : "npc_timetravelers"') .popover.static-popover.fade.right.in.pull-left-sm.col-centered .arrow.hidden-xs - h3.popover-title!=env.t('timeTravelersTitleNoSub', {linkStartTyler: "", linkStartVicky: "", linkEnd: ""}) - .popover-content + h3.popover-title(ng-if='#{hasTrinkets}')=env.t('timeTravelersTitle') + h3.popover-title(ng-if='!(#{hasTrinkets})')!=env.t('timeTravelersTitleNoSub', {linkStartTyler: "", linkStartVicky: "", linkEnd: ""}) + .popover-content(ng-if='!(#{hasTrinkets})') p!=env.t('timeTravelersPopoverNoSub', {linkStart: "", linkEnd: ""}) - - .stable.row(ng-if='user.purchased.plan.consecutive.trinkets > 0'): .col-xs-12 - .npc_timetravelers_active.pull-left-sm.col-centered - .popover.static-popover.fade.right.in.pull-left-sm.col-centered - .arrow.hidden-xs - h3.popover-title=env.t('timeTravelersTitle') - .popover-content + .popover-content(ng-if='#{hasTrinkets}') .pull-right span.inventory_special_trinket.inline-gems b x{{user.purchased.plan.consecutive.trinkets}}