[API v3] Fix calls to user.ops and deleting tags (#7204)

* v3: fixes calls to user.ops from views and deleting tags

* v3: fix tests that use user._statsComputed
This commit is contained in:
Matteo Pagliazzi 2016-05-13 19:45:16 +02:00
parent 468a312357
commit cc20812674
18 changed files with 78 additions and 24 deletions

View file

@ -76,7 +76,11 @@ describe('Stats Service', function() {
"armor" : "armor_warrior_1"
};
var user = {
_statsComputed: { str: 50 },
fns: {
statsComputed: function () {
return { str: 50 };
},
},
stats: {
lvl: 10,
buffs: { str: 10 },
@ -252,7 +256,8 @@ describe('Stats Service', function() {
describe('mpDisplay', function() {
it('displays mp as "mp / totalMP"', function() {
user._statsComputed = { maxMP: 100 };
user.fns = {};
user.fns.statsComputed = function () { return { maxMP: 100 } };
user.stats.mp = 30;
var mpDisplay = statCalc.mpDisplay(user);
@ -260,7 +265,8 @@ describe('Stats Service', function() {
});
it('Rounds mp down when given a decimal', function() {
user._statsComputed = { maxMP: 100 };
user.fns = {};
user.fns.statsComputed = function () { return { maxMP: 100 } };
user.stats.mp = 30.99;
var mpDisplay = statCalc.mpDisplay(user);

View file

@ -22,7 +22,7 @@
}
function classBonus(user, stat) {
var computedStats = user._statsComputed;
var computedStats = (user.fns && user.fns.statsComputed) ? user.fns.statsComputed() : null;
if(computedStats) {
var bonus = computedStats[stat]
@ -95,7 +95,7 @@
function mpDisplay(user) {
var remainingMP = Math.floor(user.stats.mp);
var totalMP = user._statsComputed.maxMP;
var totalMP = (user.fns && user.fns.statsComputed) ? user.fns.statsComputed().maxMP : null;
var display = _formatOutOfTotalDisplay(remainingMP, totalMP);
return display;

View file

@ -153,10 +153,22 @@ angular.module('habitrpg')
callOpsFunctionAndRequest('allocate', 'allocate', "POST",'', data);
},
allocateNow: function () {
callOpsFunctionAndRequest('allocateNow', 'allocate-now', "POST");
},
changeClass: function (data) {
callOpsFunctionAndRequest('changeClass', 'change-class', "POST",'', data);
},
disableClasses: function () {
callOpsFunctionAndRequest('disableClasses', 'disable-classes', "POST");
},
revive: function (data) {
callOpsFunctionAndRequest('revive', 'revive', "POST");
},
addTask: function (data) {
user.ops.addTask(data);
save();
@ -187,6 +199,12 @@ angular.module('habitrpg')
Tasks.deleteTask(data.params.id);
},
clearCompleted: function () {
user.ops.clearCompleted(user.todos);
save();
Tasks.clearCompletedTodos();
},
addTag: function(data) {
user.ops.addTag(data);
save();
@ -199,6 +217,12 @@ angular.module('habitrpg')
Tags.updateTag(data.params.id, data.body);
},
deleteTag: function(data) {
user.ops.deleteTag(data);
save();
Tags.deleteTag(data.params.id);
},
addTenGems: function () {
$http({
method: "POST",
@ -228,10 +252,18 @@ angular.module('habitrpg')
callOpsFunctionAndRequest('clearPMs', 'messages', "DELETE");
},
deletePM: function (data) {
callOpsFunctionAndRequest('deletePM', 'messages', "DELETE", data.params.id, data);
},
buy: function (data) {
callOpsFunctionAndRequest('buy', 'buy', "POST", data.params.key, data);
},
buyQuest: function (data) {
callOpsFunctionAndRequest('buyQuest', 'buy-quest', "POST", data.params.key, data);
},
purchase: function (data) {
var type = data.params.type;
var key = data.params.key;
@ -251,6 +283,18 @@ angular.module('habitrpg')
})
},
buyMysterySet: function (data) {
callOpsFunctionAndRequest('buyMysterySet', 'buy-mystery-set', "POST", data.params.key, data);
},
readCard: function (data) {
callOpsFunctionAndRequest('readCard', 'read-card', "POST", data.params.cardType, data);
},
openMysteryItem: function (data) {
callOpsFunctionAndRequest('openMysteryItem', 'open-mystery-item', "POST");
},
sell: function (data) {
var type = data.params.type;
var key = data.params.key;
@ -334,6 +378,10 @@ angular.module('habitrpg')
callOpsFunctionAndRequest('sleep', 'sleep', "POST");
},
blockUser: function (data) {
callOpsFunctionAndRequest('blockUser', 'block', "POST", data.params.uuid, data);
},
online: function (status) {
if (status===true) {
settings.online = true;

View file

@ -31,7 +31,7 @@
li.filters-edit(ng-class='{active: user.filters[tag.id]}', ng-repeat='tag in user.tags', bindonce='user.tags')
form.hrpg-input-group
input(type='text', ng-model='tag.name', ui-keyup="{13: 'saveOrEdit()'}")
button(type='button', ng-click='user.ops.deleteTag({params:{id:tag.id}})')
button(type='button', ng-click='User.deleteTag({params:{id:tag.id}})')
span.glyphicon.glyphicon-trash
ul(ng-if='!_editing', hrpg-sort-tags)
li.filters-tags(ng-class='{active: user.filters[tag.id], challenge: tag.challenge}', ng-repeat='tag in user.tags', bindonce='user.tags')

View file

@ -65,7 +65,7 @@
button.customize-option(class='inventory_present inventory_present_{{moment().format("MM")}}',
popover=env.t('subscriberItemText'), popover-trigger='mouseenter',
popover-placement='right', popover-append-to-body='true',
ng-click="user.ops.openMysteryItem({})")
ng-click="User.openMysteryItem({})")
.badge.badge-info.stack-count {{user.purchased.plan.mysteryItems.length}}
div(ng-if='user.purchased.plan.consecutive.trinkets')
@ -199,7 +199,7 @@
button.customize-option(popover=env.t('subGemPop'), popover-title=env.t('subGemName'),
popover-trigger='mouseenter', popover-placement='top',
popover-append-to-body='true',
ng-click='user.ops.purchase({params:{type:"gems",key:"gem"}})')
ng-click='User.purchase({params:{type:"gems",key:"gem"}})')
span.Pet_Currency_Gem.inline-gems
.badge.badge-success.stack-count {{Shared.planGemLimits.convCap + User.user.purchased.plan.consecutive.gemCapExtra - User.user.purchased.plan.gemsBought}}
p

View file

@ -35,4 +35,4 @@
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.buyMysterySet({params:{key:set.key}})')

View file

@ -219,7 +219,7 @@ mixin profileStats
input(type='radio', name='allocationMode', value='taskbased', ng-model='user.preferences.allocationMode', ng-change='set({"preferences.allocationMode": "taskbased"})')
span.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('taskAllocationPop'))=env.t('taskAllocation')
div(ng-show='user.preferences.automaticAllocation && !(user.preferences.allocationMode === "taskbased") && (user.stats.points > 0)')
a.btn.btn-primary.btn-xs(ng-click='user.ops.allocateNow({})', popover-trigger='mouseenter', popover-placement='right', popover=env.t('distributePointsPop'))
a.btn.btn-primary.btn-xs(ng-click='User.allocateNow({})', popover-trigger='mouseenter', popover-placement='right', popover=env.t('distributePointsPop'))
span.glyphicon.glyphicon-download
| 
=env.t('distributePoints')
@ -227,7 +227,7 @@ mixin profileStats
div(ng-class='user.flags.classSelected && !user.preferences.disableClasses ? "col-md-4" : "col-md-6"')
button.btn.btn-default(ng-if='user.preferences.disableClasses', ng-click='user.ops.changeClass({})', popover-trigger='mouseenter', popover-placement='right', popover=env.t('enableClassPop'))= env.t('enableClass')
button.btn.btn-default(ng-if='user.preferences.disableClasses', ng-click='User.changeClass({})', popover-trigger='mouseenter', popover-placement='right', popover=env.t('enableClassPop'))= env.t('enableClass')
hr(ng-if='user.preferences.disableClasses')
include ../shared/profiles/achievements

View file

@ -92,7 +92,7 @@ script(type='text/ng-template', id='partials/options.settings.settings.html')
button.btn.btn-default(ng-click='showBailey()', popover-trigger='mouseenter', popover-placement='right', popover=env.t('showBaileyPop'))= env.t('showBailey')
button.btn.btn-default(ng-click='openRestoreModal()', popover-trigger='mouseenter', popover-placement='right', popover=env.t('fixValPop'))= env.t('fixVal')
button.btn.btn-default(ng-if='user.preferences.disableClasses==true', ng-click='user.ops.changeClass({})', popover-trigger='mouseenter', popover-placement='right', popover=env.t('enableClassPop'))= env.t('enableClass')
button.btn.btn-default(ng-if='user.preferences.disableClasses==true', ng-click='User.changeClass({})', popover-trigger='mouseenter', popover-placement='right', popover=env.t('enableClassPop'))= env.t('enableClass')
hr

View file

@ -29,7 +29,7 @@ mixin chatMessages(inbox)
a(ng-click="quickReply(message.uuid)")
span.glyphicon.glyphicon-share-alt(tooltip=env.t('pm-reply'))
span(ng-if='#{inbox ? "true" : ":: user.contributor.admin || message.uuid == user.id"}')    
a(ng-click='#{inbox? "user.ops.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}')
a(ng-click='#{inbox? "User.deletePM({params:{id:message.$key}})" : "deleteChatMessage(group, message)"}')
span.glyphicon.glyphicon-trash(tooltip=env.t('delete'))
span(ng-if=':: user.contributor.admin || (!message.sent && user.flags.communityGuidelinesAccepted && message.uuid != user.id && message.uuid != "system")')    
a(ng-click="flagChatMessage(group._id, message)")

View file

@ -25,10 +25,10 @@
.meter-label(tooltip='Mana', ng-if='user.flags.classSelected && !user.preferences.disableClasses')
span.glyphicon.glyphicon-fire
.meter.mana(ng-if='user.flags.classSelected && !user.preferences.disableClasses', tooltip='{{Math.round(user.stats.mp * 100) / 100}}')
.bar(ng-style='{"width": (user.stats.mp / user._statsComputed.maxMP * 100) + "%"}')
.bar(ng-style='{"width": (user.stats.mp / user.fns.statsComputed().maxMP * 100) + "%"}')
span.meter-text.value
span
| {{Math.floor(user.stats.mp)}} / {{user._statsComputed.maxMP}}
| {{Math.floor(user.stats.mp)}} / {{user.fns.statsComputed().maxMP}}
// party
.party(ng-controller='PartyCtrl')
button.party-invite.btn.btn-primary(ng-click="inviteOrStartParty(group)",

View file

@ -34,7 +34,7 @@ script(id='modals/buyGems.html', type='text/ng-template')
.container-fluid
.row
.col-md-3
button.customize-option(ng-click='user.ops.purchase({params:{type:"gems",key:"gem"}})')
button.customize-option(ng-click='User.purchase({params:{type:"gems",key:"gem"}})')
span.Pet_Currency_Gem.inline-gems
.badge.badge-success.stack-count {{Shared.planGemLimits.convCap + User.user.purchased.plan.consecutive.gemCapExtra - User.user.purchased.plan.gemsBought}}
p

View file

@ -68,6 +68,6 @@ script(type='text/ng-template', id='modals/chooseClass.html')
.modal-footer
span(popover-placement='left', popover-trigger='mouseenter', popover=env.t('optOutOfClassesText'))
button.btn.btn-danger(ng-click='user.ops.disableClasses({}); $close()')=env.t('optOutOfClasses')
button.btn.btn-danger(ng-click='User.disableClasses({}); $close()')=env.t('optOutOfClasses')
button.btn.btn-primary(ng-disabled='!selectedClass' ng-click='changeClass(selectedClass); $close()')=env.t('select')
.pull-left!=env.t('chooseClassLearn')

View file

@ -21,5 +21,5 @@ script(type='text/ng-template', id='modals/death.html')
h4(style='margin-top:1.5em')=env.t('dontDespair')
p(style='margin-top:1.5em')=env.t('deathPenaltyDetails')
.modal-footer
a.btn.btn-danger.btn-lg.flex-column(ng-click='user.ops.revive({}); $close()')=env.t('refillHealthTryAgain')
a.btn.btn-danger.btn-lg.flex-column(ng-click='User.revive(); $close()')=env.t('refillHealthTryAgain')
h4.text-center!=env.t('dyingOftenTips')

View file

@ -9,4 +9,4 @@ script(id='modals/cards.html', type='text/ng-template')
markdown(text='::cardMessage')
.modal-footer
small.pull-left {{::env.t(cardType + 'CardExplanation')}}
button.btn.btn-default(ng-click='user.ops.readCard({params: {cardType: cardType}}); $close()')=env.t('ok')
button.btn.btn-default(ng-click='User.readCard({params: {cardType: cardType}}); $close()')=env.t('ok')

View file

@ -33,9 +33,9 @@ script(type='text/ng-template', id='modals/member.html')
include ../profiles/achievements
.modal-footer
.btn-group.pull-left(ng-if='::user')
button.btn.btn-md.btn-default(ng-if='user.inbox.blocks | contains:profile._id', tooltip=env.t('unblock'), ng-click="user.ops.blockUser({params:{uuid:profile._id}})", tooltip-placement='right')
button.btn.btn-md.btn-default(ng-if='user.inbox.blocks | contains:profile._id', tooltip=env.t('unblock'), ng-click="User.blockUser({params:{uuid:profile._id}})", tooltip-placement='right')
span.glyphicon.glyphicon-plus
button.btn.btn-md.btn-default(ng-if='profile._id != user._id && !profile.contributor.admin && !(user.inbox.blocks | contains:profile._id)', tooltip=env.t('block'), ng-click="user.ops.blockUser({params:{uuid:profile._id}})", tooltip-placement='right')
button.btn.btn-md.btn-default(ng-if='profile._id != user._id && !profile.contributor.admin && !(user.inbox.blocks | contains:profile._id)', tooltip=env.t('block'), ng-click="User.blockUser({params:{uuid:profile._id}})", tooltip-placement='right')
span.glyphicon.glyphicon-ban-circle
button.btn.btn-md.btn-default(tooltip=env.t('sendPM'), ng-click="openModal('private-message',{controller:'MemberModalCtrl'})", tooltip-placement='right')
span.glyphicon.glyphicon-envelope

View file

@ -57,7 +57,7 @@ script(type='text/ng-template', id='modals/buyQuest.html')
.modal-footer
button.btn.btn-default(ng-click='closeQuest(); $close()')=env.t('neverMind')
button.btn.btn-primary(ng-if='::selectedQuest.category !== "gold"', ng-click='purchase("quests", quest); closeQuest(); $close()')=env.t('buyQuest') + ': {{::selectedQuest.value}} ' + env.t('gems')
button.btn.btn-primary(ng-if='::selectedQuest.category === "gold"', ng-click='user.ops.buyQuest({params:{key:selectedQuest.key}}); closeQuest(); $close()')=env.t('buyQuest') + ': {{::selectedQuest.goldValue}} ' + env.t('gold')
button.btn.btn-primary(ng-if='::selectedQuest.category === "gold"', ng-click='User.buyQuest({params:{key:selectedQuest.key}}); closeQuest(); $close()')=env.t('buyQuest') + ': {{::selectedQuest.goldValue}} ' + env.t('gold')
script(type='text/ng-template', id='modals/questInvitation.html')
.modal-header

View file

@ -7,7 +7,7 @@ table.table.table-striped
span.hint(popover-title=env.t(statInfo.title), popover-placement='right',
popover=env.t(statInfo.popover), popover-trigger='mouseenter')
strong=env.t(statInfo.title)
strong : {{profile._statsComputed.#{stat}}}
strong : {{profile.fns.statsComputed().#{stat}}}
td: ul.list-unstyled
+statList('statCalc.levelBonus(profile.stats.lvl)', 'levelBonus', 'level', true)

View file

@ -24,7 +24,7 @@ mixin taskColumnTabs(position)
div(ng-show='list.view == "complete"')
.alert
=env.t('lotOfToDos')
button.task-action-btn.tile.spacious.bright(ng-click='user.ops.clearCompleted({})',popover=env.t('deleteToDosExplanation'),popover-trigger='mouseenter')=env.t('clearCompleted')
button.task-action-btn.tile.spacious.bright(ng-click='User.clearCompleted({})',popover=env.t('deleteToDosExplanation'),popover-trigger='mouseenter')=env.t('clearCompleted')
// remaining/completed tabs
ul.task-filter
li(ng-class='{active: list.view == "remaining"}')