diff --git a/common/locales/en/character.json b/common/locales/en/character.json
index e2517a01a9..4640580f83 100644
--- a/common/locales/en/character.json
+++ b/common/locales/en/character.json
@@ -1,6 +1,5 @@
{
"communityGuidelinesWarning": "Please keep in mind that your Display Name, profile photo, and blurb must comply with the Community Guidelines (e.g. no profanity, no adult topics, no insults, etc). If you have any questions about whether or not something is appropriate, feel free to email admin@habitica.com!",
- "statsAch": "Stats & Achievements",
"profile": "Profile",
"avatar": "Customize Avatar",
"other": "Other",
@@ -83,7 +82,8 @@
"allocateInt": "Points allocated to Intelligence:",
"allocateIntPop": "Add a point to Intelligence",
"noMoreAllocate": "Now that you've hit level 100, you won't gain any more Attribute Points. You can continue leveling up, or start a new adventure at level 1 by using the Orb of Rebirth, now available for free in the Market.",
- "stats": "Avatar Stats",
+ "stats": "Stats",
+ "achievs": "Achievements",
"strength": "Strength",
"strengthText": "Strength increases the chance of random \"critical hits\" and the Gold, Experience, and drop chance boost from them. It also helps deal damage to boss monsters.",
"constitution": "Constitution",
diff --git a/common/locales/en/generic.json b/common/locales/en/generic.json
index 325ddb702c..10282722fb 100644
--- a/common/locales/en/generic.json
+++ b/common/locales/en/generic.json
@@ -7,7 +7,8 @@
"titleTasks": "Tasks",
"titleAvatar": "Avatar",
"titleBackgrounds": "Backgrounds",
- "titleStats": "Stats & Achievements",
+ "titleStats": "Stats",
+ "titleAchievs": "Achievements",
"titleProfile": "Profile",
"titleInbox": "Inbox",
"titleTavern": "Tavern",
diff --git a/website/client/js/app.js b/website/client/js/app.js
index 7224e5e3c3..75728a7dda 100644
--- a/website/client/js/app.js
+++ b/website/client/js/app.js
@@ -84,6 +84,11 @@ window.habitrpg = angular.module('habitrpg',
templateUrl: "partials/options.profile.stats.html",
title: env.t('titleStats')
})
+ .state('options.profile.achievements', {
+ url: "/achievements",
+ templateUrl: "partials/options.profile.achievements.html",
+ title: env.t('titleAchievs')
+ })
.state('options.profile.profile', {
url: "/profile",
templateUrl: "partials/options.profile.profile.html",
diff --git a/website/views/options/profile.jade b/website/views/options/profile.jade
index 036d0cf529..b5ca6e177b 100644
--- a/website/views/options/profile.jade
+++ b/website/views/options/profile.jade
@@ -175,64 +175,63 @@ mixin customizeProfile(mobile)
script(id='partials/options.profile.avatar.html', type='text/ng-template')
+customizeProfile()
-mixin profileStats
+script(id='partials/options.profile.stats.html', type='text/ng-template')
.container-fluid
- div(class=mobile?'padding':'row')
- // FIXME, get this working on mobile
+ div(class='row')
.border-right(ng-class='user.flags.classSelected && !user.preferences.disableClasses ? "col-md-4" : "col-md-6"')
- include ../shared/profiles/stats
- unless mobile
- .col-md-4.border-right.allocate-stats(ng-if='user.flags.classSelected && !user.preferences.disableClasses')
- h3=env.t('characterBuild')
- h4
- =env.t('class') + ': '
- span {{ {warrior:env.t("warrior"), wizard:env.t("mage"), rogue:env.t("rogue"), healer:env.t("healer")}[user.stats.class] }}
- a.btn.btn-danger.btn-xs(ng-click='changeClass(null)')=env.t('changeClass')
- small.cost 3
- table.table.table-striped
- tr
- td
- p(ng-if='::user.stats.lvl >= 100')!=env.t('noMoreAllocate')
- p(ng-if='user.stats.points || user.stats.lvl < 100')
- strong.inline
- |{{user.stats.points}}
- strong.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('levelPopover'))=env.t('unallocated')
- td
- tr
- td(colspan=2)
- fieldset.auto-allocate
- .checkbox
- label
- input(type='checkbox', ng-model='user.preferences.automaticAllocation', ng-change='set({"preferences.automaticAllocation": user.preferences.automaticAllocation?true: false})', ng-click='set({"preferences.allocationMode":"taskbased"})')
- span.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('autoAllocationPop'))=env.t('autoAllocation')
- form(ng-show='user.preferences.automaticAllocation',style='margin-left:1em')
- .radio
- label
- input(type='radio', name='allocationMode', value='flat', ng-model='user.preferences.allocationMode', ng-change='set({"preferences.allocationMode": "flat"})')
- span.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('evenAllocationPop'))=env.t('evenAllocation')
- .radio
- label
- input(type='radio', name='allocationMode', value='classbased', ng-model='user.preferences.allocationMode', ng-change='set({"preferences.allocationMode": "classbased"})')
- span.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('classAllocationPop'))=env.t('classAllocation')
- .radio
- label
- input(type='radio', name='allocationMode', value='taskbased', ng-model='user.preferences.allocationMode', ng-change='set({"preferences.allocationMode": "taskbased"})')
- span.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('taskAllocationPop'))=env.t('taskAllocation')
- div(ng-show='user.preferences.automaticAllocation && !(user.preferences.allocationMode === "taskbased") && (user.stats.points > 0)')
- a.btn.btn-primary.btn-xs(ng-click='User.allocateNow({})', popover-trigger='mouseenter', popover-placement='right', popover=env.t('distributePointsPop'))
- span.glyphicon.glyphicon-download
- |
- =env.t('distributePoints')
- +statAllocation
-
-
+ include ../shared/profiles/stats_col1
div(ng-class='user.flags.classSelected && !user.preferences.disableClasses ? "col-md-4" : "col-md-6"')
button.btn.btn-default(ng-if='user.preferences.disableClasses', ng-click='User.changeClass({})', popover-trigger='mouseenter', popover-placement='right', popover=env.t('enableClassPop'))= env.t('enableClass')
hr(ng-if='user.preferences.disableClasses')
- include ../shared/profiles/achievements
+ include ../shared/profiles/stats_col2
+ .col-md-4.border-left.allocate-stats(ng-if='user.flags.classSelected && !user.preferences.disableClasses')
+ h3=env.t('characterBuild')
+ h4
+ =env.t('class') + ': '
+ span {{ {warrior:env.t("warrior"), wizard:env.t("mage"), rogue:env.t("rogue"), healer:env.t("healer")}[user.stats.class] }}
+ a.btn.btn-danger.btn-xs(ng-click='changeClass(null)')=env.t('changeClass')
+ small.cost 3
+ table.table.table-striped
+ tr
+ td
+ p(ng-if='::user.stats.lvl >= 100')!=env.t('noMoreAllocate')
+ p(ng-if='user.stats.points || user.stats.lvl < 100')
+ strong.inline
+ |{{user.stats.points}}
+ strong.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('levelPopover'))=env.t('unallocated')
+ td
+ tr
+ td(colspan=2)
+ fieldset.auto-allocate
+ .checkbox
+ label
+ input(type='checkbox', ng-model='user.preferences.automaticAllocation', ng-change='set({"preferences.automaticAllocation": user.preferences.automaticAllocation?true: false})', ng-click='set({"preferences.allocationMode":"taskbased"})')
+ span.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('autoAllocationPop'))=env.t('autoAllocation')
+ form(ng-show='user.preferences.automaticAllocation',style='margin-left:1em')
+ .radio
+ label
+ input(type='radio', name='allocationMode', value='flat', ng-model='user.preferences.allocationMode', ng-change='set({"preferences.allocationMode": "flat"})')
+ span.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('evenAllocationPop'))=env.t('evenAllocation')
+ .radio
+ label
+ input(type='radio', name='allocationMode', value='classbased', ng-model='user.preferences.allocationMode', ng-change='set({"preferences.allocationMode": "classbased"})')
+ span.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('classAllocationPop'))=env.t('classAllocation')
+ .radio
+ label
+ input(type='radio', name='allocationMode', value='taskbased', ng-model='user.preferences.allocationMode', ng-change='set({"preferences.allocationMode": "taskbased"})')
+ span.hint(popover-trigger='mouseenter', popover-placement='right', popover=env.t('taskAllocationPop'))=env.t('taskAllocation')
+ div(ng-show='user.preferences.automaticAllocation && !(user.preferences.allocationMode === "taskbased") && (user.stats.points > 0)')
+ a.btn.btn-primary.btn-xs(ng-click='User.allocateNow({})', popover-trigger='mouseenter', popover-placement='right', popover=env.t('distributePointsPop'))
+ span.glyphicon.glyphicon-download
+ |
+ =env.t('distributePoints')
+ +statAllocation()
-script(id='partials/options.profile.stats.html', type='text/ng-template')
- +profileStats()
+script(id='partials/options.profile.achievements.html', type='text/ng-template')
+ .container-fluid
+ div(class='row')
+ div(ng-class='user.flags.classSelected && !user.preferences.disableClasses ? "col-md-4" : "col-md-6"')
+ include ../shared/profiles/achievements
script(id='partials/options.profile.profile.html', type='text/ng-template')
.container-fluid
@@ -310,7 +309,10 @@ script(id='partials/options.profile.html', type="text/ng-template")
=env.t('backgrounds')
li(ng-class="{ active: $state.includes('options.profile.stats') }")
a(ui-sref='options.profile.stats')
- =env.t('statsAch')
+ =env.t('stats')
+ li(ng-class="{ active: $state.includes('options.profile.achievements') }")
+ a(ui-sref='options.profile.achievements')
+ =env.t('achievs')
li(ng-class="{ active: $state.includes('options.profile.profile') }")
a(ui-sref='options.profile.profile')
=env.t('profile')
diff --git a/website/views/shared/header/menu.jade b/website/views/shared/header/menu.jade
index 162631b2c7..a8af0f07d4 100644
--- a/website/views/shared/header/menu.jade
+++ b/website/views/shared/header/menu.jade
@@ -17,6 +17,8 @@ nav.toolbar(ng-controller='MenuCtrl')
a(ui-sref='options.profile.backgrounds')=env.t('backgrounds')
li
a(ui-sref='options.profile.stats')=env.t('stats')
+ li
+ a(ui-sref='options.profile.achievements')=env.t('achievs')
li
a(ui-sref='options.profile.profile')=env.t('profile')
ul.toolbar-submenu
@@ -91,6 +93,8 @@ nav.toolbar(ng-controller='MenuCtrl')
a(ui-sref='options.profile.backgrounds')=env.t('backgrounds')
li
a(ui-sref='options.profile.stats')=env.t('stats')
+ li
+ a(ui-sref='options.profile.achievements')=env.t('achievs')
li
a(ui-sref='options.profile.profile')=env.t('profile')
li.toolbar-button-dropdown
diff --git a/website/views/shared/modals/members.jade b/website/views/shared/modals/members.jade
index ef49798624..b10aae3bd1 100644
--- a/website/views/shared/modals/members.jade
+++ b/website/views/shared/modals/members.jade
@@ -24,7 +24,7 @@ script(type='text/ng-template', id='modals/member.html')
h3=env.t('stats')
// @TODO: Figure out why this isn't showing up in front page
.label.label-info {{:: {warrior:env.t("warrior"), wizard:env.t("mage"), rogue:env.t("rogue"), healer:env.t("healer")}[profile.stats.class] }}
- include ../profiles/stats
+ include ../profiles/stats_all
.col-md-6
.row
+herobox()
diff --git a/website/views/shared/profiles/stats.jade b/website/views/shared/profiles/stats/mixins.jade
similarity index 80%
rename from website/views/shared/profiles/stats.jade
rename to website/views/shared/profiles/stats/mixins.jade
index c82674f731..73f2ea0e4b 100644
--- a/website/views/shared/profiles/stats.jade
+++ b/website/views/shared/profiles/stats/mixins.jade
@@ -11,8 +11,3 @@ mixin statList(calculatedStat, popover, text, useOneTimeBinding)
popover-placement='top', popover=env.t('#{popover}Text'))
=env.t(text)
=': {{' + binding + calculatedStat + '}}'
-
-include ./stats/basic-stats
-include ./stats/equipment
-include ./stats/attributes
-include ./stats/pets-and-mounts
diff --git a/website/views/shared/profiles/stats_all.jade b/website/views/shared/profiles/stats_all.jade
new file mode 100644
index 0000000000..90fb2a1179
--- /dev/null
+++ b/website/views/shared/profiles/stats_all.jade
@@ -0,0 +1,6 @@
+include ./stats/mixins
+
+include ./stats/basic-stats
+include ./stats/equipment
+include ./stats/attributes
+include ./stats/pets-and-mounts
diff --git a/website/views/shared/profiles/stats_col1.jade b/website/views/shared/profiles/stats_col1.jade
new file mode 100644
index 0000000000..c4b05c9194
--- /dev/null
+++ b/website/views/shared/profiles/stats_col1.jade
@@ -0,0 +1,5 @@
+include ./stats/mixins
+
+include ./stats/basic-stats
+include ./stats/equipment
+include ./stats/pets-and-mounts
diff --git a/website/views/shared/profiles/stats_col2.jade b/website/views/shared/profiles/stats_col2.jade
new file mode 100644
index 0000000000..e24c2fe9f3
--- /dev/null
+++ b/website/views/shared/profiles/stats_col2.jade
@@ -0,0 +1,3 @@
+include ./stats/mixins
+
+include ./stats/attributes