Merge branch 'develop' into sabrecat/teams-rebase

This commit is contained in:
SabreCat
2022-07-18 15:50:20 -05:00
17 changed files with 782 additions and 743 deletions

1165
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,11 @@
{ {
"name": "habitica", "name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.", "description": "A habit tracker app which treats your goals like a Role Playing Game.",
"version": "4.235.1", "version": "4.236.1",
"main": "./website/server/index.js", "main": "./website/server/index.js",
"dependencies": { "dependencies": {
"@babel/core": "^7.18.6", "@babel/core": "^7.18.6",
"@babel/preset-env": "^7.18.2", "@babel/preset-env": "^7.18.6",
"@babel/register": "^7.18.6", "@babel/register": "^7.18.6",
"@google-cloud/trace-agent": "^5.1.6", "@google-cloud/trace-agent": "^5.1.6",
"@parse/node-apn": "^5.1.3", "@parse/node-apn": "^5.1.3",
@@ -47,7 +47,7 @@
"lodash": "^4.17.21", "lodash": "^4.17.21",
"merge-stream": "^2.0.0", "merge-stream": "^2.0.0",
"method-override": "^3.0.0", "method-override": "^3.0.0",
"moment": "^2.29.3", "moment": "^2.29.4",
"moment-recur": "^1.0.7", "moment-recur": "^1.0.7",
"mongoose": "^5.13.7", "mongoose": "^5.13.7",
"morgan": "^1.10.0", "morgan": "^1.10.0",
@@ -74,7 +74,7 @@
"uuid": "^8.3.2", "uuid": "^8.3.2",
"validator": "^13.7.0", "validator": "^13.7.0",
"vinyl-buffer": "^1.0.1", "vinyl-buffer": "^1.0.1",
"winston": "^3.8.0", "winston": "^3.8.1",
"winston-loggly-bulk": "^3.2.1", "winston-loggly-bulk": "^3.2.1",
"xml2js": "^0.4.23" "xml2js": "^0.4.23"
}, },

View File

@@ -1799,39 +1799,39 @@
} }
}, },
"@babel/plugin-proposal-optional-chaining": { "@babel/plugin-proposal-optional-chaining": {
"version": "7.17.12", "version": "7.18.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz",
"integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", "integrity": "sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA==",
"requires": { "requires": {
"@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-plugin-utils": "^7.18.6",
"@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6",
"@babel/plugin-syntax-optional-chaining": "^7.8.3" "@babel/plugin-syntax-optional-chaining": "^7.8.3"
}, },
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": { "@babel/helper-plugin-utils": {
"version": "7.17.12", "version": "7.18.6",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz",
"integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg=="
}, },
"@babel/helper-skip-transparent-expression-wrappers": { "@babel/helper-skip-transparent-expression-wrappers": {
"version": "7.16.0", "version": "7.18.6",
"resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz",
"integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "integrity": "sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw==",
"requires": { "requires": {
"@babel/types": "^7.16.0" "@babel/types": "^7.18.6"
} }
}, },
"@babel/helper-validator-identifier": { "@babel/helper-validator-identifier": {
"version": "7.16.7", "version": "7.18.6",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
"integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
}, },
"@babel/types": { "@babel/types": {
"version": "7.18.0", "version": "7.18.7",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.0.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz",
"integrity": "sha512-vhAmLPAiC8j9K2GnsnLPCIH5wCrPpYIVBCWRBFDCB7Y/BXLqi/O+1RSTTM2bsmg6U/551+FCf9PNPxjABmxHTw==", "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==",
"requires": { "requires": {
"@babel/helper-validator-identifier": "^7.16.7", "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
} }
} }
@@ -12131,11 +12131,11 @@
} }
}, },
"@vue/cli-plugin-eslint": { "@vue/cli-plugin-eslint": {
"version": "4.5.18", "version": "4.5.19",
"resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.18.tgz", "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.19.tgz",
"integrity": "sha512-UWacV26Ul+W61PwvMBv4Msh2h3Umr5FG0ApXFzLQTgyc/rCmXvhR53pW252zVZ2tf7s2n7xDFnp/mrCUrkb2tw==", "integrity": "sha512-53sa4Pu9j5KajesFlj494CcO8vVo3e3nnZ1CCKjGGnrF90id1rUeepcFfz5XjwfEtbJZp2x/NoX/EZE6zCzSFQ==",
"requires": { "requires": {
"@vue/cli-shared-utils": "^4.5.18", "@vue/cli-shared-utils": "^4.5.19",
"eslint-loader": "^2.2.1", "eslint-loader": "^2.2.1",
"globby": "^9.2.0", "globby": "^9.2.0",
"inquirer": "^7.1.0", "inquirer": "^7.1.0",
@@ -12144,9 +12144,9 @@
}, },
"dependencies": { "dependencies": {
"@vue/cli-shared-utils": { "@vue/cli-shared-utils": {
"version": "4.5.18", "version": "4.5.19",
"resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.18.tgz", "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.19.tgz",
"integrity": "sha512-rYX8watG/+SFmkedXMZ3hJP+26/bz80f9zG9dMUfBMqTAqIDGICDtuP4H4QXZL3PCKI/HWFCMhRWf2wO4eGEPg==", "integrity": "sha512-JYpdsrC/d9elerKxbEUtmSSU6QRM60rirVubOewECHkBHj+tLNznWq/EhCjswywtePyLaMUK25eTqnTSZlEE+g==",
"requires": { "requires": {
"@achrinza/node-ipc": "9.2.2", "@achrinza/node-ipc": "9.2.2",
"@hapi/joi": "^15.0.1", "@hapi/joi": "^15.0.1",
@@ -13697,9 +13697,12 @@
"integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="
}, },
"async": { "async": {
"version": "3.2.3", "version": "2.6.4",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
"integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
"requires": {
"lodash": "^4.17.14"
}
}, },
"async-each": { "async-each": {
"version": "1.0.3", "version": "1.0.3",
@@ -21926,9 +21929,9 @@
} }
}, },
"moment": { "moment": {
"version": "2.29.3", "version": "2.29.4",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
"integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
}, },
"move-concurrently": { "move-concurrently": {
"version": "1.0.1", "version": "1.0.1",
@@ -22035,6 +22038,11 @@
"color-convert": "^2.0.1" "color-convert": "^2.0.1"
} }
}, },
"async": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
},
"cliui": { "cliui": {
"version": "7.0.4", "version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -23119,14 +23127,6 @@
"mkdirp": "^0.5.5" "mkdirp": "^0.5.5"
}, },
"dependencies": { "dependencies": {
"async": {
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
"integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
"requires": {
"lodash": "^4.17.14"
}
},
"debug": { "debug": {
"version": "3.2.7", "version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",

View File

@@ -20,7 +20,7 @@
"@storybook/addons": "6.5.9", "@storybook/addons": "6.5.9",
"@storybook/vue": "6.3.13", "@storybook/vue": "6.3.13",
"@vue/cli-plugin-babel": "^4.5.15", "@vue/cli-plugin-babel": "^4.5.15",
"@vue/cli-plugin-eslint": "^4.5.18", "@vue/cli-plugin-eslint": "^4.5.19",
"@vue/cli-plugin-router": "^4.5.15", "@vue/cli-plugin-router": "^4.5.15",
"@vue/cli-plugin-unit-mocha": "^4.5.15", "@vue/cli-plugin-unit-mocha": "^4.5.15",
"@vue/cli-service": "^4.5.15", "@vue/cli-service": "^4.5.15",
@@ -44,7 +44,7 @@
"intro.js": "^5.1.0", "intro.js": "^5.1.0",
"jquery": "^3.6.0", "jquery": "^3.6.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"moment": "^2.29.3", "moment": "^2.29.4",
"nconf": "^0.12.0", "nconf": "^0.12.0",
"sass": "^1.34.0", "sass": "^1.34.0",
"sass-loader": "^8.0.2", "sass-loader": "^8.0.2",
@@ -65,6 +65,6 @@
"webpack": "^4.46.0" "webpack": "^4.46.0"
}, },
"devDependencies": { "devDependencies": {
"@babel/plugin-proposal-optional-chaining": "^7.17.12" "@babel/plugin-proposal-optional-chaining": "^7.18.6"
} }
} }

View File

@@ -417,7 +417,15 @@ export default {
this.$store.state.isUserLoaded = true; this.$store.state.isUserLoaded = true;
Analytics.setUser(); Analytics.setUser();
Analytics.updateUser(); Analytics.updateUser();
return axios.get('/api/v4/i18n/browser-script', { language: this.user.preferences.language }); return axios.get('/api/v4/i18n/browser-script',
{
language: this.user.preferences.language,
headers: {
'Cache-Control': 'no-cache',
Pragma: 'no-cache',
Expires: '0',
},
});
}).then(() => { }).then(() => {
const i18nData = window && window['habitica-i18n']; const i18nData = window && window['habitica-i18n'];
this.$loadLocale(i18nData); this.$loadLocale(i18nData);

View File

@@ -625,6 +625,11 @@
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_bioluminescent_waves {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_bioluminescent_waves.png');
width: 141px;
height: 147px;
}
.background_birch_forest { .background_birch_forest {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_birch_forest.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_birch_forest.png');
width: 141px; width: 141px;
@@ -1884,11 +1889,21 @@
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_underwater_cave {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_underwater_cave.png');
width: 141px;
height: 147px;
}
.background_underwater_ruins { .background_underwater_ruins {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_underwater_ruins.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_underwater_ruins.png');
width: 141px; width: 141px;
height: 147px; height: 147px;
} }
.background_underwater_statues {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_underwater_statues.png');
width: 141px;
height: 147px;
}
.background_underwater_vents { .background_underwater_vents {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_underwater_vents.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_underwater_vents.png');
width: 141px; width: 141px;
@@ -2151,6 +2166,11 @@
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.icon_background_bioluminescent_waves {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_bioluminescent_waves.png');
width: 68px;
height: 68px;
}
.icon_background_birch_forest { .icon_background_birch_forest {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_birch_forest.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_birch_forest.png');
width: 68px; width: 68px;
@@ -3420,11 +3440,21 @@
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.icon_background_underwater_cave {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_underwater_cave.png');
width: 68px;
height: 68px;
}
.icon_background_underwater_ruins { .icon_background_underwater_ruins {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_underwater_ruins.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_underwater_ruins.png');
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.icon_background_underwater_statues {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_underwater_statues.png');
width: 68px;
height: 68px;
}
.icon_background_underwater_vents { .icon_background_underwater_vents {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_underwater_vents.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_underwater_vents.png');
width: 68px; width: 68px;
@@ -18145,6 +18175,11 @@
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.broad_armor_armoire_fancyPirateSuit {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_fancyPirateSuit.png');
width: 114px;
height: 90px;
}
.broad_armor_armoire_farrierOutfit { .broad_armor_armoire_farrierOutfit {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_farrierOutfit.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_farrierOutfit.png');
width: 90px; width: 90px;
@@ -18590,6 +18625,11 @@
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.head_armoire_fancyPirateHat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_fancyPirateHat.png');
width: 114px;
height: 90px;
}
.head_armoire_fiddlersCap { .head_armoire_fiddlersCap {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_fiddlersCap.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_fiddlersCap.png');
width: 114px; width: 114px;
@@ -19175,6 +19215,11 @@
width: 114px; width: 114px;
height: 87px; height: 87px;
} }
.shield_armoire_treasureMap {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_treasureMap.png');
width: 114px;
height: 90px;
}
.shield_armoire_trustyUmbrella { .shield_armoire_trustyUmbrella {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_trustyUmbrella.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_trustyUmbrella.png');
width: 114px; width: 114px;
@@ -19325,6 +19370,11 @@
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.shop_armor_armoire_fancyPirateSuit {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_fancyPirateSuit.png');
width: 68px;
height: 68px;
}
.shop_armor_armoire_farrierOutfit { .shop_armor_armoire_farrierOutfit {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_farrierOutfit.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_farrierOutfit.png');
width: 68px; width: 68px;
@@ -19785,6 +19835,11 @@
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.shop_head_armoire_fancyPirateHat {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_armoire_fancyPirateHat.png');
width: 68px;
height: 68px;
}
.shop_head_armoire_fiddlersCap { .shop_head_armoire_fiddlersCap {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_armoire_fiddlersCap.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_armoire_fiddlersCap.png');
width: 68px; width: 68px;
@@ -20370,6 +20425,11 @@
width: 68px; width: 68px;
height: 68px; height: 68px;
} }
.shop_shield_armoire_treasureMap {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_treasureMap.png');
width: 68px;
height: 68px;
}
.shop_shield_armoire_trustyUmbrella { .shop_shield_armoire_trustyUmbrella {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_trustyUmbrella.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_trustyUmbrella.png');
width: 68px; width: 68px;
@@ -20960,6 +21020,11 @@
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.slim_armor_armoire_fancyPirateSuit {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_fancyPirateSuit.png');
width: 114px;
height: 90px;
}
.slim_armor_armoire_farrierOutfit { .slim_armor_armoire_farrierOutfit {
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_farrierOutfit.png'); background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_farrierOutfit.png');
width: 90px; width: 90px;

View File

@@ -4,7 +4,7 @@
:class="{ condensed, expanded, 'd-flex': isHeader, row: !isHeader, }" :class="{ condensed, expanded, 'd-flex': isHeader, row: !isHeader, }"
@click="showMemberModal(member)" @click="showMemberModal(member)"
> >
<div :class="{ 'col-4': !isHeader }"> <div class="avatar-container" :class="{ 'col-4': !isHeader }">
<avatar <avatar
:member="member" :member="member"
:hide-class-badge="classBadgePosition !== 'under-avatar'" :hide-class-badge="classBadgePosition !== 'under-avatar'"
@@ -92,6 +92,10 @@
.member-details { .member-details {
white-space: nowrap; white-space: nowrap;
transition: all 0.15s ease-out; transition: all 0.15s ease-out;
.avatar-container {
margin-bottom: 20px;
}
} }
.member-stats { .member-stats {

View File

@@ -739,6 +739,14 @@ export default {
} else if (attribute === 'email') { } else if (attribute === 'email') {
this.user.auth.local.email = updates.newEmail; this.user.auth.local.email = updates.newEmail;
window.alert(this.$t('emailSuccess')); // eslint-disable-line no-alert window.alert(this.$t('emailSuccess')); // eslint-disable-line no-alert
} else if (attribute === 'password') {
this.passwordUpdates = {};
this.$store.dispatch('snackbars:add', {
title: 'Habitica',
text: this.$t('passwordSuccess'),
type: 'success',
timeout: true,
});
} }
}, },
async changeDisplayName (newName) { async changeDisplayName (newName) {

View File

@@ -126,7 +126,7 @@
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-12 col-md-6 offset-md-3 text-center nav"> <div class="text-center nav">
<div <div
class="nav-item" class="nav-item"
:class="{active: selectedPage === 'profile'}" :class="{active: selectedPage === 'profile'}"
@@ -470,6 +470,7 @@
.gift-icon svg { .gift-icon svg {
height: 14px; height: 14px;
} }
</style> </style>
<style lang="scss" scoped> <style lang="scss" scoped>
@@ -538,6 +539,7 @@
} }
.nav { .nav {
width: 100%;
font-weight: bold; font-weight: bold;
min-height: 40px; min-height: 40px;
justify-content: center; justify-content: center;
@@ -710,6 +712,27 @@
} }
} }
} }
@media (max-width: 990px) {
.profile-actions {
flex-direction: column;
}
.profile-actions :not(:last-child) {
margin-bottom: 15px;
}
.profile-actions {
margin-right: 0;
}
}
@media (max-width: 550px) {
.member-details {
flex-direction: column;
}
.member-details .avatar {
margin-bottom: 15px;
}
}
</style> </style>
<script> <script>

View File

@@ -4,7 +4,7 @@
class="standard-page" class="standard-page"
> >
<div class="row"> <div class="row">
<div class="col-12 col-md-6"> <div class="stats-section-equipment col-12 col-md-6">
<h2 class="text-center"> <h2 class="text-center">
{{ $t('equipment') }} {{ $t('equipment') }}
</h2> </h2>
@@ -12,7 +12,7 @@
<div <div
v-for="(label, key) in equipTypes" v-for="(label, key) in equipTypes"
:key="key" :key="key"
class="col-12 col-md-4 item-wrapper" class="item-wrapper"
> >
<div <div
v-if="label !== 'skip'" v-if="label !== 'skip'"
@@ -48,7 +48,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-12 col-md-6"> <div class="stats-section-costume col-12 col-md-6">
<h2 class="text-center"> <h2 class="text-center">
{{ $t('costume') }} {{ $t('costume') }}
</h2> </h2>
@@ -57,7 +57,7 @@
<div <div
v-for="(label, key) in equipTypes" v-for="(label, key) in equipTypes"
:key="key" :key="key"
class="col-12 col-md-4 item-wrapper" class="item-wrapper"
> >
<!-- Append a "C" to the key name since HTML IDs have to be unique.--> <!-- Append a "C" to the key name since HTML IDs have to be unique.-->
<div <div
@@ -111,7 +111,7 @@
</div> </div>
</div> </div>
<div class="row pet-mount-row"> <div class="row pet-mount-row">
<div class="col-12 col-md-6"> <div class="stats-section-pets col-12 col-md-6">
<h2 <h2
v-once v-once
class="text-center" class="text-center"
@@ -119,8 +119,7 @@
{{ $t('pets') }} {{ $t('pets') }}
</h2> </h2>
<div class="well pet-mount-well"> <div class="well pet-mount-well">
<div class="row col-12"> <div class="pet-mount-well-image">
<div class="col-12 col-md-4">
<div <div
class="box" class="box"
:class="{white: user.items.currentPet}" :class="{white: user.items.currentPet}"
@@ -131,7 +130,7 @@
></div> ></div>
</div> </div>
</div> </div>
<div class="col-12 col-md-8"> <div class="pet-mount-well-text">
<div>{{ formatAnimal(user.items.currentPet, 'pet') }}</div> <div>{{ formatAnimal(user.items.currentPet, 'pet') }}</div>
<div> <div>
<strong>{{ $t('petsFound') }}:</strong> <strong>{{ $t('petsFound') }}:</strong>
@@ -142,10 +141,9 @@
{{ beastMasterProgress(user.items.pets) }} {{ beastMasterProgress(user.items.pets) }}
</div> </div>
</div> </div>
</div>
</div> </div>
</div> </div>
<div class="col-12 col-md-6"> <div class="stats-section-mounts col-12 col-md-6">
<h2 <h2
v-once v-once
class="text-center" class="text-center"
@@ -153,28 +151,26 @@
{{ $t('mounts') }} {{ $t('mounts') }}
</h2> </h2>
<div class="well pet-mount-well"> <div class="well pet-mount-well">
<div class="row col-12"> <div class="pet-mount-well-image">
<div class="col-12 col-md-4"> <div
class="box"
:class="{white: user.items.currentMount}"
>
<div <div
class="box" class="mount"
:class="{white: user.items.currentMount}" :class="`Mount_Icon_${user.items.currentMount}`"
> ></div>
<div
class="mount"
:class="`Mount_Icon_${user.items.currentMount}`"
></div>
</div>
</div> </div>
<div class="col-12 col-md-8"> </div>
<div>{{ formatAnimal(user.items.currentMount, 'mount') }}</div> <div class="pet-mount-well-text">
<div> <div>{{ formatAnimal(user.items.currentMount, 'mount') }}</div>
<strong>{{ $t('mountsTamed') }}:</strong> <div>
<span>{{ totalCount(user.items.mounts) }}</span> <strong>{{ $t('mountsTamed') }}:</strong>
</div> <span>{{ totalCount(user.items.mounts) }}</span>
<div> </div>
<strong>{{ $t('mountMasterProgress') }}:</strong> <div>
<span>{{ mountMasterProgress(user.items.mounts) }}</span> <strong>{{ $t('mountMasterProgress') }}:</strong>
</div> <span>{{ mountMasterProgress(user.items.mounts) }}</span>
</div> </div>
</div> </div>
</div> </div>
@@ -309,15 +305,13 @@
v-if="showStatsSave" v-if="showStatsSave"
class="row save-row" class="row save-row"
> >
<div class="col-12 col-md-6 offset-md-3 text-center"> <button
<button class="btn btn-primary"
class="btn btn-primary" :disabled="loading"
:disabled="loading" @click="saveAttributes()"
@click="saveAttributes()" >
> {{ loading ? $t('loading') : $t('save') }}
{{ loading ? $t('loading') : $t('save') }} </button>
</button>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -650,10 +644,17 @@ export default {
border-radius: 2px; border-radius: 2px;
padding: 0.4em; padding: 0.4em;
padding-top: 1em; padding-top: 1em;
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 15px;
} }
.well.pet-mount-well { .well.pet-mount-well {
padding-left: 15px;
padding-bottom: 1em; padding-bottom: 1em;
flex-wrap: nowrap;
justify-content: flex-start;
strong { strong {
margin-right: .2em; margin-right: .2em;
@@ -690,12 +691,13 @@ export default {
} }
.save-row { .save-row {
margin-top: 1em; margin: 2em 0 1em 0;
justify-content: center;
} }
.gear.box { .gear.box {
vertical-align: top; vertical-align: top;
margin: 0 auto; // margin: 0 auto;
} }
.gear-label { .gear-label {
@@ -721,4 +723,34 @@ export default {
// breaks the long words without a space // breaks the long words without a space
word-break: break-word; word-break: break-word;
} }
@media (max-width: 850px) {
#stats .col-md-6 {
flex: none;
max-width: 100%;
}
}
@media(max-width: 990px) {
.modal-body #stats .col-md-6 {
flex: none;
max-width: 100%;
}
[class^="stats-section-"] {
margin-bottom: 30px;
}
#allocation {
.box {
width: 100%;
height: 100%;
.col-9 {
padding: 0;
margin: 0;
}
.col-9 div:first-child {
font-size: 13px;
}
}
}
}
</style> </style>

View File

@@ -795,6 +795,14 @@
"backgroundSailboatAtSunsetText": "Sailboat At Sunset", "backgroundSailboatAtSunsetText": "Sailboat At Sunset",
"backgroundSailboatAtSunsetNotes": "Enjoy the beauty of a sailboat at sunset.", "backgroundSailboatAtSunsetNotes": "Enjoy the beauty of a sailboat at sunset.",
"backgrounds072022": "SET 98: Released July 2022",
"backgroundBioluminescentWavesText": "Bioluminescent Waves",
"backgroundBioluminescentWavesNotes": "Admire the glow of Bioluminescent Waves.",
"backgroundUnderwaterCaveText": "Underwater Cave",
"backgroundUnderwaterCaveNotes": "Explore an Underwater Cave.",
"backgroundUnderwaterStatuesText": "Underwater Statue Garden",
"backgroundUnderwaterStatuesNotes": "Try not to blink in an Underwater Statue Garden.",
"timeTravelBackgrounds": "Steampunk Backgrounds", "timeTravelBackgrounds": "Steampunk Backgrounds",
"backgroundAirshipText": "Airship", "backgroundAirshipText": "Airship",
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.", "backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",

View File

@@ -1362,6 +1362,8 @@
"armorArmoireGardenersOverallsNotes": "Dont be afraid to work down in the dirt when youre wearing these durable overalls. Increases Constitution by <%= con %>. Enchanted Armoire: Gardener Set (Item 1 of 4).", "armorArmoireGardenersOverallsNotes": "Dont be afraid to work down in the dirt when youre wearing these durable overalls. Increases Constitution by <%= con %>. Enchanted Armoire: Gardener Set (Item 1 of 4).",
"armorArmoireStrawRaincoatText": "Straw Raincoat", "armorArmoireStrawRaincoatText": "Straw Raincoat",
"armorArmoireStrawRaincoatNotes": "This woven straw cape will keep you dry and your armor from rusting while on your quest. Just dont venture too near a candle! Increases Constitution by <%= con %>. Enchanted Armoire: Straw Raincoat Set (Item 1 of 2).", "armorArmoireStrawRaincoatNotes": "This woven straw cape will keep you dry and your armor from rusting while on your quest. Just dont venture too near a candle! Increases Constitution by <%= con %>. Enchanted Armoire: Straw Raincoat Set (Item 1 of 2).",
"armorArmoireFancyPirateSuitText": "Fancy Pirate Jacket",
"armorArmoireFancyPirateSuitNotes": "Wear this fine jacket well as you organize your ships library or talk it through as a crew. Increases Constitution and Intelligence by <%= attrs %> each. Enchanted Armoire: Fancy Pirate Set (Item 1 of 3).",
"headgear": "helm", "headgear": "helm",
"headgearCapitalized": "Headgear", "headgearCapitalized": "Headgear",
@@ -2095,6 +2097,8 @@
"headArmoireGardenersSunHatNotes": "The bright light of the day star wont shine in your eyes when you wear this wide-brimmed hat. Increases Perception by <%= per %>. Enchanted Armoire: Gardener Set (Item 2 of 4).", "headArmoireGardenersSunHatNotes": "The bright light of the day star wont shine in your eyes when you wear this wide-brimmed hat. Increases Perception by <%= per %>. Enchanted Armoire: Gardener Set (Item 2 of 4).",
"headArmoireStrawRainHatText": "Straw Rain Hat", "headArmoireStrawRainHatText": "Straw Rain Hat",
"headArmoireStrawRainHatNotes": "Youll be able to spot every obstacle in your path when you wear this water-resistant, conical hat. Increases Perception by <%= per %>. Enchanted Armoire: Straw Raincoat Set (Item 2 of 2).", "headArmoireStrawRainHatNotes": "Youll be able to spot every obstacle in your path when you wear this water-resistant, conical hat. Increases Perception by <%= per %>. Enchanted Armoire: Straw Raincoat Set (Item 2 of 2).",
"headArmoireFancyPirateHatText": "Fancy Pirate Hat",
"headArmoireFancyPirateHatNotes": "Be protected from the sun and any seagulls flying overhead as you drink tea on the deck of your ship. Increases Perception by <%= per %>. Enchanted Armoire: Fancy Pirate Set (Item 2 of 3).",
"offhand": "off-hand item", "offhand": "off-hand item",
"offHandCapitalized": "Off-Hand Item", "offHandCapitalized": "Off-Hand Item",
@@ -2481,6 +2485,8 @@
"shieldArmoireSpanishGuitarNotes": "Tink! Tink! Thrummm! Gather your party for a concert or celebration by playing this guitar. Increases Perception by <%= per %> and Intelligence by <%= int %>. Enchanted Armoire: Musical Instrument Set 1 (Item 2 of 3)", "shieldArmoireSpanishGuitarNotes": "Tink! Tink! Thrummm! Gather your party for a concert or celebration by playing this guitar. Increases Perception by <%= per %> and Intelligence by <%= int %>. Enchanted Armoire: Musical Instrument Set 1 (Item 2 of 3)",
"shieldArmoireSnareDrumText": "Snare Drum", "shieldArmoireSnareDrumText": "Snare Drum",
"shieldArmoireSnareDrumNotes": "Rat-a-tat-tat! Gather your party for a parade or march into battle by playing this drum. Increases Constitution by <%= con %> and Intelligence by <%= int %>. Enchanted Armoire: Musical Instrument Set 1 (Item 3 of 3)", "shieldArmoireSnareDrumNotes": "Rat-a-tat-tat! Gather your party for a parade or march into battle by playing this drum. Increases Constitution by <%= con %> and Intelligence by <%= int %>. Enchanted Armoire: Musical Instrument Set 1 (Item 3 of 3)",
"shieldArmoireTreasureMapText": "Treasure Map",
"shieldArmoireTreasureMapNotes": "X marks the spot! You never know what youll find when you follow this handy map to fabled treasures: gold, jewels, relics, or perhaps a petrified orange? Increases Strength and Intelligence by <%= attrs %> each. Enchanted Armoire: Fancy Pirate Set (Item 3 of 3).",
"back": "Back Accessory", "back": "Back Accessory",
"backBase0Text": "No Back Accessory", "backBase0Text": "No Back Accessory",

View File

@@ -87,6 +87,7 @@
"passwordChangeSuccess": "Your password was successfully changed to the one you just chose. You can now use it to access your account.", "passwordChangeSuccess": "Your password was successfully changed to the one you just chose. You can now use it to access your account.",
"displayNameSuccess": "Display name successfully changed", "displayNameSuccess": "Display name successfully changed",
"emailSuccess": "Email successfully changed", "emailSuccess": "Email successfully changed",
"passwordSuccess": "Password successfully changed",
"detachSocial": "De-register <%= network %>", "detachSocial": "De-register <%= network %>",
"detachedSocial": "Successfully removed <%= network %> authentication from your account", "detachedSocial": "Successfully removed <%= network %> authentication from your account",
"addedLocalAuth": "Successfully added local authentication", "addedLocalAuth": "Successfully added local authentication",

View File

@@ -505,6 +505,11 @@ const backgrounds = {
mountain_waterfall: { }, mountain_waterfall: { },
sailboat_at_sunset: { }, sailboat_at_sunset: { },
}, },
backgrounds072022: {
bioluminescent_waves: { },
underwater_cave: { },
underwater_statues: { },
},
timeTravelBackgrounds: { timeTravelBackgrounds: {
airship: { airship: {
price: 1, price: 1,

View File

@@ -396,6 +396,11 @@ const armor = {
con: 9, con: 9,
set: 'strawRaincoat', set: 'strawRaincoat',
}, },
fancyPirateSuit: {
con: 4,
int: 4,
set: 'fancyPirate',
},
}; };
const body = { const body = {
@@ -803,6 +808,10 @@ const head = {
per: 9, per: 9,
set: 'strawRaincoat', set: 'strawRaincoat',
}, },
fancyPirateHat: {
per: 8,
set: 'fancyPirate',
},
}; };
const shield = { const shield = {
@@ -1086,6 +1095,11 @@ const shield = {
int: 6, int: 6,
set: 'musicalInstrumentOne', set: 'musicalInstrumentOne',
}, },
treasureMap: {
int: 4,
str: 4,
set: 'fancyPirate',
},
}; };
const headAccessory = { const headAccessory = {

View File

@@ -398,7 +398,7 @@ spells.special = {
target: 'user', target: 'user',
notes: t('spellSpecialSeafoamNotes'), notes: t('spellSpecialSeafoamNotes'),
canOwn () { canOwn () {
return moment().isBetween('2021-07-06T08:00-04:00', EVENTS.summer2021.end); return moment().isBetween('2022-07-12T08:00-04:00', EVENTS.summer2022.end);
}, },
cast (user, target, req) { cast (user, target, req) {
if (!user.items.special.seafoam) throw new NotAuthorized(t('spellNotOwned')(req.language)); if (!user.items.special.seafoam) throw new NotAuthorized(t('spellNotOwned')(req.language));