New client 2017 09 16 - Fox_town, adjust URLs in links, etc (#9042)

New client 2017 09 16 - Fox_town, adjust URLs in links, etc
This commit is contained in:
Alys
2017-09-16 22:19:07 +10:00
committed by GitHub
parent 46b42c8441
commit 8ccec0ed9d
28 changed files with 74 additions and 68 deletions

View File

@@ -224,7 +224,7 @@ describe('POST /chat', () => {
color: 'danger', color: 'danger',
author_name: `${user.profile.name} - ${user.auth.local.email} - ${user._id}`, author_name: `${user.profile.name} - ${user.auth.local.email} - ${user._id}`,
title: 'Slur in Test Guild', title: 'Slur in Test Guild',
title_link: `${BASE_URL}/#/options/groups/guilds/${groupWithChat.id}`, title_link: `${BASE_URL}/groups/guild/${groupWithChat.id}`,
text: testSlurMessage, text: testSlurMessage,
// footer: sandbox.match(/<.*?groupId=group-id&chatId=chat-id\|Flag this message>/), // footer: sandbox.match(/<.*?groupId=group-id&chatId=chat-id\|Flag this message>/),
mrkdwn_in: [ mrkdwn_in: [

View File

@@ -142,12 +142,12 @@ describe('emails', () => {
describe('getGroupUrl', () => { describe('getGroupUrl', () => {
it('returns correct url if group is the tavern', () => { it('returns correct url if group is the tavern', () => {
let getGroupUrl = require(pathToEmailLib).getGroupUrl; let getGroupUrl = require(pathToEmailLib).getGroupUrl;
expect(getGroupUrl({_id: TAVERN_ID, type: 'guild'})).to.eql('/#/options/groups/tavern'); expect(getGroupUrl({_id: TAVERN_ID, type: 'guild'})).to.eql('/groups/tavern');
}); });
it('returns correct url if group is a guild', () => { it('returns correct url if group is a guild', () => {
let getGroupUrl = require(pathToEmailLib).getGroupUrl; let getGroupUrl = require(pathToEmailLib).getGroupUrl;
expect(getGroupUrl({_id: 'random _id', type: 'guild'})).to.eql('/#/options/groups/guilds/random _id'); expect(getGroupUrl({_id: 'random _id', type: 'guild'})).to.eql('/groups/guild/random _id');
}); });
it('returns correct url if group is a party', () => { it('returns correct url if group is a party', () => {

View File

@@ -71,7 +71,7 @@ describe('slack', () => {
expect(IncomingWebhook.prototype.send).to.be.calledWithMatch({ expect(IncomingWebhook.prototype.send).to.be.calledWithMatch({
attachments: [sandbox.match({ attachments: [sandbox.match({
title: 'Flag in Some group', title: 'Flag in Some group',
title_link: sandbox.match(/.*\/#\/options\/groups\/guilds\/group-id/), title_link: sandbox.match(/.*\/groups\/guild\/group-id/),
})], })],
}); });
}); });
@@ -86,7 +86,7 @@ describe('slack', () => {
expect(IncomingWebhook.prototype.send).to.be.calledWithMatch({ expect(IncomingWebhook.prototype.send).to.be.calledWithMatch({
attachments: [sandbox.match({ attachments: [sandbox.match({
title: 'Flag in Tavern', title: 'Flag in Tavern',
title_link: sandbox.match(/.*\/#\/options\/groups\/tavern/), title_link: sandbox.match(/.*\/groups\/tavern/),
})], })],
}); });
}); });

View File

@@ -46,7 +46,7 @@ export default {
copyingMessage () { copyingMessage () {
this.text = this.copyingMessage.text; this.text = this.copyingMessage.text;
let baseUrl = 'https://habitica.com'; let baseUrl = 'https://habitica.com';
this.notes = `[${this.copyingMessage.user}](${baseUrl}/static/home/#?memberId=${this.copyingMessage.uuid}) wrote in [${this.groupName}](${baseUrl}/#/options/groups/${this.groupId})`; this.notes = `[${this.copyingMessage.user}](${baseUrl}/static/home/#?memberId=${this.copyingMessage.uuid}) wrote in [${this.groupName}](${baseUrl}/groups/guild/${this.groupId})`;
}, },
}, },
methods: { methods: {

View File

@@ -754,7 +754,7 @@ export default {
// @TODO: Implement // @TODO: Implement
// User.sync().then(function () { // User.sync().then(function () {
// $rootScope.hardRedirect('/#/options/groups/party'); // $rootScope.hardRedirect('/party');
// }); // });
}, },
upgradeGroup () { upgradeGroup () {

View File

@@ -57,7 +57,7 @@
label label
strong(v-once) {{$t('guildSummary')}} * strong(v-once) {{$t('guildSummary')}} *
div.summary-count {{charactersRemaining}} {{ $t('charactersRemaining') }} div.summary-count {{charactersRemaining}} {{ $t('charactersRemaining') }}
textarea.form-control.summary-textarea(:placeholder="isParty ? $t('partyDescriptionPlaceHolder') : $t('guildSummaryPlaceholder')", v-model="workingGroup.summary") textarea.form-control.summary-textarea(:placeholder="isParty ? $t('partyDescriptionPlaceholder') : $t('guildSummaryPlaceholder')", v-model="workingGroup.summary")
// @TODO: need summary only for PUBLIC GUILDS, not for tavern, private guilds, or party // @TODO: need summary only for PUBLIC GUILDS, not for tavern, private guilds, or party
.form-group .form-group

View File

@@ -463,6 +463,10 @@ export default {
name: 'Dewines', name: 'Dewines',
type: 'Moderator', type: 'Moderator',
}, },
{
name: 'Fox_town',
type: 'Moderator',
},
{ {
name: 'Megan', name: 'Megan',
type: 'Moderator', type: 'Moderator',

View File

@@ -26,10 +26,10 @@
.row .row
.col .col
+featureBullet("{{ $t('gemBenefit1') }}") +featureBullet("{{ $t('gemBenefit1') }}")
+featureBullet("{{ $t('gemBenefit1') }}") +featureBullet("{{ $t('gemBenefit2') }}")
.col .col
+featureBullet("{{ $t('gemBenefit1') }}") +featureBullet("{{ $t('gemBenefit3') }}")
+featureBullet("{{ $t('gemBenefit1') }}") +featureBullet("{{ $t('gemBenefit4') }}")
.card-deck .card-deck
.card.text-center .card.text-center
.card-img-top .card-img-top

View File

@@ -150,11 +150,7 @@
|: {{user.auth.local.username}} |: {{user.auth.local.username}}
p p
small.muted small.muted
| {{ $t('loginNameDescription1') }} | {{ $t('loginNameDescription') }}
|&nbsp;
a(href='/#/options/profile/profile') {{ $t('loginNameDescription2') }}
|&nbsp;
| {{ $t('loginNameDescription3') }}
p {{ $t('email') }} p {{ $t('email') }}
|: {{user.auth.local.email}} |: {{user.auth.local.email}}
hr hr

View File

@@ -274,10 +274,10 @@
h2#links {{ $t('commGuideHeadingLinks') }} h2#links {{ $t('commGuideHeadingLinks') }}
ul ul
li li
a(href='https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a' target='_blank') {{ $t('commGuideLink01') }} a(href='https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a' target='_blank') {{ $t('commGuideLink01') }}
| :&nbsp;{{ $t('commGuideLink01description') }} | :&nbsp;{{ $t('commGuideLink01description') }}
li li
a(href='https://habitica.com/#/options/groups/guilds/426c2c1a-eed0-4997-9b73-d30fc1397688' target='_blank') {{ $t('commGuideLink02') }} a(href='https://habitica.com/groups/guild/426c2c1a-eed0-4997-9b73-d30fc1397688' target='_blank') {{ $t('commGuideLink02') }}
| :&nbsp;{{ $t('commGuideLink02description') }} | :&nbsp;{{ $t('commGuideLink02description') }}
li li
span(v-html="$t('commGuideLink03')") span(v-html="$t('commGuideLink03')")

View File

@@ -9,7 +9,7 @@ div(v-if='user.stats.lvl > 10')
.col-4.mana .col-4.mana
.img(:class='`shop_${spell.key} shop-sprite item-img`') .img(:class='`shop_${spell.key} shop-sprite item-img`')
drawer(:title="$t('spells')", drawer(:title="$t('skillsTitle')",
v-if='user.stats.class && !user.preferences.disableClasses', v-if='user.stats.class && !user.preferences.disableClasses',
v-mousePosition="30", @mouseMoved="mouseMoved($event)", v-mousePosition="30", @mouseMoved="mouseMoved($event)",
:openStatus='openStatus', :openStatus='openStatus',

View File

@@ -91,12 +91,18 @@ div
#achievements.standard-page.container(v-show='selectedPage === "achievements"', v-if='user.achievements') #achievements.standard-page.container(v-show='selectedPage === "achievements"', v-if='user.achievements')
.row(v-for='(category, key) in achievements') .row(v-for='(category, key) in achievements')
h2.col-12.text-center {{ $t(key+'Achievs') }} h2.col-12.text-center {{ $t(key+'Achievs') }}
.col-3.text-center(v-for='(achievment, key) in category.achievements') .col-3.text-center(v-for='(achievement, key) in category.achievements')
.box.achievement-container(:id='key', :class='{"achievement-unearned": !achievment.earned}') .box.achievement-container(:id='key', :class='{"achievement-unearned": !achievement.earned}')
b-popover(:target="'#' + key", triggers="hover", placement="top", :content="achievment.title + achievment.text") b-popover(
.achievement(:class='achievment.icon + "2x"', v-if='achievment.earned') :target="'#' + key",
.counter.badge.badge-info.stack-count(v-if='achievment.optionalCount') {{achievment.optionalCount}} triggers="hover",
.achievement.achievement-unearned(class='achievement-unearned2x', v-if='!achievment.earned') placement="top",
)
h4.popover-content-title {{ achievement.title }}
div.popover-content-text(v-html="achievement.text")
.achievement(:class='achievement.icon + "2x"', v-if='achievement.earned')
.counter.badge.badge-info.stack-count(v-if='achievement.optionalCount') {{achievement.optionalCount}}
.achievement.achievement-unearned(class='achievement-unearned2x', v-if='!achievement.earned')
hr.col-12 hr.col-12
.row .row
.col-6(v-if='user.achievements.challenges') .col-6(v-if='user.achievements.challenges')

View File

@@ -68,12 +68,12 @@
"costumeText": "If you prefer the look of other gear to what you have equipped, check the \"Use Costume\" box to visually don a costume while wearing your battle gear underneath.", "costumeText": "If you prefer the look of other gear to what you have equipped, check the \"Use Costume\" box to visually don a costume while wearing your battle gear underneath.",
"useCostume": "Use Costume", "useCostume": "Use Costume",
"useCostumeInfo1": "Click \"Use Costume\" to equip items to your avatar without affecting the stats from your Battle Gear! This means that you can equip for the best stats on the left, and dress up your avatar with your equipment on the right.", "useCostumeInfo1": "Click \"Use Costume\" to equip items to your avatar without affecting the stats from your Battle Gear! This means that you can equip for the best stats on the left, and dress up your avatar with your equipment on the right.",
"useCostumeInfo2": "Once you click \"Use Costume\" your avatar will look pretty basic... but don't worry! If you look on the left, you'll see that your Battle Gear is still equipped. Next, you can make things fancy! Anything you equip on the right won't affect your stats, but can make you look super awesome. Try out different combos, mixing sets, and coordinating your Costume with your pets, mounts, and backgrounds.<br><br>Got more questions? Check out the <a href=\"http://habitica.wikia.com/wiki/Equipment#Costumes\">Costume page</a> on the wiki. Find the perfect ensemble? Show it off in the <a href=\"/#/options/groups/guilds/3884eeaa-2d6a-45e8-a279-ada6de9709e1\">Costume Carnival guild</a> or brag in the Tavern!", "useCostumeInfo2": "Once you click \"Use Costume\" your avatar will look pretty basic... but don't worry! If you look on the left, you'll see that your Battle Gear is still equipped. Next, you can make things fancy! Anything you equip on the right won't affect your stats, but can make you look super awesome. Try out different combos, mixing sets, and coordinating your Costume with your pets, mounts, and backgrounds.<br><br>Got more questions? Check out the <a href=\"http://habitica.wikia.com/wiki/Equipment#Costumes\">Costume page</a> on the wiki. Find the perfect ensemble? Show it off in the <a href=\"/groups/guild/3884eeaa-2d6a-45e8-a279-ada6de9709e1\">Costume Carnival guild</a> or brag in the Tavern!",
"costumePopoverText": "Select \"Use Costume\" to equip items to your avatar without affecting the stats from your Battle Gear! This means that you can dress up your avatar in whatever outfit you like while still having your best Battle Gear equipped.", "costumePopoverText": "Select \"Use Costume\" to equip items to your avatar without affecting the stats from your Battle Gear! This means that you can dress up your avatar in whatever outfit you like while still having your best Battle Gear equipped.",
"autoEquipPopoverText": "Select this option to automatically equip gear as soon as you purchase it.", "autoEquipPopoverText": "Select this option to automatically equip gear as soon as you purchase it.",
"costumeDisabled": "You have disabled your costume.", "costumeDisabled": "You have disabled your costume.",
"gearAchievement": "You have earned the \"Ultimate Gear\" Achievement for upgrading to the maximum gear set for a class! You have attained the following complete sets:", "gearAchievement": "You have earned the \"Ultimate Gear\" Achievement for upgrading to the maximum gear set for a class! You have attained the following complete sets:",
"moreGearAchievements": "To attain more Ultimate Gear badges, change classes on <a href='/#/options/profile/stats' target='_blank'>your stats page</a> and buy up your new class's gear!", "moreGearAchievements": "To attain more Ultimate Gear badges, change classes on <a href='/user/settings/site' target='_blank'>the Settings &gt; Site page</a> and buy your new class's gear!",
"armoireUnlocked": "For more equipment, check out the <strong>Enchanted Armoire!</strong> Click on the Enchanted Armoire Reward for a random chance at special Equipment! It may also give you random XP or food items.", "armoireUnlocked": "For more equipment, check out the <strong>Enchanted Armoire!</strong> Click on the Enchanted Armoire Reward for a random chance at special Equipment! It may also give you random XP or food items.",
"ultimGearName": "Ultimate Gear - <%= ultClass %>", "ultimGearName": "Ultimate Gear - <%= ultClass %>",
"ultimGearText": "Has upgraded to the maximum weapon and armor set for the <%= ultClass %> class.", "ultimGearText": "Has upgraded to the maximum weapon and armor set for the <%= ultClass %> class.",

View File

@@ -47,19 +47,19 @@
"webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in the action bar at the bottom of the screen. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.", "webFaqAnswer8": "The blue bar that appeared when you hit level 10 and chose a Class is your Mana bar. As you continue to level up, you will unlock special Skills that cost Mana to use. Each Class has different Skills, which appear after level 11 in the action bar at the bottom of the screen. Unlike your Health bar, your Mana bar does not reset when you gain a level. Instead, Mana is gained when you complete good Habits, Dailies, and To-Dos, and lost when you indulge bad Habits. You'll also regain some Mana overnight -- the more Dailies you completed, the more you will gain.",
"faqQuestion9": "How do I fight monsters and go on Quests?", "faqQuestion9": "How do I fight monsters and go on Quests?",
"iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "iosFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Shop for Gold and Gems.\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.",
"androidFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Page on the [website](https://habitica.com/#/options/inventory/quests) for Gold and Gems. (We will add this feature to the app in a future update.)\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "androidFaqAnswer9": "First, you need to join or start a Party (see above). Although you can battle monsters alone, we recommend playing in a group, because this will make Quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating!\n\n Next, you need a Quest Scroll, which are stored under Menu > Items. There are three ways to get a scroll:\n\n - At level 15, you get a Quest-line, aka three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively. \n - When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n - You can buy Quests from the Quests Shop for Gold and Gems.\n\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading by pulling down on the screen may be required to see the Boss's health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. \n\n After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.",
"webFaqAnswer9": "First, you need to join or start a Party by clicking \"Party\" in the navigation bar. Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating! Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are four ways to get a scroll:\n * When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Shop (Shops > Quests) for Gold and Gems.\n * When you check in to Habitica a certain number of times, you'll be rewarded with Quest Scrolls. You earn a Scroll during your 1st, 7th, 22nd, and 40th check-ins.\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.", "webFaqAnswer9": "First, you need to join or start a Party by clicking \"Party\" in the navigation bar. Although you can battle monsters alone, we recommend playing in a group, because this will make quests much easier. Plus, having a friend to cheer you on as you accomplish your tasks is very motivating! Next, you need a Quest Scroll, which are stored under Inventory > Quests. There are four ways to get a scroll:\n * When you invite people to your Party, you'll be rewarded with the Basi-List Scroll!\n * At level 15, you get a Quest-line, i.e., three linked quests. More Quest-lines unlock at levels 30, 40, and 60 respectively.\n * You can buy Quests from the Quests Shop (Shops > Quests) for Gold and Gems.\n * When you check in to Habitica a certain number of times, you'll be rewarded with Quest Scrolls. You earn a Scroll during your 1st, 7th, 22nd, and 40th check-ins.\n To battle the Boss or collect items for a Collection Quest, simply complete your tasks normally, and they will be tallied into damage overnight. (Reloading may be required to see the Boss's Health bar go down.) If you are fighting a Boss and you missed any Dailies, the Boss will damage your Party at the same time that you damage the Boss. After level 11 Mages and Warriors will gain Skills that allow them to deal additional damage to the Boss, so these are excellent classes to choose at level 10 if you want to be a heavy hitter.",
"faqQuestion10": "What are Gems, and how do I get them?", "faqQuestion10": "What are Gems, and how do I get them?",
"iosFaqAnswer10": "Gems are purchased with real money by tapping on the Gem icon in the header. When people buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying Gems directly, there are three other ways players can gain Gems:\n\n * Win a Challenge that has been set up by another player. Go to Social > Challenges to join some.\n * Subscribe and unlock the ability to buy a certain number of Gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the app without them!", "iosFaqAnswer10": "Gems are purchased with real money by tapping on the Gem icon in the header. When people buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying Gems directly, there are three other ways players can gain Gems:\n\n * Win a Challenge that has been set up by another player. Go to Social > Challenges to join some.\n * Subscribe and unlock the ability to buy a certain number of Gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the app without them!",
"androidFaqAnswer10": "Gems are purchased with real money by tapping on the Gem icon in the header. When people buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying Gems directly, there are three other ways players can gain Gems:\n\n * Win a Challenge that has been set up by another player. Go to Social > Challenges to join some.\n * Subscribe and unlock the ability to buy a certain number of Gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the app without them!", "androidFaqAnswer10": "Gems are purchased with real money by tapping on the Gem icon in the header. When people buy Gems, they are helping us to keep the site running. We're very grateful for their support!\n\n In addition to buying Gems directly, there are three other ways players can gain Gems:\n\n * Win a Challenge that has been set up by another player. Go to Social > Challenges to join some.\n * Subscribe and unlock the ability to buy a certain number of Gems per month.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica).\n\n Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the app without them!",
"webFaqAnswer10": "Gems are [purchased with real money](https://habitica.com/#/options/settings/subscription), although [subscribers](https://habitica.com/#/options/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support! In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n* Win a Challenge that has been set up by another player. Go to Challenges > Discover Challenges to join some.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica). Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!", "webFaqAnswer10": "Gems are purchased with real money, although [subscribers](https://habitica.com/user/settings/subscription) can purchase them with Gold. When people subscribe or buy Gems, they are helping us to keep the site running. We're very grateful for their support! In addition to buying Gems directly or becoming a subscriber, there are two other ways players can gain Gems:\n* Win a Challenge that has been set up by another player. Go to Challenges > Discover Challenges to join some.\n * Contribute your skills to the Habitica project. See this wiki page for more details: [Contributing to Habitica](http://habitica.wikia.com/wiki/Contributing_to_Habitica). Keep in mind that items purchased with Gems do not offer any statistical advantages, so players can still make use of the site without them!",
"faqQuestion11": "How do I report a bug or request a feature?", "faqQuestion11": "How do I report a bug or request a feature?",
"iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > About > Report a Bug and Menu > About > Send Feedback! We'll do everything we can to assist you.", "iosFaqAnswer11": "You can report a bug, request a feature, or send feedback under Menu > About > Report a Bug and Menu > About > Send Feedback! We'll do everything we can to assist you.",
"androidFaqAnswer11": "You can report a bug, request a feature, or send feedback under About > Report a Bug and About > Send us Feedback! We'll do everything we can to assist you.", "androidFaqAnswer11": "You can report a bug, request a feature, or send feedback under About > Report a Bug and About > Send us Feedback! We'll do everything we can to assist you.",
"webFaqAnswer11": "To report a bug, go to [Help > Report a Bug](https://habitica.com/#/options/groups/guilds/a29da26b-37de-4a71-b0c6-48e72a900dac) and read the points above the chat box. If you're unable to log in to Habitica, send your login details (not your password!) to [<%= techAssistanceEmail %>](<%= wikiTechAssistanceEmail %>). Don't worry, we'll get you fixed up soon! Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!", "webFaqAnswer11": "To report a bug, go to [Help > Report a Bug](https://habitica.com/groups/guild/a29da26b-37de-4a71-b0c6-48e72a900dac) and read the points above the chat box. If you're unable to log in to Habitica, send your login details (not your password!) to [<%= techAssistanceEmail %>](<%= wikiTechAssistanceEmail %>). Don't worry, we'll get you fixed up soon! Feature requests are collected on Trello. Go to [Help > Request a Feature](https://trello.com/c/odmhIqyW/440-read-first-table-of-contents) and follow the instructions. Ta-da!",
"faqQuestion12": "How do I battle a World Boss?", "faqQuestion12": "How do I battle a World Boss?",
"iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and Skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and Skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.", "iosFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and Skills will damage the Boss as usual.\n\n You can also be in a normal Quest at the same time. Your tasks and Skills will count towards both the World Boss and the Boss/Collection Quest in your party.\n\n A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change.\n\n You can read more about [past World Bosses](http://habitica.wikia.com/wiki/World_Bosses) on the wiki.",
@@ -68,5 +68,5 @@
"iosFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "iosFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.",
"androidFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.", "androidFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.",
"webFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the [Habitica Help guild](https://habitica.com/#/options/groups/guilds/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help." "webFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](http://habitica.wikia.com/wiki/FAQ), come ask in the [Habitica Help guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)! We're happy to help."
} }

View File

@@ -192,8 +192,8 @@
"unlockByline2": "Unlock new motivational tools, such as pet collecting, random rewards, spell-casting, and more!", "unlockByline2": "Unlock new motivational tools, such as pet collecting, random rewards, spell-casting, and more!",
"unlockHeadline": "As you stay productive, you unlock new content!", "unlockHeadline": "As you stay productive, you unlock new content!",
"useUUID": "Use UUID / API Token (For Facebook Users)", "useUUID": "Use UUID / API Token (For Facebook Users)",
"username": "Username", "username": "Login Name",
"emailOrUsername": "Email or Username", "emailOrUsername": "Email or Login Name",
"watchVideos": "Watch Videos", "watchVideos": "Watch Videos",
"work": "Work", "work": "Work",
"zelahQuote": "With [Habitica], I can be persuaded to go to bed on time by the thought of gaining points for an early night or losing health for a late one!", "zelahQuote": "With [Habitica], I can be persuaded to go to bed on time by the thought of gaining points for an early night or losing health for a late one!",
@@ -243,9 +243,9 @@
"altAttrSlack": "Slack", "altAttrSlack": "Slack",
"missingAuthHeaders": "Missing authentication headers.", "missingAuthHeaders": "Missing authentication headers.",
"missingAuthParams": "Missing authentication parameters.", "missingAuthParams": "Missing authentication parameters.",
"missingUsernameEmail": "Missing username or email.", "missingUsernameEmail": "Missing Login Name or email.",
"missingEmail": "Missing email.", "missingEmail": "Missing email.",
"missingUsername": "Missing username.", "missingUsername": "Missing Login Name.",
"missingPassword": "Missing password.", "missingPassword": "Missing password.",
"missingNewPassword": "Missing new password.", "missingNewPassword": "Missing new password.",
"invalidEmailDomain": "You cannot register with emails with the following domains: <%= domains %>", "invalidEmailDomain": "You cannot register with emails with the following domains: <%= domains %>",
@@ -254,7 +254,7 @@
"notAnEmail": "Invalid email address.", "notAnEmail": "Invalid email address.",
"emailTaken": "Email address is already used in an account.", "emailTaken": "Email address is already used in an account.",
"newEmailRequired": "Missing new email address.", "newEmailRequired": "Missing new email address.",
"usernameTaken": "Username already taken.", "usernameTaken": "Login Name already taken.",
"passwordConfirmationMatch": "Password confirmation doesn't match password.", "passwordConfirmationMatch": "Password confirmation doesn't match password.",
"invalidLoginCredentials": "Incorrect username and/or email and/or password.", "invalidLoginCredentials": "Incorrect username and/or email and/or password.",
"passwordResetPage": "Reset Password", "passwordResetPage": "Reset Password",

View File

@@ -1055,11 +1055,11 @@
"headArmoireAntiProcrastinationHelmText": "Anti-Procrastination Helm", "headArmoireAntiProcrastinationHelmText": "Anti-Procrastination Helm",
"headArmoireAntiProcrastinationHelmNotes": "This mighty steel helm will help you win the fight to be healthy, happy, and productive! Increases Perception by <%= per %>. Enchanted Armoire: Anti-Procrastination Set (Item 1 of 3).", "headArmoireAntiProcrastinationHelmNotes": "This mighty steel helm will help you win the fight to be healthy, happy, and productive! Increases Perception by <%= per %>. Enchanted Armoire: Anti-Procrastination Set (Item 1 of 3).",
"offhand": "shield-hand item", "offhand": "off-hand item",
"offhandCapitalized": "Off-Hand Item", "offhandCapitalized": "Off-Hand Item",
"shieldBase0Text": "No Shield-Hand Equipment", "shieldBase0Text": "No Off-Hand Equipment",
"shieldBase0Notes": "No shield or shield-hand item.", "shieldBase0Notes": "No shield or other off-hand item.",
"shieldWarrior1Text": "Wooden Shield", "shieldWarrior1Text": "Wooden Shield",
"shieldWarrior1Notes": "Round shield of thick wood. Increases Constitution by <%= con %>.", "shieldWarrior1Notes": "Round shield of thick wood. Increases Constitution by <%= con %>.",

View File

@@ -42,7 +42,7 @@
"messageAuthPasswordMustMatch": ":password and :confirmPassword don't match", "messageAuthPasswordMustMatch": ":password and :confirmPassword don't match",
"messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required", "messageAuthCredentialsRequired": ":username, :email, :password, :confirmPassword required",
"messageAuthUsernameTaken": "Username already taken", "messageAuthUsernameTaken": "Login Name already taken",
"messageAuthEmailTaken": "Email already taken", "messageAuthEmailTaken": "Email already taken",
"messageAuthNoUserFound": "No user found.", "messageAuthNoUserFound": "No user found.",
"messageAuthMustBeLoggedIn": "You must be logged in.", "messageAuthMustBeLoggedIn": "You must be logged in.",

View File

@@ -121,6 +121,7 @@
"autoAllocateText": "If 'automatic allocation' is checked, your avatar gains stats automatically based on your tasks' attributes, which you can find in <strong>TASK > Edit > Advanced > Attributes</strong>. Eg, if you hit the gym often, and your 'Gym' Daily is set to 'Strength', you'll gain Strength automatically.", "autoAllocateText": "If 'automatic allocation' is checked, your avatar gains stats automatically based on your tasks' attributes, which you can find in <strong>TASK > Edit > Advanced > Attributes</strong>. Eg, if you hit the gym often, and your 'Gym' Daily is set to 'Strength', you'll gain Strength automatically.",
"spells": "Skills", "spells": "Skills",
"spellsText": "You can now unlock class-specific skills. You'll see your first at level 11. Your mana replenishes 10 points per day, plus 1 point per completed <a target='_blank' href='http://habitica.wikia.com/wiki/Todos'>To-Do</a>.", "spellsText": "You can now unlock class-specific skills. You'll see your first at level 11. Your mana replenishes 10 points per day, plus 1 point per completed <a target='_blank' href='http://habitica.wikia.com/wiki/Todos'>To-Do</a>.",
"skillsTitle": "Skills",
"toDo": "To-Do", "toDo": "To-Do",
"moreClass": "For more information on the class-system, see <a href='http://habitica.wikia.com/wiki/Class_System' target='_blank'>Wikia</a>.", "moreClass": "For more information on the class-system, see <a href='http://habitica.wikia.com/wiki/Class_System' target='_blank'>Wikia</a>.",

View File

@@ -122,7 +122,7 @@
"questGoldenknight3Boss": "The Iron Knight", "questGoldenknight3Boss": "The Iron Knight",
"questGoldenknight3DropHoney": "Honey (Food)", "questGoldenknight3DropHoney": "Honey (Food)",
"questGoldenknight3DropGoldenPotion": "Golden Hatching Potion", "questGoldenknight3DropGoldenPotion": "Golden Hatching Potion",
"questGoldenknight3DropWeapon": "Mustaine's Milestone Mashing Morning Star (Shield-hand Weapon)", "questGoldenknight3DropWeapon": "Mustaine's Milestone Mashing Morning Star (Off-hand Weapon)",
"questGroupEarnable": "Earnable Quests", "questGroupEarnable": "Earnable Quests",
"questBasilistText": "The Basi-List", "questBasilistText": "The Basi-List",
@@ -283,7 +283,7 @@
"questDilatoryDistress3Boss": "Adva, the Usurping Mermaid", "questDilatoryDistress3Boss": "Adva, the Usurping Mermaid",
"questDilatoryDistress3DropFish": "Fish (Food)", "questDilatoryDistress3DropFish": "Fish (Food)",
"questDilatoryDistress3DropWeapon": "Trident of Crashing Tides (Weapon)", "questDilatoryDistress3DropWeapon": "Trident of Crashing Tides (Weapon)",
"questDilatoryDistress3DropShield": "Moonpearl Shield (Shield-Hand Item)", "questDilatoryDistress3DropShield": "Moonpearl Shield (Off-Hand Item)",
"questCheetahText": "Such a Cheetah", "questCheetahText": "Such a Cheetah",
"questCheetahNotes": "As you hike across the Sloensteadi Savannah with your friends @PainterProphet, @tivaquinn, @Unruly Hyena, and @Crawford, you're startled to see a Cheetah screeching past with a new Habitican clamped in its jaws. Under the Cheetah's scorching paws, tasks burn away as though complete -- before anyone has the chance to actually finish them! The Habitican sees you and yells, \"Please help me! This Cheetah is making me level too quickly, but I'm not getting anything done. I want to slow down and enjoy the game. Make it stop!\" You fondly remember your own fledgling days, and know that you have to help the newbie by stopping the Cheetah!", "questCheetahNotes": "As you hike across the Sloensteadi Savannah with your friends @PainterProphet, @tivaquinn, @Unruly Hyena, and @Crawford, you're startled to see a Cheetah screeching past with a new Habitican clamped in its jaws. Under the Cheetah's scorching paws, tasks burn away as though complete -- before anyone has the chance to actually finish them! The Habitican sees you and yells, \"Please help me! This Cheetah is making me level too quickly, but I'm not getting anything done. I want to slow down and enjoy the game. Make it stop!\" You fondly remember your own fledgling days, and know that you have to help the newbie by stopping the Cheetah!",
@@ -513,7 +513,7 @@
"questStoikalmCalamity3Completion": "You subdue the Icicle Drake Queen, giving Lady Glaciate time to shatter the glowing bracelets. The Queen stiffens in apparent mortification, then quickly covers it with a haughty pose. \"Feel free to remove these extraneous items,\" she says. \"I'm afraid they simply don't fit our decor.\"<br><br>\"Also, you stole them,\" @Beffymaroo says. \"By summoning monsters from the earth.\"<br><br>The Icicle Drake Queen looks miffed. \"Take it up with that wretched bracelet saleswoman,\" she says. \"It's Tzina you want. I was essentially unaffiliated.\"<br><br>Lady Glaciate claps you on the arm. \"You did well today,\" she says, handing you a spear and a horn from the pile. \"Be proud.\"", "questStoikalmCalamity3Completion": "You subdue the Icicle Drake Queen, giving Lady Glaciate time to shatter the glowing bracelets. The Queen stiffens in apparent mortification, then quickly covers it with a haughty pose. \"Feel free to remove these extraneous items,\" she says. \"I'm afraid they simply don't fit our decor.\"<br><br>\"Also, you stole them,\" @Beffymaroo says. \"By summoning monsters from the earth.\"<br><br>The Icicle Drake Queen looks miffed. \"Take it up with that wretched bracelet saleswoman,\" she says. \"It's Tzina you want. I was essentially unaffiliated.\"<br><br>Lady Glaciate claps you on the arm. \"You did well today,\" she says, handing you a spear and a horn from the pile. \"Be proud.\"",
"questStoikalmCalamity3Boss": "Icicle Drake Queen", "questStoikalmCalamity3Boss": "Icicle Drake Queen",
"questStoikalmCalamity3DropBlueCottonCandy": "Blue Cotton Candy (Food)", "questStoikalmCalamity3DropBlueCottonCandy": "Blue Cotton Candy (Food)",
"questStoikalmCalamity3DropShield": "Mammoth Rider's Horn (Shield-Hand Item)", "questStoikalmCalamity3DropShield": "Mammoth Rider's Horn (Off-Hand Item)",
"questStoikalmCalamity3DropWeapon": "Mammoth Rider Spear (Weapon)", "questStoikalmCalamity3DropWeapon": "Mammoth Rider Spear (Weapon)",
"questGuineaPigText": "The Guinea Pig Gang", "questGuineaPigText": "The Guinea Pig Gang",
@@ -562,8 +562,8 @@
"questMayhemMistiflying3Completion": "Just as you think you cant withstand the wind any longer, you manage to snatch the mask from the Wind-Workers face. Instantly, the tornado is sucked away, leaving only balmy breezes and sunshine. The Wind-Worker looks around in bemusement. “Where did she go?”<br><br>“Who?” your friend @khdarkwolf asks.<br><br>“That sweet woman who offered to deliver a package for me. Tzina.” As he takes in the wind-swept city below him, his expression darkens. “Then again, maybe she wasnt so sweet…”<br><br>The April Fool pats him on the back, then hands you two shimmering envelopes. “Here. Why dont you let this distressed fellow rest, and take charge of the mail for a bit? I hear the magic in those envelopes will make them worth your while.”", "questMayhemMistiflying3Completion": "Just as you think you cant withstand the wind any longer, you manage to snatch the mask from the Wind-Workers face. Instantly, the tornado is sucked away, leaving only balmy breezes and sunshine. The Wind-Worker looks around in bemusement. “Where did she go?”<br><br>“Who?” your friend @khdarkwolf asks.<br><br>“That sweet woman who offered to deliver a package for me. Tzina.” As he takes in the wind-swept city below him, his expression darkens. “Then again, maybe she wasnt so sweet…”<br><br>The April Fool pats him on the back, then hands you two shimmering envelopes. “Here. Why dont you let this distressed fellow rest, and take charge of the mail for a bit? I hear the magic in those envelopes will make them worth your while.”",
"questMayhemMistiflying3Boss": "The Wind-Worker", "questMayhemMistiflying3Boss": "The Wind-Worker",
"questMayhemMistiflying3DropPinkCottonCandy": "Pink Cotton Candy (Food)", "questMayhemMistiflying3DropPinkCottonCandy": "Pink Cotton Candy (Food)",
"questMayhemMistiflying3DropShield": "Roguish Rainbow Message (Shield-Hand Weapon)", "questMayhemMistiflying3DropShield": "Roguish Rainbow Message (Off-Hand Item)",
"questMayhemMistiflying3DropWeapon": "Roguish Rainbow Message (Weapon)", "questMayhemMistiflying3DropWeapon": "Roguish Rainbow Message (Main-Hand Item)",
"featheredFriendsText": "Feathered Friends Quest Bundle", "featheredFriendsText": "Feathered Friends Quest Bundle",
"featheredFriendsNotes": "Contains 'Help! Harpy!,' 'The Night-Owl,' and 'The Birds of Preycrastination.' Available until May 31.", "featheredFriendsNotes": "Contains 'Help! Harpy!,' 'The Night-Owl,' and 'The Birds of Preycrastination.' Available until May 31.",

View File

@@ -105,9 +105,7 @@
"email": "Email", "email": "Email",
"registerWithSocial": "Register with <%= network %>", "registerWithSocial": "Register with <%= network %>",
"registeredWithSocial": "Registered with <%= network %>", "registeredWithSocial": "Registered with <%= network %>",
"loginNameDescription1": "This is what you use to login to Habitica. To change it, use the form below. If instead you want to change the name that appears on your avatar and in chat messages, go to ", "loginNameDescription": "This is what you use to login to Habitica. To change it, use the form below. If instead you want to change the Display Name that appears on your avatar and in chat messages, go to User->Profile and click the Edit button.",
"loginNameDescription2": "User->Profile",
"loginNameDescription3": "and click the Edit button.",
"emailNotifications": "Email Notifications", "emailNotifications": "Email Notifications",
"wonChallenge": "You won a Challenge!", "wonChallenge": "You won a Challenge!",
"newPM": "Received Private Message", "newPM": "Received Private Message",
@@ -130,7 +128,7 @@
"remindersToLogin": "Reminders to check in to Habitica", "remindersToLogin": "Reminders to check in to Habitica",
"subscribeUsing": "Subscribe using", "subscribeUsing": "Subscribe using",
"unsubscribedSuccessfully": "Unsubscribed successfully!", "unsubscribedSuccessfully": "Unsubscribed successfully!",
"unsubscribedTextUsers": "You have successfully unsubscribed from all Habitica emails. You can enable only the emails you want to receive from <a href=\"/#/options/settings/notifications\">the settings</a> (requires login).", "unsubscribedTextUsers": "You have successfully unsubscribed from all Habitica emails. You can enable only the emails you want to receive from <a href=\"/user/settings/notifications\">Settings > &gt; Notifications</a> (requires login).",
"unsubscribedTextOthers": "You won't receive any other email from Habitica.", "unsubscribedTextOthers": "You won't receive any other email from Habitica.",
"unsubscribeAllEmails": "Check to Unsubscribe from Emails", "unsubscribeAllEmails": "Check to Unsubscribe from Emails",
"unsubscribeAllEmailsText": "By checking this box, I certify that I understand that by unsubscribing from all emails, Habitica will never be able to notify me via email about important changes to the site or my account.", "unsubscribeAllEmailsText": "By checking this box, I certify that I understand that by unsubscribing from all emails, Habitica will never be able to notify me via email about important changes to the site or my account.",

View File

@@ -77,8 +77,8 @@
"buyGemsAllow1": "You can buy", "buyGemsAllow1": "You can buy",
"buyGemsAllow2": "more Gems this month", "buyGemsAllow2": "more Gems this month",
"purchaseGemsSeparately": "Purchase Additional Gems", "purchaseGemsSeparately": "Purchase Additional Gems",
"subFreeGemsHow": "Habitica players can earn Gems for free by winning <a href=\"/#/options/groups/challenges\">challenges</a> that award Gems as a prize, or as a <a href=\"http://habitica.wikia.com/wiki/Contributing_to_Habitica\">contributor reward by helping the development of Habitica.</a>", "subFreeGemsHow": "Habitica players can earn Gems for free by winning <a href=\"/challenges/findChallenges\">challenges</a> that award Gems as a prize, or as a <a href=\"http://habitica.wikia.com/wiki/Contributing_to_Habitica\">contributor reward by helping the development of Habitica.</a>",
"seeSubscriptionDetails": "Go to <a href='/#/options/settings/subscription'>Settings &gt; Subscription</a> to see your subscription details!", "seeSubscriptionDetails": "Go to <a href='/user/settings/subscription'>Settings &gt; Subscription</a> to see your subscription details!",
"timeTravelers": "Time Travelers", "timeTravelers": "Time Travelers",
"timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> and <%= linkStartVicky %>Vicky<%= linkEnd %>", "timeTravelersTitleNoSub": "<%= linkStartTyler %>Tyler<%= linkEnd %> and <%= linkStartVicky %>Vicky<%= linkEnd %>",
"timeTravelersTitle": "Mysterious Time Travelers", "timeTravelersTitle": "Mysterious Time Travelers",
@@ -191,7 +191,7 @@
"gemBenefit2": "Backgrounds to immerse your avatar in the world of Habitica!", "gemBenefit2": "Backgrounds to immerse your avatar in the world of Habitica!",
"gemBenefit3": "Exciting Quest chains that drop pet eggs.", "gemBenefit3": "Exciting Quest chains that drop pet eggs.",
"gemBenefit4": "Reset your avatar's attribute points and change its Class.", "gemBenefit4": "Reset your avatar's attribute points and change its Class.",
"subscriptionBenefitLeadin": "Support Habitica by becoming a subscriber and youll receive these useful benefits!", "subscriptionBenefitLeadin": "Support Habitica by becoming a subscriber and you'll receive these useful benefits!",
"subscriptionBenefit1": "Alexander the Merchant will sell you Gems, for 20 Gold each!", "subscriptionBenefit1": "Alexander the Merchant will sell you Gems, for 20 Gold each!",
"subscriptionBenefit2": "Completed To-Dos and task history are available for longer.", "subscriptionBenefit2": "Completed To-Dos and task history are available for longer.",
"subscriptionBenefit3": "Discover more items in Habitica with a doubled daily drop cap.", "subscriptionBenefit3": "Discover more items in Habitica with a doubled daily drop cap.",

View File

@@ -17,7 +17,7 @@ import updateStats from '../fns/updateStats';
* {cast}: the function that's run to perform the ability's action. This is pretty slick - because this is exported to the * {cast}: the function that's run to perform the ability's action. This is pretty slick - because this is exported to the
web, this function can be performed on the client and on the server. `user` param is self (needed for determining your web, this function can be performed on the client and on the server. `user` param is self (needed for determining your
own stats for effectiveness of cast), and `target` param is one of [task, party, user]. In the case of `self` spells, own stats for effectiveness of cast), and `target` param is one of [task, party, user]. In the case of `self` skills,
you act on `user` instead of `target`. You can trust these are the correct objects, as long as the `target` attr of the you act on `user` instead of `target`. You can trust these are the correct objects, as long as the `target` attr of the
spell is correct. Take a look at habitrpg/website/server/models/user.js and habitrpg/website/server/models/task.js for what attributes are spell is correct. Take a look at habitrpg/website/server/models/user.js and habitrpg/website/server/models/task.js for what attributes are
available on each model. Note `task.value` is its "redness". If party is passed in, it's an array of users, available on each model. Note `task.value` is its "redness". If party is passed in, it's an array of users,

View File

@@ -773,8 +773,8 @@ function _sendMessageToRemoved (group, removedUser, message, isInGroup) {
sendTxnEmail(removedUser, subject, [ sendTxnEmail(removedUser, subject, [
{name: 'GROUP_NAME', content: group.name}, {name: 'GROUP_NAME', content: group.name},
{name: 'MESSAGE', content: message}, {name: 'MESSAGE', content: message},
{name: 'GUILDS_LINK', content: '/#/options/groups/guilds/public'}, {name: 'GUILDS_LINK', content: '/groups/discovery'},
{name: 'PARTY_WANTED_GUILD', content: '/#/options/groups/guilds/f2db2a7f-13c5-454d-b3ee-ea1f5089e601'}, {name: 'PARTY_WANTED_GUILD', content: '/groups/guild/f2db2a7f-13c5-454d-b3ee-ea1f5089e601'},
]); ]);
} }
} }
@@ -954,12 +954,12 @@ async function _inviteByUUID (uuid, group, inviter, req, res) {
if (group.type === 'guild') { if (group.type === 'guild') {
emailVars.push( emailVars.push(
{name: 'GUILD_NAME', content: group.name}, {name: 'GUILD_NAME', content: group.name},
{name: 'GUILD_URL', content: '/#/options/groups/guilds/public'} {name: 'GUILD_URL', content: '/groups/discovery'}
); );
} else { } else {
emailVars.push( emailVars.push(
{name: 'PARTY_NAME', content: group.name}, {name: 'PARTY_NAME', content: group.name},
{name: 'PARTY_URL', content: '/#/options/groups/party'} {name: 'PARTY_URL', content: '/party'}
); );
} }

View File

@@ -170,8 +170,8 @@ api.getMemberAchievements = {
}; };
// Return a request handler for getMembersForGroup / getInvitesForGroup / getMembersForChallenge // Return a request handler for getMembersForGroup / getInvitesForGroup / getMembersForChallenge
// type is `invites` or `members`
function _getMembersForItem (type) { function _getMembersForItem (type) {
// check for allowed `type`
if (['group-members', 'group-invites', 'challenge-members'].indexOf(type) === -1) { if (['group-members', 'group-invites', 'challenge-members'].indexOf(type) === -1) {
throw new Error('Type must be one of "group-members", "group-invites", "challenge-members"'); throw new Error('Type must be one of "group-members", "group-invites", "challenge-members"');
} }
@@ -245,6 +245,7 @@ function _getMembersForItem (type) {
query['invitations.guilds.id'] = group._id; query['invitations.guilds.id'] = group._id;
} else { } else {
query['invitations.party.id'] = group._id; // group._id and not groupId because groupId could be === 'party' query['invitations.party.id'] = group._id; // group._id and not groupId because groupId could be === 'party'
// @TODO invitations are now stored like this: `'invitations.parties': []` Probably need a database index for it.
} }
} }
@@ -467,7 +468,6 @@ api.sendPrivateMessage = {
if (receiver.preferences.emailNotifications.newPM !== false) { if (receiver.preferences.emailNotifications.newPM !== false) {
sendTxnEmail(receiver, 'new-pm', [ sendTxnEmail(receiver, 'new-pm', [
{name: 'SENDER', content: getUserInfo(sender, ['name']).name}, {name: 'SENDER', content: getUserInfo(sender, ['name']).name},
{name: 'PMS_INBOX_URL', content: '/#/options/groups/inbox'},
]); ]);
} }
if (receiver.preferences.pushNotifications.newPM !== false) { if (receiver.preferences.pushNotifications.newPM !== false) {

View File

@@ -137,7 +137,7 @@ api.inviteToQuest = {
sendTxnEmail(membersToEmail, `invite-${quest.boss ? 'boss' : 'collection'}-quest`, [ sendTxnEmail(membersToEmail, `invite-${quest.boss ? 'boss' : 'collection'}-quest`, [
{name: 'QUEST_NAME', content: quest.text()}, {name: 'QUEST_NAME', content: quest.text()},
{name: 'INVITER', content: inviterVars.name}, {name: 'INVITER', content: inviterVars.name},
{name: 'PARTY_URL', content: '/#/options/groups/party'}, {name: 'PARTY_URL', content: '/party'},
]); ]);
// track that the inviting user has accepted the quest // track that the inviting user has accepted the quest

View File

@@ -73,9 +73,9 @@ export function getUserInfo (user, fields = []) {
export function getGroupUrl (group) { export function getGroupUrl (group) {
let groupUrl; let groupUrl;
if (group._id === TAVERN_ID) { if (group._id === TAVERN_ID) {
groupUrl = '/#/options/groups/tavern'; groupUrl = '/groups/tavern';
} else if (group.type === 'guild') { } else if (group.type === 'guild') {
groupUrl = `/#/options/groups/guilds/${group._id}`; groupUrl = `/groups/guild/${group._id}`;
} else if (group.type === 'party') { } else if (group.type === 'party') {
groupUrl = 'party'; groupUrl = 'party';
} }

View File

@@ -34,9 +34,9 @@ function sendFlagNotification ({
let text = `${flagger.profile.name} (${flagger.id}) flagged a message (language: ${flagger.preferences.language})`; let text = `${flagger.profile.name} (${flagger.id}) flagged a message (language: ${flagger.preferences.language})`;
if (group.id === TAVERN_ID) { if (group.id === TAVERN_ID) {
titleLink = `${BASE_URL}/#/options/groups/tavern`; titleLink = `${BASE_URL}/groups/tavern`;
} else if (group.privacy === 'public') { } else if (group.privacy === 'public') {
titleLink = `${BASE_URL}/#/options/groups/guilds/${group.id}`; titleLink = `${BASE_URL}/groups/guild/${group.id}`;
} else { } else {
title += ` - (${group.privacy} ${group.type})`; title += ` - (${group.privacy} ${group.type})`;
} }
@@ -109,9 +109,9 @@ function sendSlurNotification ({
let text = `${author.profile.name} (${author._id}) tried to post a slur`; let text = `${author.profile.name} (${author._id}) tried to post a slur`;
if (group.id === TAVERN_ID) { if (group.id === TAVERN_ID) {
titleLink = `${BASE_URL}/#/options/groups/tavern`; titleLink = `${BASE_URL}/groups/tavern`;
} else if (group.privacy === 'public') { } else if (group.privacy === 'public') {
titleLink = `${BASE_URL}/#/options/groups/guilds/${group.id}`; titleLink = `${BASE_URL}/groups/guild/${group.id}`;
} else { } else {
title += ` - (${group.privacy} ${group.type})`; title += ` - (${group.privacy} ${group.type})`;
} }

View File

@@ -396,6 +396,7 @@ schema.statics.validateInvitations = async function getInvitationError (uuids, e
// Count how many invitations currently exist in the party // Count how many invitations currently exist in the party
let query = {}; let query = {};
query['invitations.party.id'] = group._id; query['invitations.party.id'] = group._id;
// @TODO invitations are now stored like this: `'invitations.parties': []`
let groupInvites = await User.count(query).exec(); let groupInvites = await User.count(query).exec();
memberCount += groupInvites; memberCount += groupInvites;
@@ -615,7 +616,7 @@ schema.methods.startQuest = async function startQuest (user) {
member._id !== user._id; member._id !== user._id;
}); });
sendTxnEmail(membersToEmail, 'quest-started', [ sendTxnEmail(membersToEmail, 'quest-started', [
{ name: 'PARTY_URL', content: '/#/options/groups/party' }, { name: 'PARTY_URL', content: '/party' },
]); ]);
let membersToPush = _.filter(membersToNotify, (member) => { let membersToPush = _.filter(membersToNotify, (member) => {
// send push notifications and filter users that disabled emails // send push notifications and filter users that disabled emails