Compare commits
60 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3b8a9d59b1 | |||
| f2cfc2744d | |||
| e2fd6a72c2 | |||
| 60ea8e48a8 | |||
| e74a3f84f5 | |||
| fbc0ccfab1 | |||
| c299e2e4d3 | |||
| 685ba1286e | |||
| 741ddd9006 | |||
| 5986d0ea02 | |||
| 831cce65e2 | |||
| 64c732e991 | |||
| 391a9bd91b | |||
| a1cddcaf17 | |||
| c37dac5568 | |||
| 9e0e805d35 | |||
| a174b218bd | |||
| 67fdb4dcb3 | |||
| ecc04c6a69 | |||
| 21367f418e | |||
| 16508f934b | |||
| e387f2f782 | |||
| 429810f50f | |||
| fcd5c38460 | |||
| 042ae6e228 | |||
| a21e914f86 | |||
| d46e7f8aff | |||
| 6e9cf80079 | |||
| 60843e6afa | |||
| 9c281b8010 | |||
| 775730ff02 | |||
| 409f3bfa27 | |||
| c425f85378 | |||
| 59fa547e20 | |||
| 389768d9e3 | |||
| 938cda1fcf | |||
| 495b34124d | |||
| af9a12bb20 | |||
| 9e1e4248a5 | |||
| 8b4074015f | |||
| 94d666e8b9 | |||
| 1e8222af15 | |||
| de89032491 | |||
| 7a67d87ce1 | |||
| 90a1fabcdf | |||
| caac438858 | |||
| a193bd4b7a | |||
| d995a7484b | |||
| 445f0cc117 | |||
| 5f3336f3d5 | |||
| 1a58e3f8a1 | |||
| 4c657f43de | |||
| f752f7a80d | |||
| 07c906c557 | |||
| b2f7d994f0 | |||
| a814fe8581 | |||
| 2e41576fa2 | |||
| f7db8fc721 | |||
| 75b6d6e11a | |||
| a294b404ac |
@@ -1,5 +1,6 @@
|
||||
.DS_Store
|
||||
website/build
|
||||
website/raw_sprites/spritesmith
|
||||
website/transpiled-babel/
|
||||
website/common/transpiled-babel/
|
||||
node_modules
|
||||
|
||||
@@ -131,8 +131,8 @@ gulp.task('sprites:clean', done => {
|
||||
clean(`${IMG_DIST_PATH}spritesmith*,${CSS_DIST_PATH}spritesmith*}`, done);
|
||||
});
|
||||
|
||||
gulp.task('sprites:checkCompiledDimensions', gulp.series('sprites:main', 'sprites:largeSprites', done => {
|
||||
console.log('Verifiying that images do not exceed max dimensions'); // eslint-disable-line no-console
|
||||
gulp.task('sprites:checkCompiledDimensions', gulp.series('sprites:main', done => {
|
||||
console.log('Verifying that images do not exceed max dimensions'); // eslint-disable-line no-console
|
||||
|
||||
let numberOfSheetsThatAreTooBig = 0;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "habitica",
|
||||
"version": "4.214.0",
|
||||
"version": "4.215.1",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -13,9 +13,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/compat-data": {
|
||||
"version": "7.16.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz",
|
||||
"integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew=="
|
||||
"version": "7.16.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz",
|
||||
"integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q=="
|
||||
},
|
||||
"@babel/core": {
|
||||
"version": "7.16.0",
|
||||
@@ -265,16 +265,33 @@
|
||||
}
|
||||
},
|
||||
"@babel/helper-compilation-targets": {
|
||||
"version": "7.16.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz",
|
||||
"integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==",
|
||||
"version": "7.16.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz",
|
||||
"integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==",
|
||||
"requires": {
|
||||
"@babel/compat-data": "^7.16.0",
|
||||
"@babel/helper-validator-option": "^7.14.5",
|
||||
"browserslist": "^4.16.6",
|
||||
"browserslist": "^4.17.5",
|
||||
"semver": "^6.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"browserslist": {
|
||||
"version": "4.18.1",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz",
|
||||
"integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==",
|
||||
"requires": {
|
||||
"caniuse-lite": "^1.0.30001280",
|
||||
"electron-to-chromium": "^1.3.896",
|
||||
"escalade": "^3.1.1",
|
||||
"node-releases": "^2.0.1",
|
||||
"picocolors": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30001282",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz",
|
||||
"integrity": "sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
@@ -305,9 +322,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/helper-define-polyfill-provider": {
|
||||
"version": "0.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz",
|
||||
"integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==",
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz",
|
||||
"integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==",
|
||||
"requires": {
|
||||
"@babel/helper-compilation-targets": "^7.13.0",
|
||||
"@babel/helper-module-imports": "^7.12.13",
|
||||
@@ -412,9 +429,9 @@
|
||||
"integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ=="
|
||||
},
|
||||
"@babel/helper-remap-async-to-generator": {
|
||||
"version": "7.16.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.0.tgz",
|
||||
"integrity": "sha512-MLM1IOMe9aQBqMWxcRw8dcb9jlM86NIw7KA0Wri91Xkfied+dE0QuBFSBjMNvqzmS0OSIDsMNC24dBEkPUi7ew==",
|
||||
"version": "7.16.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz",
|
||||
"integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==",
|
||||
"requires": {
|
||||
"@babel/helper-annotate-as-pure": "^7.16.0",
|
||||
"@babel/helper-wrap-function": "^7.16.0",
|
||||
@@ -629,9 +646,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.16.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz",
|
||||
"integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw=="
|
||||
"version": "7.16.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz",
|
||||
"integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng=="
|
||||
},
|
||||
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
|
||||
"version": "7.16.2",
|
||||
@@ -652,12 +669,12 @@
|
||||
}
|
||||
},
|
||||
"@babel/plugin-proposal-async-generator-functions": {
|
||||
"version": "7.16.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.0.tgz",
|
||||
"integrity": "sha512-nyYmIo7ZqKsY6P4lnVmBlxp9B3a96CscbLotlsNuktMHahkDwoPYEjXrZHU0Tj844Z9f1IthVxQln57mhkcExw==",
|
||||
"version": "7.16.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz",
|
||||
"integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==",
|
||||
"requires": {
|
||||
"@babel/helper-plugin-utils": "^7.14.5",
|
||||
"@babel/helper-remap-async-to-generator": "^7.16.0",
|
||||
"@babel/helper-remap-async-to-generator": "^7.16.4",
|
||||
"@babel/plugin-syntax-async-generators": "^7.8.4"
|
||||
}
|
||||
},
|
||||
@@ -1104,9 +1121,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-parameters": {
|
||||
"version": "7.16.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.0.tgz",
|
||||
"integrity": "sha512-XgnQEm1CevKROPx+udOi/8f8TiGhrUWiHiaUCIp47tE0tpFDjzXNTZc9E5CmCwxNjXTWEVqvRfWZYOTFvMa/ZQ==",
|
||||
"version": "7.16.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz",
|
||||
"integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==",
|
||||
"requires": {
|
||||
"@babel/helper-plugin-utils": "^7.14.5"
|
||||
}
|
||||
@@ -1194,17 +1211,17 @@
|
||||
}
|
||||
},
|
||||
"@babel/preset-env": {
|
||||
"version": "7.16.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.0.tgz",
|
||||
"integrity": "sha512-cdTu/W0IrviamtnZiTfixPfIncr2M1VqRrkjzZWlr1B4TVYimCFK5jkyOdP4qw2MrlKHi+b3ORj6x8GoCew8Dg==",
|
||||
"version": "7.16.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz",
|
||||
"integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==",
|
||||
"requires": {
|
||||
"@babel/compat-data": "^7.16.0",
|
||||
"@babel/helper-compilation-targets": "^7.16.0",
|
||||
"@babel/compat-data": "^7.16.4",
|
||||
"@babel/helper-compilation-targets": "^7.16.3",
|
||||
"@babel/helper-plugin-utils": "^7.14.5",
|
||||
"@babel/helper-validator-option": "^7.14.5",
|
||||
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.0",
|
||||
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2",
|
||||
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0",
|
||||
"@babel/plugin-proposal-async-generator-functions": "^7.16.0",
|
||||
"@babel/plugin-proposal-async-generator-functions": "^7.16.4",
|
||||
"@babel/plugin-proposal-class-properties": "^7.16.0",
|
||||
"@babel/plugin-proposal-class-static-block": "^7.16.0",
|
||||
"@babel/plugin-proposal-dynamic-import": "^7.16.0",
|
||||
@@ -1254,7 +1271,7 @@
|
||||
"@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0",
|
||||
"@babel/plugin-transform-new-target": "^7.16.0",
|
||||
"@babel/plugin-transform-object-super": "^7.16.0",
|
||||
"@babel/plugin-transform-parameters": "^7.16.0",
|
||||
"@babel/plugin-transform-parameters": "^7.16.3",
|
||||
"@babel/plugin-transform-property-literals": "^7.16.0",
|
||||
"@babel/plugin-transform-regenerator": "^7.16.0",
|
||||
"@babel/plugin-transform-reserved-words": "^7.16.0",
|
||||
@@ -1267,10 +1284,10 @@
|
||||
"@babel/plugin-transform-unicode-regex": "^7.16.0",
|
||||
"@babel/preset-modules": "^0.1.5",
|
||||
"@babel/types": "^7.16.0",
|
||||
"babel-plugin-polyfill-corejs2": "^0.2.3",
|
||||
"babel-plugin-polyfill-corejs3": "^0.3.0",
|
||||
"babel-plugin-polyfill-regenerator": "^0.2.3",
|
||||
"core-js-compat": "^3.19.0",
|
||||
"babel-plugin-polyfill-corejs2": "^0.3.0",
|
||||
"babel-plugin-polyfill-corejs3": "^0.4.0",
|
||||
"babel-plugin-polyfill-regenerator": "^0.3.0",
|
||||
"core-js-compat": "^3.19.1",
|
||||
"semver": "^6.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -1306,9 +1323,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/runtime": {
|
||||
"version": "7.16.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz",
|
||||
"integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==",
|
||||
"version": "7.16.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz",
|
||||
"integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==",
|
||||
"requires": {
|
||||
"regenerator-runtime": "^0.13.4"
|
||||
}
|
||||
@@ -1359,16 +1376,16 @@
|
||||
}
|
||||
},
|
||||
"@babel/traverse": {
|
||||
"version": "7.16.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz",
|
||||
"integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==",
|
||||
"version": "7.16.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz",
|
||||
"integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.16.0",
|
||||
"@babel/generator": "^7.16.0",
|
||||
"@babel/helper-function-name": "^7.16.0",
|
||||
"@babel/helper-hoist-variables": "^7.16.0",
|
||||
"@babel/helper-split-export-declaration": "^7.16.0",
|
||||
"@babel/parser": "^7.16.0",
|
||||
"@babel/parser": "^7.16.3",
|
||||
"@babel/types": "^7.16.0",
|
||||
"debug": "^4.1.0",
|
||||
"globals": "^11.1.0"
|
||||
@@ -1441,9 +1458,9 @@
|
||||
"integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA=="
|
||||
},
|
||||
"@google-cloud/common": {
|
||||
"version": "3.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.7.1.tgz",
|
||||
"integrity": "sha512-BJfcV5BShbunYcn5HniebXLVp2Y6fpuesNegyar5CG8H2AKYHlKxnVID+FSwy92WAW4N2lpGdvxRsmiAn8Fc3w==",
|
||||
"version": "3.8.1",
|
||||
"resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-3.8.1.tgz",
|
||||
"integrity": "sha512-FOs3NFU6bDt5mXE7IFpwIeqzLwRZNu9lJYl+bHVNkwmxX/w4VyDZAiGjQHhpV1Ek+muNKlX8HPchxaIxNTuOhw==",
|
||||
"requires": {
|
||||
"@google-cloud/projectify": "^2.0.0",
|
||||
"@google-cloud/promisify": "^2.0.0",
|
||||
@@ -1451,25 +1468,25 @@
|
||||
"duplexify": "^4.1.1",
|
||||
"ent": "^2.2.0",
|
||||
"extend": "^3.0.2",
|
||||
"google-auth-library": "^7.0.2",
|
||||
"google-auth-library": "^7.9.2",
|
||||
"retry-request": "^4.2.2",
|
||||
"teeny-request": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"@google-cloud/projectify": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.0.tgz",
|
||||
"integrity": "sha512-qbpidP/fOvQNz3nyabaVnZqcED1NNzf7qfeOlgtAZd9knTwY+KtsGRkYpiQzcATABy4gnGP2lousM3S0nuWVzA=="
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz",
|
||||
"integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ=="
|
||||
},
|
||||
"@google-cloud/promisify": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.3.tgz",
|
||||
"integrity": "sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw=="
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz",
|
||||
"integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA=="
|
||||
},
|
||||
"@google-cloud/trace-agent": {
|
||||
"version": "5.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@google-cloud/trace-agent/-/trace-agent-5.1.5.tgz",
|
||||
"integrity": "sha512-8Mrspg9nebd1VA4xC+XQTBBY3PV3SoUR70CHc3waN9lZskrCQO0Ha50VamhtUx8gUMgUK8ANed5EsF8rv+jY4Q==",
|
||||
"version": "5.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@google-cloud/trace-agent/-/trace-agent-5.1.6.tgz",
|
||||
"integrity": "sha512-TLZwbR9WYx/wNhJv6PcbKEuHZpArUG1WtaPLwjxRJeTVNDV2gOsDVDihbezCyyOcHxU3kXCewB5y2BA1pP0mIg==",
|
||||
"requires": {
|
||||
"@google-cloud/common": "^3.0.0",
|
||||
"@opencensus/propagation-stackdriver": "0.1.0",
|
||||
@@ -1703,9 +1720,9 @@
|
||||
}
|
||||
},
|
||||
"@tootallnate/once": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
|
||||
"integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
|
||||
"integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A=="
|
||||
},
|
||||
"@types/body-parser": {
|
||||
"version": "1.19.1",
|
||||
@@ -2982,12 +2999,12 @@
|
||||
}
|
||||
},
|
||||
"babel-plugin-polyfill-corejs2": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz",
|
||||
"integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==",
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz",
|
||||
"integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==",
|
||||
"requires": {
|
||||
"@babel/compat-data": "^7.13.11",
|
||||
"@babel/helper-define-polyfill-provider": "^0.2.4",
|
||||
"@babel/helper-define-polyfill-provider": "^0.3.0",
|
||||
"semver": "^6.1.1"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -2999,20 +3016,20 @@
|
||||
}
|
||||
},
|
||||
"babel-plugin-polyfill-corejs3": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.3.0.tgz",
|
||||
"integrity": "sha512-JLwi9vloVdXLjzACL80j24bG6/T1gYxwowG44dg6HN/7aTPdyPbJJidf6ajoA3RPHHtW0j9KMrSOLpIZpAnPpg==",
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz",
|
||||
"integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==",
|
||||
"requires": {
|
||||
"@babel/helper-define-polyfill-provider": "^0.2.4",
|
||||
"@babel/helper-define-polyfill-provider": "^0.3.0",
|
||||
"core-js-compat": "^3.18.0"
|
||||
}
|
||||
},
|
||||
"babel-plugin-polyfill-regenerator": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz",
|
||||
"integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==",
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz",
|
||||
"integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==",
|
||||
"requires": {
|
||||
"@babel/helper-define-polyfill-provider": "^0.2.4"
|
||||
"@babel/helper-define-polyfill-provider": "^0.3.0"
|
||||
}
|
||||
},
|
||||
"babel-runtime": {
|
||||
@@ -3641,20 +3658,20 @@
|
||||
"integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
|
||||
},
|
||||
"body-parser": {
|
||||
"version": "1.19.0",
|
||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
|
||||
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
|
||||
"version": "1.19.1",
|
||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz",
|
||||
"integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==",
|
||||
"requires": {
|
||||
"bytes": "3.1.0",
|
||||
"bytes": "3.1.1",
|
||||
"content-type": "~1.0.4",
|
||||
"debug": "2.6.9",
|
||||
"depd": "~1.1.2",
|
||||
"http-errors": "1.7.2",
|
||||
"http-errors": "1.8.1",
|
||||
"iconv-lite": "0.4.24",
|
||||
"on-finished": "~2.3.0",
|
||||
"qs": "6.7.0",
|
||||
"raw-body": "2.4.0",
|
||||
"type-is": "~1.6.17"
|
||||
"qs": "6.9.6",
|
||||
"raw-body": "2.4.2",
|
||||
"type-is": "~1.6.18"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
@@ -3665,6 +3682,18 @@
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"http-errors": {
|
||||
"version": "1.8.1",
|
||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
|
||||
"integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
|
||||
"requires": {
|
||||
"depd": "~1.1.2",
|
||||
"inherits": "2.0.4",
|
||||
"setprototypeof": "1.2.0",
|
||||
"statuses": ">= 1.5.0 < 2",
|
||||
"toidentifier": "1.0.1"
|
||||
}
|
||||
},
|
||||
"iconv-lite": {
|
||||
"version": "0.4.24",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||
@@ -3679,9 +3708,19 @@
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
},
|
||||
"qs": {
|
||||
"version": "6.7.0",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
|
||||
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
|
||||
"version": "6.9.6",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz",
|
||||
"integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ=="
|
||||
},
|
||||
"setprototypeof": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
||||
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
||||
},
|
||||
"toidentifier": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
|
||||
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -3869,9 +3908,9 @@
|
||||
"integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA=="
|
||||
},
|
||||
"bytes": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
|
||||
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
|
||||
"integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg=="
|
||||
},
|
||||
"cache-base": {
|
||||
"version": "1.0.1",
|
||||
@@ -4680,21 +4719,21 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"browserslist": {
|
||||
"version": "4.17.6",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz",
|
||||
"integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==",
|
||||
"version": "4.18.1",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz",
|
||||
"integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==",
|
||||
"requires": {
|
||||
"caniuse-lite": "^1.0.30001274",
|
||||
"electron-to-chromium": "^1.3.886",
|
||||
"caniuse-lite": "^1.0.30001280",
|
||||
"electron-to-chromium": "^1.3.896",
|
||||
"escalade": "^3.1.1",
|
||||
"node-releases": "^2.0.1",
|
||||
"picocolors": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30001277",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001277.tgz",
|
||||
"integrity": "sha512-J2WtYj2Pl6LBEG214XmbGw1gzZEsYuinQFPqYtpZDB3/vm49qNlrcbJrTMkHKmdRDdmXYwkG0tgOBJsuI+J12Q=="
|
||||
"version": "1.0.30001282",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz",
|
||||
"integrity": "sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "7.0.0",
|
||||
@@ -5450,9 +5489,9 @@
|
||||
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
|
||||
},
|
||||
"electron-to-chromium": {
|
||||
"version": "1.3.889",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.889.tgz",
|
||||
"integrity": "sha512-suEUoPTD1mExjL9TdmH7cvEiWJVM2oEiAi+Y1p0QKxI2HcRlT44qDTP2c1aZmVwRemIPYOpxmV7CxQCOWcm4XQ=="
|
||||
"version": "1.3.905",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.905.tgz",
|
||||
"integrity": "sha512-jTjkycBMCCMk86PAucHtqicZ6dKlgPw+gAXMI9xxH5ua0+60dH+PVR7efwQMqCOQxmhHSo4aF4f37Idb5XBAcA=="
|
||||
},
|
||||
"emitter-listener": {
|
||||
"version": "1.1.2",
|
||||
@@ -6407,6 +6446,28 @@
|
||||
"vary": "~1.1.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"body-parser": {
|
||||
"version": "1.19.0",
|
||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
|
||||
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
|
||||
"requires": {
|
||||
"bytes": "3.1.0",
|
||||
"content-type": "~1.0.4",
|
||||
"debug": "2.6.9",
|
||||
"depd": "~1.1.2",
|
||||
"http-errors": "1.7.2",
|
||||
"iconv-lite": "0.4.24",
|
||||
"on-finished": "~2.3.0",
|
||||
"qs": "6.7.0",
|
||||
"raw-body": "2.4.0",
|
||||
"type-is": "~1.6.17"
|
||||
}
|
||||
},
|
||||
"bytes": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
|
||||
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
|
||||
},
|
||||
"debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||
@@ -6415,6 +6476,14 @@
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"iconv-lite": {
|
||||
"version": "0.4.24",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
||||
"requires": {
|
||||
"safer-buffer": ">= 2.1.2 < 3"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
@@ -6424,13 +6493,24 @@
|
||||
"version": "6.7.0",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
|
||||
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
|
||||
},
|
||||
"raw-body": {
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
|
||||
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
|
||||
"requires": {
|
||||
"bytes": "3.1.0",
|
||||
"http-errors": "1.7.2",
|
||||
"iconv-lite": "0.4.24",
|
||||
"unpipe": "1.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"express-basic-auth": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.2.0.tgz",
|
||||
"integrity": "sha512-iJ0h1Gk6fZRrFmO7tP9nIbxwNgCUJASfNj5fb0Hy15lGtbqqsxpt7609+wq+0XlByZjXmC/rslWQtnuSTVRIcg==",
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.2.1.tgz",
|
||||
"integrity": "sha512-L6YQ1wQ/mNjVLAmK3AG1RK6VkokA1BIY6wmiH304Xtt/cLTps40EusZsU1Uop+v9lTDPxdtzbFmdXfFO3KEnwA==",
|
||||
"requires": {
|
||||
"basic-auth": "^2.0.1"
|
||||
}
|
||||
@@ -7121,21 +7201,21 @@
|
||||
}
|
||||
},
|
||||
"gaxios": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.0.tgz",
|
||||
"integrity": "sha512-pHplNbslpwCLMyII/lHPWFQbJWOX0B3R1hwBEOvzYi1GmdKZruuEHK4N9V6f7tf1EaPYyF80mui1+344p6SmLg==",
|
||||
"version": "4.3.2",
|
||||
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz",
|
||||
"integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==",
|
||||
"requires": {
|
||||
"abort-controller": "^3.0.0",
|
||||
"extend": "^3.0.2",
|
||||
"https-proxy-agent": "^5.0.0",
|
||||
"is-stream": "^2.0.0",
|
||||
"node-fetch": "^2.3.0"
|
||||
"node-fetch": "^2.6.1"
|
||||
}
|
||||
},
|
||||
"gcp-metadata": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.0.tgz",
|
||||
"integrity": "sha512-L9XQUpvKJCM76YRSmcxrR4mFPzPGsgZUH+GgHMxAET8qc6+BhRJq63RLhWakgEO2KKVgeSDVfyiNjkGSADwNTA==",
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz",
|
||||
"integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==",
|
||||
"requires": {
|
||||
"gaxios": "^4.0.0",
|
||||
"json-bigint": "^1.0.0"
|
||||
@@ -7661,9 +7741,9 @@
|
||||
}
|
||||
},
|
||||
"google-auth-library": {
|
||||
"version": "7.6.2",
|
||||
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.6.2.tgz",
|
||||
"integrity": "sha512-yvEnwVsvgH8RXTtpf6e84e7dqIdUEKJhmQvTJwzYP+RDdHjLrDp9sk2u2ZNDJPLKZ7DJicx/+AStcQspJiq+Qw==",
|
||||
"version": "7.10.2",
|
||||
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.2.tgz",
|
||||
"integrity": "sha512-M37o9Kxa/TLvOLgF71SXvLeVEP5sbSTmKl1zlIgl72SFy5PtsU3pOdu8G8MIHHpQ3/NZabDI8rQkA9DvQVKkPA==",
|
||||
"requires": {
|
||||
"arrify": "^2.0.0",
|
||||
"base64-js": "^1.3.0",
|
||||
@@ -8243,11 +8323,11 @@
|
||||
}
|
||||
},
|
||||
"http-proxy-agent": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
|
||||
"integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
|
||||
"integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
|
||||
"requires": {
|
||||
"@tootallnate/once": "1",
|
||||
"@tootallnate/once": "2",
|
||||
"agent-base": "6",
|
||||
"debug": "4"
|
||||
}
|
||||
@@ -12074,21 +12154,33 @@
|
||||
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
|
||||
},
|
||||
"rate-limiter-flexible": {
|
||||
"version": "2.3.5",
|
||||
"resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-2.3.5.tgz",
|
||||
"integrity": "sha512-66QCGB8h74PklfrwDEFa8oIMHBL31x79WajtGnmS7LwJqdh8u/rnu4a8UNaxguB/YauTWdOI9lAM/WODVZw1FQ=="
|
||||
"version": "2.3.6",
|
||||
"resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-2.3.6.tgz",
|
||||
"integrity": "sha512-8DVFOe89rreyut/vzwBI7vgXJynyYoYnH5XogtAKs0F/neAbCTTglXxSJ7fZeZamcFXZDvMidCBvps4KM+1srw=="
|
||||
},
|
||||
"raw-body": {
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
|
||||
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz",
|
||||
"integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==",
|
||||
"requires": {
|
||||
"bytes": "3.1.0",
|
||||
"http-errors": "1.7.2",
|
||||
"bytes": "3.1.1",
|
||||
"http-errors": "1.8.1",
|
||||
"iconv-lite": "0.4.24",
|
||||
"unpipe": "1.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"http-errors": {
|
||||
"version": "1.8.1",
|
||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
|
||||
"integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
|
||||
"requires": {
|
||||
"depd": "~1.1.2",
|
||||
"inherits": "2.0.4",
|
||||
"setprototypeof": "1.2.0",
|
||||
"statuses": ">= 1.5.0 < 2",
|
||||
"toidentifier": "1.0.1"
|
||||
}
|
||||
},
|
||||
"iconv-lite": {
|
||||
"version": "0.4.24",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||
@@ -12096,6 +12188,16 @@
|
||||
"requires": {
|
||||
"safer-buffer": ">= 2.1.2 < 3"
|
||||
}
|
||||
},
|
||||
"setprototypeof": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
||||
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
||||
},
|
||||
"toidentifier": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
|
||||
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -12974,9 +13076,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"object-inspect": {
|
||||
"version": "1.11.0",
|
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
|
||||
"integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg=="
|
||||
"version": "1.11.1",
|
||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz",
|
||||
"integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -13674,18 +13776,18 @@
|
||||
}
|
||||
},
|
||||
"stripe": {
|
||||
"version": "8.191.0",
|
||||
"resolved": "https://registry.npmjs.org/stripe/-/stripe-8.191.0.tgz",
|
||||
"integrity": "sha512-3oyuIbuW3WDsbGnMUtIZPkr+sOUJ3NEtEwghd81ZuWc+Tq09MrgWXGekbVnbxA3TMFwfKOILw6QoiPA7za4JUg==",
|
||||
"version": "8.193.0",
|
||||
"resolved": "https://registry.npmjs.org/stripe/-/stripe-8.193.0.tgz",
|
||||
"integrity": "sha512-SkU97dWTIcBR3fXdiVZJQoUs1K62ADf4zc6DaCxDACJICPfYI78NIJoroDZBvOLI5vCSHBc4E3wYC+h8CISeBw==",
|
||||
"requires": {
|
||||
"@types/node": ">=8.1.0",
|
||||
"qs": "^6.6.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"qs": {
|
||||
"version": "6.10.1",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
|
||||
"integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
|
||||
"version": "6.10.2",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz",
|
||||
"integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==",
|
||||
"requires": {
|
||||
"side-channel": "^1.0.4"
|
||||
}
|
||||
@@ -13915,11 +14017,11 @@
|
||||
}
|
||||
},
|
||||
"teeny-request": {
|
||||
"version": "7.1.1",
|
||||
"resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.1.tgz",
|
||||
"integrity": "sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg==",
|
||||
"version": "7.1.3",
|
||||
"resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.3.tgz",
|
||||
"integrity": "sha512-Ew3aoFzgQEatLA5OBIjdr1DWJUaC1xardG+qbPPo5k/y/3fMwXLxpjh5UB5dVfElktLaQbbMs80chkz53ByvSg==",
|
||||
"requires": {
|
||||
"http-proxy-agent": "^4.0.0",
|
||||
"http-proxy-agent": "^5.0.0",
|
||||
"https-proxy-agent": "^5.0.0",
|
||||
"node-fetch": "^2.6.1",
|
||||
"stream-events": "^1.0.5",
|
||||
@@ -14554,19 +14656,21 @@
|
||||
}
|
||||
},
|
||||
"universal-analytics": {
|
||||
"version": "0.4.23",
|
||||
"resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz",
|
||||
"integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==",
|
||||
"version": "0.5.2",
|
||||
"resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.5.2.tgz",
|
||||
"integrity": "sha512-wNlkW0hQKBJ4UDg3umv/9HZ6tPmzuorxQNmzFD5oiHKz37ddBmV6OpA4aYreyOmKBTzA3DEoTZjwCemw7yc1Og==",
|
||||
"requires": {
|
||||
"debug": "^4.1.1",
|
||||
"request": "^2.88.2",
|
||||
"uuid": "^3.0.0"
|
||||
"debug": "^4.3.1",
|
||||
"uuid": "^8.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"uuid": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
|
||||
"debug": {
|
||||
"version": "4.3.3",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
|
||||
"integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
|
||||
"requires": {
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"name": "habitica",
|
||||
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
||||
"version": "4.214.0",
|
||||
"version": "4.215.1",
|
||||
"main": "./website/server/index.js",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.16.0",
|
||||
"@babel/preset-env": "^7.16.0",
|
||||
"@babel/preset-env": "^7.16.4",
|
||||
"@babel/register": "^7.16.0",
|
||||
"@google-cloud/trace-agent": "^5.1.5",
|
||||
"@google-cloud/trace-agent": "^5.1.6",
|
||||
"@parse/node-apn": "^5.1.0",
|
||||
"@slack/webhook": "^6.0.0",
|
||||
"accepts": "^1.3.5",
|
||||
@@ -16,7 +16,7 @@
|
||||
"apidoc": "^0.50.2",
|
||||
"apple-auth": "^1.0.7",
|
||||
"bcrypt": "^5.0.1",
|
||||
"body-parser": "^1.18.3",
|
||||
"body-parser": "^1.19.1",
|
||||
"bootstrap": "^4.6.0",
|
||||
"compression": "^1.7.4",
|
||||
"cookie-session": "^1.4.0",
|
||||
@@ -28,7 +28,7 @@
|
||||
"eslint-config-habitrpg": "^6.2.0",
|
||||
"eslint-plugin-mocha": "^5.0.0",
|
||||
"express": "^4.16.3",
|
||||
"express-basic-auth": "^1.1.5",
|
||||
"express-basic-auth": "^1.2.1",
|
||||
"express-validator": "^5.2.0",
|
||||
"glob": "^7.2.0",
|
||||
"got": "^11.8.3",
|
||||
@@ -61,15 +61,15 @@
|
||||
"paypal-rest-sdk": "^1.8.1",
|
||||
"pp-ipn": "^1.1.0",
|
||||
"ps-tree": "^1.0.0",
|
||||
"rate-limiter-flexible": "^2.3.5",
|
||||
"rate-limiter-flexible": "^2.3.6",
|
||||
"redis": "^3.1.2",
|
||||
"regenerator-runtime": "^0.13.9",
|
||||
"remove-markdown": "^0.3.0",
|
||||
"rimraf": "^3.0.2",
|
||||
"short-uuid": "^4.2.0",
|
||||
"stripe": "^8.191.0",
|
||||
"stripe": "^8.193.0",
|
||||
"superagent": "^6.1.0",
|
||||
"universal-analytics": "^0.4.23",
|
||||
"universal-analytics": "^0.5.2",
|
||||
"useragent": "^2.1.9",
|
||||
"uuid": "^8.3.2",
|
||||
"validator": "^13.7.0",
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
/* eslint-disable global-require */
|
||||
import nconf from 'nconf';
|
||||
import { generateUser } from '../../../helpers/api-unit.helper';
|
||||
import * as emailLib from '../../../../website/server/libs/email';
|
||||
import { bugReportLogic } from '../../../../website/server/libs/bug-report';
|
||||
|
||||
describe('bug-report', () => {
|
||||
beforeEach(() => {
|
||||
sandbox.stub(emailLib, 'sendTxn').returns(Promise.resolve());
|
||||
|
||||
const nconfGetStub = sandbox.stub(nconf, 'get');
|
||||
nconfGetStub.withArgs('ADMIN_EMAIL').returns('true');
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sandbox.restore();
|
||||
});
|
||||
|
||||
it('sends a mail using sendTxn', async () => {
|
||||
const userId = '2b58daeb-bc50-4a83-b5d3-4ac52c7c0608';
|
||||
const userMail = 'me@me.com';
|
||||
const userMessage = 'The power is over 9000, please fix it';
|
||||
const userAgent = 'The UserAgent with a bunch of weird browser engine levels';
|
||||
|
||||
const user = generateUser({
|
||||
_id: userId,
|
||||
});
|
||||
|
||||
const result = await bugReportLogic(
|
||||
user, userMail, userMessage, userAgent,
|
||||
);
|
||||
|
||||
expect(emailLib.sendTxn).to.be.called;
|
||||
expect(result).to.deep.equal({
|
||||
sendMailResult: undefined,
|
||||
emailData: {
|
||||
BROWSER_UA: userAgent,
|
||||
REPORT_MSG: userMessage,
|
||||
USER_CLASS: 'warrior',
|
||||
USER_CONSECUTIVE_MONTHS: 0,
|
||||
USER_COSTUME: 'false',
|
||||
USER_CUSTOMER_ID: undefined,
|
||||
USER_CUSTOM_DAY: 0,
|
||||
USER_DAILIES_PAUSED: 'false',
|
||||
USER_EMAIL: userMail,
|
||||
USER_HOURGLASSES: 0,
|
||||
USER_ID: userId,
|
||||
USER_LEVEL: 1,
|
||||
USER_OFFSET_MONTHS: 0,
|
||||
USER_PAYMENT_PLATFORM: undefined,
|
||||
USER_SUBSCRIPTION: undefined,
|
||||
USER_TIMEZONE_OFFSET: 0,
|
||||
USER_USERNAME: undefined,
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -148,9 +148,18 @@ describe('emails', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('sendTxnEmail', () => {
|
||||
describe('sendTxn', () => {
|
||||
let sendTxn = null;
|
||||
|
||||
beforeEach(() => {
|
||||
sandbox.stub(got, 'post').returns(defer().promise);
|
||||
|
||||
const nconfGetStub = sandbox.stub(nconf, 'get');
|
||||
nconfGetStub.withArgs('IS_PROD').returns(true);
|
||||
nconfGetStub.withArgs('BASE_URL').returns('BASE_URL');
|
||||
|
||||
const attachEmail = requireAgain(pathToEmailLib);
|
||||
sendTxn = attachEmail.sendTxn;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -158,16 +167,14 @@ describe('emails', () => {
|
||||
});
|
||||
|
||||
it('can send a txn email to one recipient', () => {
|
||||
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(true);
|
||||
const attachEmail = requireAgain(pathToEmailLib);
|
||||
const sendTxnEmail = attachEmail.sendTxn;
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = {
|
||||
name: 'my name',
|
||||
email: 'my@email',
|
||||
};
|
||||
|
||||
sendTxnEmail(mailingInfo, emailType);
|
||||
sendTxn(mailingInfo, emailType);
|
||||
expect(got.post).to.be.called;
|
||||
expect(got.post).to.be.calledWith('undefined/job', sinon.match({
|
||||
json: {
|
||||
data: {
|
||||
@@ -179,27 +186,77 @@ describe('emails', () => {
|
||||
});
|
||||
|
||||
it('does not send email if address is missing', () => {
|
||||
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(true);
|
||||
const attachEmail = requireAgain(pathToEmailLib);
|
||||
const sendTxnEmail = attachEmail.sendTxn;
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = {
|
||||
name: 'my name',
|
||||
// email: 'my@email',
|
||||
};
|
||||
|
||||
sendTxnEmail(mailingInfo, emailType);
|
||||
sendTxn(mailingInfo, emailType);
|
||||
expect(got.post).not.to.be.called;
|
||||
});
|
||||
|
||||
it('throws error when mail target is only a string', () => {
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = 'my email';
|
||||
|
||||
expect(sendTxn(mailingInfo, emailType)).to.throw;
|
||||
});
|
||||
|
||||
it('throws error when mail target has no _id or email', () => {
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = {
|
||||
|
||||
};
|
||||
|
||||
expect(sendTxn(mailingInfo, emailType)).to.throw;
|
||||
});
|
||||
|
||||
it('throws error when variables not an array', () => {
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = {
|
||||
name: 'my name',
|
||||
email: 'my@email',
|
||||
};
|
||||
const variables = {};
|
||||
|
||||
expect(sendTxn(mailingInfo, emailType, variables)).to.throw;
|
||||
});
|
||||
it('throws error when variables array not contain name/content', () => {
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = {
|
||||
name: 'my name',
|
||||
email: 'my@email',
|
||||
};
|
||||
const variables = [
|
||||
{
|
||||
|
||||
},
|
||||
];
|
||||
|
||||
expect(sendTxn(mailingInfo, emailType, variables)).to.throw;
|
||||
});
|
||||
it('throws no error when variables array contain name but no content', () => {
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = {
|
||||
name: 'my name',
|
||||
email: 'my@email',
|
||||
};
|
||||
const variables = [
|
||||
{
|
||||
name: 'MY_VAR',
|
||||
},
|
||||
];
|
||||
|
||||
expect(sendTxn(mailingInfo, emailType, variables)).to.not.throw;
|
||||
});
|
||||
|
||||
it('uses getUserInfo in case of user data', () => {
|
||||
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(true);
|
||||
const attachEmail = requireAgain(pathToEmailLib);
|
||||
const sendTxnEmail = attachEmail.sendTxn;
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = getUser();
|
||||
|
||||
sendTxnEmail(mailingInfo, emailType);
|
||||
sendTxn(mailingInfo, emailType);
|
||||
expect(got.post).to.be.called;
|
||||
expect(got.post).to.be.calledWith('undefined/job', sinon.match({
|
||||
json: {
|
||||
data: {
|
||||
@@ -211,17 +268,15 @@ describe('emails', () => {
|
||||
});
|
||||
|
||||
it('sends email with some default variables', () => {
|
||||
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(true);
|
||||
const attachEmail = requireAgain(pathToEmailLib);
|
||||
const sendTxnEmail = attachEmail.sendTxn;
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = {
|
||||
name: 'my name',
|
||||
email: 'my@email',
|
||||
};
|
||||
const variables = [1, 2, 3];
|
||||
const variables = [];
|
||||
|
||||
sendTxnEmail(mailingInfo, emailType, variables);
|
||||
sendTxn(mailingInfo, emailType, variables);
|
||||
expect(got.post).to.be.called;
|
||||
expect(got.post).to.be.calledWith('undefined/job', sinon.match({
|
||||
json: {
|
||||
data: {
|
||||
|
||||
@@ -247,11 +247,11 @@ describe('payments/index', () => {
|
||||
|
||||
context('No Active Promotion', () => {
|
||||
beforeEach(() => {
|
||||
sinon.stub(worldState, 'getCurrentEvent').returns(null);
|
||||
sinon.stub(worldState, 'getCurrentEventList').returns([]);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
worldState.getCurrentEvent.restore();
|
||||
worldState.getCurrentEventList.restore();
|
||||
});
|
||||
|
||||
it('sends a private message about the gift', async () => {
|
||||
@@ -268,14 +268,14 @@ describe('payments/index', () => {
|
||||
|
||||
context('Active Promotion', () => {
|
||||
beforeEach(() => {
|
||||
sinon.stub(worldState, 'getCurrentEvent').returns({
|
||||
sinon.stub(worldState, 'getCurrentEventList').returns([{
|
||||
...common.content.events.winter2021Promo,
|
||||
event: 'winter2021',
|
||||
});
|
||||
}]);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
worldState.getCurrentEvent.restore();
|
||||
worldState.getCurrentEventList.restore();
|
||||
});
|
||||
|
||||
it('creates a gift subscription for purchaser and recipient if none exist', async () => {
|
||||
|
||||
@@ -74,7 +74,6 @@ describe('PUT /challenges/:challengeId', () => {
|
||||
expect(res.memberCount).to.equal(2);
|
||||
expect(res.tasksOrder).not.to.equal('new order');
|
||||
expect(res.official).to.equal(false);
|
||||
expect(res.shortName).not.to.equal('new short name');
|
||||
|
||||
expect(res.leader).to.eql({
|
||||
_id: user._id,
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
import {
|
||||
generateUser,
|
||||
} from '../../helpers/api-integration/v4';
|
||||
|
||||
describe('POST /bug-report', () => {
|
||||
let user;
|
||||
|
||||
beforeEach(async () => {
|
||||
user = await generateUser();
|
||||
});
|
||||
|
||||
it('returns an error when message is not added', async () => {
|
||||
await expect(user.post('/bug-report', {
|
||||
message: '',
|
||||
}))
|
||||
.to.eventually.be.rejected.and.to.eql({
|
||||
code: 400,
|
||||
error: 'BadRequest',
|
||||
// seems it is not possible to get the real error message
|
||||
message: 'Invalid request parameters.',
|
||||
});
|
||||
});
|
||||
|
||||
it('returns an error when email is not added', async () => {
|
||||
await expect(user.post('/bug-report', {
|
||||
message: 'message',
|
||||
email: '',
|
||||
}))
|
||||
.to.eventually.be.rejected.and.to.eql({
|
||||
code: 400,
|
||||
error: 'BadRequest',
|
||||
// seems it is not possible to get the real error message
|
||||
message: 'Invalid request parameters.',
|
||||
});
|
||||
});
|
||||
|
||||
it('returns an error when email is not valid', async () => {
|
||||
await expect(user.post('/bug-report', {
|
||||
message: 'message',
|
||||
email: 'notamail',
|
||||
}))
|
||||
.to.eventually.be.rejected.and.to.eql({
|
||||
code: 400,
|
||||
error: 'BadRequest',
|
||||
// seems it is not possible to get the real error message
|
||||
message: 'Invalid request parameters.',
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -40,6 +40,18 @@ store.state.user.data = {
|
||||
preferences: {
|
||||
|
||||
},
|
||||
auth: {
|
||||
local: {
|
||||
// email: 'example@example.com',
|
||||
},
|
||||
facebook: {
|
||||
emails: [
|
||||
{
|
||||
value: 'test@test.de',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
Vue.prototype.$store = store;
|
||||
|
||||
@@ -13,10 +13,10 @@
|
||||
"storybook:serve": "vue-cli-service storybook:serve -p 6006 -c config/storybook"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/addons": "6.3.12",
|
||||
"@storybook/addon-actions": "6.3.12",
|
||||
"@storybook/addons": "6.4.9",
|
||||
"@storybook/addon-actions": "6.4.9",
|
||||
"@storybook/addon-knobs": "6.2.9",
|
||||
"@storybook/addon-links": "6.3.12",
|
||||
"@storybook/addon-links": "6.4.9",
|
||||
"@storybook/addon-notes": "5.3.21",
|
||||
"@storybook/vue": "6.3.12",
|
||||
"@vue/cli-plugin-babel": "^4.5.15",
|
||||
@@ -25,14 +25,14 @@
|
||||
"@vue/cli-plugin-unit-mocha": "^4.5.15",
|
||||
"@vue/cli-service": "^4.5.15",
|
||||
"@vue/test-utils": "1.0.0-beta.29",
|
||||
"amplitude-js": "^8.12.0",
|
||||
"amplitude-js": "^8.13.1",
|
||||
"axios": "^0.24.0",
|
||||
"axios-progress-bar": "^1.2.0",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"bootstrap": "^4.6.0",
|
||||
"bootstrap-vue": "^2.21.2",
|
||||
"chai": "^4.3.4",
|
||||
"core-js": "^3.19.1",
|
||||
"core-js": "^3.19.3",
|
||||
"eslint": "^6.8.0",
|
||||
"eslint-config-habitrpg": "^6.2.0",
|
||||
"eslint-plugin-mocha": "^5.3.0",
|
||||
@@ -47,7 +47,7 @@
|
||||
"nconf": "^0.11.3",
|
||||
"sass": "^1.34.0",
|
||||
"sass-loader": "^8.0.2",
|
||||
"smartbanner.js": "^1.16.0",
|
||||
"smartbanner.js": "^1.17.0",
|
||||
"svg-inline-loader": "^0.8.2",
|
||||
"svg-url-loader": "^7.1.1",
|
||||
"svgo": "^1.3.2",
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
<payments-success-modal />
|
||||
<sub-cancel-modal-confirm v-if="isUserLoaded" />
|
||||
<sub-canceled-modal v-if="isUserLoaded" />
|
||||
<bug-report-modal v-if="isUserLoaded" />
|
||||
<bug-report-success-modal v-if="isUserLoaded" />
|
||||
<snackbars />
|
||||
<router-view v-if="!isUserLoggedIn || isStaticPage" />
|
||||
<template v-else>
|
||||
@@ -177,6 +179,10 @@ import {
|
||||
removeLocalSetting,
|
||||
} from '@/libs/userlocalManager';
|
||||
|
||||
const bugReportModal = () => import(/* webpackChunkName: "bug-report-modal" */'@/components/bugReportModal');
|
||||
const bugReportSuccessModal = () => import(/* webpackChunkName: "bug-report-success-modal" */'@/components/bugReportSuccessModal');
|
||||
|
||||
|
||||
const COMMUNITY_MANAGER_EMAIL = process.env.EMAILS_COMMUNITY_MANAGER_EMAIL; // eslint-disable-line
|
||||
|
||||
export default {
|
||||
@@ -196,6 +202,8 @@ export default {
|
||||
paymentsSuccessModal,
|
||||
subCancelModalConfirm,
|
||||
subCanceledModal,
|
||||
bugReportModal,
|
||||
bugReportSuccessModal,
|
||||
},
|
||||
mixins: [notifications, spellsMixin],
|
||||
data () {
|
||||
|
||||
@@ -1,126 +1,168 @@
|
||||
.quest_bunny {
|
||||
.quest_atom3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: 0px -1546px;
|
||||
width: 210px;
|
||||
height: 186px;
|
||||
background-position: -211px -1543px;
|
||||
width: 216px;
|
||||
height: 180px;
|
||||
}
|
||||
.quest_butterfly {
|
||||
.quest_axolotl {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -220px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_cheetah {
|
||||
.quest_badger {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -440px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_cow {
|
||||
.quest_basilist {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1760px 0px;
|
||||
width: 174px;
|
||||
height: 213px;
|
||||
background-position: -1544px -1332px;
|
||||
width: 189px;
|
||||
height: 141px;
|
||||
}
|
||||
.quest_dilatory {
|
||||
.quest_beetle {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -220px -232px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
background-position: -211px -1332px;
|
||||
width: 204px;
|
||||
height: 201px;
|
||||
}
|
||||
.quest_dilatoryDistress1 {
|
||||
.quest_blackPearl {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -222px -1332px;
|
||||
width: 210px;
|
||||
height: 210px;
|
||||
background-position: -1540px -214px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_dilatoryDistress2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1760px -422px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
.quest_dilatoryDistress3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -440px -232px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_dilatory_derby {
|
||||
.quest_bronze {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: 0px -232px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_dolphin {
|
||||
.quest_bunny {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -660px 0px;
|
||||
background-position: 0px -1543px;
|
||||
width: 210px;
|
||||
height: 186px;
|
||||
}
|
||||
.quest_butterfly {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -220px -232px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_dustbunnies {
|
||||
.quest_cheetah {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -440px -232px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_cow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1762px 0px;
|
||||
width: 174px;
|
||||
height: 213px;
|
||||
}
|
||||
.quest_dilatory {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -660px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_egg {
|
||||
.quest_dilatoryDistress1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1760px -214px;
|
||||
width: 165px;
|
||||
height: 207px;
|
||||
background-position: 0px -1332px;
|
||||
width: 210px;
|
||||
height: 210px;
|
||||
}
|
||||
.quest_evilsanta {
|
||||
.quest_dilatoryDistress2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1760px -724px;
|
||||
width: 118px;
|
||||
height: 131px;
|
||||
background-position: -1762px -422px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
.quest_evilsanta2 {
|
||||
.quest_dilatoryDistress3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: 0px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_falcon {
|
||||
.quest_dilatory_derby {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -660px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_dolphin {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -220px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_ferret {
|
||||
.quest_dustbunnies {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -440px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_fluorite {
|
||||
.quest_egg {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1762px -214px;
|
||||
width: 165px;
|
||||
height: 207px;
|
||||
}
|
||||
.quest_evilsanta {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1762px -724px;
|
||||
width: 118px;
|
||||
height: 131px;
|
||||
}
|
||||
.quest_evilsanta2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -660px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_frog {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: 0px -1332px;
|
||||
width: 221px;
|
||||
height: 213px;
|
||||
}
|
||||
.quest_ghost_stag {
|
||||
.quest_falcon {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -880px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_goldenknight1 {
|
||||
.quest_ferret {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -880px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_fluorite {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -880px -440px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_frog {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1540px 0px;
|
||||
width: 221px;
|
||||
height: 213px;
|
||||
}
|
||||
.quest_ghost_stag {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: 0px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_goldenknight1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -220px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_goldenknight2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -211px -1546px;
|
||||
background-position: -1293px -1332px;
|
||||
width: 250px;
|
||||
height: 150px;
|
||||
}
|
||||
@@ -132,259 +174,217 @@
|
||||
}
|
||||
.quest_gryphon {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -876px -1332px;
|
||||
background-position: -859px -1332px;
|
||||
width: 216px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_guineapig {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -880px -440px;
|
||||
background-position: -440px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_harpy {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: 0px -672px;
|
||||
background-position: -660px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_hedgehog {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -433px -1332px;
|
||||
background-position: -416px -1332px;
|
||||
width: 219px;
|
||||
height: 186px;
|
||||
}
|
||||
.quest_hippo {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -220px -672px;
|
||||
background-position: -880px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_horse {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -440px -672px;
|
||||
background-position: -1100px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_kangaroo {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -660px -672px;
|
||||
background-position: -1100px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_kraken {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1093px -1332px;
|
||||
background-position: -1076px -1332px;
|
||||
width: 216px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_lostMasterclasser1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -880px -672px;
|
||||
background-position: -1100px -440px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_lostMasterclasser2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1100px 0px;
|
||||
background-position: -1100px -660px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_lostMasterclasser3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1100px -220px;
|
||||
background-position: 0px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_mayhemMistiflying1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1760px -573px;
|
||||
background-position: -1762px -573px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
.quest_mayhemMistiflying2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1100px -440px;
|
||||
background-position: -220px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_mayhemMistiflying3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1100px -660px;
|
||||
background-position: -440px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_monkey {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: 0px -892px;
|
||||
background-position: -660px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moon1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1540px -220px;
|
||||
background-position: -1540px -431px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_moon2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -220px -892px;
|
||||
background-position: -880px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moon3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -440px -892px;
|
||||
background-position: -1100px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moonstone1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -660px -892px;
|
||||
background-position: -1320px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moonstone2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -880px -892px;
|
||||
background-position: -1320px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moonstone3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1100px -892px;
|
||||
background-position: -1320px -440px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_nudibranch {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1540px -437px;
|
||||
background-position: -1540px -648px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_octopus {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -653px -1332px;
|
||||
background-position: -636px -1332px;
|
||||
width: 222px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_onyx {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1320px 0px;
|
||||
background-position: -1320px -660px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_owl {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1320px -220px;
|
||||
background-position: -1320px -880px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_peacock {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1540px -654px;
|
||||
background-position: -1540px -865px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_penguin {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: 0px -1733px;
|
||||
background-position: 0px -1730px;
|
||||
width: 190px;
|
||||
height: 183px;
|
||||
}
|
||||
.quest_pterodactyl {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1320px -440px;
|
||||
background-position: 0px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_rat {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1320px -660px;
|
||||
background-position: -220px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_robot {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1320px -880px;
|
||||
background-position: -440px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_rock {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1540px -871px;
|
||||
background-position: -1540px -1082px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_rooster {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1527px -1332px;
|
||||
background-position: -428px -1543px;
|
||||
width: 213px;
|
||||
height: 174px;
|
||||
}
|
||||
.quest_ruby {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: 0px -1112px;
|
||||
background-position: -660px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_sabretooth {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -220px -1112px;
|
||||
background-position: -880px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_seaserpent {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -440px -1112px;
|
||||
background-position: -1100px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_sheep {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -660px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_silver {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -880px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_slime {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1100px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_sloth {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1320px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_snail {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1540px -1088px;
|
||||
width: 219px;
|
||||
height: 213px;
|
||||
}
|
||||
.quest_snake {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1310px -1332px;
|
||||
width: 216px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_spider {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -462px -1546px;
|
||||
width: 250px;
|
||||
height: 150px;
|
||||
}
|
||||
.quest_squirrel {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-15.png');
|
||||
background-position: -1540px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 180 KiB After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 414 KiB After Width: | Height: | Size: 381 KiB |
|
Before Width: | Height: | Size: 265 KiB After Width: | Height: | Size: 311 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 156 KiB After Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 179 KiB After Width: | Height: | Size: 182 KiB |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 151 KiB After Width: | Height: | Size: 150 KiB |
|
Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 150 KiB |
|
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 151 KiB |
|
Before Width: | Height: | Size: 183 KiB After Width: | Height: | Size: 192 KiB |
|
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 163 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 146 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg width="64" height="64" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<circle fill="#1CA372" cx="32" cy="32" r="32"/>
|
||||
<path d="M27.277 46a3.34 3.34 0 0 1-2.367-.98L14 34.11l4.733-4.733 8.356 8.356L43.999 18l5.084 4.354L29.82 44.832a3.366 3.366 0 0 1-2.415 1.165c-.043.003-.086.003-.128.003" fill="#FFF"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 391 B |
@@ -82,9 +82,17 @@
|
||||
{{ $t('hall') }}
|
||||
</router-link>
|
||||
</li>
|
||||
<li>
|
||||
<li v-if="user">
|
||||
<a
|
||||
:href="bugReportMailto"
|
||||
@click.prevent="openBugReportModal()"
|
||||
target="_blank"
|
||||
>
|
||||
{{ $t('reportBug') }}
|
||||
</a>
|
||||
</li>
|
||||
<li v-else>
|
||||
<a
|
||||
href="mailto:admin@habitica.com?subject=Habitica Web Bug Report"
|
||||
target="_blank"
|
||||
>
|
||||
{{ $t('reportBug') }}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { withKnobs } from '@storybook/addon-knobs';
|
||||
|
||||
|
||||
import bugReportModal from '@/components/bugReportModal';
|
||||
import bugReportSuccessModal from '@/components/bugReportSuccessModal';
|
||||
|
||||
const stories = storiesOf('Bug Report Modal', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('bugReportModal', () => ({
|
||||
components: { bugReportModal },
|
||||
data () {
|
||||
return {
|
||||
};
|
||||
},
|
||||
template: `
|
||||
<div>
|
||||
<bug-report-modal></bug-report-modal>
|
||||
</div>
|
||||
`,
|
||||
mounted () {
|
||||
this.$root.$emit('bv::show::modal', 'bug-report-modal');
|
||||
},
|
||||
}))
|
||||
.add('bugReportSuccessModal', () => ({
|
||||
components: { bugReportSuccessModal },
|
||||
data () {
|
||||
return {
|
||||
};
|
||||
},
|
||||
template: `
|
||||
<div>
|
||||
<bug-report-success-modal></bug-report-success-modal>
|
||||
</div>
|
||||
`,
|
||||
mounted () {
|
||||
this.$root.$emit('bv::show::modal', 'bug-report-success-modal');
|
||||
},
|
||||
}));
|
||||
@@ -0,0 +1,243 @@
|
||||
<template>
|
||||
<b-modal
|
||||
:id="modalId"
|
||||
size="md"
|
||||
:hide-footer="true"
|
||||
>
|
||||
<div
|
||||
slot="modal-header"
|
||||
class="bug-report-modal-header"
|
||||
>
|
||||
<h2 v-once>
|
||||
{{ $t('reportBug') }}
|
||||
</h2>
|
||||
|
||||
<div v-once class="report-bug-header-describe">
|
||||
{{ $t('reportBugHeaderDescribe') }}
|
||||
</div>
|
||||
|
||||
<div class="dialog-close">
|
||||
<close-icon @click="close()" :purple="true"/>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<form
|
||||
class="form"
|
||||
@submit.prevent.stop="sendBugReport()"
|
||||
>
|
||||
<div
|
||||
class="form-group"
|
||||
>
|
||||
<label
|
||||
v-once
|
||||
for="emailInput"
|
||||
>
|
||||
{{ $t('email') }}
|
||||
</label>
|
||||
<div class="mb-2 description-label" v-once>
|
||||
{{ $t('reportEmailText') }}
|
||||
</div>
|
||||
<input
|
||||
id="emailInput"
|
||||
v-model="email"
|
||||
class="form-control"
|
||||
type="email"
|
||||
:required="true"
|
||||
:placeholder="$t('reportEmailPlaceholder')"
|
||||
:class="{'input-invalid': emailInvalid, 'input-valid': emailValid}"
|
||||
>
|
||||
|
||||
<div class="error-label mt-2" v-if="emailInvalid">
|
||||
{{ $t('reportEmailError') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label v-once>
|
||||
{{ $t('reportDescription') }}
|
||||
</label>
|
||||
<div class="mb-2 description-label" v-once>
|
||||
{{ $t('reportDescriptionText') }}
|
||||
</div>
|
||||
<textarea
|
||||
v-model="message"
|
||||
class="form-control"
|
||||
rows="5"
|
||||
:required="true"
|
||||
:placeholder="$t('reportDescriptionPlaceholder')"
|
||||
:class="{'input-invalid': messageInvalid && this.message.length === 0}"
|
||||
>
|
||||
|
||||
</textarea>
|
||||
|
||||
<button
|
||||
class="btn btn-primary submit-button btn-block mx-auto mt-4"
|
||||
type="submit"
|
||||
:disabled="!message || !emailValid"
|
||||
>
|
||||
{{ $t('submitBugReport') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a
|
||||
class="cancel-link mx-auto mb-4"
|
||||
@click.prevent="close()"
|
||||
>
|
||||
{{ $t('cancel') }}
|
||||
</a>
|
||||
</div>
|
||||
</b-modal>
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
#bug-report-modal {
|
||||
.modal-header {
|
||||
padding: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.modal-dialog {
|
||||
border-top-left-radius: 8px;
|
||||
border-top-right-radius: 8px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
padding-top: 1rem;
|
||||
padding-right: 1.5rem;
|
||||
padding-left: 1.5rem;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.modal-footer {
|
||||
border-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style scoped lang="scss">
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
|
||||
h2 {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.bug-report-modal-header {
|
||||
color: $white;
|
||||
width: 100%;
|
||||
padding: 2rem 3rem 1.5rem 1.5rem;
|
||||
|
||||
background-image: linear-gradient(288deg, #{$purple-200}, #{$purple-300});
|
||||
}
|
||||
|
||||
.report-bug-header-describe {
|
||||
font-size: 14px;
|
||||
line-height: 1.71;
|
||||
color: $purple-600;
|
||||
}
|
||||
|
||||
label {
|
||||
font-weight: bold;
|
||||
line-height: 1.71;
|
||||
color: $gray-50;
|
||||
}
|
||||
|
||||
.cancel-link {
|
||||
color: $blue-10;
|
||||
line-height: 1.71;
|
||||
}
|
||||
|
||||
.submit-button {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.error-label {
|
||||
font-size: 12px;
|
||||
line-height: 1.33;
|
||||
color: $maroon-10;
|
||||
}
|
||||
|
||||
.description-label {
|
||||
font-size: 12px;
|
||||
line-height: 1.33;
|
||||
color: $gray-100;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import axios from 'axios';
|
||||
import isEmail from 'validator/lib/isEmail';
|
||||
import closeIcon from '@/components/shared/closeIcon';
|
||||
import { mapState } from '@/libs/store';
|
||||
import { MODALS } from '@/libs/consts';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
closeIcon,
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
message: '',
|
||||
email: '',
|
||||
messageInvalid: false,
|
||||
modalId: MODALS.BUG_REPORT,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
async sendBugReport () {
|
||||
this.messageInvalid = false;
|
||||
|
||||
if (this.message.length === 0) {
|
||||
this.messageInvalid = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
await axios.post('/api/v4/bug-report', {
|
||||
message: this.message,
|
||||
email: this.email,
|
||||
});
|
||||
|
||||
this.message = '';
|
||||
|
||||
this.close();
|
||||
|
||||
this.$root.$emit('bv::show::modal', MODALS.BUG_REPORT_SUCCESS);
|
||||
},
|
||||
close () {
|
||||
this.$root.$emit('bv::hide::modal', MODALS.BUG_REPORT);
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
...mapState({ user: 'user.data' }),
|
||||
emailValid () {
|
||||
if (this.email.length <= 3) return false;
|
||||
return isEmail(this.email);
|
||||
},
|
||||
emailInvalid () {
|
||||
if (this.email.length <= 3) return false;
|
||||
return !this.emailValid;
|
||||
},
|
||||
},
|
||||
mounted () {
|
||||
const { user } = this;
|
||||
|
||||
let email = user.auth?.local?.email;
|
||||
|
||||
if (!email && user.auth?.facebook?.emails) {
|
||||
email = user.auth.facebook.emails?.[0]?.value;
|
||||
}
|
||||
|
||||
if (!email && user.auth?.google?.emails) {
|
||||
email = user.auth.google.emails?.[0]?.value;
|
||||
}
|
||||
|
||||
if (!email && user.auth?.apple?.emails) {
|
||||
email = user.auth.apple.emails?.[0]?.value;
|
||||
}
|
||||
|
||||
this.email = email;
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -0,0 +1,154 @@
|
||||
<template>
|
||||
<b-modal
|
||||
:id="modalId"
|
||||
size="md"
|
||||
:hide-footer="true"
|
||||
>
|
||||
<div
|
||||
slot="modal-header"
|
||||
class="bug-report-modal-header"
|
||||
>
|
||||
<div class="green-bar"></div>
|
||||
|
||||
<div class="sub-header position-relative">
|
||||
<div class="dialog-close">
|
||||
<close-icon @click="close()" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<span class="svg-icon check-icon"
|
||||
v-html="icons.checkCircleIcon"
|
||||
></span>
|
||||
|
||||
<div class="title" v-once>
|
||||
{{ $t('reportSent') }}
|
||||
</div>
|
||||
|
||||
<div class="text mt-3 mb-4" v-once>
|
||||
{{ $t('reportSentDescription') }}
|
||||
</div>
|
||||
</div>
|
||||
</b-modal>
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
#bug-report-success-modal {
|
||||
|
||||
.modal-header {
|
||||
padding: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.modal-dialog {
|
||||
border-top-left-radius: 8px;
|
||||
border-top-right-radius: 8px;
|
||||
overflow: auto;
|
||||
width: 330px;
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
padding: 0 1.5rem;
|
||||
}
|
||||
|
||||
.modal-footer {
|
||||
border-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style scoped lang="scss">
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
|
||||
h2 {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.bug-report-modal-header {
|
||||
width: 100%;
|
||||
|
||||
.green-bar {
|
||||
height: 8px;
|
||||
width: 100%;
|
||||
background-color: $green-10;
|
||||
}
|
||||
}
|
||||
|
||||
.check-icon {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
|
||||
margin: 0 auto;
|
||||
margin-top: -0.25rem;
|
||||
}
|
||||
|
||||
.report-bug-header-describe {
|
||||
font-size: 14px;
|
||||
line-height: 1.71;
|
||||
color: $purple-600;
|
||||
}
|
||||
|
||||
label {
|
||||
font-weight: bold;
|
||||
line-height: 1.71;
|
||||
color: $gray-50;
|
||||
}
|
||||
|
||||
.cancel-link {
|
||||
color: $blue-10;
|
||||
line-height: 1.71;
|
||||
}
|
||||
|
||||
.submit-button {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.error-label {
|
||||
font-size: 12px;
|
||||
line-height: 1.33;
|
||||
color: $maroon-10;
|
||||
}
|
||||
|
||||
.description-label {
|
||||
font-size: 12px;
|
||||
line-height: 1.33;
|
||||
color: $gray-100;
|
||||
}
|
||||
|
||||
.text {
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import closeIcon from '@/components/shared/closeIcon';
|
||||
import checkCircleIcon from '@/assets/svg/check_circle.svg';
|
||||
import { MODALS } from '@/libs/consts';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
closeIcon,
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
icons: Object.freeze({
|
||||
checkCircleIcon,
|
||||
}),
|
||||
modalId: MODALS.BUG_REPORT_SUCCESS,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
close () {
|
||||
this.$root.$emit('bv::hide::modal', MODALS.BUG_REPORT_SUCCESS);
|
||||
},
|
||||
},
|
||||
computed: {},
|
||||
mounted () {},
|
||||
};
|
||||
</script>
|
||||
@@ -311,6 +311,7 @@ import bronzeGuildBadgeIcon from '@/assets/svg/bronze-guild-badge-small.svg';
|
||||
import QuestDetailModal from './questDetailModal';
|
||||
import RightSidebar from '@/components/groups/rightSidebar';
|
||||
import InvitationListModal from './invitationListModal';
|
||||
import { PAGES } from '@/libs/consts';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@@ -554,7 +555,7 @@ export default {
|
||||
this.$root.$emit('bv::show::modal', 'group-gems-modal');
|
||||
},
|
||||
messageLeader () {
|
||||
window.open(`/private-messages?uuid=${this.group.leader.id}`);
|
||||
window.open(`${PAGES.PRIVATE_MESSAGES}?uuid=${this.group.leader.id}`);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -389,6 +389,7 @@ import messageIcon from '@/assets/members/message.svg';
|
||||
import starIcon from '@/assets/members/star.svg';
|
||||
import dots from '@/assets/svg/dots.svg';
|
||||
import SelectList from '@/components/ui/selectList';
|
||||
import { PAGES } from '@/libs/consts';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@@ -558,7 +559,7 @@ export default {
|
||||
});
|
||||
|
||||
this.$root.$emit('bv::hide::modal', 'members-modal');
|
||||
this.$router.push('/private-messages');
|
||||
this.$router.push(PAGES.PRIVATE_MESSAGES);
|
||||
},
|
||||
async searchMembers (searchTerm = '') {
|
||||
this.members = await this.$store.state.memberModalOptions.fetchMoreMembers({
|
||||
|
||||
@@ -361,7 +361,7 @@
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
:href="bugReportMailto"
|
||||
@click.prevent="openBugReportModal()"
|
||||
target="_blank"
|
||||
>
|
||||
{{ $t('reportBug') }}
|
||||
|
||||
@@ -89,6 +89,7 @@
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import find from 'lodash/find';
|
||||
import { mapState } from '@/libs/store';
|
||||
import BaseBanner from './base';
|
||||
|
||||
@@ -98,8 +99,11 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
currentEvent: 'worldState.data.currentEvent',
|
||||
currentEventList: 'worldState.data.currentEventList',
|
||||
}),
|
||||
currentEvent () {
|
||||
return find(this.currentEventList, event => Boolean(event.gemsPromo));
|
||||
},
|
||||
eventName () {
|
||||
return this.currentEvent && this.currentEvent.event;
|
||||
},
|
||||
|
||||
@@ -63,6 +63,7 @@
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import find from 'lodash/find';
|
||||
import { mapState } from '@/libs/store';
|
||||
import BaseBanner from './base';
|
||||
|
||||
@@ -74,8 +75,11 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
currentEvent: 'worldState.data.currentEvent',
|
||||
currentEventList: 'worldState.data.currentEventList',
|
||||
}),
|
||||
currentEvent () {
|
||||
return find(this.currentEventList, event => Boolean(event.promo));
|
||||
},
|
||||
eventName () {
|
||||
return this.currentEvent && this.currentEvent.event;
|
||||
},
|
||||
|
||||
@@ -311,7 +311,7 @@
|
||||
</router-link>
|
||||
<a
|
||||
class="topbar-dropdown-item dropdown-item"
|
||||
:href="bugReportMailto"
|
||||
@click.prevent="openBugReportModal()"
|
||||
target="_blank"
|
||||
>
|
||||
{{ $t('reportBug') }}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
<script>
|
||||
import BaseNotification from './base';
|
||||
import { PAGES } from '@/libs/consts';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@@ -25,7 +26,7 @@ export default {
|
||||
props: ['notification', 'canRemove'],
|
||||
methods: {
|
||||
action () {
|
||||
this.$router.push('/private-messages');
|
||||
this.$router.push(PAGES.PRIVATE_MESSAGES);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -143,6 +143,7 @@ import userIcon from '@/assets/svg/user.svg';
|
||||
import MenuDropdown from '../ui/customMenuDropdown';
|
||||
import MessageCount from './messageCount';
|
||||
import { EVENTS } from '@/libs/events';
|
||||
import { PAGES } from '@/libs/consts';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@@ -170,7 +171,7 @@ export default {
|
||||
if (this.$router.history.current.name === 'privateMessages') {
|
||||
this.$root.$emit(EVENTS.PM_REFRESH);
|
||||
} else {
|
||||
this.$router.push('/private-messages');
|
||||
this.$router.push(PAGES.PRIVATE_MESSAGES);
|
||||
}
|
||||
},
|
||||
showProfile (startingPage) {
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<show-more-button
|
||||
v-if="petGroup.key !== 'specialPets' && !(petGroup.key === 'wackyPets' && selectedSortBy !== 'sortByColor')"
|
||||
v-if="petRowCount[petGroup.key] > 1 && petGroup.key !== 'specialPets' && !(petGroup.key === 'wackyPets' && selectedSortBy !== 'sortByColor')"
|
||||
:show-all="$_openedItemRows_isToggled(petGroup.key)"
|
||||
class="show-more-button"
|
||||
@click="setShowMore(petGroup.key)"
|
||||
@@ -238,7 +238,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<show-more-button
|
||||
v-if="mountGroup.key !== 'specialMounts'"
|
||||
v-if="mountRowCount[mountGroup.key] > 1 && mountGroup.key !== 'specialMounts'"
|
||||
:show-all="$_openedItemRows_isToggled(mountGroup.key)"
|
||||
@click="setShowMore(mountGroup.key)"
|
||||
/>
|
||||
@@ -522,6 +522,9 @@ export default {
|
||||
currentDraggingFood: null,
|
||||
|
||||
selectedDrawerTab: 0,
|
||||
|
||||
petRowCount: {},
|
||||
mountRowCount: {},
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@@ -774,8 +777,9 @@ export default {
|
||||
pets (animalGroup, hideMissing, sortBy, searchText) {
|
||||
const pets = this.listAnimals(animalGroup, 'pet', hideMissing, sortBy, searchText);
|
||||
|
||||
// Don't group special
|
||||
// Don't group special, no 'show more' button either
|
||||
if (animalGroup.key === 'specialPets' || (animalGroup.key === 'wackyPets' && sortBy !== 'sortByColor')) {
|
||||
this.petRowCount[animalGroup.key] = 1;
|
||||
return { none: pets };
|
||||
}
|
||||
|
||||
@@ -787,14 +791,22 @@ export default {
|
||||
} else if (sortBy === 'sortByHatchable') {
|
||||
groupKey = i => (i.isHatchable() ? 0 : 1);
|
||||
}
|
||||
const groupedPets = groupBy(pets, groupKey);
|
||||
|
||||
return groupBy(pets, groupKey);
|
||||
// Pets are rendered as grouped "rows". Count helps decide if show more button is necessary.
|
||||
if (sortBy === 'AZ') {
|
||||
this.petRowCount[animalGroup.key] = 1;
|
||||
} else {
|
||||
this.petRowCount[animalGroup.key] = Object.keys(groupedPets).length;
|
||||
}
|
||||
return groupedPets;
|
||||
},
|
||||
mounts (animalGroup, hideMissing, sortBy, searchText) {
|
||||
const mounts = this.listAnimals(animalGroup, 'mount', hideMissing, sortBy, searchText);
|
||||
|
||||
// Don't group special
|
||||
if (animalGroup.key === 'specialMounts') {
|
||||
this.mountRowCount[animalGroup.key] = 1;
|
||||
return { none: mounts };
|
||||
}
|
||||
|
||||
@@ -804,8 +816,13 @@ export default {
|
||||
} else if (sortBy === 'AZ') {
|
||||
groupKey = '';
|
||||
}
|
||||
|
||||
return groupBy(mounts, groupKey);
|
||||
const groupedMounts = groupBy(mounts, groupKey);
|
||||
if (sortBy === 'AZ') {
|
||||
this.mountRowCount[animalGroup.key] = 1;
|
||||
} else {
|
||||
this.mountRowCount[animalGroup.key] = Object.keys(groupedMounts).length;
|
||||
}
|
||||
return groupedMounts;
|
||||
},
|
||||
// Actions
|
||||
updateHideMissing (newVal) {
|
||||
|
||||
@@ -364,6 +364,7 @@
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import find from 'lodash/find';
|
||||
import moment from 'moment';
|
||||
import { mapState } from '@/libs/store';
|
||||
import markdown from '@/directives/markdown';
|
||||
@@ -408,8 +409,11 @@ export default {
|
||||
...mapState({
|
||||
user: 'user.data',
|
||||
originalGemsBlocks: 'content.gems',
|
||||
currentEvent: 'worldState.data.currentEvent',
|
||||
currentEventList: 'worldState.data.currentEventList',
|
||||
}),
|
||||
currentEvent () {
|
||||
return find(this.currentEventList, event => Boolean(event.gemsPromo) || Boolean(event.promo));
|
||||
},
|
||||
eventName () {
|
||||
return this.currentEvent && this.currentEvent.event;
|
||||
},
|
||||
|
||||
@@ -210,6 +210,7 @@
|
||||
|
||||
<script>
|
||||
import debounce from 'lodash/debounce';
|
||||
import find from 'lodash/find';
|
||||
import isUUID from 'validator/lib/isUUID';
|
||||
import { mapState } from '@/libs/store';
|
||||
import closeIcon from '@/assets/svg/close.svg';
|
||||
@@ -227,8 +228,11 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
currentEvent: 'worldState.data.currentEvent',
|
||||
currentEventList: 'worldState.data.currentEventList',
|
||||
}),
|
||||
currentEvent () {
|
||||
return find(this.currentEventList, event => Boolean(event.gemsPromo) || Boolean(event.promo));
|
||||
},
|
||||
searchCannotSubmit () {
|
||||
if (this.userSearchTerm.length < 1) return true;
|
||||
return typeof this.foundUser._id === 'undefined';
|
||||
|
||||
@@ -111,6 +111,7 @@
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import find from 'lodash/find';
|
||||
import { mapState } from '@/libs/store';
|
||||
import SecondaryMenu from '@/components/secondaryMenu';
|
||||
import gifts from '@/assets/svg/gifts-vertical.svg';
|
||||
@@ -128,8 +129,11 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
currentEvent: 'worldState.data.currentEvent',
|
||||
currentEventList: 'worldState.data.currentEventList',
|
||||
}),
|
||||
currentEvent () {
|
||||
return find(this.currentEventList, event => Boolean(event.promo));
|
||||
},
|
||||
promo () {
|
||||
if (!this.currentEvent || !this.currentEvent.promo) return 'none';
|
||||
return this.currentEvent.promo;
|
||||
|
||||
@@ -2,6 +2,11 @@
|
||||
<button
|
||||
title="close dialog"
|
||||
@click="$emit('click', $event)"
|
||||
:style="{
|
||||
'--icon-color': iconColor,
|
||||
'--icon-color-hover': iconColorHover,
|
||||
}"
|
||||
:class="{'purple': purple}"
|
||||
>
|
||||
<div
|
||||
v-once
|
||||
@@ -16,6 +21,7 @@ import svgClose from '@/assets/svg/close.svg';
|
||||
|
||||
export default {
|
||||
name: 'CloseIcon',
|
||||
props: ['iconColor', 'iconColorHover', 'purple'],
|
||||
data () {
|
||||
return {
|
||||
icons: Object.freeze({
|
||||
@@ -43,13 +49,18 @@ export default {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
|
||||
&.purple {
|
||||
--icon-color: #{$purple-400};
|
||||
--icon-color-hover: #{$purple-500};
|
||||
}
|
||||
|
||||
::v-deep svg path {
|
||||
stroke: $gray-200;
|
||||
stroke: var(--icon-color, #{$gray-200});
|
||||
}
|
||||
|
||||
&:hover {
|
||||
::v-deep svg path {
|
||||
stroke: $gray-100;
|
||||
stroke: var(--icon-color-hover, #{$gray-100});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +66,7 @@
|
||||
|
||||
<script>
|
||||
import debounce from 'lodash/debounce';
|
||||
import find from 'lodash/find';
|
||||
|
||||
import { mapState } from '@/libs/store';
|
||||
import notification from './notification';
|
||||
@@ -103,7 +104,7 @@ export default {
|
||||
removalIntervalId: null,
|
||||
notificationTopY: '0px',
|
||||
preventMultipleWatchExecution: false,
|
||||
gemsPromoBannerHeight: null,
|
||||
eventPromoBannerHeight: null,
|
||||
sleepingBannerHeight: null,
|
||||
};
|
||||
},
|
||||
@@ -111,8 +112,14 @@ export default {
|
||||
...mapState({
|
||||
notificationStore: 'notificationStore',
|
||||
userSleeping: 'user.data.preferences.sleep',
|
||||
currentEvent: 'worldState.data.currentEvent',
|
||||
currentEventList: 'worldState.data.currentEventList',
|
||||
}),
|
||||
currentEvent () {
|
||||
return find(this.currentEventList, event => Boolean(event.gemsPromo) || Boolean(event.promo));
|
||||
},
|
||||
isEventActive () {
|
||||
return Boolean(this.currentEvent?.event);
|
||||
},
|
||||
notificationsTopPosClass () {
|
||||
const base = 'notifications-top-pos-';
|
||||
let modifier = '';
|
||||
@@ -132,10 +139,8 @@ export default {
|
||||
scrollPosToCheck += this.sleepingBannerHeight;
|
||||
}
|
||||
|
||||
if (this.currentEvent
|
||||
&& this.currentEvent.event
|
||||
) {
|
||||
scrollPosToCheck += this.gemsPromoBannerHeight ?? 0;
|
||||
if (this.isEventActive) {
|
||||
scrollPosToCheck += this.eventPromoBannerHeight ?? 0;
|
||||
}
|
||||
|
||||
return scrollPosToCheck;
|
||||
@@ -169,7 +174,7 @@ export default {
|
||||
this.preventMultipleWatchExecution = false;
|
||||
},
|
||||
currentEvent: function currentEventChanged () {
|
||||
this.gemsPromoBannerHeight = getBannerHeight('gems-promo');
|
||||
this.updateEventBannerHeight();
|
||||
},
|
||||
},
|
||||
async mounted () {
|
||||
@@ -355,10 +360,31 @@ export default {
|
||||
}, 16),
|
||||
|
||||
updateBannerHeightAndScrollY () {
|
||||
this.gemsPromoBannerHeight = getBannerHeight('gems-promo');
|
||||
this.updateEventBannerHeight();
|
||||
this.sleepingBannerHeight = getBannerHeight('damage-paused');
|
||||
this.updateScrollY();
|
||||
},
|
||||
|
||||
updateEventBannerHeight () {
|
||||
if (this.isEventActive) {
|
||||
this.eventPromoBannerHeight = getBannerHeight(this.currentEventBannerName());
|
||||
}
|
||||
},
|
||||
|
||||
currentEventBannerName () {
|
||||
// if there are any other types of promo bars
|
||||
// this method needs to be updated
|
||||
|
||||
if (this.currentEvent?.promo) {
|
||||
return 'gift-promo';
|
||||
}
|
||||
|
||||
if (this.currentEvent?.gemsPromo) {
|
||||
return 'gems-promo';
|
||||
}
|
||||
|
||||
return '';
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -9,13 +9,11 @@
|
||||
<a href="mailto:admin@habitica.com">admin@habitica.com</a>
|
||||
<span v-if="user">
|
||||
<br>
|
||||
{{ $t('reportBug') }}
|
||||
:
|
||||
<a
|
||||
:href="bugReportMailto"
|
||||
@click.prevent="openBugReportModal()"
|
||||
target="_blank"
|
||||
>
|
||||
admin@habitica.com
|
||||
{{ $t('reportBug') }}
|
||||
</a>
|
||||
<br>
|
||||
{{ $t('reportCommunityIssues') }}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="container-fluid">
|
||||
<h1>Privacy Notice</h1>
|
||||
<p class="strong pagemeta">
|
||||
Last Updated: October 28, 2021
|
||||
Last Updated: December 10, 2021
|
||||
</p>
|
||||
<p>
|
||||
HabitRPG, Inc. (“HabitRPG,” “we,” “us,” or “our”) welcomes you. This privacy notice (the “Privacy
|
||||
@@ -29,10 +29,10 @@
|
||||
<h3>Contact Information</h3>
|
||||
<p>
|
||||
We collect contact information through our Service; contact information typically includes your name,
|
||||
email address, phone number and any other information you provide in messages to us. We use such
|
||||
contact information for purposes such as providing you with information about the Service, responding to
|
||||
your inquiries, sending you email alerts (including marketing emails), verifying your identity or providing
|
||||
you the Service.
|
||||
email address, and any other information you provide in messages to us. We use such contact information
|
||||
for purposes such as providing you with information about the Service, responding to your inquiries,
|
||||
sending you email alerts (including marketing emails), verifying your identity or providing you the
|
||||
Service.
|
||||
</p>
|
||||
<h3>Account Access Information</h3>
|
||||
<p>
|
||||
@@ -98,8 +98,9 @@
|
||||
<li><strong>Session Cookies</strong>: We use session cookies to make it easier for you to navigate our Service. A
|
||||
session ID cookie expires when you close the Service.</li>
|
||||
<li><strong>Persistent Cookies</strong>: A persistent cookie remains on your device for an extended period of time or
|
||||
until you delete it. Persistent cookies enable us to track and target the interests of our visitors to
|
||||
personalize the experience on our Service.</li>
|
||||
until you delete it. Persistent cookies enable us to better understand how you interact with the Service and to
|
||||
provide visitors with a better and more personalized experience by retaining information about their identity and
|
||||
preferences, including but not limited to keeping them logged in even if the browser is closed.</li>
|
||||
</ul>
|
||||
<p>
|
||||
If you do not want us to place a cookie on your device, you may be able to turn that feature off on your
|
||||
@@ -223,8 +224,8 @@
|
||||
and then selecting the “Authentication” option.
|
||||
</p>
|
||||
<p>
|
||||
If you would like us to fully delete your account, please email us at admin@habitica and we will handle
|
||||
your request within 30 days.
|
||||
If you would like us to fully delete your account and all data associated with it, please email us at
|
||||
admin@habitica and we will handle your request within 30 days.
|
||||
</p>
|
||||
<p>
|
||||
You may opt out at any time from the use of your personal information for direct marketing purposes by
|
||||
@@ -275,11 +276,6 @@
|
||||
to submit a request pursuant to Section 1798.83, please contact HabitRPG via email at
|
||||
<a href='mailto:admin@habitica.com'>admin@habitica.com</a>.
|
||||
</p>
|
||||
<h2>DO NOT TRACK</h2>
|
||||
<p>
|
||||
HabitRPG does not respond to “Do Not Track” settings or other related mechanisms on our Website at
|
||||
this time.
|
||||
</p>
|
||||
<h2>NEVADA PRIVACY RIGHTS</h2>
|
||||
<p>
|
||||
If you are a resident of Nevada, you have the right to opt-out of the sale of certain personal information to
|
||||
@@ -287,6 +283,11 @@
|
||||
“Nevada Do Not Sell Request” and providing us with your name and the email address associated with
|
||||
your account.
|
||||
</p>
|
||||
<h2>DO NOT TRACK</h2>
|
||||
<p>
|
||||
HabitRPG does not respond to “Do Not Track” settings or other related mechanisms on our Website at
|
||||
this time.
|
||||
</p>
|
||||
<h2>LINKS TO EXTERNAL WEBSITES</h2>
|
||||
<p>
|
||||
The Service may contain links to third-party websites (“<span style="text-decoration: underline;">External
|
||||
@@ -310,8 +311,8 @@
|
||||
</p>
|
||||
<address>
|
||||
<strong>HabitRPG, Inc.</strong>
|
||||
<br>11870 Santa Monica Blvd., Suite 106-577
|
||||
<br>Los Angeles, CA 90025
|
||||
<br>202 Bicknell Ave., Ground Floor
|
||||
<br>Santa Monica, CA 90405
|
||||
<br>Email:
|
||||
<a href="mailto:admin@habitica.com">admin@habitica.com</a>
|
||||
</address>
|
||||
|
||||
@@ -1,604 +1,86 @@
|
||||
<template>
|
||||
<!-- eslint-disable max-len -->
|
||||
<div class="container-fluid">
|
||||
<h1>Terms of Use</h1>
|
||||
<p class="pagemeta">
|
||||
Last updated July 27, 2015
|
||||
<br>
|
||||
<small>(Corrected minimum age requirement to under 13 years of age per COPPA)</small>
|
||||
<br>
|
||||
<br>
|
||||
</p>
|
||||
<p>
|
||||
HabitRPG (or 'we') provides services through our
|
||||
software applications for various devices and platforms ('HabitRPG
|
||||
Applications') and the HabitRPG.com domain, and any sub domains thereto
|
||||
(the 'Sites'). Individually or collectively, HabitRPG Applications and
|
||||
Sites may be referred to as the 'Services'.
|
||||
</p>
|
||||
<p>
|
||||
Please read the following terms and conditions ('Terms of
|
||||
Service') carefully. These Terms of Service govern your access to and
|
||||
use of the Services and HabitRPG Content (defined below) and set forth
|
||||
the legally binding terms for your use of the Services and HabitRPG
|
||||
Content, whether or not you have registered as a Member.
|
||||
</p>
|
||||
<p>
|
||||
Certain areas of the Services (and your access to or use of
|
||||
HabitRPG Content) may have different terms and conditions posted or may
|
||||
require you to agree with and accept additional terms and conditions. If
|
||||
there is a conflict between these Terms of Service and terms and
|
||||
conditions posted for a specific area of the Services or HabitRPG
|
||||
Content, the latter terms and conditions will take precedence with
|
||||
respect to your use of or access to that area of the Services or HabitRPG
|
||||
Content.
|
||||
</p>
|
||||
<p>
|
||||
YOU ACKNOWLEDGE AND AGREE THAT, BY CLICKING ON THE 'I AGREE' OR
|
||||
'I ACCEPT' BUTTON, OR BY ACCESSING OR USING THE SERVICES OR BY
|
||||
DOWNLOADING OR POSTING ANY CONTENT FROM OR ON THE SITES OR THROUGH THE
|
||||
SERVICES, YOU ARE INDICATING THAT YOU HAVE READ, UNDERSTAND AND AGREE TO
|
||||
BE BOUND BY THESE TERMS, WHETHER OR NOT YOU HAVE REGISTERED AS A MEMBER,
|
||||
AND AGREE TO OUR PRIVACY POLICY AS DESCRIBED BELOW. IF YOU DO NOT AGREE
|
||||
TO THESE TERMS, THEN YOU HAVE NO RIGHT TO ACCESS OR USE THE SERVICES OR
|
||||
HABITRPG CONTENT.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Modification</strong>
|
||||
<br>HabitRPG reserves the right, at its sole discretion, to modify,
|
||||
discontinue or terminate the Services, including any portion thereof on
|
||||
a global or individual basis, or to modify these Terms of Service, at
|
||||
any time and without prior notice. If we modify these Terms of Service,
|
||||
we will update the 'Last Updated Date' above and post the modification
|
||||
on the Sites and perhaps elsewhere within the Services. By continuing to
|
||||
access or use the Services after we have posted a modification to these
|
||||
Terms of Service or have provided you with notice of a modification, you
|
||||
are indicating that you agree to be bound by the modified Terms of
|
||||
Service. If the modified Terms of Service are not acceptable to you,
|
||||
your only recourse is to cease using the Services.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Eligibility and HabitRPG Account Registration</strong>
|
||||
<br>In order to access certain features of the Sites and Services, and to
|
||||
post any Public User Content (defined below) on the Sites or through the
|
||||
Services, you must register to create an account ('HabitRPG Account') and
|
||||
become a 'Member'. In compliance with privacy laws, we do not allow
|
||||
people below the age of 13 to create accounts; please see our Privacy
|
||||
Policy for further information. During the registration process, you
|
||||
will be required to provide certain information and you will establish a
|
||||
username and a password. You agree to provide accurate, current and
|
||||
complete information during the registration process and to update such
|
||||
information to keep it accurate, current and complete. HabitRPG reserves
|
||||
the right to suspend or terminate your HabitRPG Account if any
|
||||
information provided during the registration process or thereafter
|
||||
proves to be inaccurate, not current or incomplete. If you are not a
|
||||
Member you may browse all areas of the Sites or use the parts of the
|
||||
Services that are not limited to Members only. You are responsible for
|
||||
safeguarding your password. You agree not to disclose your password to
|
||||
any third party and to take sole responsibility for any activities or
|
||||
actions under your HabitRPG Account, whether or not you have authorized
|
||||
such activities or actions. You agree to immediately notify HabitRPG of
|
||||
any unauthorized use of your HabitRPG Account. We are not liable for any
|
||||
damages or losses caused by someone using your account without your
|
||||
permission.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Privacy</strong>
|
||||
<br>See
|
||||
<a href="/static/privacy">HabitRPG's Privacy Policy</a> for
|
||||
information and notices concerning HabitRPG's collection and use of your
|
||||
personal information. If you have any questions about the HabitRPG
|
||||
Privacy Policy, please contact HabitRPG at privacy AT HabitRPG.com. By
|
||||
accessing the Services you are agreeing to the terms of our Privacy
|
||||
Policy.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Content</strong>
|
||||
<br>Certain types of content are made available through the Services.
|
||||
'HabitRPG Content' means, collectively, the text, data, graphics, images,
|
||||
illustrations, forms and look and feel attributes, HabitRPG trademarks
|
||||
and logos and other content made available through the Services,
|
||||
including any technology or code making up the Services, excluding User
|
||||
Content. 'Public User Content' means the text, data, graphics, images, photos,
|
||||
video or audiovisual content, hypertext links and any other content uploaded,
|
||||
transmitted or submitted by a Member via the Services with the intent to share
|
||||
with other users. 'Private User Content' means data created through the services
|
||||
exclusively for personal use or private sharing.
|
||||
This includes tasks and related data created in HabitRPG Tasks that have not
|
||||
been explicitly shared publicly.
|
||||
You understand that by using any of the Services, you may encounter content
|
||||
that may be deemed offensive, indecent, or objectionable, which content
|
||||
may or may not be identified as having explicit language, and that the
|
||||
results of any search or entering of a particular URL may automatically
|
||||
and unintentionally generate links or references to objectionable
|
||||
material. Nevertheless, you agree to use the Services at your sole risk
|
||||
and that we shall not have any liability to you for content that may be
|
||||
found to be offensive, indecent, or objectionable.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Ownership</strong>
|
||||
<br>The Services and HabitRPG Content are protected by copyright, trademark,
|
||||
and other laws of the United States and foreign countries. Except as
|
||||
expressly provided in these Terms of Service, HabitRPG and its licensors
|
||||
exclusively own all right, title and interest in and to the Services and
|
||||
HabitRPG Content, including all associated intellectual property rights.
|
||||
You will not remove, alter or obscure any copyright, trademark, service
|
||||
mark or other proprietary rights notices incorporated in or accompanying
|
||||
the Services or HabitRPG Content.
|
||||
</p>
|
||||
<p>
|
||||
<strong>HabitRPG License</strong>
|
||||
<br>Subject to your compliance with the terms and conditions of these Terms
|
||||
of Service, HabitRPG grants you a limited, non-exclusive,
|
||||
non-transferable license, without the right to sublicense, to access,
|
||||
use, view, download and print, where applicable, the Services and any
|
||||
HabitRPG Content solely for your personal and non-commercial purposes.
|
||||
You will not use, copy, adapt, modify, prepare derivative works based
|
||||
upon, distribute, license, sell, transfer, publicly display, publicly
|
||||
perform, transmit, stream, broadcast or otherwise exploit the Services
|
||||
or HabitRPG Content, except as expressly permitted in these Terms of
|
||||
Service. No licenses or rights are granted to you by implication or
|
||||
otherwise under any intellectual property rights owned or controlled by
|
||||
HabitRPG or its licensors, except for the licenses and rights expressly
|
||||
granted in these Terms of Service. With respect to HabitRPG Applications,
|
||||
your license is limited to use of such applications on platforms and
|
||||
devices that you own or control, and you may not distribute or make the
|
||||
HabitRPG Applications available over a network where it could be used by
|
||||
multiple devices at the same time.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Public User Content</strong>
|
||||
<br>By making available any Public User Content through the Services, you hereby
|
||||
grant to HabitRPG a worldwide, irrevocable, perpetual, non-exclusive,
|
||||
transferable, royalty-free license, with the right to sublicense, to
|
||||
use, copy, adapt, modify, distribute, license, sell, transfer, publicly
|
||||
display, publicly perform, transmit, stream, broadcast and otherwise
|
||||
exploit such Public User Content only on, through or by means of the Services.
|
||||
HabitRPG does not claim any ownership rights in any such Public User Content and
|
||||
nothing in these Terms of Service will be deemed to restrict any rights
|
||||
that you may have to use and exploit any such Public User Content.
|
||||
</p>
|
||||
<p>
|
||||
You acknowledge and agree that you are solely responsible for all
|
||||
Public User Content that you make available through the Services. Accordingly,
|
||||
you represent and warrant that: (i) you either are the sole and
|
||||
exclusive owner of all Public User Content that you make available through the
|
||||
Services or you have all rights, licenses, consents and releases that
|
||||
are necessary to grant to HabitRPG the rights in such Public User Content, as
|
||||
contemplated under these Terms of Service; and (ii) neither the User
|
||||
Content nor your posting, uploading, publication, submission or
|
||||
transmittal of the Public User Content or HabitRPG's use of the Public User Content (or
|
||||
any portion thereof) on, through or by means of the Services will
|
||||
infringe, misappropriate or violate a third party's patent, copyright,
|
||||
trademark, trade secret, moral rights or other intellectual property
|
||||
rights, or rights of publicity or privacy, or result in the violation of
|
||||
any applicable law or regulation.
|
||||
</p>
|
||||
<p>
|
||||
Copyrighted Materials: No Infringing Use. You will not use the
|
||||
Services to offer, display, distribute, transmit, route, provide
|
||||
connections to or store any material that infringes copyrighted works or
|
||||
otherwise violates or promotes the violation of the intellectual
|
||||
property rights of any third party. HabitRPG has adopted and implemented
|
||||
a policy that provides for the termination in appropriate circumstances
|
||||
of the accounts of users who repeatedly infringe or are believed to be
|
||||
or are charged with repeatedly infringing the rights of copyright
|
||||
holders.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Notify Us of Infringers</strong>
|
||||
<br>If you believe that something on the Services violates your copyright,
|
||||
notify our copyright agent in writing. The contact information for our
|
||||
copyright agent is at the bottom of this section.
|
||||
</p>
|
||||
<p>
|
||||
In order for us to take action, you must do the following in your
|
||||
notice:
|
||||
</p>
|
||||
<p>
|
||||
(1) provide your physical or electronic signature; (2) identify
|
||||
the copyrighted work that you believe is being infringed; (3) identify
|
||||
the item on the Services that you think is infringing your work and
|
||||
include sufficient information about where the material is located on
|
||||
the Services (including which website and URL) so that we can find it;
|
||||
(4) provide us with a way to contact you, such as your address,
|
||||
telephone number, or e-mail; (5) provide a statement that you believe in
|
||||
good faith that the item you have identified as infringing is not
|
||||
authorized by the copyright owner, its agent, or the law to be used on
|
||||
the Services; and (6) provide a statement that the information you
|
||||
provide in your notice is accurate, and that (under penalty of perjury),
|
||||
you are authorized to act on behalf of the copyright owner whose work is
|
||||
being infringed.
|
||||
</p>
|
||||
<p>Here is the contact information for our copyright agent:</p>
|
||||
<p>
|
||||
Copyright Enforcement
|
||||
<br>HabitRPG, Inc.
|
||||
<br>11870 Santa Monica Blvd., Suite 106-577
|
||||
<br>Los Angeles, CA 90025
|
||||
<br>E-Mail:
|
||||
<a href="mailto:admin@habitica.com">admin@habitica.com</a>
|
||||
</p>
|
||||
<p>
|
||||
Again, we cannot take action unless you give us all the required
|
||||
information.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Ratings and Comments & Feedback.</strong>
|
||||
<br>You can rate and make comments about content made available through the
|
||||
Services ('Comments'). HabitRPG advises you to exercise caution and good
|
||||
judgment when leaving such Comments. Once you complete and submit your
|
||||
Comments to the Services you will not be able to go back and edit your
|
||||
Comments. You should also be aware that you could be held legally
|
||||
responsible for damages to someone's reputation if your Comments are
|
||||
deemed to be defamatory. Without limiting any other terms of this Terms
|
||||
of Service, HabitRPG may, but is under no obligation to, monitor or
|
||||
censor Comments and disclaims any and all liability relating thereto.
|
||||
Notwithstanding the foregoing, HabitRPG does reserve the right, in its
|
||||
sole discretion, to remove any Comments that it deems to be improper,
|
||||
inappropriate or inconsistent with the online activities that are
|
||||
permitted under these Terms of Service. We welcome and encourage you to
|
||||
provide feedback, comments and suggestions for improvements to the
|
||||
Services ('Feedback'). You may submit Feedback by emailing us at support
|
||||
AT HabitRPG.com. You acknowledge and agree that all Comments and Feedback
|
||||
will be the sole and exclusive property of HabitRPG and you hereby
|
||||
irrevocably assign to HabitRPG and agree to irrevocably assign to HabitRPG
|
||||
all of your right, title, and interest in and to all Comments and
|
||||
Feedback, including without limitation all worldwide patent rights,
|
||||
copyright rights, trade secret rights, and other proprietary or
|
||||
intellectual property rights therein. At HabitRPG's request and expense,
|
||||
you will execute documents and take such further acts as HabitRPG may
|
||||
reasonably request to assist HabitRPG to acquire, perfect, and maintain
|
||||
its intellectual property rights and other legal protections for the
|
||||
Comments and Feedback.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Interactions between Users</strong>
|
||||
<br>You are solely responsible for your interactions (including any
|
||||
disputes) with other users. You understand that HabitRPG does not in any
|
||||
way screen HabitRPG users, except to only allow people aged 13 and over
|
||||
to create accounts. You are solely responsible for, and will exercise
|
||||
caution, discretion, common sense and judgment in, using the Services
|
||||
and disclosing personal information to other HabitRPG users. You agree to
|
||||
take reasonable precautions in all interactions with other HabitRPG
|
||||
users, particularly if you decide to meet a HabitRPG user offline, or in
|
||||
person. Your use of the Services, HabitRPG Content and any other content
|
||||
made available through the Services is at your sole risk and discretion
|
||||
and HabitRPG hereby disclaims any and all liability to you or any third
|
||||
party relating thereto. HabitRPG reserves the right to contact Members,
|
||||
in compliance with applicable law, in order to evaluate compliance with
|
||||
the rules and policies in these Terms of Service. You will cooperate
|
||||
fully with HabitRPG to investigate any suspected unlawful, fraudulent or
|
||||
improper activity, including, without limitation, granting authorized
|
||||
HabitRPG representatives access to any password-protected portions of
|
||||
your HabitRPG Account.
|
||||
</p>
|
||||
<p>
|
||||
<strong>General Prohibitions</strong>
|
||||
<br>You agree not to do any of the following while using the Services or
|
||||
HabitRPG Content:
|
||||
<br>
|
||||
</p>
|
||||
<h1>Terms of Service</h1>
|
||||
<p class="strong pagemeta">Last Updated: December 14, 2021</p>
|
||||
<p>Thanks for choosing Habitica!</p>
|
||||
<p>Our Service is provided by HabitRPG, Inc. ("HabitRPG"). By accepting these Terms of Service and our Privacy Policy located at: <a href="https://habitica.com/static/privacy" target="_blank">https://habitica.com/static/privacy</a> (collectively, the "Agreement"), registering for the Service (as defined below), accessing or using any part of the Service, or otherwise manifesting your assent to the Agreement, you acknowledge that you have read, understood, and agree to be legally bound by the Agreement. If you do not agree to (or cannot comply with) the Agreement, you are not permitted to access or use the Service.</p>
|
||||
<p>By accepting or agreeing to this Agreement on behalf of a company or other legal entity, you represent and warrant that you have the authority to bind that company or other legal entity to the Agreement and, in such event, "you" and "your" will refer and apply to that company or other legal entity.</p>
|
||||
<p class="strong">THE SECTIONS BELOW TITLED "BINDING ARBITRATION," AND "CLASS ACTION WAIVER" CONTAIN A BINDING ARBITRATION AGREEMENT AND CLASS ACTION WAIVER. THEY AFFECT YOUR LEGAL RIGHTS. PLEASE READ THEM.</p>
|
||||
<h2>Changes to the Terms of Service</h2>
|
||||
<p>These Terms of Service are effective as of the last updated date stated at the top of this page. We may change these Terms of Service from time to time with or without notice to you. By accessing the Service after we make any such changes to this Terms of Service, you are deemed to have accepted such changes. Please be aware that, to the extent permitted by applicable law, our use of the information collected is governed by the Terms of Service in effect at the time we collect the information. Please refer back to this Terms of Service on a regular basis.</p>
|
||||
<p>Our Service allows you to upload, store, send, download, or receive content, including but not limited to information, text, graphics, artwork, or other material ("Content"). You retain ownership of any intellectual property rights that you have in your Content. You hereby grant HabitRPG a worldwide, perpetual, irrevocable, sublicenseable, transferable, assignable, non-exclusive, and royalty-free right and license to use, reproduce, distribute, adapt, modify, translate, create derivative works of, publicly perform, publicly display, digitally perform, make, have made, sell, offer for sale, and import your Content, including all intellectual property rights therein. You represent, warrant, and agree that your Content does not and will not violate any third-party intellectual property, privacy, or other rights, and that you have all right, title and interest in and to your Content required to grant us the license above. We reserve the right at all times, but have no obligation, to delete or refuse to use or distribute any Content on or through the Service, including your Content.</p>
|
||||
<h2>Ideas and Suggestions/Requests</h2>
|
||||
<p>HabitRPG appreciates receiving your ideas, comments, suggestions and requests regarding the Service ("Unsolicited Ideas"). By submitting your Unsolicited Ideas (in any form or medium), you are transferring all your right, title and interest therein exclusively to HabitRPG. As the owner of Unsolicited Ideas, we have unrestricted rights to use, disclose and process the Unsolicited Ideas for any purpose whatsoever without any compensation to you. You also give up any claim that any use, disclosure and processing by us or our licensees of your Unsolicited Ideas violates any of your rights, including moral rights, privacy rights, rights to publicity, proprietary or other rights, and rights to credit for the material or ideas set for therein.</p>
|
||||
<h2>Software in Our Service</h2>
|
||||
<p>When the Service requires or includes downloadable software ("Software"), it may may update automatically on your device once a new version or features become available to you. Some platforms may let you adjust your automatic update settings.</p>
|
||||
<p>HabitRPG hereby grants you a personal, worldwide, royalty-free, non-assignable and non-exclusive license to use the Software provided by HabitRPG as part of the Service. You may not copy, modify, distribute, sell, or lease any part of our Service or included Software you are explicitly allowed to do so by the GPL-3.0 license, or you have our written permission for those parts not covered by the open source license.</p>
|
||||
<p>Third party applications may use one of the permitted logos and signifiers in order to represent their applicability to the Service, but may not claim formal association with and/or impersonate HabitRPG or our staff without prior written consent. Third Party applications, the companies that own or provide them, and their employees and agents, are not authorized to make any promises or representations on our behalf, or change the terms of this Agreement.</p>
|
||||
<p>We allow for personal, non-commercial uses like fanart under Commercial Commons License CC-NC-SA 3.0 terms.</p>
|
||||
<p>Outside the above explicitly allowed use cases, you may not use our trademarks, service marks, trade names, logos, domain names, taglines, or trade dress without a signed written contract with us granting you a license to do so.</p>
|
||||
<h2>Modifying and Termination of Service</h2>
|
||||
<p>HabitRPG reserves the right, in its sole discretion, to add, modify, or remove functionalities or features from the Service, and improve, change and/or update the Service. We may also suspend or terminate the Service at any time, with or without notice to you.</p>
|
||||
<p>You can choose to stop using our Service at any time. We may suspend or cease providing the Service to you at any time, including if we determine in our sole discretion, that:</p>
|
||||
<ul>
|
||||
<li>
|
||||
Post, upload, publish, submit or transmit any text, graphics,
|
||||
images, software, music, audio, video, information or other material
|
||||
that: (i) infringes, misappropriates or violates a third party's
|
||||
patent, copyright, trademark, trade secret, moral rights or other
|
||||
intellectual property rights, or rights of publicity or privacy; (ii)
|
||||
violates, or encourages any conduct that would violate, any applicable
|
||||
law or regulation or would give rise to civil liability; (iii) is
|
||||
fraudulent, false, misleading or deceptive; (iv) is defamatory,
|
||||
obscene, pornographic, vulgar or offensive; (v) promotes
|
||||
discrimination, bigotry, racism, hatred, harassment or harm against any
|
||||
individual or group; (vi) is violent or threatening or promotes
|
||||
violence or actions that are threatening to any other person; or (vii)
|
||||
promotes illegal or harmful activities or substances (including but not
|
||||
limited to activities that promote or provide instructional information
|
||||
regarding the manufacture or purchase of illegal weapons or illegal
|
||||
substances).
|
||||
</li>
|
||||
<li>
|
||||
Use, display, mirror, frame or utilize framing techniques to
|
||||
enclose the Services, or any individual element or materials within the
|
||||
Services, HabitRPG's name, any HabitRPG trademark, logo or other
|
||||
proprietary information, the content of any text or the layout and
|
||||
design of any page or form contained on a page, without HabitRPG's
|
||||
express written consent;
|
||||
</li>
|
||||
<li>
|
||||
Access, tamper with, or use non-public areas of the Services,
|
||||
HabitRPG's computer systems, or the technical delivery systems of
|
||||
HabitRPG's providers;
|
||||
</li>
|
||||
<li>
|
||||
Attempt to probe, scan, or test the vulnerability of any
|
||||
HabitRPG system or network or breach any security or authentication
|
||||
measures;
|
||||
</li>
|
||||
<li>
|
||||
Avoid, bypass, remove, deactivate, impair, descramble or
|
||||
otherwise circumvent any technological measure implemented by HabitRPG
|
||||
or any of HabitRPG's providers or any other third party (including
|
||||
another user) to protect the Services or HabitRPG Content;
|
||||
</li>
|
||||
<li>
|
||||
Attempt to access or search the Services or HabitRPG Content or
|
||||
download HabitRPG Content from the Services through the use of any
|
||||
engine, software, tool, agent, device or mechanism (including spiders,
|
||||
robots, crawlers, data mining tools or the like) other than the
|
||||
software and/or search agents provided by HabitRPG or other generally
|
||||
available third party web browsers (such as Google Chrome, Microsoft
|
||||
Internet Explorer, Mozilla Firefox, Safari or Opera);
|
||||
</li>
|
||||
<li>
|
||||
Send any unsolicited or unauthorized advertising, promotional
|
||||
materials, email, junk mail, spam, chain letters or other form of
|
||||
solicitation;
|
||||
</li>
|
||||
<li>
|
||||
Use any meta tags or other hidden text or metadata utilizing a
|
||||
HabitRPG trademark, logo URL or product name without HabitRPG's express
|
||||
written consent;
|
||||
</li>
|
||||
<li>
|
||||
Use the Services or HabitRPG Content for any commercial purpose
|
||||
or the benefit of any third party or in any manner not permitted by
|
||||
these Terms of Service;
|
||||
</li>
|
||||
<li>
|
||||
Forge any TCP/IP packet header or any part of the header
|
||||
information in any email or newsgroup posting, or in any way use the
|
||||
Services or HabitRPG Content to send altered, deceptive or false
|
||||
source-identifying information;
|
||||
</li>
|
||||
<li>
|
||||
Attempt to decipher, decompile, disassemble or reverse
|
||||
engineer any of the software used to provide the Services or HabitRPG
|
||||
Content;
|
||||
</li>
|
||||
<li>
|
||||
Interfere with, or attempt to interfere with, the access of
|
||||
any user, host or network, including, without limitation, sending a
|
||||
virus, overloading, flooding, spamming, or mail-bombing the Services;
|
||||
</li>
|
||||
<li>
|
||||
Collect or store any personally identifiable information from
|
||||
the Services from other users of the Services without their express
|
||||
permission;
|
||||
</li>
|
||||
<li>
|
||||
Impersonate or misrepresent your affiliation with any person
|
||||
or entity; Violate any applicable law or regulation; or
|
||||
</li>
|
||||
<li>
|
||||
Encourage or enable any other individual to do any of the
|
||||
foregoing.
|
||||
</li>
|
||||
<li>You have violated any part of this Agreement, the Privacy Policy, or the Community Guidelines;</li>
|
||||
<li>We have stopped offering the Service in your region; or</li>
|
||||
<li>Doing so would be in the best interests of our community, the Service, or the rights of a third party.</li>
|
||||
</ul>
|
||||
<p>
|
||||
HabitRPG will have the right to investigate and prosecute
|
||||
violations of any of the above, including intellectual property rights
|
||||
infringement and Services security issues, to the fullest extent of the
|
||||
law. HabitRPG may involve and cooperate with law enforcement authorities
|
||||
in prosecuting users who violate these Terms of Service. You acknowledge
|
||||
that HabitRPG has no obligation to monitor your access to or use of the
|
||||
Services or HabitRPG Content or to review or edit any Public User Content, but
|
||||
has the right to do so for the purpose of operating the Services, to
|
||||
ensure your compliance with these Terms of Service, or to comply with
|
||||
applicable law or the order or requirement of a court, administrative
|
||||
agency or other governmental body. HabitRPG reserves the right, at any
|
||||
time and without prior notice, to remove or disable access to any
|
||||
HabitRPG Content, including, any Public User Content, that HabitRPG, in its sole
|
||||
discretion, considers to be in violation of these Terms of Service or
|
||||
otherwise harmful to the Services.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Links</strong>
|
||||
<br>The Services may contain links to third-party websites or resources. You
|
||||
acknowledge and agree that HabitRPG is not responsible or liable for: (i)
|
||||
the availability or accuracy of such websites or resources; or (ii) the
|
||||
content, products, or services on or available from such websites or
|
||||
resources. Links to such websites or resources do not imply any
|
||||
endorsement by HabitRPG of such websites or resources or the content,
|
||||
products, or services available from such websites or resources. You
|
||||
acknowledge sole responsibility for and assume all risk arising from
|
||||
your use of any such websites or resources.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Termination and HabitRPG Account; Cancellation</strong>
|
||||
<br>Without limiting other remedies, HabitRPG may at any time suspend or
|
||||
terminate your HabitRPG Account and refuse to provide access to the
|
||||
Services. In addition, HabitRPG may notify authorities or take any
|
||||
actions it deems appropriate, without notice to you, if HabitRPG suspects
|
||||
or determines, in its own discretion, that you may have or there is a
|
||||
significant risk that you have (i) failed to comply with any provision
|
||||
of these Terms of Service or any policies or rules established by
|
||||
HabitRPG; or (ii) engaged in actions relating to or in the course of
|
||||
using the Services that may be illegal or cause liability, harm,
|
||||
embarrassment, harassment, abuse or disruption for you, HabitRPG Users,
|
||||
HabitRPG or any other third parties or the Services.
|
||||
</p>
|
||||
<p>
|
||||
You may terminate your HabitRPG Account at any time and for any
|
||||
reason by sending email to support AT HabitRPG.com. Upon any termination
|
||||
by a Member, the related account will no longer be accessible.
|
||||
</p>
|
||||
<p>
|
||||
After any termination, you understand and acknowledge that we
|
||||
will have no further obligation to provide the Services and all licenses
|
||||
and other rights granted to you by these Terms of Service will
|
||||
immediately cease. HabitRPG will not be liable to you or any third party
|
||||
for termination of the Services or termination of your use of either.
|
||||
UPON ANY TERMINATION OR SUSPENSION, ANY CONTENT, MATERIALS OR
|
||||
INFORMATION (INCLUDING PUBLIC USER CONTENT) THAT YOU HAVE SUBMITTED ON THE
|
||||
SERVICES OR THAT WHICH IS RELATED TO YOUR ACCOUNT MAY NO LONGER BE
|
||||
ACCESSED BY YOU. Furthermore, HabitRPG will have no obligation to
|
||||
maintain any information stored in our database related to your account
|
||||
or to forward any information to you or any third party.
|
||||
</p>
|
||||
<p>
|
||||
Any suspension, termination or cancellation will not affect your
|
||||
obligations to HabitRPG under these Terms of Service (including, without
|
||||
limitation, proprietary rights and ownership, indemnification and
|
||||
limitation of liability), which by their sense and context are intended
|
||||
to survive such suspension, termination or cancellation.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Disclaimers</strong>
|
||||
<br>THE SERVICES, HABITRPG CONTENT AND PUBLIC USER CONTENT ARE PROVIDED 'AS IS',
|
||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT
|
||||
LIMITING THE FOREGOING, HABITRPG EXPLICITLY DISCLAIMS ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
|
||||
NON-INFRINGEMENT, AND ANY WARRANTIES ARISING OUT OF COURSE OF DEALING OR
|
||||
USAGE OF TRADE.
|
||||
</p>
|
||||
<p>
|
||||
HABITRPG MAKES NO WARRANTY THAT THE SERVICES, HABITRPG CONTENT OR
|
||||
PUBLIC USER CONTENT WILL MEET YOUR REQUIREMENTS OR BE AVAILABLE ON AN
|
||||
UNINTERRUPTED, SECURE, OR ERROR-FREE BASIS. HABITRPG MAKES NO WARRANTY
|
||||
REGARDING THE QUALITY OF ANY PRODUCTS, SERVICES OR CONTENT PURCHASED OR
|
||||
OBTAINED THROUGH THE SERVICES OR THE ACCURACY, TIMELINESS, TRUTHFULNESS,
|
||||
COMPLETENESS OR RELIABILITY OF ANY CONTENT OBTAINED THROUGH THE
|
||||
SERVICES.
|
||||
</p>
|
||||
<p>
|
||||
NO ADVICE OR INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED FROM
|
||||
HABITRPG OR THROUGH THE SERVICES, HABITRPG CONTENT OR PUBLIC USER CONTENT, WILL
|
||||
CREATE ANY WARRANTY NOT EXPRESSLY MADE HEREIN.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Indemnity</strong>
|
||||
<br>You agree to defend, indemnify, and hold HabitRPG, its officers,
|
||||
directors, employees and agents, harmless from and against any claims,
|
||||
liabilities, damages, losses, and expenses, including, without
|
||||
limitation, reasonable legal and accounting fees, arising out of or in
|
||||
any way connected with Public User Content you submit to HabitRPG, your access
|
||||
to or use of the Services or HabitRPG Content, or your violation of these
|
||||
Terms of Service.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Limitation of Liability</strong>
|
||||
<br>YOU ACKNOWLEDGE AND AGREE THAT, TO THE MAXIMUM EXTENT PERMITTED BY LAW,
|
||||
THE ENTIRE RISK ARISING OUT OF YOUR ACCESS TO AND USE OF THE SERVICES
|
||||
AND CONTENT THEREIN REMAINS WITH YOU. NEITHER HABITRPG NOR ANY OTHER
|
||||
PARTY INVOLVED IN CREATING, PRODUCING, OR DELIVERING THE SERVICES OR
|
||||
HABITRPG CONTENT WILL BE LIABLE FOR ANY INCIDENTAL, SPECIAL, EXEMPLARY OR
|
||||
CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, LOSS OF DATA OR LOSS OF
|
||||
GOODWILL, SERVICE INTERRUPTION, COMPUTER DAMAGE OR SYSTEM FAILURE OR THE
|
||||
COST OF SUBSTITUTE PRODUCTS OR SERVICES, ARISING OUT OF OR IN CONNECTION
|
||||
WITH THESE TERMS OR FROM THE USE OF OR INABILITY TO USE THE SERVICES OR
|
||||
CONTENT THEREIN, WHETHER BASED ON WARRANTY, CONTRACT, TORT (INCLUDING
|
||||
NEGLIGENCE), PRODUCT LIABILITY OR ANY OTHER LEGAL THEORY, AND WHETHER OR
|
||||
NOT HABITRPG HAS BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGE, EVEN IF
|
||||
A LIMITED REMEDY SET FORTH HEREIN IS FOUND TO HAVE FAILED OF ITS
|
||||
ESSENTIAL PURPOSE. YOU SPECIFICALLY ACKNOWLEDGE THAT HABITRPG IS NOT
|
||||
LIABLE FOR THE DEFAMATORY, OFFENSIVE OR ILLEGAL CONDUCT OF OTHER USERS
|
||||
OR THIRD PARTIES AND THAT THE RISK OF INJURY FROM THE FOREGOING RESTS
|
||||
ENTIRELY WITH YOU. FURTHER, HABITRPG WILL HAVE NO LIABILITY TO YOU OR TO
|
||||
ANY THIRD PARTY FOR ANY PUBLIC USER CONTENT OR THIRD-PARTY CONTENT UPLOADED
|
||||
ONTO OR DOWNLOADED FROM THE SITES OR THROUGH THE SERVICES.
|
||||
</p>
|
||||
<p>
|
||||
IN NO EVENT WILL HABITRPG'S AGGREGATE LIABILITY ARISING OUT OF OR
|
||||
IN CONNECTION WITH THESE TERMS OF SERVICE OR FROM THE USE OF OR
|
||||
INABILITY TO USE THE SITE, SERVICES OR CONTENT THEREIN EXCEED ONE
|
||||
HUNDRED U.S. DOLLARS ($100). THE LIMITATIONS OF DAMAGES SET FORTH ABOVE
|
||||
ARE FUNDAMENTAL ELEMENTS OF THE BASIS OF THE BARGAIN BETWEEN HABITRPG AND
|
||||
YOU. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF
|
||||
LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, SO THE ABOVE
|
||||
LIMITATION MAY NOT APPLY TO YOU.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Proprietary Rights Notices</strong>
|
||||
<br>All trademarks, service marks, logos, trade names and any other
|
||||
proprietary designations of HabitRPG used herein are trademarks or
|
||||
registered trademarks of HabitRPG. Any other trademarks, service marks,
|
||||
logos, trade names and any other proprietary designations are the
|
||||
trademarks or registered trademarks of their respective parties.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Controlling Law and Jurisdiction</strong>
|
||||
<br>These Terms of Service and any action related thereto will be governed
|
||||
by the laws of the State of California without regard to its conflict of
|
||||
laws provisions. The exclusive jurisdiction and venue of any action with
|
||||
respect to the subject matter of these Terms of Service will be the
|
||||
courts having jurisdiction over disputes arising in Santa Clara County,
|
||||
California, and each of the parties hereto waives any objection to
|
||||
jurisdiction and venue in such courts.
|
||||
</p>
|
||||
<p>
|
||||
YOU AGREE THAT IF YOU WANT TO SUE US, YOU MUST FILE YOUR LAWSUIT
|
||||
WITHIN ONE YEAR AFTER THE EVENT THAT GAVE RISE TO YOUR LAWSUIT.
|
||||
OTHERWISE, YOUR LAWSUIT WILL BE PERMANENTLY BARRED.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Export Control</strong>
|
||||
<br>You may not use or otherwise export or re-export the Services except as
|
||||
authorized by United States law and the laws of the jurisdiction in
|
||||
which the Services were obtained. In particular, but without limitation,
|
||||
the Services may not be exported or re-exported (a) into any U.S.
|
||||
embargoed countries or (b) to anyone on the U.S. Treasury Department's
|
||||
list of Specially Designated Nationals or the U.S. Department of
|
||||
Commerce Denied Person's List or Entity List. By using the Services, you
|
||||
represent and warrant that you are not located in any such country or on
|
||||
any such list. You also agree that you will not use these products for
|
||||
any purposes prohibited by United States law, including, without
|
||||
limitation, the development, design, manufacture or production of
|
||||
nuclear, missiles, or chemical or biological weapons.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Entire Agreement</strong>
|
||||
<br>These Terms of Service constitute the entire and exclusive understanding
|
||||
and agreement between HabitRPG and you regarding the Services and HabitRPG
|
||||
Content, and these Terms of Service supersede and replace any and all
|
||||
prior oral or written understandings or agreements between HabitRPG and
|
||||
you regarding the Services and HabitRPG Content.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Assignment</strong>
|
||||
<br>You may not assign or transfer these Terms of Service, by operation of
|
||||
law or otherwise, without HabitRPG's prior written consent. Any attempt
|
||||
by you to assign or transfer these Terms of Service, without such
|
||||
consent, will be null and of no effect. HabitRPG may freely assign these
|
||||
Terms of Service. Subject to the foregoing, these Terms of Service will
|
||||
bind and inure to the benefit of the parties, their successors and
|
||||
permitted assigns.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Notices</strong>
|
||||
<br>You consent to the use of: (i) electronic means to complete these Terms
|
||||
of Service and to deliver any notices or other communications permitted
|
||||
or required hereunder; and (ii) electronic records to store information
|
||||
related to these Terms of Service or your use of the Services. Any
|
||||
notices or other communications permitted to required hereunder,
|
||||
including those regarding modifications to these Terms of Service, will
|
||||
be in writing and given: (x) by HabitRPG via email (in each case to the
|
||||
address that you provide) or (y) by posting to the Sites or Services.
|
||||
For notices made by e-mail, the date of receipt will be deemed the date
|
||||
on which such notice is transmitted.
|
||||
</p>
|
||||
<p>
|
||||
<strong>General</strong>
|
||||
<br>The failure of HabitRPG to enforce any right or provision of these Terms
|
||||
of Service will not constitute a waiver of future enforcement of that
|
||||
right or provision. The waiver of any such right or provision will be
|
||||
effective only if in writing and signed by a duly authorized
|
||||
representative of HabitRPG. Except as expressly set forth in these Terms
|
||||
of Service, the exercise by either party of any of its remedies under
|
||||
these Terms of Service will be without prejudice to its other remedies
|
||||
under these Terms of Service or otherwise. If for any reason a court of
|
||||
competent jurisdiction finds any provision of these Terms of Service
|
||||
invalid or unenforceable, that provision will be enforced to the maximum
|
||||
extent permissible and the other provisions of these Terms of Service
|
||||
will remain in full force and effect.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Contacting Us</strong>
|
||||
<br>If you have any questions about these Terms of Service, please contact
|
||||
us at
|
||||
<a href="mailto:admin@habitica.com">admin@habitica.com</a>
|
||||
</p>
|
||||
<p>If your account is terminated, you will no longer have access to it, including to any of the associated data or Content. You will not be entitled to any refunds and we will have no liability to you. We also reserve the right to terminate any other accounts you may have created, as well as access to any other HabitRPG Service (also without refunds or liability to you).</p>
|
||||
<p>You understand and agree that using the Service comes with the risk that your account may be terminated or suspended at our discretion and at any time. Please keep this risk in mind and comport yourself appropriately.</p>
|
||||
<h2>API</h2>
|
||||
<p>You may access your Service data via the Application Program Interface ("API"). By using API you are automatically bound by the Agreement.</p>
|
||||
<h2>Using Our Service</h2>
|
||||
<p>You must follow any policies made available to you within the Service, including but not limited to the Terms of Service, Privacy Policy, and Community Guidelines. You may only use our Service as permitted by law. HabitRPG may investigate and/or suspend or terminate our Service to you at any time if we find your use of our Service violates the Terms and/or any policies.</p>
|
||||
<p>Using our Service does not grant you ownership of any intellectual property rights in our Service or the content you may have access to. You may not use any copyrighted content in our Service unless you obtain permission from the content owner and/or are otherwise permitted by law. The Terms do not grant you the right to use any branding or logos used in our Service. Our Service may display some logos, trademarks, or branding materials that are not the property of HabitRPG. Such content is the sole responsibility of the entity that makes it available.</p>
|
||||
<p>You may not abuse and/or misuse our Service, including but not limited to the following actions:</p>
|
||||
<ul>
|
||||
<li>Using the Service for any unlawful purposes or activities;</li>
|
||||
<li>Uploading any content to the Service in violation of any applicable law, including but not limited to intellectual property laws and publicity laws;</li>
|
||||
<li>Sending unsolicited promotions or advertisements;</li>
|
||||
<li>Accessing or tampering with the Service's server systems;</li>
|
||||
<li>Interfering with or disrupting the access of any user, host, or network;</li>
|
||||
<li>Abusing or submitting excessively frequent requests to the Service via the API</li>
|
||||
<li>Spamming chat, whether for personal or commercial purposes, by disrupting the flow of conversation with repeated postings;</li>
|
||||
<li>Impersonating any person, business, or entity, including an employee of HabitRPG, or member of the Habitica moderation team, or communicating in any way that makes it appear that the communication originates from Habitica staff or HabitRPG;</li>
|
||||
<li>Transmitting or communicating any content which, in the sole and exclusive discretion of HabitRPG, is deemed offensive, including language that is unlawful, harmful, threatening, abusive, harassing, defamatory, vulgar, obscene, sexually explicit, or racially, ethically, or otherwise objectionable,</li>
|
||||
<li>Participating in any action which, in the sole and exclusive judgment of HabitRPG, defrauds any other user of the Game, including by scamming or social engineering; or</li>
|
||||
<li>Inducing or encouraging others to violate the Community Guidelines or the Agreement.</li>
|
||||
</ul>
|
||||
<p>HabitRPG, in its sole discretion, will determine what constitutes abuse and/or misuse of our Service.</p>
|
||||
<h2>Premium Service and Payments</h2>
|
||||
<p>You may choose our free Service or paid Service ("Premium") depending on your needs. We do not guarantee when, if ever, Premium features will be available in the free Service. You may upgrade from free Service to Premium at any time by any of the following methods:</p>
|
||||
<ul>
|
||||
<li>Web: Selecting the user icon in the top right corner and selecting "Subscription" from the dropdown menu,</li>
|
||||
<li>Web: Clicking the green gem icon in the navigation bar at the top of the screen and following instructions to Subscribe or Buy Gems,</li>
|
||||
<li>Android: Tap the menu icon in the top left corner of the main screen and select "Gems & Subscription". Follow the instructions to make a purchase.</li>
|
||||
<li>iOS: Tap the menu icon in the lower right and select "Gems & Subscriptions". Follow the instructions to make a purchase.</li>
|
||||
</ul>
|
||||
<p>You will be charged the amount shown on Pricing before you can access Premium Service. All prices shown on Pricing are inclusive of any applicable sales taxes, levies, value-added taxes, or duties imposed by taxing authorities, and you are responsible for payment of all such taxes, levies, or duties. We may revise the Pricing at any time and may, from time to time, modify, amend, or supplement our fees and fee-billing methods. Such changes shall be effective upon posting on the Pricing page or elsewhere in the Service. If there is a dispute regarding payment of fees to us, we reserve the right to terminate or suspend your account at our sole discretion.</p>
|
||||
<p>BY PURCHASING PREMIUM YOU EXPRESSLY UNDERSTAND AND AGREE TO OUR REFUND POLICY:</p>
|
||||
<p>WITHIN THIRTY (30) DAYS OF YOUR PREMIUM PAYMENT DATE AS SHOWN ON YOUR PAYMENT BILL, YOU CAN REQUEST A FULL REFUND BY CONTACTING US AT ADMIN@HABITICA.COM. AFTER THIRTY (30) DAYS OF YOUR PREMIUM PAYMENT DATE, ANY PAYMENT REFUND IS SOLELY SUBJECT TO OUR DISCRETION. THE REFUND SHALL BE YOUR SOLE AND EXCLUSIVE REMEDY.</p>
|
||||
<p>FOR ANY CUSTOMER WHO PURCHASED PREMIUM IN APPLE INC.'s APP STORE ("APP STORE"), PLEASE CONTACT APPLE INC.'s SUPPORT TEAM: <a href="http://reportaproblem.apple.com" target="_blank">http://reportaproblem.apple.com</a>. APPLE'S APP STORE DOES NOT ALLOW DEVELOPERS TO ISSUE REFUND FOR APP STORE PURCHASES MADE BY CUSTOMERS.</p>
|
||||
<h2>Warranty Disclaimer</h2>
|
||||
<p>THE SERVICE AND ANY CONTENT MADE AVAILABLE BY HABITRPG VIA THE SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT ANY WARRANTIES OF ANY KIND, INCLUDING, WITHOUT LIMITATION, THAT THE SERVICE OR CONTENT WILL OPERATE ERROR-FREE OR THAT THE SERVICE OR CONTENT OR ITS SERVERS ARE FREE OF COMPUTER VIRUSES OR SIMILAR CONTAMINATION OR DESTRUCTIVE FEATURES.</p>
|
||||
<p>WE DISCLAIM ALL WARRANTIES, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF TITLE, MERCHANTABILITY, NON-INFRINGEMENT OF THIRD PARTIES' RIGHTS, AND FITNESS FOR PARTICULAR PURPOSE AND ANY WARRANTIES ARISING FROM A COURSE OF DEALING, COURSE OF PERFORMANCE, OR USAGE OF TRADE.</p>
|
||||
<p>WE RESERVE THE RIGHT TO MAKE CHANGES, CORRECTIONS, AND/OR IMPROVEMENTS TO THE SERVICE OR THE CONTENT AT ANY TIME WITHOUT NOTICE.</p>
|
||||
<p>IN CONNECTION WITH ANY WARRANTY, CONTRACT, OR COMMON LAW TORT CLAIMS: (I) WE AND OUR LICENSORS SHALL NOT BE LIABLE FOR ANY INCIDENTAL OR CONSEQUENTIAL DAMAGES, LOST PROFITS, OR DAMAGES RESULTING FROM LOST DATA OR BUSINESS INTERRUPTION RESULTING FROM THE USE OR INABILITY TO ACCESS AND USE THE SERVICE OR CONTENT POSTED BY HABITPRG, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES; AND (II) ANY DIRECT DAMAGES THAT YOU MAY SUFFER AS A RESULT OF YOUR USE OF THE PLATFORM SHALL BE LIMITED TO THE GREATER OF (I) MONIES YOU HAVE PAID US IN CONNECTION WITH YOUR USE OF THE PLATFORM DURING THE TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE EVENTS GIVING RISE TO THE CLAIM, OR (II) ONE HUNDRED US DOLLARS ($100).</p>
|
||||
<p>SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF CERTAIN WARRANTIES. THEREFORE, SOME OF THE ABOVE LIMITATIONS ON WARRANTIES IN THIS SECTION MAY NOT APPLY TO YOU. NOTHING IN THIS AGREEMENT SHALL AFFECT ANY NON-WAIVABLE STATUTORY RIGHTS THAT APPLY TO YOU.</p>
|
||||
<h2>Indemnification</h2>
|
||||
<p>You agree to defend, indemnify, and hold us and our officers, directors, employees, agents, successors, licensees, licensors, and assigns harmless from and against any damages, liabilities, losses, expenses, claims, actions, and/or demands, including, without limitation, reasonable legal and accounting fees, arising or resulting from: (i) your breach of any of your representations, warranties or other obligations under this Agreement; (ii) your use or misuse of the Service or content posted or made available by HabitRPG; and/or (iii) your violation of any third-party rights, including without limitation any copyright, trademark, property, publicity, or privacy right. We shall provide notice to you of any such claim, suit, or proceeding and shall assist you, at your expense, in defending any such claim, suit, or proceeding. We reserve the right to assume the exclusive defense and control (at your expense) of any matter that is subject to indemnification under this section. In such case, you agree to cooperate with any reasonable requests assisting our defense of such matter.</p>
|
||||
<h2>Compliance with Applicable Laws</h2>
|
||||
<p>The Service is based in the United States. We make no claims concerning whether the Service or posted content may be downloaded, viewed, or be appropriate for use outside of the United States. If you access the Service or such content from outside of the United States, you do so at your own risk. Whether inside or outside of the United States, you are solely responsible for ensuring compliance with the laws of your specific jurisdiction.</p>
|
||||
<h2>Binding Arbitration</h2>
|
||||
<p>In the event of a dispute arising under or relating to this Agreement or the Service (each, a "<u>Dispute</u>"), such dispute will be finally and exclusively resolved by binding arbitration governed by the Federal Arbitration Act ("<u>FAA</u>"). Any election to arbitrate, at any time, shall be final and binding on the other party. NEITHER PARTY SHALL HAVE THE RIGHT TO LITIGATE SUCH CLAIM IN COURT OR TO HAVE A JURY TRIAL, EXCEPT EITHER PARTY MAY BRING ITS CLAIM IN ITS LOCAL SMALL CLAIMS COURT, IF PERMITTED BY THAT SMALL CLAIMS COURT RULES AND IF WITHIN SUCH COURT'S JURISDICTION. ARBITRATION IS DIFFERENT FROM COURT, AND DISCOVERY AND APPEAL RIGHTS MAY ALSO BE LIMITED IN ARBITRATION. All disputes will be resolved before a neutral arbitrator selected jointly by the parties, whose decision will be final, except for a limited right of appeal under the FAA. The arbitration shall be commenced and conducted by JAMS pursuant to its then current Comprehensive Arbitration Rules and Procedures and in accordance with the Expedited Procedures in those rules, or, where appropriate, pursuant to JAMS' Streamlined Arbitration Rules and Procedures. All applicable JAMS' rules and procedures are available at the JAMS website <a href="https://www.jamsadr.com" target="_blank">www.jamsadr.com</a>. Each party will be responsible for paying any JAMS filing, administrative, and arbitrator fees in accordance with JAMS rules. Judgment on the arbitrator's award may be entered in any court having jurisdiction. This clause shall not preclude parties from seeking provisional remedies in aid of arbitration from a court of appropriate jurisdiction. The arbitration may be conducted in person, through the submission of documents, by phone, or online. If conducted in person, the arbitration shall take place in the United States county where you reside. The parties may litigate in court to compel arbitration, to stay a proceeding pending arbitration, or to confirm, modify, vacate, or enter judgment on the award entered by the arbitrator. The parties shall cooperate in good faith in the voluntary and informal exchange of all non-privileged documents and other information (including electronically stored information) relevant to the Dispute immediately after commencement of the arbitration. As set forth below, nothing in this Agreement will prevent us from seeking injunctive relief in any court of competent jurisdiction as necessary to protect our proprietary interests.</p>
|
||||
<p>ANY CLAIMS, ACTIONS OR PROCEEDINGS BY YOU MUST BE COMMENCED WITHIN ONE YEAR AFTER THE EVENT THAT GAVE RISE TO YOUR CLAIM OCCURS. ALL OTHER CLAIMS YOU MAY HAVE ARE PERMANENTLY BARRED.</p>
|
||||
<h2>Class Action Waiver</h2>
|
||||
<p>You agree that any arbitration or proceeding shall be limited to the Dispute between us and you individually. To the full extent permitted by law, (i) no arbitration or proceeding shall be joined with any other; (ii) there is no right or authority for any Dispute to be arbitrated or resolved on a class action-basis or to utilize class action procedures; and (iii) there is no right or authority for any Dispute to be brought in a purported representative capacity on behalf of the general public or any other persons. YOU AGREE THAT YOU MAY BRING CLAIMS AGAINST US ONLY IN YOUR INDIVIDUAL CAPACITY AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS OR REPRESENTATIVE PROCEEDING.</p>
|
||||
<h2>Equitable Relief</h2>
|
||||
<p>You acknowledge and agree that in the event of a breach or threatened violation of our intellectual property rights and confidential and proprietary information by you, we will suffer irreparable harm and will therefore be entitled to injunctive relief to enforce this Agreement. We may, without waiving any other remedies under this Agreement, seek from any court having jurisdiction any interim, equitable, provisional, or injunctive relief that is necessary to protect our rights and property pending the outcome of the arbitration referenced above.</p>
|
||||
<h2>Contact Us</h2>
|
||||
<p>If you have any questions about the Agreement, or want to report a violation (including DMCA take-down notices relating to infringement of copyright) please contact us at <a href="mailto:admin@habitica.com">admin@habitica.com</a>.</p>
|
||||
<h2>Miscellaneous</h2>
|
||||
<p>This Agreement and any action related thereto will be governed by the laws of the State of California without regard to its conflict of laws provisions. Our failure to act on or enforce any provision of this Agreement shall not be construed as a waiver of that provision or any other provision therein. No waiver shall be effective against us unless made in writing, and no such waiver shall be construed as a waiver in any other or subsequent instance. Except as expressly agreed by us and you in writing, this Agreement constitutes the entire agreement between you and us with respect to the subject matter, and supersedes all previous or contemporaneous agreements, whether written or oral, between the parties with respect to the subject matter. The section headings are provided merely for convenience and shall not be given any legal import. This Agreement will inure to the benefit of our successors, assigns, licensees, and sublicensees.</p>
|
||||
</div>
|
||||
<!-- eslint-enable max-len -->
|
||||
</template>
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
export const PAGES = {
|
||||
PRIVATE_MESSAGES: '/private-messages',
|
||||
};
|
||||
|
||||
export const MODALS = {
|
||||
BUG_REPORT: 'bug-report-modal',
|
||||
BUG_REPORT_SUCCESS: 'bug-report-success-modal',
|
||||
};
|
||||
@@ -1,34 +1,9 @@
|
||||
import { mapState } from '@/libs/store';
|
||||
import { MODALS } from '@/libs/consts';
|
||||
|
||||
export default {
|
||||
computed: {
|
||||
...mapState({ user: 'user.data' }),
|
||||
bugReportMailto () {
|
||||
let subscriptionInfo = 'Not Subscribed';
|
||||
if (!this.user) {
|
||||
return 'mailto:admin@habitica.com?subject=Habitica Web Bug Report';
|
||||
}
|
||||
if (this.user.purchased.plan.customerId) {
|
||||
subscriptionInfo = `
|
||||
Subscription: ${this.user.purchased.plan.planId}%0d%0a
|
||||
Payment Platform: ${this.user.purchased.plan.paymentMethod}%0d%0a
|
||||
Customer ID: ${this.user.purchased.plan.customerId}%0d%0a
|
||||
Consecutive Months: ${this.user.purchased.plan.consecutive.count}%0d%0a
|
||||
Offset Months: ${this.user.purchased.plan.consecutive.offset}%0d%0a
|
||||
Mystic Hourglasses: ${this.user.purchased.plan.consecutive.trinkets}
|
||||
`;
|
||||
}
|
||||
return `mailto:admin@habitica.com?subject=Habitica Web Bug Report&body=
|
||||
Please describe the issue you encountered:%0d%0a%0d%0a
|
||||
User ID: ${this.user._id}%0d%0a
|
||||
Level: ${this.user.stats.lvl}%0d%0a
|
||||
Class: ${this.user.stats.class}%0d%0a
|
||||
Dailies Paused: ${this.user.preferences.sleep}%0d%0a
|
||||
Uses Costume: ${this.user.preferences.costume}%0d%0a
|
||||
Custom Day Start: ${this.user.preferences.dayStart}%0d%0a
|
||||
Timezone Offset: ${this.user.preferences.timezoneOffset}%0d%0a
|
||||
${subscriptionInfo}
|
||||
`;
|
||||
methods: {
|
||||
openBugReportModal () {
|
||||
this.$root.$emit('bv::show::modal', MODALS.BUG_REPORT);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -4,6 +4,7 @@ import getStore from '@/store';
|
||||
import handleRedirect from './handleRedirect';
|
||||
|
||||
import ParentPage from '@/components/parentPage';
|
||||
import { PAGES } from '@/libs/consts';
|
||||
|
||||
// NOTE: when adding a page make sure to implement setTitle
|
||||
|
||||
@@ -201,7 +202,7 @@ const router = new VueRouter({
|
||||
},
|
||||
],
|
||||
},
|
||||
{ path: '/private-messages', name: 'privateMessages', component: MessagesIndex },
|
||||
{ path: PAGES.PRIVATE_MESSAGES, name: 'privateMessages', component: MessagesIndex },
|
||||
{
|
||||
name: 'challenges',
|
||||
path: '/challenges',
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
"shops": "Obchody",
|
||||
"custom": "Vlastní",
|
||||
"wishlist": "Seznam přání",
|
||||
"wrongItemType": "Item typu \"<%= type %>\" není platný.",
|
||||
"wrongItemType": "Předmět typu \"<%= type %>\" není platný.",
|
||||
"wrongItemPath": "Cesta k předmětu \"<%= path %>\" je nesprávná.",
|
||||
"unpinnedItem": "Odepnul jsi <%= item %>! Nebude se nadále zobrazovat ve tvém sloupci odměn.",
|
||||
"cannotUnpinArmoirPotion": "Lektvar zdraví a Začarovanou almaru nelze odepnout.",
|
||||
@@ -94,7 +94,7 @@
|
||||
"classGearText": "Gratuluji k vybrání povolání! Přidal jsem ti základní zbraň do tvého inventáře. Podívej se dolů a vybav se!",
|
||||
"autoAllocate": "Připisovat automaticky",
|
||||
"spells": "Dovednosti",
|
||||
"skillsTitle": "Dovednosti",
|
||||
"skillsTitle": "<%= classStr %> Dovednosti",
|
||||
"toDo": "úkol",
|
||||
"tourStatsPage": "Tohle je stránka s tvými statistikami! Získej ocenění za splnění vyjmenovaných úkolů.",
|
||||
"tourTavernPage": "Vítej v Krčmě, chatu pro všechny věkové kategorie! V případě nemoci, nebo třeba dovolené, se můžeš ochránit proti zranění za nesplněné Denní úkoly kliknutím na \"Pauznout poškození\". Přijď nás pozdravit!",
|
||||
@@ -123,5 +123,12 @@
|
||||
"paymentAutoRenew": "Toto předplatné se automaticky obnoví, dokud nebude zrušeno. Pokud potřebujete předplatné zrušit, můžete tak učinit z nastavení.",
|
||||
"cannotUnpinItem": "Tuto položku nelze odepnout.",
|
||||
"paymentSubBillingWithMethod": "Tvé předplatné <strong>$<%= amount %> bude účtováno </strong> každé/CZ <strong><%= months %> měsíce/ů </strong> skrze <strong><%= paymentMethod %></strong>.",
|
||||
"invalidUnlockSet": "Tento set předmětů je prošlý a nemůže být odemčen."
|
||||
"invalidUnlockSet": "Tento set předmětů je prošlý a nemůže být odemčen.",
|
||||
"amountExp": "<%= amount %> Zk",
|
||||
"limitedAvailabilityDays": "K získání na <%= dny %>d <%= hodin%>h <%= minut %>m",
|
||||
"nGemsGift": "<%= nGems %> Drahokamy (Dárek)",
|
||||
"nMonthsSubscriptionGift": "<%= nMonths %> Měsíční odběr (Dárek)",
|
||||
"nGems": "<%= nGems %> Drahokamy",
|
||||
"limitedAvailabilityHours": "K získání na <%= hodin %>h <%= minut %>m",
|
||||
"limitedAvailabilityMinutes": "K získání na <%= minut %>m <%= sekund %>s"
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"spellWizardEarthText": "Zemětřesení",
|
||||
"spellWizardEarthNotes": "Tvá psychická síla otřásá zemí a tvá družina získává bonus k Inteligenci! (Vypočteno na základě: INT před bonusem)",
|
||||
"spellWizardFrostText": "Ledový mráz",
|
||||
"spellWizardFrostNotes": "S jedním sesláním kouzla led zmrazil všechny tvé série, takže se žádná zítra nezresetuje na 0! ",
|
||||
"spellWizardFrostNotes": "S jedním sesláním kouzla led zmrazil všechny tvé série, takže se žádná zítra nezresetuje na 0!",
|
||||
"spellWizardFrostAlreadyCast": "Toto kouzlo už jsi dnes seslal. Tvé série jsou zmraženy a tak není důvod sesílat tohle kouzlo znovu.",
|
||||
"spellWarriorSmashText": "Brutální rána",
|
||||
"spellWarriorSmashNotes": "Úkoly ti více zmodrají/méně zčervenají, a uštědříš extra poškození Bossům! (Vypočteno na základě: SÍL)",
|
||||
@@ -16,11 +16,11 @@
|
||||
"spellWarriorValorousPresenceNotes": "Tvá odvaha přidá bonus k Síle celé tvé družině! (Vypočteno na základě: SÍL před bonusem)",
|
||||
"spellWarriorIntimidateText": "Zastrašující pohled",
|
||||
"spellWarriorIntimidateNotes": "Tvůj nebojácný pohled přidá bonus k Obraně celé tvé družiny! (Vypočteno na základě: OBR před bonusem)",
|
||||
"spellRoguePickPocketText": "Vybrat kapsy",
|
||||
"spellRoguePickPocketText": "Kapsář",
|
||||
"spellRoguePickPocketNotes": "Okradeš blízký úkol a získáš zlato! (Vypočteno na základě: VNM)",
|
||||
"spellRogueBackStabText": "Kudla do zad",
|
||||
"spellRogueBackStabNotes": "Podvedeš naivní úkol a získáš zlato a zkušenosti! (Vypočteno na základě: SÍL)",
|
||||
"spellRogueToolsOfTradeText": "Nástroje k obchodování",
|
||||
"spellRogueToolsOfTradeText": "Nástroje obchodu",
|
||||
"spellRogueToolsOfTradeNotes": "Tvé lstivé talenty přidají bonus celé tvé družině k Vnímání! (Vypočteno na základě: VNM před bonusem)",
|
||||
"spellRogueStealthText": "Plížení",
|
||||
"spellRogueStealthNotes": "S každým sesláním kouzla ti pár z tvých nesplněných úkolů dnes v noci neublíží. Jejich série a barva zůstane nezměněna. (Vypočteno na základě: VNM)",
|
||||
@@ -31,7 +31,7 @@
|
||||
"spellHealerBrightnessText": "Spalující záře",
|
||||
"spellHealerBrightnessNotes": "Záblesk světla změní tvé úkoly na více modré/méně červené! (Vypočteno na základě: INT)",
|
||||
"spellHealerProtectAuraText": "Ochranná aura",
|
||||
"spellHealerProtectAuraNotes": "Zaštítíš tvoji družinu tím, že jim přidáš bonus k jejich Obraně! (Vypočteno na základě: OBR před bonusem)",
|
||||
"spellHealerProtectAuraNotes": "Zaštítíš tvoji družinu přidáním bonusu k jejich Obraně! (Vypočteno na základě: OBR před bonusem)",
|
||||
"spellHealerHealAllText": "Požehnání",
|
||||
"spellHealerHealAllNotes": "Tvé uklidňující kouzlo obnovuje celé tvé družině zdraví! (Vypočteno na základě: OBR a INT)",
|
||||
"spellSpecialSnowballAuraText": "Sněhová koule",
|
||||
@@ -51,10 +51,10 @@
|
||||
"spellSpecialSandText": "Písek",
|
||||
"spellSpecialSandNotes": "Zvrať kouzlo, které z tebe udělalo mořskou hvězdu.",
|
||||
"partyNotFound": "Družina nenalezena",
|
||||
"targetIdUUID": "„ targetId\" musí být platné ID uživatele.",
|
||||
"targetIdUUID": "„targetId\" musí být platné ID uživatele.",
|
||||
"challengeTasksNoCast": "Použití schopnosti na úkol z výzvy není povoleno.",
|
||||
"groupTasksNoCast": "Používání schopností na skupinové úkoly není povoleno.",
|
||||
"spellNotOwned": "Nevlastníte tuto schopnost.",
|
||||
"spellLevelTooHigh": "Pro použití této schopnosti musíte být úroveň <%= level %>.",
|
||||
"spellNotOwned": "Nevlastníš tuto schopnost.",
|
||||
"spellLevelTooHigh": "Pro použití této schopnosti musíš být úroveň <%= level %>.",
|
||||
"spellAlreadyCast": "Použití této dovednosti nebude mít žádný další efekt."
|
||||
}
|
||||
|
||||
@@ -653,5 +653,12 @@
|
||||
"backgroundSpiralStaircaseText": "Wendeltreppe",
|
||||
"backgrounds112021": "Set 90: Veröffentlicht im November 2021",
|
||||
"backgroundSpiralStaircaseNotes": "Steige auf, ab, immer rundherum auf einer Wendeltreppe.",
|
||||
"backgroundFortuneTellersShopNotes": "Spüre verlockende Hinweise auf Deine Zukunft im Wahrsager-Laden auf."
|
||||
"backgroundFortuneTellersShopNotes": "Spüre verlockende Hinweise auf Deine Zukunft im Wahrsager-Laden auf.",
|
||||
"backgroundWinterCanyonShopNotes": "Wage ein Abenteuer in einer winterlichen Schlucht!",
|
||||
"backgroundIcePalaceShopText": "Eispalast",
|
||||
"backgroundFrozenPolarWatersText": "Gefrorene Polargewässer",
|
||||
"backgroundFrozenPolarWatersNotes": "Erforsche gefrorene Polargewässer.",
|
||||
"backgrounds122021": "Set 91: Veröffentlicht im Dezember 2021",
|
||||
"backgroundWinterCanyonShopText": "Winterliche Schlucht",
|
||||
"backgroundIcePalaceShopNotes": "Herrsche in einem Eispalast."
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"commGuidePara031": "Einige öffentlichen Gilden werden sensible Themen wie Depressionen, Religion, Politik usw. enthalten. Dies ist in Ordnung, solange die Gespräche darin nicht gegen die Allgemeinen Geschäftsbedingungen oder die Regeln des öffentlichen Raums verstoßen und solange sie beim Thema bleiben.",
|
||||
"commGuidePara033": "<strong>Öffentliche Gilden dürfen KEINE Inhalte \"ab 18\" enthalten. Wenn geplant ist, regelmäßig über sensible Inhalte zu diskutieren, sollte dies in der Gildenbeschreibung angegeben werden</strong>. Auf diese Weise soll Habitica sicher und angenehm für alle sein.",
|
||||
"commGuidePara035": "<strong>Wenn die betreffende Gilde verschiedene Arten von heiklen Themen hat, ist es respektvoll gegenüber Deinen Habiticanern, eine Warnung vor Deinen Kommentar zu stellen (z.B. \"Warnung: erwähnt Selbstverletzung\")</strong>. Diese können als Triggerwarnungen und/oder Inhaltshinweise bezeichnet werden, und Gilden können zusätzlich zu den hier angegebenen Regeln eigene Regeln haben. Wenn möglich, verwende bitte <a href='https://habitica.fandom.com/wiki/Markdown_Cheat_Sheet' target='_blank'>Markdown</a> um die potenziell heiklen Inhalte unterhalb von Zeilenumbrüchen auszublenden, damit diejenigen, die sie nicht lesen möchten, darüber hinweg scrollen können, ohne den Inhalt zu sehen. Mitarbeiter und Moderatoren von Habitica können dieses Material nach eigenem Ermessen trotzdem entfernen.",
|
||||
"commGuidePara036": "Außerdem sollte das heikle Material themenrelevant sein – Selbstverletzung in einer Gilde ansprechen, die sich auf die Bekämpfung von Depressionen konzentriert, kann sinnvoll sein, ist aber in einer Musikgilde wahrscheinlich weniger angebracht. Wenn Du jemanden siehst, der wiederholt gegen diese Richtlinie verstößt, insbesondere nach mehreren Anfragen, markiere bitte die Beiträge und benachrichtige unsere Community Manager über <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>.",
|
||||
"commGuidePara036": "Außerdem sollte das heikle Material themenrelevant sein – Selbstverletzung in einer Gilde ansprechen, die sich auf die Bekämpfung von Depressionen konzentriert, kann sinnvoll sein, ist aber in einer Musikgilde wahrscheinlich weniger angebracht. Wenn Du jemanden siehst, der wiederholt gegen diese Richtlinie verstößt, insbesondere nach mehreren Anfragen, melde bitte die Beiträge.",
|
||||
"commGuidePara037": "<strong>Es sollte niemals eine Gilde, egal ob öffentlich oder privat, gegründet werden, die als Ziel hat, ein Individuum oder eine Gruppe anzugreifen</strong>. So eine Gilde zu erstellen führt zu einer sofortigen Accountsperre. Bekämpfe schlechte Angewohnheiten, nicht Deine Mitabenteurer!",
|
||||
"commGuidePara038": "<strong>Alle Tavernen-Herausforderungen und Herausforderungen öffentlicher Gilden müssen sich ebenfalls an diese Regeln halten</strong>.",
|
||||
"commGuideHeadingInfractionsEtc": "Regelverletzungen, Konsequenzen und Wiederherstellung",
|
||||
|
||||
@@ -369,5 +369,6 @@
|
||||
"hatchingPotionMossyStone": "Moosbedeckter Stein",
|
||||
"hatchingPotionSunset": "Sonnenuntergang",
|
||||
"hatchingPotionSolarSystem": "Sonnensystem",
|
||||
"hatchingPotionMoonglow": "Mondschein"
|
||||
"hatchingPotionMoonglow": "Mondschein",
|
||||
"hatchingPotionOnyx": "Onyx"
|
||||
}
|
||||
|
||||
@@ -2490,5 +2490,7 @@
|
||||
"headSpecialFall2021HealerNotes": "Deine eigene Magie lässt deine Haare zu schockierenden, hellen Flammen werden, wenn du diese Maske aufsetzt. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2021 Herbstausrüstung.",
|
||||
"weaponArmoireSkullLanternText": "Totenkopflaterne",
|
||||
"weaponArmoireSkullLanternNotes": "Lasse ihr Leuchten deinen Weg durch die tiefste Finsternis erhellen. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank:Unabhängiger Gegenstand.",
|
||||
"offHandCapitalized": "Schildhand-Gegenstand"
|
||||
"offHandCapitalized": "Schildhand-Gegenstand",
|
||||
"armorMystery202112Text": "Antarktischer Nixenschwanz",
|
||||
"armorMystery202112Notes": "Gleite mit diesem schimmerden Schwanz durch eisige Gewässser ohne jegliche Kälte zu spühren. Gewährt keinen Attributbonus. Dezember 2021 Abonnentengegenstand."
|
||||
}
|
||||
|
||||
@@ -736,5 +736,13 @@
|
||||
"questSolarSystemBoss": "Ablenkungsartige",
|
||||
"questSolarSystemText": "Eine Reise von kosmischer Konzentration",
|
||||
"questSolarSystemNotes": "Deine Party reist durch das Universum, bestaunt es aus einem fantastischen Luftschiff heraus, das der talentierte Weltraumingenieur @gawrone entworfen hat. Sein meditativer Antrieb vertraut auf die Ruhe Deiner Party, um nicht vom Kurs abzukommen.<br><br>Geradeaus, in den Wolken funkelnder Galaxien, entdeckst Du einen bedrohlich pulsierenden Stern. \"Bleibt konzentriert\", warnt @beffymaroo. \"Wenn wir uns zu sehr ablenken lassen, während wir durch diese Nova fliegen, könnte uns die Sogwirkung zwischen dem Stern und unserem Schiff vom Kurs abbringen!\"<br><br>Als ihr euch dem Stern nähert, kommen dem Schiff pulsierende, seltsame Energien entgegen.<br><br>\"Das sind Ablenkungsartige, Gedankengeschöpfe, die uns in die Irre führen wollen\", sagt @SabreCat. \"Wenn wir es schaffen, sie vorbeischweben zu lassen, ohne uns wegzutragen, sollten wir unser Ziel im Blick behalten können!\"",
|
||||
"questSolarSystemCompletion": "Mit viel Sorgfalt schaffen es Du und Deine Bande, die Ablenkungsartigen davon abzuhalten, euch über Bord zu werfen, einfach, indem ihr sie bemerkt und zur Kenntnis nehmt, ohne ihnen die Oberhand zu gewähren. Als ihr unversehrt am pulsierenden Stern vorbeikommt, bemerkt @gawrone eine Ansammlung von schwebenden Flaschen und zieht sie an Bord. Jede scheint ein eigenes winziges Sonnensystem zu beinhalten!<br><br>\"Oh, es sieht so aus, als hätte uns unsere harte Arbeit herrliche Belohnungen eingebracht!\", sagt @beffymaroo. \"Lasst uns sehen, welche himmlischen Wunder uns erwarten, wenn wir Haustier-Eier mit diesen neuen Elixieren ausbrüten.\""
|
||||
"questSolarSystemCompletion": "Mit viel Sorgfalt schaffen es Du und Deine Bande, die Ablenkungsartigen davon abzuhalten, euch über Bord zu werfen, einfach, indem ihr sie bemerkt und zur Kenntnis nehmt, ohne ihnen die Oberhand zu gewähren. Als ihr unversehrt am pulsierenden Stern vorbeikommt, bemerkt @gawrone eine Ansammlung von schwebenden Flaschen und zieht sie an Bord. Jede scheint ein eigenes winziges Sonnensystem zu beinhalten!<br><br>\"Oh, es sieht so aus, als hätte uns unsere harte Arbeit herrliche Belohnungen eingebracht!\", sagt @beffymaroo. \"Lasst uns sehen, welche himmlischen Wunder uns erwarten, wenn wir Haustier-Eier mit diesen neuen Elixieren ausbrüten.\"",
|
||||
"questOnyxNotes": "@Vikte, @aspiring_advocate und @starsystemic wissen das du dich in letzter Zeit unmotiviert fühlst, und haben sich gedacht, das ein spaßiger Tag deine Stimmung vielleicht wieder hebt. \"spaßig\" heißt hier aber, auf ein tiefsee Tauchabenteuer zu gehen und in der dunklen Gletscherspalte nach Schätzen zu suchen. Du ziehst deine Tauchausrüstung an, besteigst dein Boot, und ruderst in Richtung der antiken Stadt Dilatory. Auf dem weg fragst du sie, nach welcher art von Schatz du suchen sollst.<br><br>\"Pluto Runen!\" ruft @Vikte.<br><br>\"Nein, Leo Runen!\" ruft @aspiring_advocate.<br><br>\"Nein, Onyx Steine!\" ruft @starsystemic.<br><br>Während sie miteinander diskutieren, schaust du in den Ozean, und siehst den Höhleneingang direkt unter dir! Aufgeregt springst du ins Wasser, tauchst hinab, und lässt das Trio zurück das dir hinterher schaut, während du direkt in Richtung Eingang tauchst, um selbst nach den Schätzen zu suchen.",
|
||||
"questOnyxText": "Die Onyx Odyssee",
|
||||
"questOnyxCompletion": "Als du in die Höhle hineintauchst, schießen Fangschreckenkrebse die dort zu wohnen scheinen und die du anscheinend verschreckt hast, davon. Sie kehren aber schnell wieder zurück, tragen nun aber farbige Kugeln bei sich. Schnell realisierst du, das diese Kugeln die Schätze sein müssen, von denen das Trio sprach! Du packst dir eine ausreichende Menge von jedem Typ ein, verabschiedest dich von den Krebsen, und tauchst zurück zur Oberfläche. Dort helfen dir die anderen aufs Boot.<br><br>\"Wo warst du?\" fragt @Vikte. Als Antwort zeigst du ihnen nur die Kugeln die du gesammelt hast.<br><br>\"Mit diesen Zutaten kann man Magische Onyx Schlüpfelixiere herstellen!\", sagt @aspiring_advocate aufgeregt während ihr zurück zur Küste fahrt.<br><br>\"Also... können wir Onyx Hautiere züchten!\" sagt @starsystemic mit einem breiten grinsen auf dem Gesicht. \"Haben wir nicht gesagt das dieses Abenteuer spaßig wird?\"<br><br>Du grinst zurück, gespannt auf die neuen Haustiere, und bereit deine Aufgaben abzuschließen!",
|
||||
"questOnyxCollectPlutoRunes": "Pluto Runen",
|
||||
"questOnyxCollectLeoRunes": "Leo Runen",
|
||||
"questOnyxCollectOnyxStones": "Onyx Steine",
|
||||
"questOnyxDropOnyxPotion": "Onyx Schlüpfelixier",
|
||||
"questOnyxUnlockText": "Schaltet das Onyx Schlüpfelixier zum Kauf auf dem Marktplatz frei"
|
||||
}
|
||||
|
||||
@@ -198,5 +198,6 @@
|
||||
"mysterySet202109": "Mondschmetterlings-Set",
|
||||
"mysterySet202108": "Feuriges Shōnen Set",
|
||||
"mysterySet202110": "Moosbewachsenes Wasserspeier Set",
|
||||
"mysterySet202111": "Kosmisches Zeitzauberei Set"
|
||||
"mysterySet202111": "Kosmisches Zeitzauberei Set",
|
||||
"mysterySet202112": "Antarktisches Undinen Set"
|
||||
}
|
||||
|
||||
@@ -739,10 +739,10 @@
|
||||
"backgroundSpiralStaircaseNotes": "Climb up, down, round and round a Spiral Staircase.",
|
||||
|
||||
"backgrounds122021": "SET 91: Released December 2021",
|
||||
"backgroundWinterCanyonShopText": "Winter Canyon",
|
||||
"backgroundWinterCanyonShopNotes": "Adventure in a Winter Canyon!",
|
||||
"backgroundIcePalaceShopText": "Ice Palace",
|
||||
"backgroundIcePalaceShopNotes": "Reign in the Ice Palace.",
|
||||
"backgroundWinterCanyonText": "Winter Canyon",
|
||||
"backgroundWinterCanyonNotes": "Adventure in a Winter Canyon!",
|
||||
"backgroundIcePalaceText": "Ice Palace",
|
||||
"backgroundIcePalaceNotes": "Reign in the Ice Palace.",
|
||||
"backgroundFrozenPolarWatersText": "Frozen Polar Waters",
|
||||
"backgroundFrozenPolarWatersNotes": "Explore Frozen Polar Waters.",
|
||||
|
||||
|
||||
@@ -416,6 +416,15 @@
|
||||
"weaponSpecialFall2021HealerText": "Summoning Wand",
|
||||
"weaponSpecialFall2021HealerNotes": "Use this wand to summon healing flames and a ghostly creature to help you. Increases Intelligence by <%= int %>. Limited Edition 2021 Autumn Gear.",
|
||||
|
||||
"weaponSpecialWinter2022RogueText": "Shooting Star Firework",
|
||||
"weaponSpecialWinter2022RogueNotes": "Silver and gold are beloved of Rogues, right? These are totally on theme. Increases Strength by <%= str %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"weaponSpecialWinter2022WarriorText": "Candy Cane Sword",
|
||||
"weaponSpecialWinter2022WarriorNotes": "How many licks does it take to sharpen this candy cane into the perfect sword? Increases Strength by <%= str %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"weaponSpecialWinter2022MageText": "Pomegranate Staff",
|
||||
"weaponSpecialWinter2022MageNotes": "The berries on this staff contain an ancient magic to be wielded in winter. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"weaponSpecialWinter2022HealerText": "Crystalline Ice Wand",
|
||||
"weaponSpecialWinter2022HealerNotes": "Touch this solid-water implement to a friend's neck and they'll jump out of their chair! But they'll feel better afterward. Hopefully.Increases Intelligence by <%= int %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
|
||||
"weaponMystery201411Text": "Pitchfork of Feasting",
|
||||
"weaponMystery201411Notes": "Stab your enemies or dig in to your favorite foods - this versatile pitchfork does it all! Confers no benefit. November 2014 Subscriber Item.",
|
||||
"weaponMystery201502Text": "Shimmery Winged Staff of Love and Also Truth",
|
||||
@@ -996,6 +1005,15 @@
|
||||
"armorSpecialFall2021HealerText": "Summoner's Robes",
|
||||
"armorSpecialFall2021HealerNotes": "Made of durable, flame-resistant fabric, these robes are perfect to wear when conjuring healing flames. Increases Constitution by <%= con %>. Limited Edition 2021 Autumn Gear.",
|
||||
|
||||
"armorSpecialWinter2022RogueText": "Dazzling Explosion",
|
||||
"armorSpecialWinter2022RogueNotes": "If they're seeing stars, they're not seeing you! Yes, let's go with that. Increases Perception by <%= per %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"armorSpecialWinter2022WarriorText": "Fuzzy Stocking",
|
||||
"armorSpecialWinter2022WarriorNotes": "Who says you can’t be snug and cozy while doing battle with everyday tasks? Increases Constitution by <%= con %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"armorSpecialWinter2022MageText": "Pomegranate Protection",
|
||||
"armorSpecialWinter2022MageNotes": "Enemies should watch out for fruit juice stains when you approach! Increases Intelligence by <%= int %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"armorSpecialWinter2022HealerText": "Crystalline Ice Armor",
|
||||
"armorSpecialWinter2022HealerNotes": "Glide as if skating, just above the ground, a glittering ethereal figure come to bring cool and calm. Increases Constitution by <%= con %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
|
||||
"armorMystery201402Text": "Messenger Robes",
|
||||
"armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.",
|
||||
"armorMystery201403Text": "Forest Walker Armor",
|
||||
@@ -1665,6 +1683,15 @@
|
||||
"headSpecialFall2021HealerText": "Summoner's Mask",
|
||||
"headSpecialFall2021HealerNotes": "Your own magic turns your hair into shocking, bright flames when you don this mask. Increases Intelligence by <%= int %>. Limited Edition 2021 Autumn Gear.",
|
||||
|
||||
"headSpecialWinter2022RogueText": "Thundering Finale",
|
||||
"headSpecialWinter2022RogueNotes": "What? Huh? There's a Rogue where? I'm sorry, I can't hear anything over these fireworks! Increases Perception by <%= per %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"headSpecialWinter2022WarriorText": "Fuzzy Stocking Cap",
|
||||
"headSpecialWinter2022WarriorNotes": "In festive green with soft red trim, this hat is guaranteed to keep you warm all winter. Increases Strength by <%= str %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"headSpecialWinter2022MageText": "Pomegranate Helm",
|
||||
"headSpecialWinter2022MageNotes": "Due to its thick husk, this festive, fruity helmet is berry strong. Increases Perception by <%= per %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"headSpecialWinter2022HealerText": "Crystalline Ice Crown",
|
||||
"headSpecialWinter2022HealerNotes": "Minute imperfections and impurities send the arms of this headdress branching out in unpredictable directions. It's symbolic! And also very, very pretty. Increases Intelligence by <%= int %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
|
||||
"headSpecialGaymerxText": "Rainbow Warrior Helm",
|
||||
"headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.",
|
||||
|
||||
@@ -2185,6 +2212,11 @@
|
||||
"shieldSpecialFall2021HealerText": "Summoned Creature",
|
||||
"shieldSpecialFall2021HealerNotes": "An ethereal being rises from your magical flames to grant you extra protection. Increases Constitution by <%= con %>. Limited Edition 2021 Autumn Gear.",
|
||||
|
||||
"shieldSpecialWinter2022WarriorText": "Jingle Bell Shield",
|
||||
"shieldSpecialWinter2022WarriorNotes": "This is a jingle bell, jingle bell, jingle bell shield. Jingle bell protect and jingle bell deflect. Increases Constitution by <%= con %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"shieldSpecialWinter2022HealerText": "Enduring Ice Crystal",
|
||||
"shieldSpecialWinter2022HealerNotes": "Though it melts in your hand, the power of elemental ice replenishes it from within. Increases Constitution by <%= con %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
|
||||
"shieldMystery201601Text": "Resolution Slayer",
|
||||
"shieldMystery201601Notes": "This blade can be used to parry away all distractions. Confers no benefit. January 2016 Subscriber Item.",
|
||||
"shieldMystery201701Text": "Time-Freezer Shield",
|
||||
|
||||
@@ -93,6 +93,16 @@
|
||||
"audioTheme_pizildenTheme": "Pizilden's Theme",
|
||||
"audioTheme_farvoidTheme": "Farvoid Theme",
|
||||
"reportBug": "Report a Bug",
|
||||
"reportBugHeaderDescribe": "Please describe the bug you’re experiencing and our team will get back to you.",
|
||||
"reportEmailText": "This will only be used to contact you regarding the bug report.",
|
||||
"reportEmailPlaceholder": "Your email address",
|
||||
"reportEmailError": "Please provide a valid email address",
|
||||
"reportDescription": "Description",
|
||||
"reportDescriptionText": "Include screenshots or Javascript console errors if helpful.",
|
||||
"reportDescriptionPlaceholder": "Describe the bug in detail here",
|
||||
"submitBugReport": "Submit Bug Report",
|
||||
"reportSent": "Bug report sent!",
|
||||
"reportSentDescription": "We’ll get back to you once our team has a chance to investigate. Thank you for reporting the issue.",
|
||||
"overview": "Overview for New Users",
|
||||
"dateFormat": "Date Format",
|
||||
"achievementStressbeast": "Savior of Stoïkalm",
|
||||
@@ -201,5 +211,6 @@
|
||||
"howManyToBuy": "How many would you like to buy?",
|
||||
"contactForm": "Contact the Moderation Team",
|
||||
"loadEarlierMessages": "Load Earlier Messages",
|
||||
"askQuestion": "Ask a Question"
|
||||
"askQuestion": "Ask a Question",
|
||||
"emptyReportBugMessage": "Report Bug Message missing"
|
||||
}
|
||||
|
||||
@@ -175,6 +175,10 @@
|
||||
"fall2021HeadlessWarriorSet": "Headless (Warrior)",
|
||||
"fall2021BrainEaterMageSet": "Brain Eater (Mage)",
|
||||
"fall2021FlameSummonerHealerSet": "Flame Summoner (Healer)",
|
||||
"winter2022FireworksRogueSet": "Fireworks (Rogue)",
|
||||
"winter2022StockingWarriorSet": "Stocking (Warrior)",
|
||||
"winter2022PomegranateMageSet": "Pomegranate (Mage)",
|
||||
"winter2022IceCrystalHealerSet": "Ice Crystal (Healer)",
|
||||
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
|
||||
"eventAvailabilityReturning": "Available for purchase until <%= availableDate(locale) %>. This potion was last available in <%= previousDate(locale) %>.",
|
||||
"dateEndMarch": "April 30",
|
||||
@@ -188,6 +192,7 @@
|
||||
"mayYYYY": "May <%= year %>",
|
||||
"juneYYYY": "June <%= year %>",
|
||||
"novemberYYYY": "November <%= year %>",
|
||||
"januaryYYYY": "January <%= year %>",
|
||||
"dateEndJuly": "July 31",
|
||||
"dateEndAugust": "August 31",
|
||||
"dateEndSeptember": "September 21",
|
||||
@@ -207,6 +212,6 @@
|
||||
"howItWorks": "How it Works",
|
||||
"g1g1HowItWorks": "Type in the username of the account you’d like to gift to. From there, pick the sub length you’d like to gift and check out. Your account will automatically be rewarded with the same level of subscription you just gifted.",
|
||||
"limitations": "Limitations",
|
||||
"g1g1Limitations": "This is a limited time event that starts on December 17th at 8:00 AM ET (13:00 UTC) and will end January 7th at 8:00 PM ET (1:00 UTC). This promotion only applies when you gift to another Habitican. If you or your gift recipient already have a subscription, the gifted subscription will add months of credit that will only be used after the current subscription is canceled or expires.",
|
||||
"g1g1Limitations": "This is a limited time event that starts on December 16th at 8:00 AM ET (13:00 UTC) and will end January 6th at 8:00 PM ET (1:00 UTC). This promotion only applies when you gift to another Habitican. If you or your gift recipient already have a subscription, the gifted subscription will add months of credit that will only be used after the current subscription is canceled or expires.",
|
||||
"noLongerAvailable": "This item is no longer available."
|
||||
}
|
||||
|
||||
@@ -653,5 +653,12 @@
|
||||
"backgroundSpiralStaircaseNotes": "Grimpez, descendez, toujours en rond, dans un escalier en colimaçon.",
|
||||
"backgrounds112021": "Ensemble 90 : sorti en novembre 2021",
|
||||
"backgroundFortuneTellersShopText": "Boutique de la diseuse de bonne aventure",
|
||||
"backgroundInsideAPotionBottleNotes": "Regarder à travers le verre en attendant les secours à l'intérieur d'une fiole à potion."
|
||||
"backgroundInsideAPotionBottleNotes": "Regarder à travers le verre en attendant les secours à l'intérieur d'une fiole à potion.",
|
||||
"backgroundWinterCanyonShopText": "Canyon hivernal",
|
||||
"backgroundIcePalaceShopText": "Palais de glace",
|
||||
"backgroundIcePalaceShopNotes": "Reignez sur le palais de glace.",
|
||||
"backgroundFrozenPolarWatersText": "Calotte glacière",
|
||||
"backgroundFrozenPolarWatersNotes": "Explorez la calotte glacière.",
|
||||
"backgrounds122021": "Ensemble 91 : sorti en décembre 2021",
|
||||
"backgroundWinterCanyonShopNotes": "Partez à l'aventure dans un canyon hivernal !"
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"commGuidePara031": "Certaines guildes publiques peuvent contenir des contenus sensibles comme la dépression, la religion, la politique, etc. Ceci est permis tant que les conversations ne brisent ni les conditions d'utilisation ni le code de conduite en espace public et qu’elles ne dérivent pas du sujet.",
|
||||
"commGuidePara033": "<strong>Les guildes publiques ne doivent PAS posséder de contenus réservés aux plus de 18 ans. Si une guilde prévoit de discuter régulièrement de contenu sensible, elle doit l'annoncer dans le titre de la guilde</strong>. Cela vise a rendre Habitica sûr et agréable pour tout le monde.",
|
||||
"commGuidePara035": "<strong>Si la guilde en question a d'autres types de sujets sensibles, il est respectueux envers vos compagnons d'ajouter un avertissement à votre commentaire (par exemple : \"Attention : parle d'automutilation\")</strong>. Les guildes peuvent avoir établi leurs propres règles concernant ces avertissements, en plus de celles données ici. Si possible, merci d'utiliser la syntaxe <a href='https://habitica.fandom.com/fr/wiki/M%C3%A9mo_de_Markdown' target='_blank'>markdown</a> afin de cacher le contenu sensible sous des sauts de ligne, et permettre ainsi à ceux qui souhaiteraient ne pas lire vos propos de les contourner facilement, en faisant défiler leur écran. L'équipe de modération peut toujours décider de retirer votre contenu malgré tout : c'est à sa discrétion.",
|
||||
"commGuidePara036": "De plus, les contenus sensibles doivent être appropriés au sujet – parler d'automutilation dans une guilde focalisée sur la lutte contre la dépression peut avoir du sens, mais sera moins approprié dans une guilde musicale. Si vous constatez qu'une personne transgresse régulièrement ces règles, même après plusieurs rappels à l'ordre, veuillez signaler ces messages, et contacter le responsable de la communauté à l'adresse <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>.",
|
||||
"commGuidePara036": "De plus, les contenus sensibles doivent être appropriés au sujet – parler d'automutilation dans une guilde focalisée sur la lutte contre la dépression peut avoir du sens, mais sera moins approprié dans une guilde musicale. Si vous constatez qu'une personne transgresse régulièrement ces règles, même après plusieurs rappels à l'ordre, veuillez signaler ces messages.",
|
||||
"commGuidePara037": "<strong>Aucune guilde, publique ou privée, ne devrait être créée dans le but d’attaquer un groupe ou une personne</strong>. Créer une telle guilde est passible d’un bannissement immédiat. Combattez vos mauvaises habitudes, pas vos compagnons d’aventure !",
|
||||
"commGuidePara038": "<strong>Tous les défis de la taverne et des guildes publiques doivent aussi respecter ces règles</strong>.",
|
||||
"commGuideHeadingInfractionsEtc": "Infractions, conséquences et restauration",
|
||||
|
||||
@@ -369,5 +369,6 @@
|
||||
"hatchingPotionMossyStone": "pierre moussue",
|
||||
"hatchingPotionSunset": "couché de soleil",
|
||||
"hatchingPotionMoonglow": "lune de miel",
|
||||
"hatchingPotionSolarSystem": "système solaire"
|
||||
"hatchingPotionSolarSystem": "système solaire",
|
||||
"hatchingPotionOnyx": "Onyx"
|
||||
}
|
||||
|
||||
@@ -2508,5 +2508,13 @@
|
||||
"weaponArmoirePotionZombieNotes": "Utilisez cette potion pour faire éclore un familier zombie, mais faites attention au cas où il commencerait à vous grignoter ! Augmente la constitution de <%= con %> et la perception de <%= per %>. Armoire enchantée : ensemble de potions (objet 7 de 10)",
|
||||
"weaponArmoirePotionBlueNotes": "Vous vivrez la vie un peu plus moelleuse et beaucoup plus en bleu avec cette potion pour faire des bêtes en barbe à papa bleue ! Augmente l'intelligence de <%= int %> et la constitution de <%= con %>. Armoire enchantée : ensemble de potions (objet 9 de 10)",
|
||||
"weaponArmoirePotionRedNotes": "Cette potion va vous en faire voir de toutes les couleurs, mais surtout rouge ! Augmente la force et la constitution de <%= attrs %> chacune. Armoire enchantée : ensemble de potions (objet 4 de 10)",
|
||||
"offHandCapitalized": "Objet de main secondaire"
|
||||
"offHandCapitalized": "Objet de main secondaire",
|
||||
"weaponArmoireRegalSceptreText": "Sceptre régalien",
|
||||
"headMystery202112Text": "Couronne d'ondine arctique",
|
||||
"headMystery202112Notes": "Cette couronne gelée brille comme les profondeurs cachées d'un iceberg. Ne confère aucun bonus. Équipement d'abonnement de décembre 2021.",
|
||||
"headArmoireRegalCrownText": "Couronne régalienne",
|
||||
"armorMystery202112Text": "Queue d'ondine arctique",
|
||||
"armorMystery202112Notes": "Glissez à travers les mers de glace sans vous refroidir avec cette queue chatoyante. Ne confère aucun bonus. Équipement d'abonnement de décembre 2021.",
|
||||
"weaponArmoireRegalSceptreNotes": "Affichez votre autorité régalienne en tenant ce bâton incrusté de pierres précieuses dans votre main. Augmente la perception de <%= per %>. Armoire enchantée : ensemble régalien (objet 2 de 2).",
|
||||
"headArmoireRegalCrownNotes": "Tout monarque aurait de la change d'avoir une si majestueuse couronne. Armoire enchantée : ensemble régalien (objet 1 de 2)."
|
||||
}
|
||||
|
||||
@@ -736,5 +736,13 @@
|
||||
"questSolarSystemCompletion": "Grâce à une pratique attentive, l'équipage et vous-même parvenez à empêcher les Diversionoïdes de vous balayer par-dessus bord, simplement en les remarquant et en les reconnaissant sans les laisser prendre le dessus. Alors que vous passez en toute sécurité près de l'étoile pulsante, @gawrone remarque un groupe de bouteilles flottantes et les attire à bord. Chacune semble contenir un minuscule système solaire !<br><br>\"Eh bien, on dirait que notre dur labeur nous a apporté de belles récompenses !\" dit @beffymaroo. \"Voyons quelles merveilles célestes pourraient apparaître si nous faisons éclore des œufs d'animaux de compagnie avec ces nouvelles potions.\"",
|
||||
"questSolarSystemBoss": "Diversionoïdes",
|
||||
"questSolarSystemNotes": "Votre équipe voyage à travers le cosmos, pour en voir de toutes les couleurs, à bord d'un dirigeable fantastique conçu par les talents d’ingénierie spatiale de @gawrone. Sa propulsion méditative repose sur le calme de votre groupe pour maintenir le cap.<br><br>Plus haut, dans les nuages de galaxies étincelantes, vous repérez une étoile aux pulsations inquiétantes. \"Restez concentré\", prévient @beffymaroo. \"Si nous sommes trop distraits lorsque nous passons cette nova, l'attraction entre l'étoile et notre vaisseau peut nous faire dévier de notre route !\"<br><br>Alors que vous vous approchez de l'étoile, des impulsions d'énergie étrange viennent vers le vaisseau.<br><br>\"Ce sont des Diversionoïdes, des créatures pensantes qui essaient de nous déconcentrer\", dit @SabreCat. \"Si nous pouvons les laisser passer sans nous emporter, nous devrions pouvoir maintenir le cap vers notre objectif !\"",
|
||||
"questSolarSystemText": "Un voyage de concentration cosmique"
|
||||
"questSolarSystemText": "Un voyage de concentration cosmique",
|
||||
"questOnyxNotes": "@Vikte, @aspiring_advocate, et @starsystemic savent que vous avez perdu de la motivation ces derniers temps et décident qu'une journée amusante pourrait vous remonter le moral. Cependant, \"s'amuser\" signifie apparemment faire de la plongée sous-marine pour chercher un trésor dans la crevasse sombre ! Vous enfilez votre équipement de plongée, montez à bord du bateau et ramez vers l'ancienne cité de Dilatory. Tout en voyageant, vous leur demandez quel genre de trésor vous cherchez.<br><br>\"Des runes de Pluton !\" dit @Vikte.<br><br>\"Non, des runes de Lion !\" dit @aspiring_advocate.<br><br>\"Non, des pierres d'onyx !\" dit @starsystemic.<br><br>Alors qu'ils discutent entre eux, vous regardez dans l'océan et voyez l'entrée de la grotte juste en dessous ! Dans l'excitation, vous sautez, et plongez dans la mer, laissant le trio regarder pendant que vous nagez vers la crevasse sombre pour chercher le trésor vous-même.",
|
||||
"questOnyxCompletion": "Lorsque vous pénétrez dans la crevasse sombre, les crevettes-mantes qui y vivent s'enfuient, semblant avoir peur de vous. Cependant, elles reviennent rapidement en portant de petits orbes colorés, et vous réalisez que ce sont les trésors que tout le monde voulait ! Vous empochez une bonne collection de chaque type, dites au revoir aux crevettes, et retournez au bateau où les autres vous aident à monter à bord.<br><br>\"Où étais-tu ?\". @Vikte s'exclame. En réponse, vous leur montrez le trésor que vous avez collecté.<br><br>\"Ces ingrédients permettent de faire des potions d'éclosion magiques Onyx !\", dit @aspiring_advocate avec enthousiasme alors que vous commencez à retourner sur le rivage.<br><br>\"Donc... nous pouvons faire éclore des animaux domestiques Onyx !\". @starsystemic sourit. \"N'avions-nous pas dit que ce serait amusant ?\"<br><br>Vous souriez en retour, dans l'attente de vos nouveaux animaux de compagnie, et avec la motivation de terminer vos tâches !",
|
||||
"questOnyxText": "L'odyssée d'onyx",
|
||||
"questOnyxCollectPlutoRunes": "Runes de Pluton",
|
||||
"questOnyxCollectLeoRunes": "Runes du lion",
|
||||
"questOnyxCollectOnyxStones": "Pierres d'onyx",
|
||||
"questOnyxDropOnyxPotion": "Potion d'éclosion onyx",
|
||||
"questOnyxUnlockText": "Déverrouille l'achat de potions d'éclosion onyx au marché"
|
||||
}
|
||||
|
||||
@@ -198,5 +198,6 @@
|
||||
"mysterySet202107": "Ensemble de passion de la plage",
|
||||
"mysterySet202109": "Ensemble lunaire du Lépidoptère",
|
||||
"mysterySet202110": "Ensemble de la gargouille moussue",
|
||||
"mysterySet202111": "Ensemble de chronomancien cosmique"
|
||||
"mysterySet202111": "Ensemble de chronomancien cosmique",
|
||||
"mysterySet202112": "Ensemble d'ondine antarctique"
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"letsGetStarted": "בואו נתחיל!",
|
||||
"yourProgress": "ההתקדמות שלך",
|
||||
"onboardingProgress": "<%= percentage %>% התקדמות",
|
||||
"gettingStartedDesc": "יש להשלים את משימות ההסתגלות ולאחר שכולן יושלמו תרוויח/י <strong>5 הישגים</strong> ו־<strong class=\"gold-amount\">100 מטבעות זהב</strong>!",
|
||||
"gettingStartedDesc": "בעת השלמת משימות ההסתגלות הללו מרוויחים <strong>5 הישגים</strong> ו־<strong class=\"gold-amount\">100 מטבעות זהב</strong>!",
|
||||
"yourRewards": "הפרסים שלך",
|
||||
"foundNewItems": "מצאת פריטים חדשים!",
|
||||
"hideAchievements": "הסתרת <%= category %>",
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
"constitution": "חוסן",
|
||||
"conText": "חוסן מקטין את כמות הנזק שאתה חוטף מהרגלים רעים או מטלות יומיות שהזנחת.",
|
||||
"perception": "תפיסה",
|
||||
"perText": "תפיסה מגדילה את כמות הזהב שאתה מרוויח, ומרגע שאתה יכול להשתמש בשוק, מגבירה את סיכוייך למצוא חפצי ערך בעת ביצוע המשימות שלך.",
|
||||
"perText": "התפיסה מגדילה את כמות מטבעות הזהב שמרוויחים, ומרגע שאפשר להשתמש בשוק, היא מגבירה את הסיכויים למצוא פריטים בעלי ערך בעת ביצוע המשימות.",
|
||||
"intelligence": "תבונה",
|
||||
"intText": "תבונה מגדילה את כמות הניסיון שאתה מרוויח, וברגע שנפתחו בפנייך המקצועות, קובעת כמה מאנה זמינה ליכולות המקצוע שלך.",
|
||||
"levelBonus": "תוסף דרגה",
|
||||
@@ -125,10 +125,10 @@
|
||||
"taskAllocationPop": "Assigns Points based on the Strength, Intelligence, Constitution, and Perception categories associated with the tasks you complete.",
|
||||
"distributePoints": "הקצה נקודות שעדיין לא נוצלו",
|
||||
"distributePointsPop": "Assigns all unallocated Stat Points according to the selected allocation scheme.",
|
||||
"warriorText": "לוחמים גורמים ליותר \"פגיעות חמורות\", אשר נותנות בונוס אקראי של זהב, ניסיון או סיכוי למציאת פריט כשמשלימים משימה. הם גם גורמים נזק רב למפלצות האויב. שחק כלוחם אם אתה אוהב למצוא פרסים גדולים ומפתיעים, או אם אתה רוצה לקרוע את אויביך לגזרים ולנגב את הרצפה עם הגופות המרוטשות שלהם!",
|
||||
"warriorText": "לוחמים גורמים ליותר \"פגיעות חמורות\", שנותנות בונוס אקראי של מטבעות זהב, ניסיון או סיכוי למציאת פריט כשמשלימים משימה. הם גם גורמים נזק רב למפלצות האויב. שחק כלוחם אם אתה אוהב למצוא פרסים גדולים ומפתיעים, או אם אתה רוצה לקרוע את אויביך לגזרים ולנגב את הרצפה עם הגופות המרוטשות שלהם!",
|
||||
"wizardText": "Mages learn swiftly, gaining Experience and Levels faster than other classes. They also get a great deal of Mana for using special abilities. Play a Mage if you enjoy the tactical game aspects of Habitica, or if you are strongly motivated by leveling up and unlocking advanced features!",
|
||||
"mageText": "Mages learn swiftly, gaining Experience and Levels faster than other classes. They also get a great deal of Mana for using special abilities. Play a Mage if you enjoy the tactical game aspects of Habitica, or if you are strongly motivated by leveling up and unlocking advanced features!",
|
||||
"rogueText": "נוכלים אוהבים לצבור עושר, הם משיגים יותר זהב מכל אחד אחר והם מוכשרים במציאת פריטים אקראיים. יכולת החשאיות המפורסמת שלהם מאפשרת להם להתחמק מהתוצאות של מטלות יומיות שפוספסו. שחק נוכל אם אתה נהנה במיוחד מפרסים, הישגים, שלל ותגים.",
|
||||
"rogueText": "נוכלים אוהבים לצבור עושר, הם משיגים יותר מטבעות זהב מכל אחד אחר והם מוכשרים במציאת פריטים אקראיים. יכולת החשאיות המפורסמת שלהם מאפשרת להם להתחמק מהתוצאות של מטלות יומיות שפוספסו. כשרוצים להשיג פרסים, הישגים, שלל ותגים - כל מה שצריך זה לשחק אותה נוכלים!",
|
||||
"healerText": "מרפאים הם חסינים לכל פגע, והם מציעים את ההגנה הזו גם לחבריהם. מטלות יומיות והרגלים רעים לא ממש מזיזים להם, ויש להם דרכים לרפא את הבריאות שלהם לאחר כישלון. שחק מרפא אם אתה נהנה לעזור לחברים שלך במשחק, או אם הרעיון לרמות את המוות דרך עבודה קשה קוסם לך!",
|
||||
"optOutOfClasses": "וותר",
|
||||
"chooseClass": "Choose your Class",
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"lostAllHealth": "אזלו לך נקודות הבריאות!",
|
||||
"dontDespair": "לא להתייאש!",
|
||||
"deathPenaltyDetails": "איבדת דרגה, את הזהב שלך, ופריט כלשהו, אך אפשר לקבלם בחזרה באמצעות עבודה קשה! בהצלחה--יהיה בסדר.",
|
||||
"deathPenaltyDetails": "איבדת דרגה, את מטבעות הזהב שלך, ופריט כלשהו, אך אפשר לקבלם בחזרה באמצעות עבודה קשה! בהצלחה--יהיה בסדר.",
|
||||
"refillHealthTryAgain": "מילוי נקודות הבריאות וניסיון חוזר",
|
||||
"dyingOftenTips": "זה קורה לעיתים קרובות? <a href='http://habitica.fandom.com/wiki/Death_Mechanics#Strategies_for_Staying_Alive' target='_blank'>הינה כמה עצות!</a>",
|
||||
"losingHealthWarning": "זהירות - נקודות הבריאות אוזלות!",
|
||||
"losingHealthWarning2": "אל תתנו לבריאות לרדת לאפס! אחרת תרדו דרגה, תאבדו זהב ופריט ציוד.",
|
||||
"losingHealthWarning2": "לא לתת לבריאות שלך לרדת לאפס! אחרת, הדמות שלך תרד בדרגה, תאבד את כל מטבעות הזהב, וגם פריט ציוד.",
|
||||
"toRegainHealth": "כדי לצבור בריאות בחזרה:",
|
||||
"lowHealthTips1": "יש לעלות בדרגה כדי להחלים לגמרי!",
|
||||
"lowHealthTips2": "רכשו שיקוי בריאות בעמודת הפרסים כדי להחזיר 15 נקודות בריאות.",
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"frequentlyAskedQuestions": "שאלות נפוצות",
|
||||
"faqQuestion0": "אני מבולבל. היכן יש סקירה?",
|
||||
"iosFaqAnswer0": "תחילה, יש להגדיר משימות שברצונך לעשות בחיי היום־יום. ואז, לאחר השלמת המשימות בחיים האמיתיים וסימונן, צוברים נקודות ניסיון וזהב. בזהב משתמשים כדי לרכוש ציוד וכמה פריטים, כמו־גם פרסים. נקודות ניסיון מעלות את הדמות שלך בשלבים ומשחררות תוכן כמו חיות מחמד, יכולות, והרפתקאות! אפשר לעצב את הדמות שלך תחת \"תפריט > עיצוב דמות\".\n\nכמה דרכים בסיסיות לפעול: יש ללחוץ על (+) בפינה הימנית העליונה כדי להוסיף משימה חדשה. יש ללחוץ על משימה קיימת כדי לערוך אותה, ולהחליק שמאלה על משימה כדי למחוק אותה. אפשר למיין משימות בעזרת שימוש בתגיות בפינה השמאלית העליונה, ולהרחיב ולכווץ רשימות תיוג בעזרת לחיצה על בועת הרשימות.",
|
||||
"iosFaqAnswer0": "תחילה, יש להגדיר משימות שברצונך לעשות בחיי היום־יום. ואז, לאחר השלמת המשימות בחיים האמיתיים וסימונן, צוברים נקודות ניסיון ומטבעות זהב. במטבעות הזהב משתמשים כדי לרכוש ציוד וכמה פריטים, כמו־גם פרסים. נקודות ניסיון מעלות את הדמות שלך בשלבים ומשחררות תוכן כמו חיות מחמד, יכולות, והרפתקאות! אפשר לעצב את הדמות שלך תחת \"תפריט > עיצוב דמות\".\n\nכמה דרכים בסיסיות לפעול: יש ללחוץ על (+) בפינה הימנית העליונה כדי להוסיף משימה חדשה. יש ללחוץ על משימה קיימת כדי לערוך אותה, ולהחליק שמאלה על משימה כדי למחוק אותה. אפשר למיין משימות בעזרת שימוש בתגיות בפינה השמאלית העליונה, ולהרחיב ולכווץ רשימות תיוג בעזרת לחיצה על בועת הרשימות.",
|
||||
"androidFaqAnswer0": "First, you'll set up tasks that you want to do in your everyday life. Then, as you complete the tasks in real life and check them off, you'll earn experience and gold. Gold is used to buy equipment and some items, as well as custom rewards. Experience causes your character to level up and unlock content such as Pets, Skills, and Quests! You can customize your character under Menu > [Inventory >] Avatar.\n\n Some basic ways to interact: click the (+) in the lower-right-hand corner to add a new task. Tap on an existing task to edit it, and swipe left on a task to delete it. You can sort tasks using Tags in the upper-right-hand corner, and expand and contract checklists by clicking on the checklist count box.",
|
||||
"webFaqAnswer0": "ראשית, הגדירו משימות שתרצו לבצע בחיי היומיום שלכם. לאחר מכן, תוך כדי השלמת המשימות בחיים האמיתיים וסימון ביצוע שלהן - תרוויחו ניסיון זהב. הזהב משמש לרכישת ציוד ופריטים מסוימים, כמו גם פרסים מותאמים אישית. ניסיון גורם לדמות שלכם לעלות רמות ולפתוח חלקים במשחק כמו חיות מחמד, מיומנויות ומשימות! לקבלת פרטים נוספים, ראו סקירה צעד-אחר-צעד של המשחק ב [עזרה -> סקירה למשתמשים חדש](https://habitica.com/static/overview).",
|
||||
"webFaqAnswer0": "ראשית, יש להגדיר משימות שברצונך לבצע בחיי היומיום שלך. לאחר מכן, תוך השלמת המשימות בחיים האמיתיים וסימונן - מרוויחים ניסיון ומטבעות זהב. מטבעות הזהב משמשים לרכישת ציוד ופריטים מסוימים, כמו גם פרסים מותאמים אישית. ניסיון גורם לדמות שלך לעלות רמות ולפתוח חלקים במשחק כמו חיות מחמד, מיומנויות ומשימות! לקבלת פרטים נוספים, נא לראות את הסקירה בצעד־אחר־צעד של המשחק ב־[עזרה -> סקירה למשתמשים חדש](https://habitica.com/static/overview).",
|
||||
"faqQuestion1": "כיצד לארגן משימות?",
|
||||
"iosFaqAnswer1": "הרגלים טובים (אלה עם +) הם משימות שאפשר לעשות הרבה פעמים ביום, כגון אכילת ירקות. הרגלים רעים (אלה עם -) הם משימות שכדאי להימנע מהן, כמו לכסוס ציפורניים. בהרגלים עם + וגם - יש בחירה טובה ובחירה גרועה, כמו לעלות במדרגות לעומת מעלית. הרגלים טובים מקנים ניסיון וזהב. הרגלים רעים פוגעים בבריאות.\n\nמטלות יומיומיות הן משימות שצריך לעשות כל יום, כמו לצחצח שיניים או לבדוק את הדואר האלקטרוני. אפשר לשנות את הימים בהם יש לבצע את המטלה היומיומית בעזרת הקשה לעריכתה. אם מדלגים על מטלה יומיומית ביום בו יש לבצע אותה, הדמות תינזק במהלך הלילה. יש להיזהר שלא להוסיף יותר מדי מטלות יומיומיות בבת אחת!\n\n\"משימות לביצוע\" הן רשימת המשימות שלך לביצוע. השלמת משימה לביצוע מקנה זהב וניסיון. אף פעם לא מאבדים בריאות ממשימות לביצוע. אפשר להוסיף תאריך יעד למשימות לביצוע בעזרת הקשה לעריכתן.",
|
||||
"iosFaqAnswer1": "הרגלים טובים (אלה עם +) הם משימות שאפשר לעשות הרבה פעמים ביום, כגון אכילת ירקות. הרגלים רעים (אלה עם -) הם משימות שכדאי להימנע מהן, כמו לכסוס ציפורניים. בהרגלים עם + וגם - יש בחירה טובה ובחירה גרועה, כמו לעלות במדרגות לעומת מעלית. הרגלים טובים מקנים ניסיון ומטבעות זהב. הרגלים רעים פוגעים בבריאות.\n\nמטלות יומיומיות הן משימות שצריך לעשות כל יום, כמו לצחצח שיניים או לבדוק את הדואר האלקטרוני. אפשר לשנות את הימים בהם יש לבצע את המטלה היומיומית בעזרת הקשה לעריכתה. אם מדלגים על מטלה יומיומית ביום בו יש לבצע אותה, הדמות תינזק במהלך הלילה. יש להיזהר שלא להוסיף יותר מדי מטלות יומיומיות בבת אחת!\n\n\"משימות לביצוע\" הן רשימת המשימות שלך לביצוע. השלמת משימה לביצוע מקנה מטבעות זהב וניסיון. אף פעם לא מאבדים בריאות ממשימות לביצוע. אפשר להוסיף תאריך יעד למשימות לביצוע בעזרת הקשה לעריכתן.",
|
||||
"androidFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your character will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.",
|
||||
"webFaqAnswer1": "* Good Habits (the ones with a :heavy_plus_sign:) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a :heavy_minus_sign:) are tasks that you should avoid, like biting nails. Habits with a :heavy_plus_sign: and a :heavy_minus_sign: have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n* Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n* To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.",
|
||||
"faqQuestion2": "מהן מספר משימות לדוגמה?",
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
"weaponWizard5Text": "מטה הרב-מג",
|
||||
"weaponWizard5Notes": "עוזר לרקום בזהירות את הלחשים המסובכים ביותר, ובנוסף, זה אומר שהגעת לדרגה הנחשבת ביותר באומנות הקסם. מגביר את התבונה שלך ב <%= int %> ואת התפיסה שלך ב <%= per %> נקודות.",
|
||||
"weaponWizard6Text": "מטה זהב",
|
||||
"weaponWizard6Notes": "עשוי מאוריכאלקום - זהב האלכימים. מטה זה הוא נפלא, נדיר, ומהודר בצורה שלא תיאמן. מגביר את התבונה שלך ב <%= int %> ואת התפיסה שלך ב <%= per %> נקודות.",
|
||||
"weaponWizard6Notes": "עשוי מאוריכאלקום - זהב האלכימים. מטה זה הוא נפלא, נדיר, ומהודר בצורה שלא תיאמן. מגביר את התבונה שלך ב־<%= int %> ואת התפיסה שלך ב־<%= per %> נקודות.",
|
||||
"weaponHealer0Text": "שרביט למתחילים",
|
||||
"weaponHealer0Notes": "בשביל מרפאים בהכשרה. לא מקנה יתרון.",
|
||||
"weaponHealer1Text": "שרביט טירונים",
|
||||
@@ -386,7 +386,7 @@
|
||||
"armorWarrior3Notes": "סט פלדה העוטף את כולך, גאוותם של אבירים רבים מספור. מגביר את ערך החוסן שלך ב<%= con %> נקודות.",
|
||||
"armorWarrior4Text": "שריון אדום",
|
||||
"armorWarrior4Notes": "שיריון כבד זה אוצר בתוכו שלל קסמים הגנתיים. מגביר את ערך החוסן שלך ב<%= con %> נקודות.",
|
||||
"armorWarrior5Text": "שריון זהב",
|
||||
"armorWarrior5Text": "שיריון זהב",
|
||||
"armorWarrior5Notes": "הוא נראה כלבוש טקסי, אך אין להב עלי אדמות שיחדור אותו. מגביר את ערך החוסן שלך ב<%= con %> נקודות.",
|
||||
"armorRogue1Text": "עור משומן",
|
||||
"armorRogue1Notes": "שריון זה טופל במיוחד כדי להפחית רעש. מגביר את ערך התפיסה שלך ב<%= per %> נקודות.",
|
||||
@@ -977,7 +977,7 @@
|
||||
"headSpecialWinter2016HealerText": "קסדת פיית כנפיים",
|
||||
"headSpecialWinter2016HealerNotes": "כנפייםאלומתנפנפותכלכךמהרשהןמטשטשות! מגבירות תבונה ב <%= int %>. מהדורה מוגבלת 2015-2016, ציוד חורף.",
|
||||
"headSpecialSpring2016RogueText": "מסכת כלבלב טוב",
|
||||
"headSpecialSpring2016RogueNotes": "אוווו, איזה כלבלב חמוד! בוא הנה, תן לי ללטף אותך. ...הי, לאן נעלם כל הזהב שלי? מגביר תפיסה ב <%= per %>. מהדורה מוגבלת 2016, ציוד אביב.",
|
||||
"headSpecialSpring2016RogueNotes": "אוו, איזה כלבלב חמוד! בוא הנה, תן לי ללטף אותך. ...הי, לאן נעלמו כל מטבעות הזהב שלי? מגביר תפיסה ב־<%= per %>. מהדורה מוגבלת 2016, ציוד אביב.",
|
||||
"headSpecialSpring2016WarriorText": "קסדת שומר עכבר",
|
||||
"headSpecialSpring2016WarriorNotes": "לעולם לא תחטפו יותר בראש! תנו להם לנסות! מגבירה חוסן ב <%= str %>. מהדורה מוגבלת 2016, ציוד אביב.",
|
||||
"headSpecialSpring2016MageText": "כובע מלכין גדול",
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
"valentineCardNotes": "שלח כרטיס יום אהבה לשחקנים בחבורה.",
|
||||
"valentine0": "\"הוורדים אדומים\n\nמטלות הן כחולות\n\nנפלא שאנחנו מסיימים\n\nבחבורתך משימות!\"",
|
||||
"valentine1": "״ורדים אדומות\n\nסיגליות נחמדות\n\nבואו ביחד\n\nנלחם בעצלות!״",
|
||||
"valentine2": "״ורדים אדומות\n\nוהסגנון כבר צהבהב\n\nמקווים שאהבתם\n\nכי השיר עלה 10 זהב.״",
|
||||
"valentine2": "״ורדים אדומות\n\nוהסגנון כבר צהבהב\n\nמקווים שאהבתם\n\nכי השיר עלה 10 מטבעות זהב.״",
|
||||
"valentine3": "״ורדים אדומות\n\nנטיפי קרח כחולים\n\nאין אוצר טוב\n\nמבילוי עם אהובים!״",
|
||||
"valentineCardAchievementTitle": "חברים מעריצים",
|
||||
"valentineCardAchievementText": "Aww, you and your friend must really care about each other! Sent or received <%= count %> Valentine's Day cards.",
|
||||
"polarBear": "דוב קוטב",
|
||||
"turkey": "תרנגול הודו",
|
||||
"gildedTurkey": "הודו מוזהב",
|
||||
"gildedTurkey": "תרנגול הודו מוזהב",
|
||||
"polarBearPup": "דובון קוטב",
|
||||
"jackolantern": "ג'ק-או-לנטרן",
|
||||
"ghostJackolantern": "Ghost Jack-O-Lantern",
|
||||
|
||||