mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
v3: fix notifications
This commit is contained in:
@@ -140,7 +140,6 @@
|
|||||||
"notAccteptedType": "Type must be in [eggs, hatchingPotions, food, quests, gear]",
|
"notAccteptedType": "Type must be in [eggs, hatchingPotions, food, quests, gear]",
|
||||||
"contentKeyNotFound": "Key not found for Content <%= type %>",
|
"contentKeyNotFound": "Key not found for Content <%= type %>",
|
||||||
"plusOneGem": "+1 Gem",
|
"plusOneGem": "+1 Gem",
|
||||||
"purchased": "You purchsed a <%= key %> <%= type %>",
|
|
||||||
"notAllowedHourglass": "Pet/Mount not available for purchase with Mystic Hourglass.",
|
"notAllowedHourglass": "Pet/Mount not available for purchase with Mystic Hourglass.",
|
||||||
"readCard": "<%= cardType %> has been read",
|
"readCard": "<%= cardType %> has been read",
|
||||||
"cardTypeRequired": "Card type required",
|
"cardTypeRequired": "Card type required",
|
||||||
@@ -160,7 +159,6 @@
|
|||||||
"mountsReleased": "Mounts released",
|
"mountsReleased": "Mounts released",
|
||||||
"typeNotSellable": "Type is not sellable. Must be one of the following <%= acceptedTypes %>",
|
"typeNotSellable": "Type is not sellable. Must be one of the following <%= acceptedTypes %>",
|
||||||
"userItemsKeyNotFound": "Key not found for user.items <%= type %>",
|
"userItemsKeyNotFound": "Key not found for user.items <%= type %>",
|
||||||
"sold": "You sold a <%= key %> <%= type %>",
|
|
||||||
"pathRequired": "Path string is required",
|
"pathRequired": "Path string is required",
|
||||||
"unlocked": "Items have been unlocked",
|
"unlocked": "Items have been unlocked",
|
||||||
"alreadyUnlocked": "Full set already unlocked.",
|
"alreadyUnlocked": "Full set already unlocked.",
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ module.exports = function feed (user, req = {}) {
|
|||||||
let pet = _.get(req, 'params.pet');
|
let pet = _.get(req, 'params.pet');
|
||||||
let foodK = _.get(req, 'params.food');
|
let foodK = _.get(req, 'params.food');
|
||||||
|
|
||||||
if (!pet || !foodK) throw new BadRequest(i18n.t('missingPetFoodFeed'));
|
if (!pet || !foodK) throw new BadRequest(i18n.t('missingPetFoodFeed', req.language));
|
||||||
|
|
||||||
if (pet.indexOf('-') === -1) {
|
if (pet.indexOf('-') === -1) {
|
||||||
throw new BadRequest(i18n.t('invalidPetName', req.language));
|
throw new BadRequest(i18n.t('invalidPetName', req.language));
|
||||||
@@ -43,8 +43,8 @@ module.exports = function feed (user, req = {}) {
|
|||||||
|
|
||||||
let [egg, potion] = pet.split('-');
|
let [egg, potion] = pet.split('-');
|
||||||
|
|
||||||
let potionText = content.hatchingPotions[potion] ? content.hatchingPotions[potion].text() : potion;
|
let potionText = content.hatchingPotions[potion] ? content.hatchingPotions[potion].text(req.language) : potion;
|
||||||
let eggText = content.eggs[egg] ? content.eggs[egg].text() : egg;
|
let eggText = content.eggs[egg] ? content.eggs[egg].text(req.language) : egg;
|
||||||
|
|
||||||
let petDisplayName = i18n.t('petName', {
|
let petDisplayName = i18n.t('petName', {
|
||||||
potion: potionText,
|
potion: potionText,
|
||||||
|
|||||||
@@ -122,7 +122,6 @@ module.exports = function purchase (user, req = {}, analytics) {
|
|||||||
} else {
|
} else {
|
||||||
return [
|
return [
|
||||||
_.pick(user, splitWhitespace('items balance')),
|
_.pick(user, splitWhitespace('items balance')),
|
||||||
i18n.t('purchased', {type, key}),
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ module.exports = function sell (user, req = {}) {
|
|||||||
} else {
|
} else {
|
||||||
return [
|
return [
|
||||||
_.pick(user, splitWhitespace('stats items')),
|
_.pick(user, splitWhitespace('stats items')),
|
||||||
i18n.t('sold', {type, key}),
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -28,9 +28,12 @@ angular.module('habitrpg')
|
|||||||
localStorage.clear();
|
localStorage.clear();
|
||||||
window.location.href = mobileApp ? '/app/login' : '/logout'; //location.reload()
|
window.location.href = mobileApp ? '/app/login' : '/logout'; //location.reload()
|
||||||
|
|
||||||
// 400 range?
|
// 400 range
|
||||||
|
} else if (response.status < 400) {
|
||||||
|
// never triggered because we're in responseError
|
||||||
|
$rootScope.$broadcast('responseText', response.data.message);
|
||||||
} else if (response.status < 500) {
|
} else if (response.status < 500) {
|
||||||
$rootScope.$broadcast('responseText', response.data.err || response.data.message);
|
$rootScope.$broadcast('responseError', response.data.message);
|
||||||
// Need to reject the prompse so the error is handled correctly
|
// Need to reject the prompse so the error is handled correctly
|
||||||
if (response.status === 401) {
|
if (response.status === 401) {
|
||||||
return $q.reject(response);
|
return $q.reject(response);
|
||||||
@@ -41,7 +44,7 @@ angular.module('habitrpg')
|
|||||||
window.env.t('error') + ' ' + (response.data.err || response.data || 'something went wrong') +
|
window.env.t('error') + ' ' + (response.data.err || response.data || 'something went wrong') +
|
||||||
'" <br><br>' + window.env.t('seeConsole');
|
'" <br><br>' + window.env.t('seeConsole');
|
||||||
if (mobileApp) error = 'Error contacting the server. Please try again in a few minutes.';
|
if (mobileApp) error = 'Error contacting the server. Please try again in a few minutes.';
|
||||||
$rootScope.$broadcast('responseError', error);
|
$rootScope.$broadcast('responseError500', error);
|
||||||
console.error(response);
|
console.error(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,10 +26,9 @@ describe('POST /user/purchase/:type/:key', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('purchases a gem item', async () => {
|
it('purchases a gem item', async () => {
|
||||||
let res = await user.post(`/user/purchase/${type}/${key}`);
|
await user.post(`/user/purchase/${type}/${key}`);
|
||||||
await user.sync();
|
await user.sync();
|
||||||
|
|
||||||
expect(res.message).to.equal(t('purchased', {type, key}));
|
|
||||||
expect(user.items[type][key]).to.equal(1);
|
expect(user.items[type][key]).to.equal(1);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -33,10 +33,9 @@ describe('POST /user/sell/:type/:key', () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
let response = await user.post(`/user/sell/${type}/${key}`);
|
await user.post(`/user/sell/${type}/${key}`);
|
||||||
await user.sync();
|
await user.sync();
|
||||||
|
|
||||||
expect(response.message).to.equal(t('sold', {type, key}));
|
|
||||||
expect(user.stats.gp).to.equal(content[type][key].value);
|
expect(user.stats.gp).to.equal(content[type][key].value);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -150,9 +150,8 @@ describe('shared.ops.purchase', () => {
|
|||||||
let type = 'eggs';
|
let type = 'eggs';
|
||||||
let key = 'Wolf';
|
let key = 'Wolf';
|
||||||
|
|
||||||
let [, message] = purchase(user, {params: {type, key}});
|
purchase(user, {params: {type, key}});
|
||||||
|
|
||||||
expect(message).to.equal(i18n.t('purchased', {type, key}));
|
|
||||||
expect(user.items[type][key]).to.equal(1);
|
expect(user.items[type][key]).to.equal(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -160,9 +159,8 @@ describe('shared.ops.purchase', () => {
|
|||||||
let type = 'hatchingPotions';
|
let type = 'hatchingPotions';
|
||||||
let key = 'Base';
|
let key = 'Base';
|
||||||
|
|
||||||
let [, message] = purchase(user, {params: {type, key}});
|
purchase(user, {params: {type, key}});
|
||||||
|
|
||||||
expect(message).to.equal(i18n.t('purchased', {type, key}));
|
|
||||||
expect(user.items[type][key]).to.equal(1);
|
expect(user.items[type][key]).to.equal(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -170,9 +168,8 @@ describe('shared.ops.purchase', () => {
|
|||||||
let type = 'food';
|
let type = 'food';
|
||||||
let key = 'Meat';
|
let key = 'Meat';
|
||||||
|
|
||||||
let [, message] = purchase(user, {params: {type, key}});
|
purchase(user, {params: {type, key}});
|
||||||
|
|
||||||
expect(message).to.equal(i18n.t('purchased', {type, key}));
|
|
||||||
expect(user.items[type][key]).to.equal(1);
|
expect(user.items[type][key]).to.equal(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -180,9 +177,8 @@ describe('shared.ops.purchase', () => {
|
|||||||
let type = 'quests';
|
let type = 'quests';
|
||||||
let key = 'gryphon';
|
let key = 'gryphon';
|
||||||
|
|
||||||
let [, message] = purchase(user, {params: {type, key}});
|
purchase(user, {params: {type, key}});
|
||||||
|
|
||||||
expect(message).to.equal(i18n.t('purchased', {type, key}));
|
|
||||||
expect(user.items[type][key]).to.equal(1);
|
expect(user.items[type][key]).to.equal(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -190,9 +186,8 @@ describe('shared.ops.purchase', () => {
|
|||||||
let type = 'gear';
|
let type = 'gear';
|
||||||
let key = 'headAccessory_special_tigerEars';
|
let key = 'headAccessory_special_tigerEars';
|
||||||
|
|
||||||
let [, message] = purchase(user, {params: {type, key}});
|
purchase(user, {params: {type, key}});
|
||||||
|
|
||||||
expect(message).to.equal(i18n.t('purchased', {type, key}));
|
|
||||||
expect(user.items.gear.owned[key]).to.be.true;
|
expect(user.items.gear.owned[key]).to.be.true;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -66,16 +66,14 @@ describe('shared.ops.sell', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('reduces item count from user', () => {
|
it('reduces item count from user', () => {
|
||||||
let [, message] = sell(user, {params: { type, key } });
|
sell(user, {params: { type, key } });
|
||||||
|
|
||||||
expect(message).to.equal(i18n.t('sold', {type, key}));
|
|
||||||
expect(user.items[type][key]).to.equal(0);
|
expect(user.items[type][key]).to.equal(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('increases user\'s gold', () => {
|
it('increases user\'s gold', () => {
|
||||||
let [, message] = sell(user, {params: { type, key } });
|
sell(user, {params: { type, key } });
|
||||||
|
|
||||||
expect(message).to.equal(i18n.t('sold', {type, key}));
|
|
||||||
expect(user.stats.gp).to.equal(content[type][key].value);
|
expect(user.stats.gp).to.equal(content[type][key].value);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -180,9 +180,13 @@ habitrpg.controller('NotificationCtrl',
|
|||||||
$rootScope.openModal('questInvitation', {controller:'PartyCtrl'});
|
$rootScope.openModal('questInvitation', {controller:'PartyCtrl'});
|
||||||
});
|
});
|
||||||
|
|
||||||
$rootScope.$on('responseError', function(ev, error){
|
$rootScope.$on('responseError500', function(ev, error){
|
||||||
Notification.error(error);
|
Notification.error(error);
|
||||||
});
|
});
|
||||||
|
$rootScope.$on('responseError', function(ev, error){
|
||||||
|
Notification.error(error, true);
|
||||||
|
});
|
||||||
|
|
||||||
$rootScope.$on('responseText', function(ev, error){
|
$rootScope.$on('responseText', function(ev, error){
|
||||||
Notification.text(error);
|
Notification.text(error);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -54,8 +54,8 @@ angular.module("habitrpg").factory("Notification",
|
|||||||
_notify(_sign(val) + " " + _round(val) + " " + window.env.t('experience'), 'xp', 'glyphicon glyphicon-star');
|
_notify(_sign(val) + " " + _round(val) + " " + window.env.t('experience'), 'xp', 'glyphicon glyphicon-star');
|
||||||
}
|
}
|
||||||
|
|
||||||
function error(error){
|
function error(error, canHide){
|
||||||
_notify(error, "danger", 'glyphicon glyphicon-exclamation-sign');
|
_notify(error, "danger", 'glyphicon glyphicon-exclamation-sign', canHide);
|
||||||
}
|
}
|
||||||
|
|
||||||
function gp(val, bonus) {
|
function gp(val, bonus) {
|
||||||
@@ -107,14 +107,14 @@ angular.module("habitrpg").factory("Notification",
|
|||||||
// Used to stack notifications, must be outside of _notify
|
// Used to stack notifications, must be outside of _notify
|
||||||
var stack_topright = {"dir1": "down", "dir2": "left", "spacing1": 15, "spacing2": 15, "firstpos1": 60};
|
var stack_topright = {"dir1": "down", "dir2": "left", "spacing1": 15, "spacing2": 15, "firstpos1": 60};
|
||||||
|
|
||||||
function _notify(html, type, icon) {
|
function _notify(html, type, icon, canHide) {
|
||||||
var notice = $.pnotify({
|
var notice = $.pnotify({
|
||||||
type: type || 'warning', //('info', 'text', 'warning', 'success', 'gp', 'xp', 'hp', 'lvl', 'death', 'mp', 'crit')
|
type: type || 'warning', //('info', 'text', 'warning', 'success', 'gp', 'xp', 'hp', 'lvl', 'death', 'mp', 'crit')
|
||||||
text: html,
|
text: html,
|
||||||
opacity: 1,
|
opacity: 1,
|
||||||
addclass: 'alert-' + type,
|
addclass: 'alert-' + type,
|
||||||
delay: 7000,
|
delay: 7000,
|
||||||
hide: (type == 'error' || type == 'danger') ? false : true,
|
hide: ((type == 'error' || type == 'danger') && !canHide) ? false : true,
|
||||||
mouse_reset: false,
|
mouse_reset: false,
|
||||||
width: "250px",
|
width: "250px",
|
||||||
stack: stack_topright,
|
stack: stack_topright,
|
||||||
|
|||||||
Reference in New Issue
Block a user