mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-07-14 07:52:15 +00:00
Merge branch 'develop' into sabrecat/party-page
This commit is contained in:
commit
b902ff63a2
25 changed files with 250 additions and 110 deletions
|
|
@ -56,5 +56,8 @@
|
|||
"backToChallenges": "Back to all challenges",
|
||||
"prizeValue": "<%= gemcount %> <%= 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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
BIN
website/public/front/.DS_Store
vendored
BIN
website/public/front/.DS_Store
vendored
Binary file not shown.
BIN
website/public/front/css/.DS_Store
vendored
BIN
website/public/front/css/.DS_Store
vendored
Binary file not shown.
BIN
website/public/front/images/.DS_Store
vendored
BIN
website/public/front/images/.DS_Store
vendored
Binary file not shown.
BIN
website/public/front/images/avatar/.DS_Store
vendored
BIN
website/public/front/images/avatar/.DS_Store
vendored
Binary file not shown.
BIN
website/public/front/images/party/.DS_Store
vendored
BIN
website/public/front/images/party/.DS_Store
vendored
Binary file not shown.
BIN
website/public/front/images/presslogos/.DS_Store
vendored
BIN
website/public/front/images/presslogos/.DS_Store
vendored
Binary file not shown.
BIN
website/public/front/images/testimonials/.DS_Store
vendored
BIN
website/public/front/images/testimonials/.DS_Store
vendored
Binary file not shown.
BIN
website/public/front/images/uses/.DS_Store
vendored
BIN
website/public/front/images/uses/.DS_Store
vendored
Binary file not shown.
BIN
website/public/front/js/.DS_Store
vendored
BIN
website/public/front/js/.DS_Store
vendored
Binary file not shown.
|
|
@ -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){
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
.panel-heading
|
||||
h3.panel-title=env.t('challenges')
|
||||
|
|
||||
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')
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
||||
|
|
|
|||
|
|
@ -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}',
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ block vars
|
|||
- var layoutEnv = env
|
||||
|
||||
block title
|
||||
title HabitRPG |
|
||||
title Habitica |
|
||||
=env.t('communityGuidelines')
|
||||
|
||||
block content
|
||||
|
|
@ -334,7 +334,7 @@ block content
|
|||
|:
|
||||
=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')
|
||||
|:
|
||||
=env.t('commGuideLink03description')
|
||||
li
|
||||
|
|
@ -342,19 +342,19 @@ block content
|
|||
|:
|
||||
=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')
|
||||
|:
|
||||
=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')
|
||||
|:
|
||||
=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')
|
||||
|:
|
||||
=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')
|
||||
|:
|
||||
=env.t('commGuideLink08description')
|
||||
|
||||
|
|
|
|||
|
|
@ -15,28 +15,28 @@ block content
|
|||
p
|
||||
=env.t('reportAccountProblems')
|
||||
| :
|
||||
a(href='mailto:admin@habitica.com') admin@habitrpg.com
|
||||
a(href='mailto:admin@habitica.com') admin@habitica.com
|
||||
br
|
||||
=env.t('reportBug')
|
||||
| :
|
||||
a(target='_blank', href='https://github.com/HabitRPG/habitrpg/issues?q=is%3Aopen') Github
|
||||
br
|
||||
=env.t('reportCommunityIssues')
|
||||
=env.t('reportCommunityIssues')
|
||||
| :
|
||||
a(href='mailto:leslie@habitica.com') leslie@habitrpg.com
|
||||
a(href='mailto:leslie@habitica.com') leslie@habitica.com
|
||||
br
|
||||
=env.t('generalQuestionsSite')
|
||||
=env.t('generalQuestionsSite')
|
||||
| :
|
||||
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')
|
||||
| :
|
||||
a(href='mailto:vicky@habitica.com') vicky@habitrpg.com
|
||||
a(href='mailto:vicky@habitica.com') vicky@habitica.com
|
||||
br
|
||||
=env.t('merchandiseInquiries')
|
||||
=env.t('merchandiseInquiries')
|
||||
| :
|
||||
a(href='mailto:store@habitica.com') store@habitrpg.com
|
||||
a(href='mailto:store@habitica.com') store@habitica.com
|
||||
br
|
||||
=env.t('marketingInquiries')
|
||||
=env.t('marketingInquiries')
|
||||
| :
|
||||
a(href='mailto:leslie@habitica.com') leslie@habitrpg.com
|
||||
a(href='mailto:leslie@habitica.com') leslie@habitica.com
|
||||
|
|
|
|||
|
|
@ -15,15 +15,15 @@ block content
|
|||
p
|
||||
=env.t('indivPlan1')
|
||||
|
|
||||
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')
|
||||
|
|
||||
=env.t('indivPlan2')
|
||||
p
|
||||
=env.t('groupText1')
|
||||
|
|
||||
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')
|
||||
|.
|
||||
=env.t('groupText2')
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ block vars
|
|||
- var layoutEnv = env
|
||||
|
||||
block title
|
||||
title HabitRPG | Privacy
|
||||
title Habitica | Privacy
|
||||
|
||||
block content
|
||||
.row
|
||||
|
|
@ -20,8 +20,8 @@ block content
|
|||
p
|
||||
strong PLEASE READ THIS PRIVACY POLICY CAREFULLY.
|
||||
br
|
||||
| By accessing or otherwise using habitrpg.com or any sub domains thereto ("the Sites"),
|
||||
| or using a habitrpg.com or HabitRPG application on a mobile device ("the Applications"),
|
||||
| By accessing or otherwise using habitica.com or any sub domains thereto ("the Sites"),
|
||||
| or using a habitica.com or Habitica application on a mobile device ("the Applications"),
|
||||
| you agree to be bound contractually by this Privacy Policy. Individually
|
||||
| or collectively, the Applications and the Sites may be referred to as
|
||||
| the "Services."
|
||||
|
|
@ -274,7 +274,7 @@ block content
|
|||
| personally identifiable information without your permission or consent,
|
||||
| we will remove the information from our active list, at your request. To
|
||||
| request the removal of your child's information, 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.
|
||||
p
|
||||
strong
|
||||
|
|
@ -305,4 +305,4 @@ block content
|
|||
| Los Angeles, CA 90025
|
||||
br
|
||||
| Email:
|
||||
a(href='mailto:admin@habitrpg.com') admin@habitrpg.com
|
||||
a(href='mailto:admin@habitica.com') admin@habitica.com
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ block content
|
|||
br
|
||||
| Los Angeles, CA 90025
|
||||
br
|
||||
| E-Mail: <a href='mailto:admin@habitrpg.com'>admin@habitrpg.com</a>
|
||||
| E-Mail: <a href='mailto:admin@habitica.com'>admin@habitica.com</a>
|
||||
p
|
||||
| Again, we cannot take action unless you give us all the required
|
||||
| information.
|
||||
|
|
@ -574,4 +574,4 @@ block content
|
|||
strong Contacting Us
|
||||
br
|
||||
| If you have any questions about these Terms of Service, 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>
|
||||
|
|
|
|||
Loading…
Reference in a new issue