Merge branch 'develop' into sabrecat/party-page

This commit is contained in:
Blade Barringer 2015-08-19 08:07:34 -05:00
commit b902ff63a2
25 changed files with 250 additions and 110 deletions

View file

@ -56,5 +56,8 @@
"backToChallenges": "Back to all challenges",
"prizeValue": "<%= gemcount %>&nbsp;<%= gemicon %> Prize",
"clone": "Clone",
"challengeNotEnoughGems": "You do not have enough gems to post this challenge."
"challengeNotEnoughGems": "You do not have enough gems to post this challenge.",
"noPermissionEditChallenge": "You don't have permissions to edit this challenge",
"noPermissionDeleteChallenge": "You don't have permissions to delete this challenge",
"noPermissionCloseChallenge": "You don't have permissions to close this challenge"
}

View file

@ -10,7 +10,7 @@ describe "Challenges", ->
updateTodo = undefined
group = undefined
before (done) ->
beforeEach (done) ->
async.waterfall [
(cb) ->
registerNewUser(cb, true)
@ -23,68 +23,123 @@ describe "Challenges", ->
group = res.body
expect(group.members.length).to.equal 1
expect(group.leader).to.equal user._id
cb()
, (cb) ->
request.post(baseURL + "/challenges").send(
group: group._id
dailys: [
type: "daily"
text: "Challenge Daily"
]
todos: [{
type: "todo"
text: "Challenge Todo 1"
notes: "Challenge Notes"
}]
rewards: []
habits: []
).end (res) ->
challenge = res.body
done()
]
it "Creates a challenge", (done) ->
request.post(baseURL + "/challenges").send(
group: group._id
dailys: [
type: "daily"
text: "Challenge Daily"
]
todos: [{
type: "todo"
text: "Challenge Todo 1"
notes: "Challenge Notes"
}, {
type: "todo"
text: "Challenge Todo 2"
notes: "Challenge Notes"
}]
rewards: []
habits: []
official: true
).end (res) ->
expectCode res, 200
async.parallel [
(cb) ->
User.findById user._id, cb
(cb) ->
Challenge.findById res.body._id, cb
], (err, results) ->
_user = results[0]
challenge = results[1]
expect(_user.dailys[_user.dailys.length - 1].text).to.equal "Challenge Daily"
updateTodo = _user.todos[_user.todos.length - 1]
expect(updateTodo.text).to.equal "Challenge Todo 2"
expect(challenge.official).to.equal false
user = _user
done()
it "User updates challenge notes", (done) ->
updateTodo.notes = "User overriden notes"
request.put(baseURL + "/user/tasks/" + updateTodo.id).send(updateTodo).end (res) ->
done() # we'll do the check down below
it "Change challenge daily", (done) ->
challenge.dailys[0].text = "Updated Daily"
challenge.todos[0].notes = "Challenge Updated Todo Notes"
request.post(baseURL + "/challenges/" + challenge._id).send(challenge).end (res) ->
setTimeout (->
User.findById user._id, (err, _user) ->
expectCode res, 200
expect(_user.dailys[_user.dailys.length - 1].text).to.equal "Updated Daily"
expect(res.body.todos[0].notes).to.equal "Challenge Updated Todo Notes"
expect(_user.todos[_user.todos.length - 1].notes).to.equal "User overriden notes"
user = _user
describe 'POST /challenge', ->
it "Creates a challenge", (done) ->
request.post(baseURL + "/challenges").send(
group: group._id
dailys: [
type: "daily"
text: "Challenge Daily"
]
todos: [{
type: "todo"
text: "Challenge Todo 1"
notes: "Challenge Notes"
}, {
type: "todo"
text: "Challenge Todo 2"
notes: "Challenge Notes"
}]
rewards: []
habits: []
official: true
).end (res) ->
expectCode res, 200
async.parallel [
(cb) ->
User.findById user._id, cb
(cb) ->
Challenge.findById res.body._id, cb
], (err, results) ->
user = results[0]
challenge = results[1]
expect(user.dailys[user.dailys.length - 1].text).to.equal "Challenge Daily"
expect(challenge.official).to.equal false
done()
), 500 # we have to wait a while for users' tasks to be updated, called async on server
it "Shows user notes on challenge page", (done) ->
request.get(baseURL + "/challenges/" + challenge._id + "/member/" + user._id).end (res) ->
expect(res.body.todos[res.body.todos.length - 1].notes).to.equal "User overriden notes"
done()
describe 'POST /challenge/:cid', ->
it "updates the notes on user's version of a challenge task's note without updating the challenge", (done) ->
updateTodo = challenge.todos[0]
updateTodo.notes = "User overriden notes"
async.waterfall [
(cb) ->
request.put(baseURL + "/user/tasks/" + updateTodo.id).send(updateTodo).end (res) ->
cb()
, (cb) ->
Challenge.findById challenge._id, cb
, (chal, cb) ->
expect(chal.todos[0].notes).to.eql("Challenge Notes")
cb()
, (cb) ->
request.get(baseURL + "/user/tasks/" + updateTodo.id)
.end (res) ->
expect(res.body.notes).to.eql("User overriden notes")
done()
]
it "changes user's copy of challenge tasks when the challenge is updated", (done) ->
challenge.dailys[0].text = "Updated Daily"
request.post(baseURL + "/challenges/" + challenge._id)
.send(challenge)
.end (res) ->
challenge = res.body
expect(challenge.dailys[0].text).to.equal "Updated Daily"
User.findById user._id, (err, _user) ->
expectCode res, 200
expect(_user.dailys[_user.dailys.length - 1].text).to.equal "Updated Daily"
done()
it "does not changes user's notes on tasks when challenge task notes are updated", (done) ->
challenge.todos[0].notes = "Challenge Updated Todo Notes"
request.post(baseURL + "/challenges/" + challenge._id)
.send(challenge)
.end (res) ->
challenge = res.body
expect(challenge.todos[0].notes).to.equal "Challenge Updated Todo Notes"
User.findById user._id, (err, _user) ->
expectCode res, 200
expect(_user.todos[_user.todos.length - 1].notes).to.equal "Challenge Notes"
done()
it "shows user notes on challenge page", (done) ->
updateTodo = challenge.todos[0]
updateTodo.notes = "User overriden notes"
async.waterfall [
(cb) ->
request.put(baseURL + "/user/tasks/" + updateTodo.id).send(updateTodo).end (res) ->
cb()
, (cb) ->
Challenge.findById challenge._id, cb
, (chal, cb) ->
expect(chal.todos[0].notes).to.eql("Challenge Notes")
cb()
, (cb) ->
request.get(baseURL + "/challenges/" + challenge._id + "/member/" + user._id).end (res) ->
expect(res.body.todos[res.body.todos.length - 1].notes).to.equal "User overriden notes"
done()
]
it "Complete To-Dos", (done) ->
User.findById user._id, (err, _user) ->
@ -116,7 +171,7 @@ describe "Challenges", ->
done()
), 100 # we need to wait for challenge to update user, it's a background job for perf reasons
it "Admin creates a challenge", (done) ->
it "admin creates a challenge", (done) ->
User.findByIdAndUpdate user._id,
$set:
"contributor.admin": true
@ -204,3 +259,85 @@ describe "Challenges", ->
User.findById user._id, (err, _user) ->
expect(_user.balance).to.equal 5.5
done()
describe "non-owner permissions", () ->
challenge = undefined
beforeEach (done) ->
async.waterfall [
(cb) ->
request.post(baseURL + "/challenges").send(
group: group._id
name: 'challenge name'
dailys: [
type: "daily"
text: "Challenge Daily"
]
).end (res) ->
challenge = res.body
cb()
(cb) ->
registerNewUser(done, true)
]
context "non-owner", () ->
it 'can not edit challenge', (done) ->
challenge.name = 'foobar'
request.post(baseURL + "/challenges/" + challenge._id)
.send(challenge)
.end (res) ->
error = res.body.err
expect(error).to.eql("You don't have permissions to edit this challenge")
done()
it 'can not close challenge', (done) ->
request.post(baseURL + "/challenges/" + challenge._id + "/close?uid=" + user._id)
.end (res) ->
error = res.body.err
expect(error).to.eql("You don't have permissions to close this challenge")
done()
it 'can not delete challenge', (done) ->
request.del(baseURL + "/challenges/" + challenge._id)
.end (res) ->
error = res.body.err
expect(error).to.eql("You don't have permissions to delete this challenge")
done()
context "non-owner that is an admin", () ->
beforeEach (done) ->
User.findByIdAndUpdate(user._id, { 'contributor.admin': true }, done)
it 'can edit challenge', (done) ->
challenge.name = 'foobar'
request.post(baseURL + "/challenges/" + challenge._id)
.send(challenge)
.end (res) ->
expect(res.body.err).to.not.exist
Challenge.findById challenge._id, (err, chal) ->
expect(chal.name).to.eql('foobar')
done()
it 'can close challenge', (done) ->
request.post(baseURL + "/challenges/" + challenge._id + "/close?uid=" + user._id)
.end (res) ->
expect(res.body.err).to.not.exist
User.findById user._id, (err, usr) ->
expect(usr.achievements.challenges[0]).to.eql(challenge.name)
done()
it 'can delete challenge', (done) ->
request.del(baseURL + "/challenges/" + challenge._id)
.end (res) ->
expect(res.body.err).to.not.exist
request.get(baseURL + "/challenges/" + challenge._id)
.end (res) ->
error = res.body.err
expect(error).to.eql("Challenge #{challenge._id} not found")
done()

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -225,7 +225,7 @@ api.update = function(req, res, next){
},
function(_before, cb) {
if (!_before) return cb('Challenge ' + cid + ' not found');
if (_before.leader != user._id) return cb("You don't have permissions to edit this challenge");
if (_before.leader != user._id && !user.contributor.admin) return cb(shared.i18n.t('noPermissionEditChallenge', req.language));
// Update the challenge, since syncing will need the updated challenge. But store `before` we're going to do some
// before-save / after-save comparison to determine if we need to sync to users
before = _before;
@ -307,7 +307,7 @@ api['delete'] = function(req, res, next){
},
function(chal, cb){
if (!chal) return cb('Challenge ' + cid + ' not found');
if (chal.leader != user._id) return cb("You don't have permissions to edit this challenge");
if (chal.leader != user._id && !user.contributor.admin) return cb(shared.i18n.t('noPermissionDeleteChallenge', req.language));
if (chal.group != 'habitrpg') user.balance += chal.prize/4; // Refund gems to user if a non-tavern challenge
user.save(cb);
},
@ -336,7 +336,7 @@ api.selectWinner = function(req, res, next) {
function(_chal, cb){
chal = _chal;
if (!chal) return cb('Challenge ' + cid + ' not found');
if (chal.leader != user._id) return cb("You don't have permissions to edit this challenge");
if (chal.leader != user._id && !user.contributor.admin) return cb(shared.i18n.t('noPermissionCloseChallenge', req.language));
User.findById(req.query.uid, cb)
},
function(winner, cb){

View file

@ -36,7 +36,7 @@ mixin petList(source)
each t,k in env.Content.specialPets
- var egg = k.split('-')[0], pot = k.split('-')[1]
button(ng-if='user.items.pets["#{egg}-#{pot}"]', class="pet-button Pet-#{egg}-#{pot}", ng-class='{active: user.items.currentPet == "#{egg}-#{pot}"}', ng-click='choosePet("#{egg}", "#{pot}")', popover=env.t(t), popover-trigger='mouseenter', popover-placement='bottom')
a(target='_blank', href='http://habitrpg.wikia.com/wiki/Contributing_to_HabitRPG')
a(target='_blank', href='http://habitica.wikia.com/wiki/Contributing_to_Habitica')
button(ng-if='!user.items.pets["Dragon-Hydra"]', class="pet-button pet-not-owned", popover-trigger='mouseenter', popover-placement='right', popover=env.t('rarePetPop1'), popover-title=env.t('rarePetPop2'))
.PixelPaw-Gold

View file

@ -16,7 +16,7 @@
.pull-right
span.inventory_special_trinket.inline-gems
b x{{user.purchased.plan.consecutive.trinkets}}
p!=env.t('timeTravelersPopover', {linkStart: "<a href='http://habitrpg.wikia.com/wiki/Mystery_Item' target='_blank'>", linkEnd: "</a>"})
p!=env.t('timeTravelersPopover', {linkStart: "<a href='http://habitica.wikia.com/wiki/Mystery_Item' target='_blank'>", linkEnd: "</a>"})
.row: .col-md-12
li.customize-menu.inventory-gear

View file

@ -3,7 +3,7 @@
.panel-heading
h3.panel-title=env.t('challenges')
|&nbsp;
a.pull-right(target='_blank', href='http://habitrpg.wikia.com/wiki/Challenges')
a.pull-right(target='_blank', href='http://habitica.wikia.com/wiki/Challenges')
small=env.t('moreInfo')
.panel-body.modal-fixed-height(bindonce='group.challenges')
div(ng-if='group.challenges.length > 0')

View file

@ -30,7 +30,7 @@ script(type='text/ng-template', id='partials/options.social.challenges.detail.me
script(type='text/ng-template', id='partials/options.social.challenges.detail.html')
// Edit button
div(bindonce='challenge', ng-if='challenge.leader._id==user._id')
div(bindonce='challenge', ng-if='challenge.leader._id==user._id || user.contributor.admin')
div(ng-hide='challenge._locked==false')
button.btn.btn-sm.btn-default(ng-click='edit(challenge)')=env.t('edit')
button.btn.btn-sm.btn-success(ng-click='clone(challenge)')=env.t('clone')

View file

@ -37,13 +37,13 @@
a(target='_blank', href='https://vimeo.com/57654086')=env.t('tutorial')
tr
td
a(target='_blank', href='http://habitrpg.wikia.com/wiki/FAQ')=env.t('FAQ')
a(target='_blank', href='http://habitica.wikia.com/wiki/FAQ')=env.t('FAQ')
tr
td
a(target='_blank', href='http://habitrpg.wikia.com/wiki/Glossary')=env.t('glossary')
a(target='_blank', href='http://habitica.wikia.com/wiki/Glossary')=env.t('glossary')
tr
td
a(target='_blank', href='http://habitrpg.wikia.com/')=env.t('wiki')
a(target='_blank', href='http://habitica.wikia.com/')=env.t('wiki')
tr
td
a(target='_blank', href='https://oldgods.net/habitrpg/habitrpg_user_data_display.html')=env.t('dataTool')
@ -55,7 +55,7 @@
a(target='_blank', href='https://trello.com/c/odmhIqyW/440-read-first-table-of-contents')= ' ' + env.t('requestAF')
tr
td
a(target='_blank', href='http://habitrpg.wikia.com/wiki/Special:Forum')=env.t('community')
a(target='_blank', href='http://habitica.wikia.com/wiki/Special:Forum')=env.t('community')
// Player Tiers
.panel.panel-default(popover=env.t('tierPop'), popover-trigger="mouseenter", popover-placement="right")
@ -66,10 +66,10 @@
|<a href='/#/options/groups/hall'>
=env.t('visitHeroes')
|</a> <br />
|<a href='http://habitrpg.wikia.com/wiki/Contributor_Rewards' target='_blank'>
|<a href='http://habitica.wikia.com/wiki/Contributor_Rewards' target='_blank'>
=env.t('conLearn')
|</a> <br />
|<a href='http://habitrpg.wikia.com/wiki/Contributing_to_HabitRPG' target='_blank'>
|<a href='http://habitica.wikia.com/wiki/Contributing_to_Habitica' target='_blank'>
=env.t('conLearnHow')
|</a>
table.table.table-striped.panel-tiers

View file

@ -56,7 +56,7 @@ nav.toolbar(ng-controller='MenuCtrl')
a(ui-sref='options.settings.export')=env.t('exportData')
ul.toolbar-submenu
li
a(target="_blank" href='http://habitrpg.wikia.com/wiki/')=env.t('overview')
a(target="_blank" href='http://habitica.wikia.com/wiki/')=env.t('overview')
li
a(target="_blank" href='https://github.com/HabitRPG/habitrpg/issues/2760')=env.t('reportBug')
li
@ -64,9 +64,9 @@ nav.toolbar(ng-controller='MenuCtrl')
li
a(target="_blank" href='https://trello.com/c/odmhIqyW/440-read-first-table-of-contents')=env.t('requestAF')
li
a(target="_blank" href='http://habitrpg.wikia.com/wiki/Contributing_to_HabitRPG')=env.t('contributeToHRPG')
a(target="_blank" href='http://habitica.wikia.com/wiki/Contributing_to_Habitica')=env.t('contributeToHRPG')
li
a(target="_blank" href='http://habitrpg.wikia.com/wiki/FAQ')=env.t('FAQ')
a(target="_blank" href='http://habitica.wikia.com/wiki/FAQ')=env.t('FAQ')
ul.toolbar-controls
li.toolbar-subscribe-button
button(ng-if='!user.purchased.plan.customerId',ui-sref='options.settings.subscription',popover-trigger='mouseenter',popover-placement='bottom',popover-title=env.t('subscriptions'),popover=env.t('subDescription'),popover-append-to-body='true')=env.t('subscribe')
@ -147,7 +147,7 @@ nav.toolbar(ng-controller='MenuCtrl')
li
a(ui-sref='options.settings.export')=env.t('exportData')
li.toolbar-button-dropdown.highlight
a(target="_blank" href='http://habitrpg.wikia.com/wiki/')
a(target="_blank" href='http://habitica.wikia.com/wiki/')
span.glyphicon.glyphicon-question-sign
span=env.t('help')
a(ng-click='expandMenu("help")', ng-class='{active: _expandedMenu == "help"}')
@ -155,7 +155,7 @@ nav.toolbar(ng-controller='MenuCtrl')
div(ng-if='_expandedMenu == "help"')
ul.toolbar-submenu(ng-click='expandMenu(null)')
li
a(target="_blank" href='http://habitrpg.wikia.com/wiki/')=env.t('overview')
a(target="_blank" href='http://habitica.wikia.com/wiki/')=env.t('overview')
li
a(target="_blank" href='https://github.com/HabitRPG/habitrpg/issues/2760')=env.t('reportBug')
li
@ -163,9 +163,9 @@ nav.toolbar(ng-controller='MenuCtrl')
li
a(target="_blank" href='https://trello.com/c/odmhIqyW/440-read-first-table-of-contents')=env.t('requestAF')
li
a(target="_blank" href='http://habitrpg.wikia.com/wiki/Contributing_to_HabitRPG')=env.t('contributeToHRPG')
a(target="_blank" href='http://habitica.wikia.com/wiki/Contributing_to_Habitica')=env.t('contributeToHRPG')
li
a(target="_blank" href='http://habitrpg.wikia.com/wiki/FAQ')=env.t('FAQ')
a(target="_blank" href='http://habitica.wikia.com/wiki/FAQ')=env.t('FAQ')
ul.toolbar-subscribe(ng-if='!user.purchased.plan.customerId')
li.toolbar-subscribe-button
button.highlight(ui-sref='options.settings.subscription',popover-trigger='mouseenter',popover-placement='bottom',popover-title=env.t('subscriptions'),popover=env.t('subDescription'),popover-append-to-body='true')=env.t('subscribe')
@ -252,7 +252,7 @@ nav.toolbar(ng-controller='MenuCtrl')
a(ui-sref='options.settings.notifications')=env.t('notifications')
ul.toolbar-submenu(ng-click='expandMenu(null)')
li
a(href="http://habitrpg.wikia.com/wiki/FAQ", target='_blank')=env.t('FAQ')
a(href="http://habitica.wikia.com/wiki/FAQ", target='_blank')=env.t('FAQ')
li
a(href="https://vimeo.com/57654086", target='_blank')=env.t('tutorials')
ul.toolbar-controls

View file

@ -81,7 +81,7 @@ script(id='modals/achievements/contributor.html', type='text/ng-template')
div(class="#{env.worldDmg.guide ? 'npc_justin_broken.float-left' : 'npc_justin.float-left'}")
p
!=env.t('contribModal', {name: "{{user.profile.name}}", level: "{{user.contributor.level}}"}) + ' '
a(href='http://habitrpg.wikia.com/wiki/Contributor_Rewards' target='_blank')=env.t('contribLink')
a(href='http://habitica.wikia.com/wiki/Contributor_Rewards' target='_blank')=env.t('contribLink')
.modal-footer
button.btn.btn-default(ng-click='set({"flags.contributor":false}); $close()')=env.t('ok')

View file

@ -29,7 +29,7 @@ div(ng-if='::task.type!="reward"')
fieldset.option-group.advanced-option(ng-show="task._advanced")
legend.option-title
a.hint.priority-multiplier-help(href='http://habitrpg.wikia.com/wiki/Difficulty', target='_blank', popover-title=env.t('difficultyHelpTitle'), popover-trigger='mouseenter', popover=env.t('difficultyHelpContent'))=env.t('difficulty')
a.hint.priority-multiplier-help(href='http://habitica.wikia.com/wiki/Difficulty', target='_blank', popover-title=env.t('difficultyHelpTitle'), popover-trigger='mouseenter', popover=env.t('difficultyHelpContent'))=env.t('difficulty')
ul.priority-multiplier
li
button(type='button', ng-class='{active: task.priority==0.1}',

View file

@ -17,7 +17,7 @@ block vars
- var layoutEnv = env
block title
title HabitRPG &VerticalLine;&nbsp;
title Habitica &VerticalLine;&nbsp;
=env.t('communityGuidelines')
block content
@ -334,7 +334,7 @@ block content
|:&nbsp;
=env.t('commGuideLink02description')
li
a(href='http://habitrpg.wikia.com/wiki/HabitRPG_Wiki' target='_blank')=env.t('commGuideLink03')
a(href='http://habitica.wikia.com/wiki/Habitica_Wiki' target='_blank')=env.t('commGuideLink03')
|:&nbsp;
=env.t('commGuideLink03description')
li
@ -342,19 +342,19 @@ block content
|:&nbsp;
=env.t('commGuideLink04description')
li
a(href='https://trello.com/b/EpoYEYod/habitrpg' target='_blank')=env.t('commGuideLink05')
a(href='https://trello.com/b/EpoYEYod/' target='_blank')=env.t('commGuideLink05')
|:&nbsp;
=env.t('commGuideLink05description')
li
a(href='https://trello.com/b/mXK3Eavg/habitrpg-mobile' target='_blank')=env.t('commGuideLink06')
a(href='https://trello.com/b/mXK3Eavg/' target='_blank')=env.t('commGuideLink06')
|:&nbsp;
=env.t('commGuideLink06description')
li
a(href='https://trello.com/b/vwuE9fbO/habitrpg-pixel-art' target='_blank')=env.t('commGuideLink07')
a(href='https://trello.com/b/vwuE9fbO/' target='_blank')=env.t('commGuideLink07')
|:&nbsp;
=env.t('commGuideLink07description')
li
a(href='https://trello.com/b/nnv4QIRX/habitrpg-quests' target='_blank')=env.t('commGuideLink08')
a(href='https://trello.com/b/nnv4QIRX/' target='_blank')=env.t('commGuideLink08')
|:&nbsp;
=env.t('commGuideLink08description')

View file

@ -15,28 +15,28 @@ block content
p
=env.t('reportAccountProblems')
| &colon;&nbsp;
a(href='mailto:admin@habitica.com') admin&commat;habitrpg&period;com
a(href='mailto:admin@habitica.com') admin&commat;habitica&period;com
br
=env.t('reportBug')
| &colon;&nbsp;
a(target='_blank', href='https://github.com/HabitRPG/habitrpg/issues?q=is%3Aopen') Github
br
=env.t('reportCommunityIssues')
=env.t('reportCommunityIssues')
| &colon;&nbsp;
a(href='mailto:leslie@habitica.com') leslie&commat;habitrpg&period;com
a(href='mailto:leslie@habitica.com') leslie&commat;habitica&period;com
br
=env.t('generalQuestionsSite')
=env.t('generalQuestionsSite')
| &colon;&nbsp;
a(target='_blank', href='http://habitrpg.wikia.com/wiki/The_Keep:The_Newbies_Guild') Newbies Guild
a(target='_blank', href='http://habitica.wikia.com/wiki/The_Keep:The_Newbies_Guild') Newbies Guild
br
=env.t('businessInquiries')
=env.t('businessInquiries')
| &colon;&nbsp;
a(href='mailto:vicky@habitica.com') vicky&commat;habitrpg&period;com
a(href='mailto:vicky@habitica.com') vicky&commat;habitica&period;com
br
=env.t('merchandiseInquiries')
=env.t('merchandiseInquiries')
| &colon;&nbsp;
a(href='mailto:store@habitica.com') store&commat;habitrpg&period;com
a(href='mailto:store@habitica.com') store&commat;habitica&period;com
br
=env.t('marketingInquiries')
=env.t('marketingInquiries')
| &colon;&nbsp;
a(href='mailto:leslie@habitica.com') leslie&commat;habitrpg&period;com
a(href='mailto:leslie@habitica.com') leslie&commat;habitica&period;com

View file

@ -15,15 +15,15 @@ block content
p
=env.t('indivPlan1')
|&nbsp;
a(href='http://habitrpg.wikia.com/wiki/Guilds' target='_blank')=env.t('guilds')
a(href='http://habitica.wikia.com/wiki/Guilds' target='_blank')=env.t('guilds')
= ' ' + env.t('and') + ' '
a(href='http://habitrpg.wikia.com/wiki/Challenges' target='_blank')=env.t('challenges')
a(href='http://habitica.wikia.com/wiki/Challenges' target='_blank')=env.t('challenges')
|&nbsp;
=env.t('indivPlan2')
p
=env.t('groupText1')
|&nbsp;
a(href='http://habitrpg.wikia.com/wiki/Habitica' target='_blank')=env.t('habitica')
a(href='http://habitica.wikia.com/wiki/Habitica' target='_blank')=env.t('habitica')
|.&nbsp;
=env.t('groupText2')

View file

@ -4,7 +4,7 @@ block vars
- var layoutEnv = env
block title
title HabitRPG &VerticalLine; Privacy
title Habitica &VerticalLine; Privacy
block content
.row
@ -20,8 +20,8 @@ block content
p
strong PLEASE READ THIS PRIVACY POLICY CAREFULLY&period;
br
| By accessing or otherwise using habitrpg&period;com or any sub domains thereto &lpar;&quot;the Sites&quot;&rpar;&comma;
| or using a habitrpg&period;com or HabitRPG application on a mobile device &lpar;&quot;the Applications&quot;&rpar;&comma;
| By accessing or otherwise using habitica&period;com or any sub domains thereto &lpar;&quot;the Sites&quot;&rpar;&comma;
| or using a habitica&period;com or Habitica application on a mobile device &lpar;&quot;the Applications&quot;&rpar;&comma;
| you agree to be bound contractually by this Privacy Policy&period; Individually
| or collectively&comma; the Applications and the Sites may be referred to as
| the &quot;Services&period;&quot;
@ -274,7 +274,7 @@ block content
| personally identifiable information without your permission or consent&comma;
| we will remove the information from our active list&comma; at your request&period; To
| request the removal of your child&apos;s information&comma; please email us at
| <a href='mailto:admin@habitrpg.com' target='_blank'>admin@habitrpg.com</a> and be sure to include in
| <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> and be sure to include in
| your message the same login information that your child submitted&period;
p
strong
@ -305,4 +305,4 @@ block content
| Los Angeles, CA 90025
br
| Email&colon;&nbsp;
a(href='mailto:admin@habitrpg.com') admin@habitrpg.com
a(href='mailto:admin@habitica.com') admin@habitica.com

View file

@ -220,7 +220,7 @@ block content
br
| Los Angeles, CA 90025
br
| E-Mail&colon; <a href='mailto:admin@habitrpg.com'>admin@habitrpg.com</a>
| E-Mail&colon; <a href='mailto:admin@habitica.com'>admin@habitica.com</a>
p
| Again&comma; we cannot take action unless you give us all the required
| information&period;
@ -574,4 +574,4 @@ block content
strong Contacting Us
br
| If you have any questions about these Terms of Service&comma; please contact
| us at <a href='mailto:admin@habitrpg.com'>admin@habitrpg.com</a>
| us at <a href='mailto:admin@habitica.com'>admin@habitica.com</a>