Compare commits
141 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
76039020f5 | ||
|
|
cbcfb21deb | ||
|
|
f47ec3d85f | ||
|
|
aee08ba0f9 | ||
|
|
e1f9cac37a | ||
|
|
c9bb96d2be | ||
|
|
1bb337d235 | ||
|
|
07d6969764 | ||
|
|
5807db9053 | ||
|
|
a5a91a3a9c | ||
|
|
3650426edc | ||
|
|
7579bec587 | ||
|
|
c1e7fed4d4 | ||
|
|
bad148148c | ||
|
|
0280513a00 | ||
|
|
e502588abc | ||
|
|
5718d8396d | ||
|
|
b59a63ecbe | ||
|
|
f0465aab5e | ||
|
|
39ee78127c | ||
|
|
4658025f3f | ||
|
|
46417b4124 | ||
|
|
706a7b441a | ||
|
|
a8baa8fcfe | ||
|
|
368cf91e32 | ||
|
|
23fc969432 | ||
|
|
5db606dcfd | ||
|
|
a7fd8f7f52 | ||
|
|
0b57c0a22d | ||
|
|
12afdc1681 | ||
|
|
5e31278d2a | ||
|
|
0891908cba | ||
|
|
6a483edfe1 | ||
|
|
962f2b7579 | ||
|
|
f413073d35 | ||
|
|
0df2da6bf4 | ||
|
|
27b9ffb3f2 | ||
|
|
79597cc72b | ||
|
|
353009821f | ||
|
|
69179c61b1 | ||
|
|
c6f6722af7 | ||
|
|
b362b36e16 | ||
|
|
f40bb9e91d | ||
|
|
bba068efd5 | ||
|
|
c89b20ce42 | ||
|
|
a60022e54d | ||
|
|
1d72b0e4a2 | ||
|
|
15f4ce77ac | ||
|
|
05093c5552 | ||
|
|
ee733c644d | ||
|
|
cb861d266d | ||
|
|
c7b0269fda | ||
|
|
bd5ef97f22 | ||
|
|
2e76d06f5e | ||
|
|
b5353717c8 | ||
|
|
52545018b6 | ||
|
|
d82aa869b2 | ||
|
|
107d633d37 | ||
|
|
4f41a8c519 | ||
|
|
72f0e7ffae | ||
|
|
30e5fad6b7 | ||
|
|
d3d7ad2693 | ||
|
|
0e590c3623 | ||
|
|
6e0739c996 | ||
|
|
588fd43e65 | ||
|
|
9a6f8021e3 | ||
|
|
bac84f6ce0 | ||
|
|
98c9f83001 | ||
|
|
427d2127cb | ||
|
|
c11a384a35 | ||
|
|
36481b87fa | ||
|
|
b8362af2f2 | ||
|
|
80de90cc5f | ||
|
|
142d7e4348 | ||
|
|
181552c8d1 | ||
|
|
6324ef72df | ||
|
|
3719efa874 | ||
|
|
107444043e | ||
|
|
e6ba1ccca7 | ||
|
|
8edd2cfd14 | ||
|
|
897b192852 | ||
|
|
0648f5d412 | ||
|
|
732426c176 | ||
|
|
4df8022811 | ||
|
|
b153c6d054 | ||
|
|
c0e1a31937 | ||
|
|
7a13d061d7 | ||
|
|
ac29d662ef | ||
|
|
247246b99d | ||
|
|
13fa1924ae | ||
|
|
d55400cc80 | ||
|
|
100c7c4395 | ||
|
|
53510e3ea7 | ||
|
|
c643f6a16c | ||
|
|
1c4a941c88 | ||
|
|
7c0da8051f | ||
|
|
6c70076c30 | ||
|
|
15976e906a | ||
|
|
ac52da5be2 | ||
|
|
1b39338eec | ||
|
|
6fe87a8140 | ||
|
|
c5d0ff63a5 | ||
|
|
6f7243c049 | ||
|
|
71cc313c9a | ||
|
|
788992b8fa | ||
|
|
ff87a346d6 | ||
|
|
99a9bfe62e | ||
|
|
4f10f534ee | ||
|
|
2081590a19 | ||
|
|
f719592237 | ||
|
|
25ac3db8c3 | ||
|
|
57e12c67ac | ||
|
|
775ed7f873 | ||
|
|
b608ca4d72 | ||
|
|
1536bbfce5 | ||
|
|
d4957f39a2 | ||
|
|
6d8833a83f | ||
|
|
bb7b1c15ee | ||
|
|
9b43ff75fc | ||
|
|
0aaac9988c | ||
|
|
edcd587b03 | ||
|
|
e0b2437f60 | ||
|
|
39b3ebe04a | ||
|
|
a607882214 | ||
|
|
ad3b673fda | ||
|
|
4e6b411763 | ||
|
|
dec7bd2ec6 | ||
|
|
b2d997c5a6 | ||
|
|
68aeda44d4 | ||
|
|
d5c7ced5e3 | ||
|
|
f45fdfbe0d | ||
|
|
311df85dfc | ||
|
|
0e8fb62887 | ||
|
|
4d2b7dbf5c | ||
|
|
ab4009bd32 | ||
|
|
b6407be529 | ||
|
|
3477dcd226 | ||
|
|
b41ad76c9e | ||
|
|
9bfc76cd20 | ||
|
|
8bd27b8313 | ||
|
|
8fd7e1cd00 |
82
migrations/archive/2020/20200218_pet_color_achievements.js
Normal file
@@ -0,0 +1,82 @@
|
||||
/* eslint-disable no-console */
|
||||
const MIGRATION_NAME = '20200218_pet_color_achievements';
|
||||
import { model as User } from '../../../website/server/models/user';
|
||||
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count++;
|
||||
|
||||
const set = {
|
||||
migration: MIGRATION_NAME,
|
||||
};
|
||||
|
||||
if (user && user.items && user.items.pets) {
|
||||
const pets = user.items.pets;
|
||||
if (pets['Wolf-CottonCandyPink'] > 0
|
||||
&& pets['TigerCub-CottonCandyPink'] > 0
|
||||
&& pets['PandaCub-CottonCandyPink'] > 0
|
||||
&& pets['LionCub-CottonCandyPink'] > 0
|
||||
&& pets['Fox-CottonCandyPink'] > 0
|
||||
&& pets['FlyingPig-CottonCandyPink'] > 0
|
||||
&& pets['Dragon-CottonCandyPink'] > 0
|
||||
&& pets['Cactus-CottonCandyPink'] > 0
|
||||
&& pets['BearCub-CottonCandyPink'] > 0) {
|
||||
set['achievements.tickledPink'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (user && user.items && user.items.mounts) {
|
||||
const mounts = user.items.mounts;
|
||||
if (mounts['Wolf-CottonCandyPink']
|
||||
&& mounts['TigerCub-CottonCandyPink']
|
||||
&& mounts['PandaCub-CottonCandyPink']
|
||||
&& mounts['LionCub-CottonCandyPink']
|
||||
&& mounts['Fox-CottonCandyPink']
|
||||
&& mounts['FlyingPig-CottonCandyPink']
|
||||
&& mounts['Dragon-CottonCandyPink']
|
||||
&& mounts['Cactus-CottonCandyPink']
|
||||
&& mounts['BearCub-CottonCandyPink'] ) {
|
||||
set['achievements.rosyOutlook'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
|
||||
return await User.update({ _id: user._id }, { $set: set }).exec();
|
||||
}
|
||||
|
||||
module.exports = async function processUsers () {
|
||||
let query = {
|
||||
migration: { $ne: MIGRATION_NAME },
|
||||
'auth.timestamps.loggedin': { $gt: new Date('2020-02-01') },
|
||||
};
|
||||
|
||||
const fields = {
|
||||
_id: 1,
|
||||
items: 1,
|
||||
};
|
||||
|
||||
while (true) { // eslint-disable-line no-constant-condition
|
||||
const users = await User // eslint-disable-line no-await-in-loop
|
||||
.find(query)
|
||||
.limit(250)
|
||||
.sort({_id: 1})
|
||||
.select(fields)
|
||||
.lean()
|
||||
.exec();
|
||||
|
||||
if (users.length === 0) {
|
||||
console.warn('All appropriate users found and modified.');
|
||||
console.warn(`\n${count} users processed\n`);
|
||||
break;
|
||||
} else {
|
||||
query._id = {
|
||||
$gt: users[users.length - 1]._id,
|
||||
};
|
||||
}
|
||||
|
||||
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
|
||||
}
|
||||
};
|
||||
@@ -8,13 +8,16 @@ const BASE_URL = nconf.get('BASE_URL');
|
||||
const EMAIL_SLUG = 'mandrill-email-slug'; // Set email template to send
|
||||
const MIGRATION_NAME = 'bulk-email';
|
||||
|
||||
const progressCount = 1000;
|
||||
const progressCount = 250;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count += 1;
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
if (count % progressCount === 0) {
|
||||
console.warn(`${count} ${user._id}`);
|
||||
await new Promise(resolve => setTimeout(resolve, 5000));
|
||||
}
|
||||
|
||||
await sendTxn(
|
||||
user,
|
||||
|
||||
443
package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "habitica",
|
||||
"version": "4.132.1",
|
||||
"version": "4.135.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -13,26 +13,26 @@
|
||||
}
|
||||
},
|
||||
"@babel/compat-data": {
|
||||
"version": "7.8.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.1.tgz",
|
||||
"integrity": "sha512-Z+6ZOXvyOWYxJ50BwxzdhRnRsGST8Y3jaZgxYig575lTjVSs3KtJnmESwZegg6e2Dn0td1eDhoWlp1wI4BTCPw==",
|
||||
"version": "7.8.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.5.tgz",
|
||||
"integrity": "sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg==",
|
||||
"requires": {
|
||||
"browserslist": "^4.8.2",
|
||||
"browserslist": "^4.8.5",
|
||||
"invariant": "^2.2.4",
|
||||
"semver": "^5.5.0"
|
||||
}
|
||||
},
|
||||
"@babel/core": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz",
|
||||
"integrity": "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==",
|
||||
"version": "7.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz",
|
||||
"integrity": "sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.8.3",
|
||||
"@babel/generator": "^7.8.3",
|
||||
"@babel/helpers": "^7.8.3",
|
||||
"@babel/parser": "^7.8.3",
|
||||
"@babel/generator": "^7.8.4",
|
||||
"@babel/helpers": "^7.8.4",
|
||||
"@babel/parser": "^7.8.4",
|
||||
"@babel/template": "^7.8.3",
|
||||
"@babel/traverse": "^7.8.3",
|
||||
"@babel/traverse": "^7.8.4",
|
||||
"@babel/types": "^7.8.3",
|
||||
"convert-source-map": "^1.7.0",
|
||||
"debug": "^4.1.0",
|
||||
@@ -52,43 +52,6 @@
|
||||
"@babel/highlight": "^7.8.3"
|
||||
}
|
||||
},
|
||||
"@babel/generator": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz",
|
||||
"integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.8.3",
|
||||
"jsesc": "^2.5.1",
|
||||
"lodash": "^4.17.13",
|
||||
"source-map": "^0.5.0"
|
||||
}
|
||||
},
|
||||
"@babel/helper-function-name": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
|
||||
"integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
|
||||
"requires": {
|
||||
"@babel/helper-get-function-arity": "^7.8.3",
|
||||
"@babel/template": "^7.8.3",
|
||||
"@babel/types": "^7.8.3"
|
||||
}
|
||||
},
|
||||
"@babel/helper-get-function-arity": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
|
||||
"integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.8.3"
|
||||
}
|
||||
},
|
||||
"@babel/helper-split-export-declaration": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
|
||||
"integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.8.3"
|
||||
}
|
||||
},
|
||||
"@babel/highlight": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
|
||||
@@ -99,47 +62,6 @@
|
||||
"js-tokens": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz",
|
||||
"integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ=="
|
||||
},
|
||||
"@babel/template": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz",
|
||||
"integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.8.3",
|
||||
"@babel/parser": "^7.8.3",
|
||||
"@babel/types": "^7.8.3"
|
||||
}
|
||||
},
|
||||
"@babel/traverse": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz",
|
||||
"integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.8.3",
|
||||
"@babel/generator": "^7.8.3",
|
||||
"@babel/helper-function-name": "^7.8.3",
|
||||
"@babel/helper-split-export-declaration": "^7.8.3",
|
||||
"@babel/parser": "^7.8.3",
|
||||
"@babel/types": "^7.8.3",
|
||||
"debug": "^4.1.0",
|
||||
"globals": "^11.1.0",
|
||||
"lodash": "^4.17.13"
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
|
||||
"integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
|
||||
"requires": {
|
||||
"esutils": "^2.0.2",
|
||||
"lodash": "^4.17.13",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"convert-source-map": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
|
||||
@@ -151,9 +73,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/generator": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz",
|
||||
"integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==",
|
||||
"version": "7.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz",
|
||||
"integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.8.3",
|
||||
"jsesc": "^2.5.1",
|
||||
@@ -189,14 +111,14 @@
|
||||
}
|
||||
},
|
||||
"@babel/helper-compilation-targets": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.3.tgz",
|
||||
"integrity": "sha512-JLylPCsFjhLN+6uBSSh3iYdxKdeO9MNmoY96PE/99d8kyBFaXLORtAVhqN6iHa+wtPeqxKLghDOZry0+Aiw9Tw==",
|
||||
"version": "7.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz",
|
||||
"integrity": "sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg==",
|
||||
"requires": {
|
||||
"@babel/compat-data": "^7.8.1",
|
||||
"browserslist": "^4.8.2",
|
||||
"@babel/compat-data": "^7.8.4",
|
||||
"browserslist": "^4.8.5",
|
||||
"invariant": "^2.2.4",
|
||||
"levenary": "^1.1.0",
|
||||
"levenary": "^1.1.1",
|
||||
"semver": "^5.5.0"
|
||||
}
|
||||
},
|
||||
@@ -356,111 +278,13 @@
|
||||
}
|
||||
},
|
||||
"@babel/helpers": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.3.tgz",
|
||||
"integrity": "sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ==",
|
||||
"version": "7.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz",
|
||||
"integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==",
|
||||
"requires": {
|
||||
"@babel/template": "^7.8.3",
|
||||
"@babel/traverse": "^7.8.3",
|
||||
"@babel/traverse": "^7.8.4",
|
||||
"@babel/types": "^7.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/code-frame": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
|
||||
"integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
|
||||
"requires": {
|
||||
"@babel/highlight": "^7.8.3"
|
||||
}
|
||||
},
|
||||
"@babel/generator": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz",
|
||||
"integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.8.3",
|
||||
"jsesc": "^2.5.1",
|
||||
"lodash": "^4.17.13",
|
||||
"source-map": "^0.5.0"
|
||||
}
|
||||
},
|
||||
"@babel/helper-function-name": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
|
||||
"integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
|
||||
"requires": {
|
||||
"@babel/helper-get-function-arity": "^7.8.3",
|
||||
"@babel/template": "^7.8.3",
|
||||
"@babel/types": "^7.8.3"
|
||||
}
|
||||
},
|
||||
"@babel/helper-get-function-arity": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
|
||||
"integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.8.3"
|
||||
}
|
||||
},
|
||||
"@babel/helper-split-export-declaration": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
|
||||
"integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.8.3"
|
||||
}
|
||||
},
|
||||
"@babel/highlight": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
|
||||
"integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
|
||||
"requires": {
|
||||
"chalk": "^2.0.0",
|
||||
"esutils": "^2.0.2",
|
||||
"js-tokens": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz",
|
||||
"integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ=="
|
||||
},
|
||||
"@babel/template": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz",
|
||||
"integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.8.3",
|
||||
"@babel/parser": "^7.8.3",
|
||||
"@babel/types": "^7.8.3"
|
||||
}
|
||||
},
|
||||
"@babel/traverse": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz",
|
||||
"integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.8.3",
|
||||
"@babel/generator": "^7.8.3",
|
||||
"@babel/helper-function-name": "^7.8.3",
|
||||
"@babel/helper-split-export-declaration": "^7.8.3",
|
||||
"@babel/parser": "^7.8.3",
|
||||
"@babel/types": "^7.8.3",
|
||||
"debug": "^4.1.0",
|
||||
"globals": "^11.1.0",
|
||||
"lodash": "^4.17.13"
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
|
||||
"integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
|
||||
"requires": {
|
||||
"esutils": "^2.0.2",
|
||||
"lodash": "^4.17.13",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@babel/highlight": {
|
||||
@@ -474,9 +298,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz",
|
||||
"integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ=="
|
||||
"version": "7.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz",
|
||||
"integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw=="
|
||||
},
|
||||
"@babel/plugin-proposal-async-generator-functions": {
|
||||
"version": "7.8.3",
|
||||
@@ -708,9 +532,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-for-of": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.3.tgz",
|
||||
"integrity": "sha512-ZjXznLNTxhpf4Q5q3x1NsngzGA38t9naWH8Gt+0qYZEJAcvPI9waSStSh56u19Ofjr7QmD0wUsQ8hw8s/p1VnA==",
|
||||
"version": "7.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz",
|
||||
"integrity": "sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A==",
|
||||
"requires": {
|
||||
"@babel/helper-plugin-utils": "^7.8.3"
|
||||
}
|
||||
@@ -807,9 +631,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-parameters": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.3.tgz",
|
||||
"integrity": "sha512-/pqngtGb54JwMBZ6S/D3XYylQDFtGjWrnoCF4gXZOUpFV/ujbxnoNGNvDGu6doFWRPBveE72qTx/RRU44j5I/Q==",
|
||||
"version": "7.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz",
|
||||
"integrity": "sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA==",
|
||||
"requires": {
|
||||
"@babel/helper-call-delegate": "^7.8.3",
|
||||
"@babel/helper-get-function-arity": "^7.8.3",
|
||||
@@ -875,9 +699,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-typeof-symbol": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.3.tgz",
|
||||
"integrity": "sha512-3TrkKd4LPqm4jHs6nPtSDI/SV9Cm5PRJkHLUgTcqRQQTMAZ44ZaAdDZJtvWFSaRcvT0a1rTmJ5ZA5tDKjleF3g==",
|
||||
"version": "7.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz",
|
||||
"integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==",
|
||||
"requires": {
|
||||
"@babel/helper-plugin-utils": "^7.8.3"
|
||||
}
|
||||
@@ -892,12 +716,12 @@
|
||||
}
|
||||
},
|
||||
"@babel/preset-env": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.3.tgz",
|
||||
"integrity": "sha512-Rs4RPL2KjSLSE2mWAx5/iCH+GC1ikKdxPrhnRS6PfFVaiZeom22VFKN4X8ZthyN61kAaR05tfXTbCvatl9WIQg==",
|
||||
"version": "7.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.4.tgz",
|
||||
"integrity": "sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w==",
|
||||
"requires": {
|
||||
"@babel/compat-data": "^7.8.0",
|
||||
"@babel/helper-compilation-targets": "^7.8.3",
|
||||
"@babel/compat-data": "^7.8.4",
|
||||
"@babel/helper-compilation-targets": "^7.8.4",
|
||||
"@babel/helper-module-imports": "^7.8.3",
|
||||
"@babel/helper-plugin-utils": "^7.8.3",
|
||||
"@babel/plugin-proposal-async-generator-functions": "^7.8.3",
|
||||
@@ -926,7 +750,7 @@
|
||||
"@babel/plugin-transform-dotall-regex": "^7.8.3",
|
||||
"@babel/plugin-transform-duplicate-keys": "^7.8.3",
|
||||
"@babel/plugin-transform-exponentiation-operator": "^7.8.3",
|
||||
"@babel/plugin-transform-for-of": "^7.8.3",
|
||||
"@babel/plugin-transform-for-of": "^7.8.4",
|
||||
"@babel/plugin-transform-function-name": "^7.8.3",
|
||||
"@babel/plugin-transform-literals": "^7.8.3",
|
||||
"@babel/plugin-transform-member-expression-literals": "^7.8.3",
|
||||
@@ -937,7 +761,7 @@
|
||||
"@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3",
|
||||
"@babel/plugin-transform-new-target": "^7.8.3",
|
||||
"@babel/plugin-transform-object-super": "^7.8.3",
|
||||
"@babel/plugin-transform-parameters": "^7.8.3",
|
||||
"@babel/plugin-transform-parameters": "^7.8.4",
|
||||
"@babel/plugin-transform-property-literals": "^7.8.3",
|
||||
"@babel/plugin-transform-regenerator": "^7.8.3",
|
||||
"@babel/plugin-transform-reserved-words": "^7.8.3",
|
||||
@@ -945,13 +769,13 @@
|
||||
"@babel/plugin-transform-spread": "^7.8.3",
|
||||
"@babel/plugin-transform-sticky-regex": "^7.8.3",
|
||||
"@babel/plugin-transform-template-literals": "^7.8.3",
|
||||
"@babel/plugin-transform-typeof-symbol": "^7.8.3",
|
||||
"@babel/plugin-transform-typeof-symbol": "^7.8.4",
|
||||
"@babel/plugin-transform-unicode-regex": "^7.8.3",
|
||||
"@babel/types": "^7.8.3",
|
||||
"browserslist": "^4.8.2",
|
||||
"browserslist": "^4.8.5",
|
||||
"core-js-compat": "^3.6.2",
|
||||
"invariant": "^2.2.2",
|
||||
"levenary": "^1.1.0",
|
||||
"levenary": "^1.1.1",
|
||||
"semver": "^5.5.0"
|
||||
}
|
||||
},
|
||||
@@ -998,15 +822,15 @@
|
||||
}
|
||||
},
|
||||
"@babel/traverse": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz",
|
||||
"integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==",
|
||||
"version": "7.8.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz",
|
||||
"integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.8.3",
|
||||
"@babel/generator": "^7.8.3",
|
||||
"@babel/generator": "^7.8.4",
|
||||
"@babel/helper-function-name": "^7.8.3",
|
||||
"@babel/helper-split-export-declaration": "^7.8.3",
|
||||
"@babel/parser": "^7.8.3",
|
||||
"@babel/parser": "^7.8.4",
|
||||
"@babel/types": "^7.8.3",
|
||||
"debug": "^4.1.0",
|
||||
"globals": "^11.1.0",
|
||||
@@ -2005,9 +1829,9 @@
|
||||
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
|
||||
},
|
||||
"aws-sdk": {
|
||||
"version": "2.610.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.610.0.tgz",
|
||||
"integrity": "sha512-kqcoCTKjbxrUo2KeLQR2Jw6l4PvkbHXSDk8KqF2hXcpHibiOcMXZZPVe9X+s90RC/B2+qU95M7FImp9ByMcw7A==",
|
||||
"version": "2.624.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.624.0.tgz",
|
||||
"integrity": "sha512-6MhbdND7A5lEBiNSZ/HLwhKgrysmwTy6C47H7vfuVnY25hDkIND3C0PLqeRyskUqxv0RqsiAB4kqiMtpE08IGA==",
|
||||
"requires": {
|
||||
"buffer": "4.9.1",
|
||||
"events": "1.1.1",
|
||||
@@ -2337,12 +2161,12 @@
|
||||
}
|
||||
},
|
||||
"bcrypt": {
|
||||
"version": "3.0.7",
|
||||
"resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.7.tgz",
|
||||
"integrity": "sha512-K5UglF9VQvBMHl/1elNyyFvAfOY9Bj+rpKrCSR9sFwcW8FywAYJSRwTURNej5TaAK2TEJkcJ6r6lh1YPmspx5Q==",
|
||||
"version": "3.0.8",
|
||||
"resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.8.tgz",
|
||||
"integrity": "sha512-jKV6RvLhI36TQnPDvUFqBEnGX9c8dRRygKxCZu7E+MgLfKZbmmXL8a7/SFFOyHoPNX9nV81cKRC5tbQfvEQtpw==",
|
||||
"requires": {
|
||||
"nan": "2.14.0",
|
||||
"node-pre-gyp": "0.13.0"
|
||||
"node-pre-gyp": "0.14.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"nan": {
|
||||
@@ -2796,13 +2620,13 @@
|
||||
"dev": true
|
||||
},
|
||||
"browserslist": {
|
||||
"version": "4.8.3",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz",
|
||||
"integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==",
|
||||
"version": "4.8.6",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.6.tgz",
|
||||
"integrity": "sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg==",
|
||||
"requires": {
|
||||
"caniuse-lite": "^1.0.30001017",
|
||||
"electron-to-chromium": "^1.3.322",
|
||||
"node-releases": "^1.1.44"
|
||||
"caniuse-lite": "^1.0.30001023",
|
||||
"electron-to-chromium": "^1.3.341",
|
||||
"node-releases": "^1.1.47"
|
||||
}
|
||||
},
|
||||
"bson": {
|
||||
@@ -2949,9 +2773,9 @@
|
||||
"integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs="
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30001021",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001021.tgz",
|
||||
"integrity": "sha512-wuMhT7/hwkgd8gldgp2jcrUjOU9RXJ4XxGumQeOsUr91l3WwmM68Cpa/ymCnWEDqakwFXhuDQbaKNHXBPgeE9g=="
|
||||
"version": "1.0.30001023",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001023.tgz",
|
||||
"integrity": "sha512-C5TDMiYG11EOhVOA62W1p3UsJ2z4DsHtMBQtjzp3ZsUglcQn62WOUgW0y795c7A5uZ+GCEIvzkMatLIlAsbNTA=="
|
||||
},
|
||||
"capture-stack-trace": {
|
||||
"version": "1.0.1",
|
||||
@@ -4118,6 +3942,11 @@
|
||||
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
|
||||
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
|
||||
},
|
||||
"denque": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
|
||||
"integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
|
||||
},
|
||||
"depd": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
||||
@@ -4403,9 +4232,9 @@
|
||||
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
|
||||
},
|
||||
"electron-to-chromium": {
|
||||
"version": "1.3.338",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.338.tgz",
|
||||
"integrity": "sha512-wlmfixuHEc9CkfOKgcqdtzBmRW4NStM9ptl5oPILY2UDyHuSXb3Yit+yLVyLObTgGuMMU36hhnfs2GDJId7ctA=="
|
||||
"version": "1.3.344",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.344.tgz",
|
||||
"integrity": "sha512-tvbx2Wl8WBR+ym3u492D0L6/jH+8NoQXqe46+QhbWH3voVPauGuZYeb1QAXYoOAWuiP2dbSvlBx0kQ1F3hu/Mw=="
|
||||
},
|
||||
"emitter-listener": {
|
||||
"version": "1.1.2",
|
||||
@@ -8315,11 +8144,11 @@
|
||||
}
|
||||
},
|
||||
"js2xmlparser": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.0.tgz",
|
||||
"integrity": "sha512-WuNgdZOXVmBk5kUPMcTcVUpbGRzLfNkv7+7APq7WiDihpXVKrgxo6wwRpRl9OQeEBgKCVk9mR7RbzrnNWC8oBw==",
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.1.tgz",
|
||||
"integrity": "sha512-KrPTolcw6RocpYjdC7pL7v62e55q7qOMHvLX1UCLc5AAS8qeJ6nukarEJAF2KL2PZxlbGueEbINqZR2bDe/gUw==",
|
||||
"requires": {
|
||||
"xmlcreate": "^2.0.0"
|
||||
"xmlcreate": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"jsbn": {
|
||||
@@ -8563,9 +8392,9 @@
|
||||
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="
|
||||
},
|
||||
"levenary": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.0.tgz",
|
||||
"integrity": "sha512-VHcwhO0UTpUW7rLPN2/OiWJdgA1e9BqEDALhrgCe/F+uUJnep6CoUsTzMeP8Rh0NGr9uKquXxqe7lwLZo509nQ==",
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz",
|
||||
"integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==",
|
||||
"requires": {
|
||||
"leven": "^3.1.0"
|
||||
}
|
||||
@@ -9288,6 +9117,7 @@
|
||||
"version": "3.4.1",
|
||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.4.1.tgz",
|
||||
"integrity": "sha512-juqt5/Z42J4DcE7tG7UdVaTKmUC6zinF4yioPfpeOSNBieWSK6qCY+0tfGQcHLKrauWPDdMZVROHJOa8q2pWsA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"bson": "^1.1.1",
|
||||
"require_optional": "^1.0.1",
|
||||
@@ -9296,13 +9126,13 @@
|
||||
}
|
||||
},
|
||||
"mongoose": {
|
||||
"version": "5.8.9",
|
||||
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.8.9.tgz",
|
||||
"integrity": "sha512-gRazoLTQ0yuv4bk2z+nZEarKCyJ7WilFBkgrRqpOczUZUhk3i/FCe0rp8Mjc87dGXaHx54j8AjPJ0UKqJDXWMA==",
|
||||
"version": "5.9.2",
|
||||
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.9.2.tgz",
|
||||
"integrity": "sha512-Sa1qfqBvUfAgsrXpZjbBoIx8PEDUJSKF5Ous8gnBFI7TPiueSgJjg6GRA7A0teU8AB/vd0h8rl1rD5RQNfWhIw==",
|
||||
"requires": {
|
||||
"bson": "~1.1.1",
|
||||
"kareem": "2.3.1",
|
||||
"mongodb": "3.4.1",
|
||||
"mongodb": "3.5.3",
|
||||
"mongoose-legacy-pluralize": "1.0.2",
|
||||
"mpath": "0.6.0",
|
||||
"mquery": "3.2.2",
|
||||
@@ -9311,6 +9141,30 @@
|
||||
"safe-buffer": "5.1.2",
|
||||
"sift": "7.0.1",
|
||||
"sliced": "1.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"bl": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz",
|
||||
"integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==",
|
||||
"requires": {
|
||||
"readable-stream": "^2.3.5",
|
||||
"safe-buffer": "^5.1.1"
|
||||
}
|
||||
},
|
||||
"mongodb": {
|
||||
"version": "3.5.3",
|
||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.3.tgz",
|
||||
"integrity": "sha512-II7P7A3XUdPiXRgcN96qIoRa1oesM6qLNZkzfPluNZjVkgQk3jnQwOT6/uDk4USRDTTLjNFw2vwfmbRGTA7msg==",
|
||||
"requires": {
|
||||
"bl": "^2.2.0",
|
||||
"bson": "^1.1.1",
|
||||
"denque": "^1.4.1",
|
||||
"require_optional": "^1.0.1",
|
||||
"safe-buffer": "^5.1.2",
|
||||
"saslprep": "^1.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"mongoose-legacy-pluralize": {
|
||||
@@ -9538,9 +9392,9 @@
|
||||
}
|
||||
},
|
||||
"needle": {
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz",
|
||||
"integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==",
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/needle/-/needle-2.3.2.tgz",
|
||||
"integrity": "sha512-DUzITvPVDUy6vczKKYTnWc/pBZ0EnjMJnQ3y+Jo5zfKFimJs7S3HFCxCRZYB9FUZcrzUQr3WsmvZgddMEIZv6w==",
|
||||
"requires": {
|
||||
"debug": "^3.2.6",
|
||||
"iconv-lite": "^0.4.4",
|
||||
@@ -9773,9 +9627,9 @@
|
||||
"integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA="
|
||||
},
|
||||
"node-pre-gyp": {
|
||||
"version": "0.13.0",
|
||||
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz",
|
||||
"integrity": "sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==",
|
||||
"version": "0.14.0",
|
||||
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz",
|
||||
"integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==",
|
||||
"requires": {
|
||||
"detect-libc": "^1.0.2",
|
||||
"mkdirp": "^0.5.1",
|
||||
@@ -9786,7 +9640,7 @@
|
||||
"rc": "^1.2.7",
|
||||
"rimraf": "^2.6.1",
|
||||
"semver": "^5.3.0",
|
||||
"tar": "^4"
|
||||
"tar": "^4.4.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"rimraf": {
|
||||
@@ -9800,9 +9654,9 @@
|
||||
}
|
||||
},
|
||||
"node-releases": {
|
||||
"version": "1.1.46",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.46.tgz",
|
||||
"integrity": "sha512-YOjdx+Uoh9FbRO7yVYbnbt1puRWPQMemR3SutLeyv2XfxKs1ihpe0OLAUwBPEP2ImNH/PZC7SEiC6j32dwRZ7g==",
|
||||
"version": "1.1.47",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.47.tgz",
|
||||
"integrity": "sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA==",
|
||||
"requires": {
|
||||
"semver": "^6.3.0"
|
||||
},
|
||||
@@ -9883,9 +9737,12 @@
|
||||
}
|
||||
},
|
||||
"npm-bundled": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz",
|
||||
"integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g=="
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz",
|
||||
"integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==",
|
||||
"requires": {
|
||||
"npm-normalize-package-bin": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"npm-conf": {
|
||||
"version": "1.1.3",
|
||||
@@ -9905,13 +9762,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"npm-normalize-package-bin": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
|
||||
"integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="
|
||||
},
|
||||
"npm-packlist": {
|
||||
"version": "1.4.6",
|
||||
"resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.6.tgz",
|
||||
"integrity": "sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg==",
|
||||
"version": "1.4.8",
|
||||
"resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz",
|
||||
"integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==",
|
||||
"requires": {
|
||||
"ignore-walk": "^3.0.1",
|
||||
"npm-bundled": "^1.0.1"
|
||||
"npm-bundled": "^1.0.1",
|
||||
"npm-normalize-package-bin": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"npm-run-path": {
|
||||
@@ -11415,9 +11278,9 @@
|
||||
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
|
||||
},
|
||||
"rimraf": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz",
|
||||
"integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==",
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
||||
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
|
||||
"requires": {
|
||||
"glob": "^7.1.3"
|
||||
}
|
||||
@@ -11707,9 +11570,9 @@
|
||||
}
|
||||
},
|
||||
"sinon-chai": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.4.0.tgz",
|
||||
"integrity": "sha512-BpVxsjEkGi6XPbDXrgWUe7Cb1ZzIfxKUbu/MmH5RoUnS7AXpKo3aIYIyQUg0FMvlUL05aPt7VZuAdaeQhEnWxg==",
|
||||
"version": "3.5.0",
|
||||
"resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.5.0.tgz",
|
||||
"integrity": "sha512-IifbusYiQBpUxxFJkR3wTU68xzBN0+bxCScEaKMjBvAQERg6FnTTc1F17rseLb1tjmkJ23730AXpFI0c47FgAg==",
|
||||
"dev": true
|
||||
},
|
||||
"sinon-stub-promise": {
|
||||
@@ -12351,9 +12214,9 @@
|
||||
"integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls="
|
||||
},
|
||||
"superagent": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-5.2.1.tgz",
|
||||
"integrity": "sha512-46b4Lkwnlz7Ebdv2FBbfuqb3kVkG1jV/SK3EW6NnwL9a3T4h5hHtegNEQfbXvTFbDoUZXId4W3dMgap2f6ic1g==",
|
||||
"version": "5.2.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-5.2.2.tgz",
|
||||
"integrity": "sha512-pMWBUnIllK4ZTw7p/UaobiQPwAO5w/1NRRTDpV0FTVNmECztsxKspj3ZWEordVEaqpZtmOQJJna4yTLyC/q7PQ==",
|
||||
"requires": {
|
||||
"component-emitter": "^1.3.0",
|
||||
"cookiejar": "^2.1.2",
|
||||
@@ -12384,9 +12247,9 @@
|
||||
"integrity": "sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA=="
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
|
||||
"integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
|
||||
"requires": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
@@ -13841,9 +13704,9 @@
|
||||
"integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ=="
|
||||
},
|
||||
"xmlcreate": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.1.tgz",
|
||||
"integrity": "sha512-MjGsXhKG8YjTKrDCXseFo3ClbMGvUD4en29H2Cev1dv4P/chlpw6KdYmlCWDkhosBVKRDjM836+3e3pm1cBNJA=="
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.3.tgz",
|
||||
"integrity": "sha512-HgS+X6zAztGa9zIK3Y3LXuJes33Lz9x+YyTxgrkIdabu2vqcGOWwdfCpf1hWLRrd553wd4QCDf6BBO6FfdsRiQ=="
|
||||
},
|
||||
"xmldom": {
|
||||
"version": "0.1.19",
|
||||
|
||||
20
package.json
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "habitica",
|
||||
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
||||
"version": "4.132.1",
|
||||
"version": "4.135.0",
|
||||
"main": "./website/server/index.js",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.8.3",
|
||||
"@babel/preset-env": "^7.8.3",
|
||||
"@babel/core": "^7.8.4",
|
||||
"@babel/preset-env": "^7.8.4",
|
||||
"@babel/register": "^7.8.3",
|
||||
"@google-cloud/trace-agent": "^4.2.5",
|
||||
"@slack/client": "^3.8.1",
|
||||
@@ -14,8 +14,8 @@
|
||||
"amplitude": "^3.5.0",
|
||||
"apidoc": "^0.17.5",
|
||||
"apn": "^2.2.0",
|
||||
"aws-sdk": "^2.610.0",
|
||||
"bcrypt": "^3.0.7",
|
||||
"aws-sdk": "^2.624.0",
|
||||
"bcrypt": "^3.0.8",
|
||||
"body-parser": "^1.18.3",
|
||||
"compression": "^1.7.4",
|
||||
"cookie-session": "^1.4.0",
|
||||
@@ -40,13 +40,13 @@
|
||||
"helmet": "^3.21.2",
|
||||
"image-size": "^0.8.3",
|
||||
"in-app-purchase": "^1.11.3",
|
||||
"js2xmlparser": "^4.0.0",
|
||||
"js2xmlparser": "^4.0.1",
|
||||
"lodash": "^4.17.15",
|
||||
"merge-stream": "^2.0.0",
|
||||
"method-override": "^3.0.0",
|
||||
"moment": "^2.24.0",
|
||||
"moment-recur": "^1.0.7",
|
||||
"mongoose": "^5.8.9",
|
||||
"mongoose": "^5.9.2",
|
||||
"morgan": "^1.7.0",
|
||||
"nconf": "^0.10.0",
|
||||
"node-gcm": "^1.0.2",
|
||||
@@ -60,10 +60,10 @@
|
||||
"ps-tree": "^1.0.0",
|
||||
"regenerator-runtime": "^0.13.3",
|
||||
"remove-markdown": "^0.3.0",
|
||||
"rimraf": "^3.0.0",
|
||||
"rimraf": "^3.0.2",
|
||||
"short-uuid": "^3.0.0",
|
||||
"stripe": "^7.15.0",
|
||||
"superagent": "^5.2.1",
|
||||
"superagent": "^5.2.2",
|
||||
"universal-analytics": "^0.4.17",
|
||||
"useragent": "^2.1.9",
|
||||
"uuid": "^3.4.0",
|
||||
@@ -113,7 +113,7 @@
|
||||
"monk": "^7.1.2",
|
||||
"require-again": "^2.0.0",
|
||||
"sinon": "^7.2.4",
|
||||
"sinon-chai": "^3.4.0",
|
||||
"sinon-chai": "^3.5.0",
|
||||
"sinon-stub-promise": "^4.0.0"
|
||||
},
|
||||
"optionalDependencies": {}
|
||||
|
||||
@@ -34,11 +34,12 @@ async function deleteAmplitudeData (userId, email) {
|
||||
}
|
||||
|
||||
async function deleteHabiticaData (user, email) {
|
||||
const truncatedEmail = email.slice(0, email.indexOf('@'));
|
||||
await User.update(
|
||||
{ _id: user._id },
|
||||
{
|
||||
$set: {
|
||||
'auth.local.email': email,
|
||||
'auth.local.email': user.auth.local.email ? email : `${truncatedEmail}@example.com`,
|
||||
'auth.local.hashed_password': '$2a$10$QDnNh1j1yMPnTXDEOV38xOePEWFd4X8DSYwAM8XTmqmacG5X0DKjW',
|
||||
'auth.local.passwordHashMethod': 'bcrypt',
|
||||
},
|
||||
|
||||
@@ -278,19 +278,6 @@ describe('Google Payments', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should throw an error if subscription is still valid', async () => {
|
||||
iap.getPurchaseData.restore();
|
||||
iapGetPurchaseDataStub = sinon.stub(iap, 'getPurchaseData')
|
||||
.returns([{ expirationDate: expirationDate.add({ day: 1 }).toDate() }]);
|
||||
|
||||
await expect(googlePayments.cancelSubscribe(user, headers))
|
||||
.to.eventually.be.rejected.and.to.eql({
|
||||
httpCode: 401,
|
||||
name: 'NotAuthorized',
|
||||
message: googlePayments.constants.RESPONSE_STILL_VALID,
|
||||
});
|
||||
});
|
||||
|
||||
it('should throw an error if receipt is invalid', async () => {
|
||||
iap.isValidated.restore();
|
||||
iapIsValidatedStub = sinon.stub(iap, 'isValidated')
|
||||
|
||||
@@ -100,7 +100,7 @@ describe('POST /groups/:groupId/quests/accept', () => {
|
||||
.to.eventually.be.rejected.and.eql({
|
||||
code: 401,
|
||||
error: 'NotAuthorized',
|
||||
message: t('questAlreadyUnderway'),
|
||||
message: t('questAlreadyStartedFriendly'),
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -73,7 +73,7 @@ describe('POST /groups/:groupId/quests/force-start', () => {
|
||||
.to.eventually.be.rejected.and.eql({
|
||||
code: 401,
|
||||
error: 'NotAuthorized',
|
||||
message: t('questAlreadyUnderway'),
|
||||
message: t('questAlreadyStarted'),
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@ describe('POST /groups/:groupId/quests/reject', () => {
|
||||
.to.eventually.be.rejected.and.eql({
|
||||
code: 401,
|
||||
error: 'NotAuthorized',
|
||||
message: t('questAlreadyUnderway'),
|
||||
message: t('questAlreadyStartedFriendly'),
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
5428
website/client/package-lock.json
generated
@@ -13,32 +13,32 @@
|
||||
"test:unit": "vue-cli-service test:unit --require ./tests/unit/helpers.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@vue/cli-plugin-babel": "^4.1.2",
|
||||
"@vue/cli-plugin-eslint": "^4.1.2",
|
||||
"@vue/cli-plugin-router": "^4.1.2",
|
||||
"@vue/cli-plugin-unit-mocha": "^4.1.2",
|
||||
"@vue/cli-service": "^4.1.2",
|
||||
"@storybook/addon-actions": "^5.3.9",
|
||||
"@storybook/addon-knobs": "^5.3.9",
|
||||
"@storybook/addon-links": "^5.3.9",
|
||||
"@storybook/addon-notes": "^5.3.9",
|
||||
"@storybook/vue": "^5.3.9",
|
||||
"@vue/cli-plugin-babel": "^4.2.2",
|
||||
"@vue/cli-plugin-eslint": "^4.2.2",
|
||||
"@vue/cli-plugin-router": "^4.2.2",
|
||||
"@vue/cli-plugin-unit-mocha": "^4.2.2",
|
||||
"@vue/cli-service": "^4.2.2",
|
||||
"@storybook/addon-actions": "^5.3.13",
|
||||
"@storybook/addon-knobs": "^5.3.13",
|
||||
"@storybook/addon-links": "^5.3.13",
|
||||
"@storybook/addon-notes": "^5.3.13",
|
||||
"@storybook/vue": "^5.3.13",
|
||||
"@vue/test-utils": "1.0.0-beta.29",
|
||||
"amplitude-js": "^5.8.0",
|
||||
"amplitude-js": "^5.9.0",
|
||||
"axios": "^0.19.2",
|
||||
"axios-progress-bar": "^1.2.0",
|
||||
"babel-eslint": "^10.0.1",
|
||||
"bootstrap": "^4.4.1",
|
||||
"bootstrap-vue": "^2.3.0",
|
||||
"bootstrap-vue": "^2.5.0",
|
||||
"chai": "^4.1.2",
|
||||
"core-js": "^3.6.4",
|
||||
"eslint": "^6.8.0",
|
||||
"eslint-config-habitrpg": "^6.2.0",
|
||||
"eslint-plugin-mocha": "^5.3.0",
|
||||
"eslint-plugin-vue": "^6.1.2",
|
||||
"eslint-plugin-vue": "^6.2.1",
|
||||
"habitica-markdown": "^1.3.2",
|
||||
"hellojs": "^1.18.4",
|
||||
"inspectpack": "^4.3.1",
|
||||
"inspectpack": "^4.4.0",
|
||||
"intro.js": "^2.9.3",
|
||||
"jquery": "^3.4.1",
|
||||
"lodash": "^4.17.15",
|
||||
@@ -47,7 +47,7 @@
|
||||
"sass": "^1.25.0",
|
||||
"sass-loader": "^8.0.2",
|
||||
"smartbanner.js": "^1.15.0",
|
||||
"svg-inline-loader": "^0.8.0",
|
||||
"svg-inline-loader": "^0.8.2",
|
||||
"svg-url-loader": "^3.0.3",
|
||||
"svgo": "^1.3.2",
|
||||
"svgo-loader": "^2.2.1",
|
||||
@@ -61,6 +61,6 @@
|
||||
"vue2-perfect-scrollbar": "^1.3.0",
|
||||
"vuedraggable": "^2.23.1",
|
||||
"vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#5d237615463a84a23dd6f3f77c6ab577d68593ec",
|
||||
"webpack": "^4.41.5"
|
||||
"webpack": "^4.41.6"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +1,60 @@
|
||||
.promo_achievement_CottonCandyPink {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -668px -444px;
|
||||
width: 204px;
|
||||
height: 102px;
|
||||
}
|
||||
.promo_armoire_backgrounds_202002 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -328px 0px;
|
||||
background-position: 0px -277px;
|
||||
width: 423px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_mystery_022020 {
|
||||
.promo_mystery_202003 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px -277px;
|
||||
background-position: -668px -148px;
|
||||
width: 282px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_take_this {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -328px -148px;
|
||||
background-position: -873px -444px;
|
||||
width: 96px;
|
||||
height: 69px;
|
||||
}
|
||||
.promo_valentines_2020 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -668px 0px;
|
||||
width: 309px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_valentines_potions {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px -425px;
|
||||
width: 420px;
|
||||
height: 147px;
|
||||
}
|
||||
.scene_cake {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -424px -277px;
|
||||
width: 204px;
|
||||
height: 102px;
|
||||
}
|
||||
.scene_dailies {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px 0px;
|
||||
width: 327px;
|
||||
height: 276px;
|
||||
}
|
||||
.scene_gaining_achievement {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -328px 0px;
|
||||
width: 339px;
|
||||
height: 210px;
|
||||
}
|
||||
.scene_shanaqui {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -668px -296px;
|
||||
width: 282px;
|
||||
height: 147px;
|
||||
}
|
||||
|
||||
@@ -1,222 +1,222 @@
|
||||
.achievement-alien {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1656px -1480px;
|
||||
background-position: -1446px -1628px;
|
||||
width: 24px;
|
||||
height: 26px;
|
||||
}
|
||||
.achievement-alien2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -715px -1549px;
|
||||
background-position: -813px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-allYourBase2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -759px -1480px;
|
||||
background-position: -1092px -1480px;
|
||||
width: 64px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-alpha2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1225px -1628px;
|
||||
background-position: -1372px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-aridAuthority2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -954px -1480px;
|
||||
background-position: -1027px -1480px;
|
||||
width: 64px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-armor2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1127px -1628px;
|
||||
background-position: -1274px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-backToBasics2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1411px -1480px;
|
||||
background-position: -1549px -1480px;
|
||||
width: 48px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-bewilder2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1029px -1628px;
|
||||
background-position: -1176px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-birthday2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -980px -1628px;
|
||||
background-position: -1127px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-boot2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -931px -1628px;
|
||||
background-position: -1078px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-bow2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -882px -1628px;
|
||||
background-position: -1029px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-burnout2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -833px -1628px;
|
||||
background-position: -980px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-cactus2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -784px -1628px;
|
||||
background-position: -931px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-cake2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -735px -1628px;
|
||||
background-position: -882px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-cave2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -686px -1628px;
|
||||
background-position: -833px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-challenge2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -637px -1628px;
|
||||
background-position: -784px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-comment2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -588px -1628px;
|
||||
background-position: -735px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-completedTask2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1362px -1480px;
|
||||
background-position: -1500px -1480px;
|
||||
width: 48px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-congrats2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -490px -1628px;
|
||||
background-position: -637px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-costumeContest2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -441px -1628px;
|
||||
background-position: -588px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-createdTask2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1313px -1480px;
|
||||
background-position: -1451px -1480px;
|
||||
width: 48px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-dilatory2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -343px -1628px;
|
||||
background-position: -490px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-dustDevil2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1264px -1480px;
|
||||
background-position: -1402px -1480px;
|
||||
width: 48px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-dysheartener2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -245px -1628px;
|
||||
background-position: -392px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-fedPet2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1215px -1480px;
|
||||
background-position: -1353px -1480px;
|
||||
width: 48px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-friends2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -147px -1628px;
|
||||
background-position: -294px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-getwell2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -98px -1628px;
|
||||
background-position: -245px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-goodluck2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -49px -1628px;
|
||||
background-position: -196px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-greeting2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -1628px;
|
||||
background-position: -147px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-guild2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1646px -1549px;
|
||||
background-position: -98px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-habitBirthday2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1597px -1549px;
|
||||
background-position: -49px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-habiticaDay2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1548px -1549px;
|
||||
background-position: 0px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-hatchedPet2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1166px -1480px;
|
||||
background-position: -1304px -1480px;
|
||||
width: 48px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-heart2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1450px -1549px;
|
||||
background-position: -1597px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-justAddWater2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -637px -1480px;
|
||||
background-position: -775px -1480px;
|
||||
width: 60px;
|
||||
height: 64px;
|
||||
}
|
||||
.achievement-karaoke-2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1352px -1549px;
|
||||
background-position: -1499px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-karaoke {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1323px -1628px;
|
||||
background-position: -1421px -1628px;
|
||||
width: 24px;
|
||||
height: 26px;
|
||||
}
|
||||
@@ -228,529 +228,541 @@
|
||||
}
|
||||
.achievement-lostMasterclasser2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1205px -1549px;
|
||||
background-position: -1352px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-mindOverMatter2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -698px -1480px;
|
||||
background-position: -836px -1480px;
|
||||
width: 60px;
|
||||
height: 64px;
|
||||
}
|
||||
.achievement-monsterMagus2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1019px -1480px;
|
||||
background-position: -1157px -1480px;
|
||||
width: 48px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-ninja2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1058px -1549px;
|
||||
background-position: -1205px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-npc2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1009px -1549px;
|
||||
background-position: -1156px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-nye2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -960px -1549px;
|
||||
background-position: -1107px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-partyOn2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -911px -1549px;
|
||||
background-position: -1058px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-partyUp2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -862px -1549px;
|
||||
background-position: -1009px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-pearlyPro2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -824px -1480px;
|
||||
background-position: -962px -1480px;
|
||||
width: 64px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-perfect2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -764px -1549px;
|
||||
background-position: -911px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-primedForPainting2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1068px -1480px;
|
||||
background-position: -1206px -1480px;
|
||||
width: 48px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-purchasedEquipment2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1117px -1480px;
|
||||
background-position: -1255px -1480px;
|
||||
width: 48px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-rat2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -617px -1549px;
|
||||
background-position: -764px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-rosyOutlook2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -706px -1480px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.achievement-royally-loyal2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-seafoam2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1607px -1480px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-shield2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1558px -1480px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-shinySeed2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1509px -1480px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-snowball2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1460px -1480px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-spookySparkles2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1176px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-stoikalm2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1078px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-sun2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -539px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-sword2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -392px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-thankyou2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -294px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-thermometer2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -196px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-tree2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1499px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-triadbingo2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1401px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-ultimate-healer2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1254px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-ultimate-mage2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1156px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-ultimate-rogue2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1107px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-ultimate-warrior2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -813px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-undeadUndertaker2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -889px -1480px;
|
||||
width: 64px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-unearned2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -666px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-valentine2x {
|
||||
.achievement-seafoam2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -617px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-shield2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-shinySeed2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1647px -1480px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-snowball2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1598px -1480px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-spookySparkles2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1323px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-stoikalm2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1225px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-sun2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -686px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-sword2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -539px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-thankyou2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -441px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-thermometer2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -343px -1628px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-tickledPink2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -637px -1480px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.achievement-tree2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1548px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-triadbingo2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1450px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-ultimate-healer2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1303px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-ultimate-mage2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1254px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-ultimate-rogue2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -960px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-ultimate-warrior2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -862px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-undeadUndertaker2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -897px -1480px;
|
||||
width: 64px;
|
||||
height: 56px;
|
||||
}
|
||||
.achievement-unearned2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -715px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-valentine2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1646px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.achievement-wolf2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1274px -1628px;
|
||||
background-position: -1401px -1549px;
|
||||
width: 48px;
|
||||
height: 52px;
|
||||
}
|
||||
.background_alpine_slopes {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px 0px;
|
||||
background-position: -1278px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_amid_ancient_ruins {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -148px;
|
||||
background-position: -1278px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_among_giant_anemones {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -296px;
|
||||
background-position: -1278px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_apple_picking {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -444px;
|
||||
background-position: -1278px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_aquarium {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -592px;
|
||||
background-position: -1278px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_archaeological_dig {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -740px;
|
||||
background-position: -1278px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_archery_range {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -888px;
|
||||
background-position: 0px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_at_the_docks {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -1036px;
|
||||
background-position: -142px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_aurora {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -1184px;
|
||||
background-position: -284px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_autumn_flower_garden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -1184px;
|
||||
background-position: -426px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.customize-option.background_autumn_flower_garden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -167px -1199px;
|
||||
background-position: -451px -1199px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.background_autumn_forest {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -1184px;
|
||||
background-position: -568px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_avalanche {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -1184px;
|
||||
background-position: -710px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_back_alley {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -1184px;
|
||||
background-position: -852px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_back_of_giant_beast {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -1184px;
|
||||
background-position: -994px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_bamboo_forest {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -1184px;
|
||||
background-position: -1136px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_bayou {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -1184px;
|
||||
background-position: -1278px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_beach {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -1184px;
|
||||
background-position: -1420px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_beehive {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -1184px;
|
||||
background-position: -1420px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_bell_tower {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px 0px;
|
||||
background-position: -1420px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_beside_well {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -148px;
|
||||
background-position: -1420px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_birch_forest {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -296px;
|
||||
background-position: -1420px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_birthday_party {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -444px;
|
||||
background-position: -1420px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_blacksmithy {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -592px;
|
||||
background-position: -1420px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_blizzard {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -740px;
|
||||
background-position: -1420px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_blossoming_desert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -888px;
|
||||
background-position: -1420px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_blue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -1036px;
|
||||
background-position: 0px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_bridge {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px 0px;
|
||||
background-position: -142px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_bug_covered_log {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -1332px;
|
||||
background-position: -284px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_buried_treasure {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -1332px;
|
||||
background-position: -426px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_champions_colosseum {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -1332px;
|
||||
background-position: -568px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_cherry_trees {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -1332px;
|
||||
background-position: -710px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_chessboard_land {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -1332px;
|
||||
background-position: -852px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_clouds {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -1332px;
|
||||
background-position: -994px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_coral_reef {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -1332px;
|
||||
background-position: -1136px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_cornfields {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -1332px;
|
||||
background-position: -1278px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_cozy_barn {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -1332px;
|
||||
background-position: -1420px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_cozy_bedroom {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -1332px;
|
||||
background-position: -1562px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_cozy_library {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -1332px;
|
||||
background-position: -1562px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_creepy_castle {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px 0px;
|
||||
background-position: -1562px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_crosscountry_ski_trail {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -148px;
|
||||
background-position: -1562px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_crystal_cave {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -296px;
|
||||
background-position: -1562px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_dark_deep {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -444px;
|
||||
background-position: -1562px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_deep_mine {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -592px;
|
||||
background-position: -1562px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_deep_sea {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -740px;
|
||||
background-position: -1562px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_desert_dunes {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -888px;
|
||||
background-position: -1562px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_desert_with_snow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -1036px;
|
||||
background-position: -1562px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_dilatory_castle {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -1184px;
|
||||
background-position: 0px -1480px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_dilatory_city {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -1332px;
|
||||
background-position: -142px -1480px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_dilatory_ruins {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -1480px;
|
||||
background-position: -284px -1480px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_distant_castle {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -1480px;
|
||||
background-position: -426px -1480px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_dojo {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -1480px;
|
||||
background-position: 0px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_drifting_raft {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -1480px;
|
||||
background-position: -1278px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_driving_a_coach {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -1184px;
|
||||
background-position: -1278px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
|
||||
@@ -1,30 +1,444 @@
|
||||
.Pet_HatchingPotion_Sunshine {
|
||||
.Pet-Wolf-Glass {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -82px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Glow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -492px -400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -164px -300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Holly {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -164px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-IcySnow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: 0px -100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Peppermint {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -82px -100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Rainbow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -164px -100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Red {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -246px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-RoseQuartz {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -246px -100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-RoyalPurple {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: 0px -200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Ruby {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -82px -200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Shade {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -164px -200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Shadow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -246px -200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Shimmer {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -328px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Silver {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -328px -100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Skeleton {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -328px -200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Spooky {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: 0px -300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-StarryNight {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -82px -300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Sunshine {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: 0px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Thunderstorm {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -246px -300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Veggie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -328px -300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Veteran {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -410px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Watery {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -410px -100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-White {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -410px -200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Wolf-Zombie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -410px -300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Yarn-Base {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -492px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Yarn-CottonCandyBlue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -492px -100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Yarn-CottonCandyPink {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -492px -200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Yarn-Desert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -492px -300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Yarn-Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: 0px -400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Yarn-Red {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -82px -400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Yarn-Shade {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -164px -400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Yarn-Skeleton {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -246px -400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Yarn-White {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -328px -400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Yarn-Zombie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -410px -400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet_HatchingPotion_Amber {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: 0px -500px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Aquatic {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -69px -500px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Aurora {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -276px -638px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Base {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -207px -500px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Bronze {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -276px -500px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Celestial {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -345px -500px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_CottonCandyBlue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -414px -500px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_CottonCandyPink {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -483px -500px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Cupid {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -574px 0px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Desert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -574px -69px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Ember {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -574px -138px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Fairy {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -574px -207px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Floral {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -574px -276px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Frost {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -574px -345px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Ghost {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -574px -414px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Glass {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -574px -483px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Glow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: 0px -569px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -69px -569px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Holly {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -138px -569px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_IcySnow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -207px -569px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Peppermint {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -276px -569px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Purple {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -345px -569px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Rainbow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -414px -569px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Red {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -483px -569px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_RoseQuartz {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -552px -569px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_RoyalPurple {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -643px 0px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Ruby {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -643px -69px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Shade {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -643px -138px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Shadow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -643px -207px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Shimmer {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -643px -276px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Silver {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -643px -345px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Skeleton {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -643px -414px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Spooky {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -643px -483px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_StarryNight {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -643px -552px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Sunshine {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: 0px -638px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Thunderstorm {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -69px 0px;
|
||||
background-position: -69px -638px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Watery {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: 0px -69px;
|
||||
background-position: -138px -638px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_White {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -69px -69px;
|
||||
background-position: -207px -638px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Zombie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -138px 0px;
|
||||
background-position: -138px -500px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
|
||||
BIN
website/client/src/assets/images/g1g1-notif.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
website/client/src/assets/images/g1g1-send.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 475 KiB After Width: | Height: | Size: 475 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 115 KiB |
|
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 115 KiB |
|
Before Width: | Height: | Size: 298 KiB After Width: | Height: | Size: 298 KiB |
|
Before Width: | Height: | Size: 345 KiB After Width: | Height: | Size: 347 KiB |
|
Before Width: | Height: | Size: 171 KiB After Width: | Height: | Size: 186 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 151 KiB |
|
Before Width: | Height: | Size: 140 KiB After Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 134 KiB |
|
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 153 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 156 KiB After Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 153 KiB |
|
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 180 KiB |
|
Before Width: | Height: | Size: 161 KiB After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 166 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 134 KiB |
BIN
website/client/src/assets/images/subscriber-food.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
@@ -41,6 +41,7 @@
|
||||
background-color: inherit;
|
||||
}
|
||||
|
||||
|
||||
&:active, &:hover, &.active {
|
||||
background-color: rgba(#d5c8ff, 0.32);
|
||||
color: $purple-200;
|
||||
@@ -48,7 +49,7 @@
|
||||
|
||||
&.dropdown-inactive {
|
||||
cursor: default;
|
||||
|
||||
|
||||
&:active, &:hover, &.active {
|
||||
background-color: inherit;
|
||||
color: inherit;
|
||||
@@ -97,4 +98,4 @@
|
||||
.dropdown-menu.show {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ h3 {
|
||||
font-size: 16px;
|
||||
line-height: 1.5;
|
||||
color: $gray-50;
|
||||
margin-bottom: 9px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
h4 {
|
||||
|
||||
3
website/client/src/assets/svg/apple-pay-logo.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="98" height="40" viewBox="0 0 98 40">
|
||||
<path fill="#000" fill-rule="nonzero" d="M17.744 5.137c-1.137 1.346-2.957 2.408-4.777 2.256-.228-1.82.663-3.753 1.706-4.948C15.81 1.062 17.801.075 19.413 0c.189 1.896-.55 3.754-1.669 5.137zm1.65 2.617c-2.636-.152-4.892 1.497-6.143 1.497-1.27 0-3.185-1.422-5.27-1.384-2.71.038-5.232 1.574-6.616 4.02C-1.48 16.776.625 24.018 3.375 28c1.345 1.972 2.957 4.133 5.08 4.057 2.01-.076 2.806-1.308 5.232-1.308 2.446 0 3.147 1.308 5.27 1.27 2.2-.038 3.583-1.972 4.93-3.943 1.535-2.237 2.16-4.417 2.198-4.531-.038-.038-4.246-1.65-4.284-6.502-.038-4.057 3.317-5.99 3.47-6.105-1.897-2.805-4.854-3.109-5.878-3.184zm15.222-5.498V31.81h4.588V21.706h6.35c5.801 0 9.877-3.98 9.877-9.744 0-5.763-4-9.706-9.725-9.706h-11.09zm4.588 3.867h5.289c3.98 0 6.256 2.123 6.256 5.858 0 3.735-2.275 5.877-6.275 5.877h-5.27V6.123zM63.81 32.038c2.882 0 5.555-1.46 6.768-3.773h.095v3.545h4.246V17.1c0-4.266-3.412-7.015-8.663-7.015-4.872 0-8.474 2.787-8.607 6.616h4.133c.341-1.82 2.028-3.014 4.341-3.014 2.806 0 4.38 1.308 4.38 3.716v1.63l-5.726.341c-5.327.323-8.208 2.503-8.208 6.294 0 3.83 2.976 6.37 7.241 6.37zm1.233-3.507c-2.446 0-4-1.176-4-2.976 0-1.858 1.497-2.939 4.36-3.11l5.1-.322v1.668c0 2.768-2.351 4.74-5.46 4.74zm15.545 11.317c4.474 0 6.578-1.706 8.417-6.881l8.057-22.597h-4.664l-5.403 17.46H86.9l-5.402-17.46H76.7l7.773 21.516-.417 1.308c-.702 2.218-1.839 3.071-3.867 3.071-.36 0-1.062-.038-1.346-.075v3.545c.265.075 1.402.113 1.744.113z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
8
website/client/src/assets/svg/calendar-purple.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#9A62FF" d="M20.571 3.429V0h-3.428v3.429H6.857V0H3.43v3.429A3.428 3.428 0 0 0 0 6.857v13.714A3.428 3.428 0 0 0 3.429 24H20.57A3.428 3.428 0 0 0 24 20.571V6.857a3.428 3.428 0 0 0-3.429-3.428z"/>
|
||||
<path fill="#D5C8FF" d="M3.429 20.571H20.57V10.286H3.43z"/>
|
||||
<path fill="#9A62FF" d="M3.429 13.286H20.57v-3H3.43z"/>
|
||||
<path fill="#BDA8FF" d="M3.429 13.286H20.57v-3H3.43z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 550 B |
5
website/client/src/assets/svg/close-teal.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
|
||||
<g fill="none" fill-rule="evenodd" stroke="#8EEDF6" stroke-width="2">
|
||||
<path d="M1 11L11 1M11 11L1 1"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 215 B |
13
website/client/src/assets/svg/gift-purple.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="34" viewBox="0 0 32 34">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#22AEB7" stroke-width="4" d="M12.558 7.452C11.49 5.033 9.422 2.896 6.934 2.79 4.446 2.684 3.019 4.68 3.75 6.444c.73 1.766 2.47 2.09 8.113 3.601 1.603.43 1.764-.174.695-2.593z"/>
|
||||
<path stroke="#38C9C6" stroke-width="4" d="M18.916 7.452c1.07-2.419 3.137-4.556 5.625-4.662 2.488-.106 3.915 1.89 3.184 3.654-.73 1.766-2.47 2.09-8.114 3.601-1.602.43-1.764-.174-.695-2.593z"/>
|
||||
<path fill="#46DDDA" d="M15.564 6c-4.87 0-1.953 5.572 0 5.572 1.954 0 4.87-5.572 0-5.572z"/>
|
||||
<path fill="#6133B4" d="M3 17h26v17H3zM0 11h32v6H0z"/>
|
||||
<path fill="#FFF" fill-opacity=".5" d="M16 17h13v17H16z" style="mix-blend-mode:soft-light"/>
|
||||
<path fill="#8EEDF6" d="M16 17h3v17h-3z"/>
|
||||
<path fill="#3BCAD7" d="M13 17h3v17h-3zM10 11h6v6h-6z"/>
|
||||
<path fill="#8EEDF6" d="M16 11h6v6h-6z"/>
|
||||
<path fill="#000" fill-opacity=".2" d="M3 17h13v3H3zM10 11h6v3h-6zM0 14h10v3H0zM22 14h10v3H22zM16 11h6v3h-6zM3 31h13v3H3zM16 17h13v3H16zM16 31h13v3H16z" style="mix-blend-mode:multiply"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
10
website/client/src/assets/svg/google-pay-logo.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="40" viewBox="0 0 100 40">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#5F6368" fill-rule="nonzero" d="M47.131 19.561v11.6h-3.68V2.514h9.76a8.825 8.825 0 0 1 6.32 2.48 7.973 7.973 0 0 1 2.64 6.046 7.936 7.936 0 0 1-2.64 6.08c-1.706 1.627-3.813 2.44-6.32 2.439h-6.08v.002zm0-13.52v10h6.172a4.864 4.864 0 0 0 3.641-1.481 4.882 4.882 0 0 0 0-7.001 4.8 4.8 0 0 0-3.641-1.52H47.13v.002zM70.651 10.921c2.72 0 4.867.727 6.442 2.18 1.574 1.454 2.36 3.448 2.358 5.98v12.08h-3.52v-2.72h-.16c-1.523 2.24-3.55 3.36-6.08 3.36-2.159 0-3.965-.64-5.419-1.92a6.13 6.13 0 0 1-2.18-4.8c0-2.028.766-3.641 2.299-4.839 1.533-1.197 3.58-1.798 6.14-1.8 2.184 0 3.984.4 5.398 1.2V18.8a4.19 4.19 0 0 0-1.52-3.257 5.211 5.211 0 0 0-3.552-1.342c-2.055 0-3.682.867-4.88 2.601l-3.241-2.04c1.783-2.56 4.421-3.84 7.915-3.84zm-4.76 14.24a2.94 2.94 0 0 0 1.22 2.4 4.49 4.49 0 0 0 2.86.96 5.867 5.867 0 0 0 4.139-1.719c1.219-1.147 1.828-2.493 1.828-4.039-1.147-.914-2.747-1.371-4.8-1.371-1.495 0-2.741.36-3.74 1.081-1.007.732-1.508 1.62-1.508 2.688z"/>
|
||||
<path fill="#5F6368" d="M99.657 11.561L87.37 39.801H83.57l4.56-9.881-8.08-18.359h4l5.84 14.08h.08l5.68-14.08z"/>
|
||||
<path fill="#4285F4" d="M32.26 17.06a19.61 19.61 0 0 0-.283-3.346h-15.52v6.339h8.89a7.618 7.618 0 0 1-3.288 5v4.115h5.306c3.106-2.864 4.896-7.1 4.896-12.107z"/>
|
||||
<path fill="#34A853" d="M16.457 33.143c4.441 0 8.18-1.458 10.908-3.973l-5.306-4.114c-1.476 1.001-3.378 1.573-5.602 1.573-4.292 0-7.936-2.894-9.239-6.794H1.753v4.24a16.457 16.457 0 0 0 14.704 9.068z"/>
|
||||
<path fill="#FBBC04" d="M7.218 19.835a9.86 9.86 0 0 1 0-6.299v-4.24H1.753a16.457 16.457 0 0 0 0 14.78l5.465-4.24z"/>
|
||||
<path fill="#EA4335" d="M16.457 6.743A8.935 8.935 0 0 1 22.77 9.21l4.697-4.697A15.813 15.813 0 0 0 16.457.23 16.457 16.457 0 0 0 1.753 9.296l5.465 4.24c1.303-3.9 4.947-6.793 9.24-6.793z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
@@ -1,5 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="34" height="24" viewBox="0 0 34 24">
|
||||
<g fill="#4E4A57" fill-rule="nonzero">
|
||||
<path d="M0 20.776c0 1.646 1.182 2.98 2.641 2.98H31.11c1.459 0 2.641-1.333 2.641-2.98V8.818H0v11.958zM31.109.244H2.64C1.182.244 0 1.577 0 3.224v.892h33.75v-.892c0-1.647-1.182-2.98-2.641-2.98z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 346 B |
7
website/client/src/assets/svg/habitica-logo-purple.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="144" height="31" viewBox="0 0 144 31">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#4F2A93" d="M120.876 24.007a2.27 2.27 0 0 0-3.183.41 4.595 4.595 0 0 1-3.663 1.804 4.62 4.62 0 0 1-4.613-4.335c-.005-.35-.009-2.864-.009-3.19a4.627 4.627 0 0 1 4.622-4.622c1.28 0 2.47.51 3.353 1.44a2.269 2.269 0 0 0 3.29-3.125 9.2 9.2 0 0 0-6.643-2.853c-5.05 0-9.16 4.109-9.16 9.16 0 .03.002 3.175.014 3.406a9.158 9.158 0 0 0 9.146 8.657 9.1 9.1 0 0 0 7.257-3.57 2.27 2.27 0 0 0-.411-3.182M134.373 26.221a4.62 4.62 0 0 1-4.613-4.333c-.005-.353-.008-2.877-.008-3.193a4.627 4.627 0 0 1 4.621-4.622 4.627 4.627 0 0 1 4.622 4.622c0 .328-.003 2.84-.009 3.189a4.618 4.618 0 0 1-4.613 4.337m6.891-17.078a2.264 2.264 0 0 0-2.19 1.706 9.095 9.095 0 0 0-4.7-1.313c-5.051 0-9.16 4.109-9.16 9.16 0 .031.001 3.173.013 3.406a9.158 9.158 0 0 0 9.146 8.657 9.118 9.118 0 0 0 4.81-1.37 2.268 2.268 0 0 0 4.35-.899V11.412a2.27 2.27 0 0 0-2.269-2.269M30.546 26.221a4.62 4.62 0 0 1-4.613-4.335c-.006-.35-.01-2.863-.01-3.19a4.627 4.627 0 0 1 4.623-4.623 4.627 4.627 0 0 1 4.622 4.622c0 .328-.004 2.84-.01 3.189a4.618 4.618 0 0 1-4.612 4.337m6.89-17.078a2.264 2.264 0 0 0-2.19 1.706 9.095 9.095 0 0 0-4.7-1.313c-5.052 0-9.16 4.109-9.16 9.16 0 .031 0 3.174.013 3.406a9.158 9.158 0 0 0 9.147 8.657 9.118 9.118 0 0 0 4.809-1.37 2.268 2.268 0 0 0 4.35-.899V11.412a2.27 2.27 0 0 0-2.269-2.269M70.84 9.143a2.27 2.27 0 0 0-2.27 2.27V28.49a2.27 2.27 0 0 0 4.539 0V11.412a2.27 2.27 0 0 0-2.27-2.269M97.563 9.143a2.27 2.27 0 0 0-2.27 2.27V28.49a2.27 2.27 0 0 0 4.538 0V11.412a2.27 2.27 0 0 0-2.268-2.269M59.066 21.888a4.62 4.62 0 0 1-4.613 4.333 4.62 4.62 0 0 1-4.613-4.338c-.006-.35-.009-2.86-.009-3.187a4.627 4.627 0 0 1 4.622-4.622 4.627 4.627 0 0 1 4.622 4.622c0 .315-.004 2.84-.009 3.192M54.453 9.536a9.089 9.089 0 0 0-4.622 1.265V2.33a2.27 2.27 0 0 0-4.537 0V28.49a2.269 2.269 0 0 0 4.35.9 9.117 9.117 0 0 0 4.81 1.37 9.16 9.16 0 0 0 9.146-8.666c.011-.224.013-3.367.013-3.398 0-5.052-4.11-9.16-9.16-9.16M8.92 9.536a9.143 9.143 0 0 0-4.382 1.11V2.33A2.27 2.27 0 0 0 0 2.33v26.16a2.269 2.269 0 1 0 4.538 0V16.763c.173-.147.333-.314.46-.516a4.601 4.601 0 0 1 3.921-2.173 4.627 4.627 0 0 1 4.622 4.622c0 .415-.004 9.233-.01 9.738a2.27 2.27 0 0 0 4.535.172c.01-.225.012-9.814.012-9.91 0-5.052-4.108-9.16-9.159-9.16M88.95 9.143h-2.648V2.33a2.27 2.27 0 0 0-4.538 0v6.813h-2.647a2.27 2.27 0 0 0 0 4.538h2.647V28.49a2.27 2.27 0 0 0 4.538 0V13.681h2.647a2.27 2.27 0 0 0 0-4.538"/>
|
||||
<path fill="#FF6066" d="M73.025 2.33a2.27 2.27 0 1 1-4.538 0 2.27 2.27 0 0 1 4.538 0"/>
|
||||
<path fill="#4FB5E8" d="M99.748 2.33a2.27 2.27 0 1 1-4.539 0 2.27 2.27 0 0 1 4.539 0"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
8
website/client/src/assets/svg/paypal-logo.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="149" height="40" viewBox="0 0 149 40">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#283B82" fill-rule="nonzero" d="M17.806.284H6.265c-.79 0-1.462.574-1.585 1.354L.012 31.234a.96.96 0 0 0 .952 1.11h5.51c.79 0 1.461-.574 1.585-1.355l1.259-7.982A1.602 1.602 0 0 1 10.9 21.65h3.653c7.603 0 11.99-3.679 13.137-10.97.516-3.189.022-5.695-1.472-7.45C24.58 1.304 21.67.284 17.806.284zm1.332 10.81c-.631 4.141-3.796 4.141-6.855 4.141H10.54l1.222-7.734a.962.962 0 0 1 .95-.812h.798c2.085 0 4.05 0 5.067 1.188.606.709.791 1.762.56 3.217zM52.306 10.96H46.78a.963.963 0 0 0-.95.812l-.245 1.546-.387-.56c-1.196-1.737-3.865-2.317-6.528-2.317-6.107 0-11.323 4.625-12.34 11.114-.528 3.237.223 6.332 2.06 8.49 1.684 1.985 4.094 2.812 6.961 2.812 4.921 0 7.65-3.164 7.65-3.164l-.246 1.536a.961.961 0 0 0 .948 1.113h4.978c.792 0 1.46-.573 1.585-1.355l2.987-18.916a.958.958 0 0 0-.947-1.11zm-7.704 10.757c-.533 3.158-3.039 5.278-6.235 5.278-1.605 0-2.888-.515-3.711-1.49-.817-.97-1.128-2.348-.868-3.884.498-3.13 3.047-5.32 6.194-5.32 1.57 0 2.845.522 3.686 1.506.842.994 1.176 2.381.934 3.91z"/>
|
||||
<path fill="#283B82" d="M81.742 10.96h-5.554a1.61 1.61 0 0 0-1.328.704L67.2 22.948l-3.247-10.843a1.608 1.608 0 0 0-1.54-1.145h-5.457a.962.962 0 0 0-.913 1.273l6.118 17.953-5.752 8.119a.962.962 0 0 0 .785 1.519h5.547a1.6 1.6 0 0 0 1.318-.689l18.473-26.664a.961.961 0 0 0-.79-1.51"/>
|
||||
<path fill="#469BDB" fill-rule="nonzero" d="M100.13.284H88.587c-.788 0-1.46.574-1.583 1.354l-4.668 29.596a.96.96 0 0 0 .949 1.11h5.923c.55 0 1.021-.401 1.107-.948l1.325-8.39a1.602 1.602 0 0 1 1.583-1.355h3.652c7.604 0 11.99-3.679 13.138-10.97.518-3.189.02-5.695-1.473-7.45-1.639-1.927-4.547-2.947-8.41-2.947zm1.332 10.81c-.63 4.141-3.794 4.141-6.855 4.141h-1.74l1.223-7.734a.958.958 0 0 1 .949-.812h.798c2.083 0 4.05 0 5.066 1.188.606.709.79 1.762.559 3.217zM134.629 10.96h-5.524a.957.957 0 0 0-.948.812l-.245 1.546-.388-.56c-1.197-1.737-3.863-2.317-6.526-2.317-6.108 0-11.322 4.625-12.338 11.114-.527 3.237.22 6.332 2.057 8.49 1.688 1.985 4.094 2.812 6.961 2.812 4.921 0 7.65-3.164 7.65-3.164l-.246 1.536a.962.962 0 0 0 .952 1.113h4.977c.788 0 1.46-.573 1.583-1.355l2.988-18.916a.964.964 0 0 0-.953-1.11zm-7.704 10.757c-.53 3.158-3.04 5.278-6.236 5.278-1.602 0-2.888-.515-3.711-1.49-.817-.97-1.124-2.348-.867-3.884.5-3.13 3.046-5.32 6.193-5.32 1.57 0 2.845.522 3.686 1.506.845.994 1.18 2.381.935 3.91z"/>
|
||||
<path fill="#469BDB" d="M141.145 1.096l-4.738 30.138a.96.96 0 0 0 .949 1.11h4.762c.792 0 1.464-.574 1.585-1.355l4.671-29.594a.961.961 0 0 0-.948-1.112h-5.333a.964.964 0 0 0-.948.813"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
26
website/client/src/assets/svg/subscriber-gems.svg
Normal file
@@ -0,0 +1,26 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="39" height="44" viewBox="0 0 39 44">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#24CC8F" d="M2.782 35.927l1.867-8.397 12.887-5.47 7.338 4.49-5.967 16.655z"/>
|
||||
<path fill="#FFF" d="M9.147 33.008L6.351 28.98l5.523-2.344zM18.352 29.1l-.955-4.808-5.523 2.344z" opacity=".25"/>
|
||||
<path fill="#FFF" d="M9.147 33.008l2.727-6.372 6.478 2.465zM5.097 34.727L6.35 28.98l2.796 4.028z" opacity=".5"/>
|
||||
<path fill="#1B996B" d="M22.402 27.382l-5.005-3.09.955 4.809zM5.097 34.727l4.05-1.719 8.627 7.528z" opacity=".35"/>
|
||||
<path fill="#FFF" d="M22.402 27.382l-4.05 1.719-.578 11.435z" opacity=".5"/>
|
||||
<path fill="#FFF" d="M9.147 33.008l9.205-3.907-.578 11.435z" opacity=".25"/>
|
||||
<g>
|
||||
<path fill="#24CC8F" d="M23.248 7.266l4.784-3.162 8.714 3.345 1.44 5.55-10.575 5.225z"/>
|
||||
<path fill="#FFF" d="M27.653 8.814l.524-3.227 3.734 1.434zM33.876 11.203l1.77-2.749-3.735-1.433z" opacity=".25"/>
|
||||
<path fill="#FFF" d="M27.653 8.814L31.91 7.02l1.965 4.182zM24.914 7.763l3.263-2.176-.524 3.227z" opacity=".5"/>
|
||||
<path fill="#1B996B" d="M36.615 12.254l-.97-3.8-1.769 2.749zM24.914 7.763l2.739 1.05.65 7.606z" opacity=".35"/>
|
||||
<path fill="#FFF" d="M36.615 12.254l-2.739-1.051-5.572 5.216z" opacity=".5"/>
|
||||
<path fill="#FFF" d="M27.653 8.814l6.223 2.389-5.572 5.216z" opacity=".25"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#24CC8F" d="M.815 5.996l1.58-4L9.185.301l3.273 2.791-4.25 7.758z"/>
|
||||
<path fill="#FFF" d="M4.187 5.052L3.121 2.845l2.911-.726zM9.039 3.843l-.096-2.45-2.91.726z" opacity=".25"/>
|
||||
<path fill="#FFF" d="M4.187 5.052L6.032 2.12 9.04 3.843zM2.053 5.585l1.068-2.74 1.066 2.207z" opacity=".5"/>
|
||||
<path fill="#1B996B" d="M11.173 3.31l-2.23-1.917.096 2.45zM2.053 5.585l2.134-.533L7.86 9.445z" opacity=".35"/>
|
||||
<path fill="#FFF" d="M11.173 3.31l-2.134.533-1.18 5.602z" opacity=".5"/>
|
||||
<path fill="#FFF" d="M4.187 5.052l4.852-1.21-1.18 5.603z" opacity=".25"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
26
website/client/src/assets/svg/subscriber-hourglasses.svg
Normal file
@@ -0,0 +1,26 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="35" height="47" viewBox="0 0 35 47">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#A9DCF6" fill-opacity=".8" d="M25.955 43.329l-.999 2.352a.939.939 0 0 1-.644.555c-3.194.747-9.918-2.107-11.6-4.923a.941.941 0 0 1-.047-.85l.998-2.351c.911-2.146 2.886-3.738 5.074-4.257a.957.957 0 0 0 .607-1.429c-1.147-1.934-1.374-4.46-.463-6.606l.998-2.352a.937.937 0 0 1 .643-.555c3.195-.746 9.919 2.108 11.6 4.924a.935.935 0 0 1 .049.848l-.999 2.353c-.91 2.145-2.886 3.737-5.074 4.256a.957.957 0 0 0-.606 1.429c1.146 1.934 1.373 4.46.463 6.606"/>
|
||||
<path fill="#FFF" fill-opacity=".9" d="M26.145 25.795c-1.997-.848-3.705-1.145-4.72-1.087l-.788 1.857c-.656 1.547-.524 3.42.347 4.889.466.786.532 1.753.178 2.588a2.881 2.881 0 0 1-1.983 1.669c-1.664.395-3.103 1.6-3.76 3.146l-.788 1.858c.663.77 2.063 1.792 4.06 2.64 1.996.847 3.705 1.144 4.719 1.086l.789-1.858c.656-1.545.523-3.418-.348-4.887a2.883 2.883 0 0 1-.178-2.588 2.886 2.886 0 0 1 1.984-1.67c1.663-.394 3.103-1.6 3.759-3.146l.788-1.857c-.662-.77-2.063-1.793-4.06-2.64"/>
|
||||
<path fill="#9A62FF" d="M25.383 27.029c1.497.636 3.026 1.448 2.883 1.825-.112.305-.366.882-1.844.982-1.436.098-2.123 1.1-2.765.828-.746-.317-.521-.966-1.166-1.98-.664-1.043-.444-1.979-.287-2.32.219-.473 1.681.03 3.179.665"/>
|
||||
<path fill="#4F2A93" d="M22.491 28.685c-.664-1.044-.444-1.98-.287-2.32.173-.376 1.126-.139 2.26.292-.382.027-.93.194-1.114.902-.19.738.576 1.97.14 2.507a.755.755 0 0 1-.29.223c-.231-.363-.257-.894-.709-1.604"/>
|
||||
<path fill="#9A62FF" d="M21.74 36.173c.455.193.22 1.074.662 1.871.543.978.984 2.084.72 3.294-.218.998-.425 1.046-.664 1.021-.238-.024-1.979-.438-3.425-1.454-1.447-1.016-2.062-2.025-1.633-2.608.409-.556 1.079-.893 2.157-1.154 1.032-.25 1.727-1.164 2.182-.97"/>
|
||||
<path fill="#4F2A93" d="M22.458 42.36c-.24-.025-1.98-.439-3.425-1.455-1.15-.807-1.774-1.61-1.766-2.2a.138.138 0 0 1 .019-.027c.233-.302 1.651.06 3.193 1.031 1.47.925 2.526 1.988 2.271 2.573-.093.085-.19.088-.292.077"/>
|
||||
<g>
|
||||
<path fill="#A9DCF6" fill-opacity=".8" d="M12.754 15.163l.61 1.59a.626.626 0 0 1-.052.565c-1.185 1.837-5.732 3.582-7.843 3.01a.627.627 0 0 1-.415-.385l-.61-1.59c-.558-1.45-.348-3.129.461-4.39a.638.638 0 0 0-.37-.967c-1.446-.397-2.725-1.503-3.282-2.954l-.61-1.59a.625.625 0 0 1 .05-.564c1.187-1.837 5.734-3.582 7.844-3.01a.623.623 0 0 1 .416.384l.61 1.59c.557 1.45.347 3.129-.462 4.39a.638.638 0 0 0 .371.967c1.446.397 2.725 1.503 3.282 2.954"/>
|
||||
<path fill="#FFF" fill-opacity=".9" d="M4.725 6.666c-1.35.518-2.307 1.167-2.767 1.665l.482 1.255c.402 1.046 1.333 1.883 2.43 2.184a1.922 1.922 0 0 1 1.284 1.159 1.92 1.92 0 0 1-.178 1.719c-.615.96-.747 2.204-.346 3.249l.483 1.256c.674.062 1.82-.096 3.17-.614 1.349-.518 2.306-1.167 2.765-1.664l-.482-1.257c-.401-1.044-1.332-1.881-2.43-2.182a1.922 1.922 0 0 1-1.284-1.16 1.924 1.924 0 0 1 .178-1.72c.615-.958.747-2.203.346-3.248l-.482-1.256c-.674-.062-1.82.096-3.17.614"/>
|
||||
<path fill="#9A62FF" d="M4.93 7.61c1.013-.388 2.122-.706 2.229-.46.087.199.233.593-.43 1.325-.643.713-.508 1.512-.942 1.678-.505.194-.698-.222-1.476-.41-.802-.192-1.13-.743-1.212-.979-.115-.328.82-.765 1.832-1.153"/>
|
||||
<path fill="#4F2A93" d="M4.31 9.744c-.801-.193-1.129-.743-1.211-.98-.091-.26.476-.587 1.219-.906-.17.19-.357.524-.116.948.25.443 1.188.678 1.228 1.138a.503.503 0 0 1-.036.241c-.28-.067-.537-.31-1.083-.44"/>
|
||||
<path fill="#9A62FF" d="M7.418 13.683c.308-.118.603.413 1.185.59.713.218 1.436.544 1.87 1.247.358.58.28.698.154.797-.125.099-1.15.706-2.315.889-1.165.183-1.926-.016-1.991-.495-.061-.455.104-.927.5-1.552.38-.598.289-1.358.597-1.476"/>
|
||||
<path fill="#4F2A93" d="M10.628 16.317c-.126.1-1.152.707-2.316.89-.926.144-1.597.048-1.866-.238a.092.092 0 0 1-.004-.022c-.027-.253.82-.736 2.01-.984 1.132-.237 2.132-.217 2.28.182-.006.084-.05.13-.104.172"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#A9DCF6" fill-opacity=".8" d="M32.605 10.804l-.31 1.24a.47.47 0 0 1-.275.324c-1.518.619-5.062-.265-6.113-1.524a.47.47 0 0 1-.09-.416l.31-1.24c.281-1.13 1.132-2.07 2.172-2.498a.479.479 0 0 0 .188-.753c-.718-.866-1.027-2.096-.745-3.226l.309-1.24a.469.469 0 0 1 .274-.324c1.519-.619 5.063.265 6.113 1.524.097.114.127.27.09.415l-.308 1.24c-.282 1.13-1.133 2.071-2.173 2.498a.479.479 0 0 0-.188.754c.718.865 1.027 2.095.746 3.226"/>
|
||||
<path fill="#FFF" fill-opacity=".9" d="M31.327 2.13c-1.052-.262-1.92-.276-2.416-.168l-.244.98c-.203.814.009 1.729.554 2.386.292.352.4.824.29 1.264a1.44 1.44 0 0 1-.849.98 2.762 2.762 0 0 0-1.61 1.847l-.244.98c.387.328 1.16.723 2.211.986 1.052.262 1.92.275 2.416.167l.244-.98a2.761 2.761 0 0 0-.554-2.385 1.442 1.442 0 0 1-.29-1.265c.11-.44.427-.806.849-.98a2.76 2.76 0 0 0 1.61-1.847l.244-.979c-.387-.328-1.159-.724-2.211-.986"/>
|
||||
<path fill="#9A62FF" d="M31.047 2.799c.79.197 1.608.478 1.567.676-.032.159-.112.464-.834.629-.701.16-.962.71-1.3.625-.394-.098-.334-.436-.731-.886-.41-.464-.375-.943-.324-1.124.071-.25.833-.117 1.622.08"/>
|
||||
<path fill="#4F2A93" d="M29.749 3.843c-.41-.464-.375-.943-.324-1.124.056-.198.546-.156 1.139-.032-.186.044-.444.169-.48.533-.036.38.44.927.266 1.227a.378.378 0 0 1-.126.133c-.143-.161-.197-.422-.475-.737"/>
|
||||
<path fill="#9A62FF" d="M29.963 7.6c.24.06.193.513.474.872.344.44.648.952.613 1.57-.03.51-.128.55-.248.556-.12.007-1.012-.061-1.805-.45-.794-.388-1.177-.838-1.01-1.16.158-.306.462-.525.974-.739.49-.204.762-.71 1.002-.65"/>
|
||||
<path fill="#4F2A93" d="M30.802 10.599c-.12.006-1.012-.062-1.806-.45-.63-.31-1.002-.657-1.043-.949a.069.069 0 0 1 .007-.015c.091-.167.82-.1 1.657.26.798.341 1.403.784 1.323 1.092-.04.05-.087.059-.138.062"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.6 KiB |
@@ -326,7 +326,7 @@
|
||||
.footer-row {
|
||||
margin: 0;
|
||||
flex: 0 1 auto;
|
||||
z-index: 17;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
footer {
|
||||
|
||||
@@ -18,7 +18,10 @@
|
||||
<div>
|
||||
<span class="mr-1 ml-0 d-block">
|
||||
<strong v-once>{{ $t('createdBy') }}:</strong>
|
||||
<user-link
|
||||
<span v-if="challenge.leader === null">
|
||||
{{ $t('noChallengeOwner') }}
|
||||
</span>
|
||||
<user-link v-else
|
||||
class="mx-1"
|
||||
:user="challenge.leader"
|
||||
/>
|
||||
|
||||
@@ -43,7 +43,14 @@
|
||||
>
|
||||
<div class="owner-item">
|
||||
<strong>{{ $t('createdBy') }}:</strong>
|
||||
<span
|
||||
v-if="challenge.leader === null"
|
||||
class="mx-1"
|
||||
>
|
||||
{{ $t('noChallengeOwner') }}
|
||||
</span>
|
||||
<user-link
|
||||
v-else
|
||||
class="mx-1"
|
||||
:user="challenge.leader"
|
||||
/>
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
v-model="workingChallenge.name"
|
||||
type="text"
|
||||
:placeholder="$t('challengeNamePlaceholder')"
|
||||
@keydown="enableSubmit"
|
||||
/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -26,6 +27,7 @@
|
||||
v-model="workingChallenge.shortName"
|
||||
type="text"
|
||||
:placeholder="$t('shortNamePlaceholder')"
|
||||
@keydown="enableSubmit"
|
||||
/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -41,6 +43,7 @@
|
||||
v-model="workingChallenge.summary"
|
||||
class="summary-textarea form-control"
|
||||
:placeholder="$t('challengeSummaryPlaceholder')"
|
||||
@keydown="enableSubmit"
|
||||
></textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -55,6 +58,7 @@
|
||||
v-model="workingChallenge.description"
|
||||
class="description-textarea form-control"
|
||||
:placeholder="$t('challengeDescriptionPlaceholder')"
|
||||
@keydown="enableSubmit"
|
||||
></textarea>
|
||||
</div>
|
||||
<div
|
||||
@@ -67,6 +71,7 @@
|
||||
<select
|
||||
v-model="workingChallenge.group"
|
||||
class="form-control"
|
||||
@change="enableSubmit"
|
||||
>
|
||||
<option
|
||||
v-for="group in groups"
|
||||
@@ -119,6 +124,7 @@
|
||||
class="custom-control-input"
|
||||
type="checkbox"
|
||||
:value="group.key"
|
||||
@change="enableSubmit"
|
||||
>
|
||||
<label
|
||||
v-once
|
||||
@@ -150,6 +156,7 @@
|
||||
type="number"
|
||||
:min="minPrize"
|
||||
:max="maxPrize"
|
||||
@change="enableSubmit"
|
||||
>
|
||||
</div>
|
||||
<div class="row footer-wrap">
|
||||
@@ -266,6 +273,7 @@
|
||||
|
||||
<script>
|
||||
import clone from 'lodash/clone';
|
||||
import throttle from 'lodash/throttle';
|
||||
|
||||
import markdownDirective from '@/directives/markdown';
|
||||
|
||||
@@ -534,6 +542,7 @@ export default {
|
||||
if (!this.workingChallenge.description) errors.push(this.$t('descriptionRequired'));
|
||||
if (!this.workingChallenge.group) errors.push(this.$t('locationRequired'));
|
||||
if (!this.workingChallenge.categories || this.workingChallenge.categories.length === 0) errors.push(this.$t('categoiresRequired'));
|
||||
if (this.workingChallenge.prize > this.maxPrize) errors.push(this.$t('cantAfford'));
|
||||
|
||||
if (errors.length > 0) {
|
||||
window.alert(errors.join('\n'));
|
||||
@@ -556,14 +565,20 @@ export default {
|
||||
challengeDetails.categories = serverCategories;
|
||||
|
||||
let challenge;
|
||||
if (this.cloning) {
|
||||
challenge = await this.$store.dispatch('challenges:cloneChallenge', {
|
||||
challenge: challengeDetails,
|
||||
cloningChallengeId: this.cloningChallengeId,
|
||||
});
|
||||
this.cloningChallengeId = '';
|
||||
} else {
|
||||
challenge = await this.$store.dispatch('challenges:createChallenge', { challenge: challengeDetails });
|
||||
try {
|
||||
if (this.cloning) {
|
||||
challenge = await this.$store.dispatch('challenges:cloneChallenge', {
|
||||
challenge: challengeDetails,
|
||||
cloningChallengeId: this.cloningChallengeId,
|
||||
});
|
||||
this.cloningChallengeId = '';
|
||||
} else {
|
||||
challenge = await this.$store.dispatch('challenges:createChallenge', { challenge: challengeDetails });
|
||||
}
|
||||
} catch (e) {
|
||||
// creating the challenge failed. Most probably due to server-side errors.
|
||||
console.error(e); // eslint-disable-line no-console
|
||||
return;
|
||||
}
|
||||
|
||||
// Update Group Prize
|
||||
@@ -618,6 +633,12 @@ export default {
|
||||
toggleCategorySelect () {
|
||||
this.showCategorySelect = !this.showCategorySelect;
|
||||
},
|
||||
enableSubmit: throttle(function enableSubmit () {
|
||||
/* Enables the submit button if it was disabled */
|
||||
if (this.loading) {
|
||||
this.loading = false;
|
||||
}
|
||||
}, 250),
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
:member="user"
|
||||
:class-badge-position="'next-to-name'"
|
||||
:is-header="true"
|
||||
:disable-name-styling="true"
|
||||
/>
|
||||
<div
|
||||
v-if="hasParty"
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<profileModal />
|
||||
<report-flag-modal />
|
||||
<send-gems-modal />
|
||||
<select-user-modal />
|
||||
<b-navbar
|
||||
class="topbar navbar-inverse static-top"
|
||||
toggleable="lg"
|
||||
@@ -57,8 +58,7 @@
|
||||
<li
|
||||
class="topbar-item droppable"
|
||||
:class="{
|
||||
'active': $route.path.startsWith('/inventory'),
|
||||
'down': $route.path.startsWith('/inventory') && isDesktop()}"
|
||||
'active': $route.path.startsWith('/inventory')}"
|
||||
>
|
||||
<div
|
||||
class="chevron rotate"
|
||||
@@ -101,8 +101,7 @@
|
||||
<li
|
||||
class="topbar-item droppable"
|
||||
:class="{
|
||||
'active': $route.path.startsWith('/shop'),
|
||||
'down': $route.path.startsWith('/shop') && isDesktop()}"
|
||||
'active': $route.path.startsWith('/shop')}"
|
||||
>
|
||||
<div
|
||||
class="chevron rotate"
|
||||
@@ -168,8 +167,7 @@
|
||||
<li
|
||||
class="topbar-item droppable"
|
||||
:class="{
|
||||
'active': $route.path.startsWith('/groups'),
|
||||
'down': $route.path.startsWith('/groups') && isDesktop()}"
|
||||
'active': $route.path.startsWith('/groups')}"
|
||||
>
|
||||
<div
|
||||
class="chevron rotate"
|
||||
@@ -211,8 +209,7 @@
|
||||
<li
|
||||
class="topbar-item droppable"
|
||||
:class="{
|
||||
'active': $route.path.startsWith('/group-plans'),
|
||||
'down': $route.path.startsWith('/group-plans') && isDesktop()}"
|
||||
'active': $route.path.startsWith('/group-plans')}"
|
||||
>
|
||||
<div
|
||||
v-if="groupPlans.length > 0"
|
||||
@@ -245,8 +242,7 @@
|
||||
<li
|
||||
class="topbar-item droppable"
|
||||
:class="{
|
||||
'active': $route.path.startsWith('/challenges'),
|
||||
'down': $route.path.startsWith('/challenges') && isDesktop()}"
|
||||
'active': $route.path.startsWith('/challenges')}"
|
||||
>
|
||||
<div
|
||||
class="chevron rotate"
|
||||
@@ -282,8 +278,7 @@
|
||||
<li
|
||||
class="topbar-item droppable"
|
||||
:class="{
|
||||
'active': $route.path.startsWith('/help'),
|
||||
'down': $route.path.startsWith('/help') && isDesktop()}"
|
||||
'active': $route.path.startsWith('/help')}"
|
||||
>
|
||||
<div
|
||||
class="chevron rotate"
|
||||
@@ -366,7 +361,7 @@
|
||||
class="top-menu-icon svg-icon gem"
|
||||
:aria-label="$t('gems')"
|
||||
href="#buy-gems"
|
||||
@click.prevent="showBuyGemsModal('gems')"
|
||||
@click.prevent="showBuyGemsModal()"
|
||||
v-html="icons.gem"
|
||||
></a>
|
||||
<span>{{ userGems }}</span>
|
||||
@@ -725,6 +720,7 @@ import notificationMenu from './notificationsDropdown';
|
||||
import profileModal from '../userMenu/profileModal';
|
||||
import reportFlagModal from '../chat/reportFlagModal';
|
||||
import sendGemsModal from '@/components/payments/sendGemsModal';
|
||||
import selectUserModal from '@/components/payments/selectUserModal';
|
||||
import sync from '@/mixins/sync';
|
||||
import userDropdown from './userDropdown';
|
||||
|
||||
@@ -736,6 +732,7 @@ export default {
|
||||
profileModal,
|
||||
reportFlagModal,
|
||||
sendGemsModal,
|
||||
selectUserModal,
|
||||
userDropdown,
|
||||
},
|
||||
mixins: [sync],
|
||||
@@ -793,9 +790,7 @@ export default {
|
||||
openPartyModal () {
|
||||
this.$root.$emit('bv::show::modal', 'create-party-modal');
|
||||
},
|
||||
showBuyGemsModal (startingPage) {
|
||||
this.$store.state.gemModalOptions.startingPage = startingPage;
|
||||
|
||||
showBuyGemsModal () {
|
||||
Analytics.track({
|
||||
hitType: 'event',
|
||||
eventCategory: 'button',
|
||||
@@ -807,13 +802,15 @@ export default {
|
||||
},
|
||||
dropdownDesktop (hover) {
|
||||
if (this.isDesktop() && hover.target.classList.contains('droppable')) {
|
||||
this.dropdown(hover.target);
|
||||
if (hover.type === 'mouseenter') {
|
||||
this.openDropdown(hover.target);
|
||||
} else {
|
||||
this.closeDropdown(hover.target);
|
||||
}
|
||||
}
|
||||
},
|
||||
dropdownMobile (click) {
|
||||
this.dropdown(click.currentTarget.parentElement);
|
||||
},
|
||||
dropdown (element) {
|
||||
const element = click.currentTarget.parentElement;
|
||||
const droppedElement = document.getElementsByClassName('down')[0];
|
||||
if (droppedElement && droppedElement !== element) {
|
||||
droppedElement.classList.remove('down');
|
||||
@@ -821,18 +818,27 @@ export default {
|
||||
droppedElement.lastChild.style.maxHeight = 0;
|
||||
}
|
||||
}
|
||||
|
||||
element.classList.toggle('down');
|
||||
element.lastChild.style.maxHeight = element.classList.contains('down') ? `${element.lastChild.scrollHeight}px` : 0;
|
||||
if (element.classList.contains('down')) {
|
||||
this.closeDropdown(element);
|
||||
} else {
|
||||
this.openDropdown(element);
|
||||
}
|
||||
},
|
||||
closeDropdown (element) {
|
||||
element.classList.remove('down');
|
||||
element.lastChild.style.maxHeight = 0;
|
||||
},
|
||||
openDropdown (element) {
|
||||
element.classList.add('down');
|
||||
element.lastChild.style.maxHeight = `${element.lastChild.scrollHeight}px`;
|
||||
},
|
||||
|
||||
closeMenu () {
|
||||
Array.from(document.getElementsByClassName('droppable')).forEach(droppableElement => {
|
||||
this.closeDropdown(droppableElement);
|
||||
});
|
||||
if (this.isMobile()) {
|
||||
this.menuIsOpen = false;
|
||||
|
||||
Array.from(document.getElementsByClassName('droppable')).forEach(droppableElement => {
|
||||
droppableElement.classList.remove('down');
|
||||
droppableElement.lastChild.style.maxHeight = 0;
|
||||
});
|
||||
}
|
||||
},
|
||||
isMobile () {
|
||||
|
||||
114
website/client/src/components/header/notifications/g1g1.vue
Normal file
@@ -0,0 +1,114 @@
|
||||
<template>
|
||||
<div
|
||||
class="notification d-flex flex-column justify-content-center text-center"
|
||||
>
|
||||
<strong
|
||||
class="mx-auto mb-2"
|
||||
v-once
|
||||
>
|
||||
{{ $t('g1g1Announcement') }}
|
||||
</strong>
|
||||
<p
|
||||
class="mx-4"
|
||||
v-once
|
||||
>
|
||||
{{ $t('g1g1Details') }}
|
||||
</p>
|
||||
<div
|
||||
class="btn-secondary mx-auto d-flex"
|
||||
@click="showSelectUser()"
|
||||
>
|
||||
<div
|
||||
class="m-auto"
|
||||
v-once
|
||||
>
|
||||
{{ $t('sendGift') }}
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="notification-remove"
|
||||
@click.stop="remove()"
|
||||
>
|
||||
<div
|
||||
class="svg-icon"
|
||||
v-html="icons.close"
|
||||
v-once
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang='scss' scoped>
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
|
||||
p, strong {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.notification {
|
||||
background-image: url('~@/assets/images/g1g1-notif.png');
|
||||
background-size: 378px 204px;
|
||||
width: 378px;
|
||||
height: 204px;
|
||||
padding: 3rem;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
white-space: normal;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.notification-remove {
|
||||
position: absolute;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
padding: 4px;
|
||||
right: 24px;
|
||||
top: 24px;
|
||||
|
||||
.svg-icon {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
width: 5.75rem;
|
||||
min-height: 1.5rem;
|
||||
border-radius: 2px;
|
||||
border-color: $white;
|
||||
box-shadow: 0 2px 2px 0 rgba(26, 24, 29, 0.16), 0 1px 4px 0 rgba(26, 24, 29, 0.12);
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import closeIcon from '@/assets/svg/close-teal.svg';
|
||||
import { mapActions } from '@/libs/store';
|
||||
|
||||
export default {
|
||||
props: ['notification'],
|
||||
data () {
|
||||
return {
|
||||
icons: Object.freeze({
|
||||
close: closeIcon,
|
||||
}),
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
...mapActions({
|
||||
readNotification: 'notifications:readNotification',
|
||||
}),
|
||||
remove () {
|
||||
this.readNotification({ notificationId: this.notification.id });
|
||||
},
|
||||
showSelectUser () {
|
||||
this.$root.$emit('bv::show::modal', 'select-user-modal');
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -147,6 +147,7 @@ import ACHIEVEMENT_JUST_ADD_WATER from './notifications/justAddWater';
|
||||
import ACHIEVEMENT_LOST_MASTERCLASSER from './notifications/lostMasterclasser';
|
||||
import ACHIEVEMENT_MIND_OVER_MATTER from './notifications/mindOverMatter';
|
||||
import ONBOARDING_COMPLETE from './notifications/onboardingComplete';
|
||||
import GIFT_ONE_GET_ONE from './notifications/g1g1';
|
||||
import OnboardingGuide from './onboardingGuide';
|
||||
|
||||
export default {
|
||||
@@ -176,6 +177,7 @@ export default {
|
||||
VERIFY_USERNAME,
|
||||
OnboardingGuide,
|
||||
ONBOARDING_COMPLETE,
|
||||
GIFT_ONE_GET_ONE,
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
@@ -195,7 +197,7 @@ export default {
|
||||
// listed in the order they should appear in the notifications panel.
|
||||
// NOTE: Those not listed here won't be shown in the notification panel!
|
||||
handledNotifications: [
|
||||
'NEW_STUFF', 'GROUP_TASK_NEEDS_WORK',
|
||||
'NEW_STUFF', 'GIFT_ONE_GET_ONE', 'GROUP_TASK_NEEDS_WORK',
|
||||
'GUILD_INVITATION', 'PARTY_INVITATION', 'CHALLENGE_INVITATION',
|
||||
'QUEST_INVITATION', 'GROUP_TASK_ASSIGNED', 'GROUP_TASK_APPROVAL', 'GROUP_TASK_APPROVED',
|
||||
'GROUP_TASK_CLAIMED', 'NEW_MYSTERY_ITEMS', 'CARD_RECEIVED',
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
>{{ $t('logout') }}</a>
|
||||
<li
|
||||
v-if="!user.purchased.plan.customerId"
|
||||
@click="showBuyGemsModal('subscribe')"
|
||||
@click="showBuyGemsModal()"
|
||||
>
|
||||
<div class="dropdown-item text-center">
|
||||
<h3 class="purple">
|
||||
@@ -176,9 +176,7 @@ export default {
|
||||
showProfile (startingPage) {
|
||||
this.$router.push({ name: startingPage });
|
||||
},
|
||||
showBuyGemsModal (startingPage) {
|
||||
this.$store.state.gemModalOptions.startingPage = startingPage;
|
||||
|
||||
showBuyGemsModal () {
|
||||
Analytics.track({
|
||||
hitType: 'event',
|
||||
eventCategory: 'button',
|
||||
|
||||
@@ -24,7 +24,15 @@
|
||||
/>
|
||||
<div class="d-flex flex-column profile-name-character">
|
||||
<h3 class="character-name">
|
||||
{{ member.profile.name }}
|
||||
<span v-if="member.contributor && member.contributor.level > 0 && !disableNameStyling">
|
||||
<user-link
|
||||
:user-id="member._id"
|
||||
:name="member.profile.name"
|
||||
:backer="member.backer"
|
||||
:contributor="member.contributor"
|
||||
/>
|
||||
</span>
|
||||
<span v-else>{{ member.profile.name }}</span>
|
||||
<div
|
||||
v-if="isBuffed"
|
||||
v-b-tooltip.hover.bottom="$t('buffed')"
|
||||
@@ -171,6 +179,7 @@ import Avatar from './avatar';
|
||||
import ClassBadge from './members/classBadge';
|
||||
import { mapState } from '@/libs/store';
|
||||
import StatsBar from './ui/statsbar';
|
||||
import userLink from './userLink';
|
||||
|
||||
import { toNextLevel } from '@/../../common/script/statHelpers';
|
||||
import statsComputed from '@/../../common/script/libs/statsComputed';
|
||||
@@ -186,6 +195,7 @@ export default {
|
||||
Avatar,
|
||||
ClassBadge,
|
||||
StatsBar,
|
||||
userLink,
|
||||
},
|
||||
filters: {
|
||||
statFloor (value) {
|
||||
@@ -216,6 +226,10 @@ export default {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
disableNameStyling: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
:key="member._id"
|
||||
@click="selectMember(member)"
|
||||
>
|
||||
@{{ member.auth.local.username }}
|
||||
{{ memberName(member) }}
|
||||
</b-dropdown-item>
|
||||
</b-dropdown>
|
||||
</template>
|
||||
@@ -61,6 +61,12 @@ export default {
|
||||
selectMember (member) {
|
||||
this.$emit('member-selected', member);
|
||||
},
|
||||
memberName (member) {
|
||||
if (member.auth.local && member.auth.local.username) {
|
||||
return `@${member.auth.local.username}`;
|
||||
}
|
||||
return member.profile.name;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -294,6 +294,22 @@ const NOTIFICATIONS = {
|
||||
achievement: 'pearlyPro', // defined manually until the server sends all the necessary data
|
||||
},
|
||||
},
|
||||
ACHIEVEMENT_TICKLED_PINK: {
|
||||
achievement: true,
|
||||
label: $t => `${$t('achievement')}: ${$t('achievementTickledPink')}`,
|
||||
modalId: 'generic-achievement',
|
||||
data: {
|
||||
achievement: 'tickledPink', // defined manually until the server sends all the necessary data
|
||||
},
|
||||
},
|
||||
ACHIEVEMENT_ROSY_OUTLOOK: {
|
||||
achievement: true,
|
||||
label: $t => `${$t('achievement')}: ${$t('achievementRosyOutlook')}`,
|
||||
modalId: 'generic-achievement',
|
||||
data: {
|
||||
achievement: 'rosyOutlook', // defined manually until the server sends all the necessary data
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default {
|
||||
@@ -352,7 +368,8 @@ export default {
|
||||
'GENERIC_ACHIEVEMENT', 'ACHIEVEMENT_PARTY_UP', 'ACHIEVEMENT_PARTY_ON', 'ACHIEVEMENT_BEAST_MASTER',
|
||||
'ACHIEVEMENT_MOUNT_MASTER', 'ACHIEVEMENT_TRIAD_BINGO', 'ACHIEVEMENT_DUST_DEVIL', 'ACHIEVEMENT_ARID_AUTHORITY',
|
||||
'ACHIEVEMENT_MONSTER_MAGUS', 'ACHIEVEMENT_UNDEAD_UNDERTAKER', 'ACHIEVEMENT_PRIMED_FOR_PAINTING',
|
||||
'ACHIEVEMENT_PEARLY_PRO', 'ACHIEVEMENT', 'ONBOARDING_COMPLETE',
|
||||
'ACHIEVEMENT_PEARLY_PRO', 'ACHIEVEMENT_TICKLED_PINK', 'ACHIEVEMENT_ROSY_OUTLOOK', 'ACHIEVEMENT',
|
||||
'ONBOARDING_COMPLETE',
|
||||
].forEach(type => {
|
||||
handledNotifications[type] = true;
|
||||
});
|
||||
@@ -760,6 +777,8 @@ export default {
|
||||
case 'ACHIEVEMENT_UNDEAD_UNDERTAKER':
|
||||
case 'ACHIEVEMENT_PRIMED_FOR_PAINTING':
|
||||
case 'ACHIEVEMENT_PEARLY_PRO':
|
||||
case 'ACHIEVEMENT_TICKLED_PINK':
|
||||
case 'ACHIEVEMENT_ROSY_OUTLOOK':
|
||||
case 'GENERIC_ACHIEVEMENT':
|
||||
this.showNotificationWithModal(notification);
|
||||
break;
|
||||
|
||||
@@ -23,465 +23,153 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex nav justify-content-center">
|
||||
<div
|
||||
class="nav-item text-center"
|
||||
:class="{active: selectedPage === 'subscribe'}"
|
||||
@click="selectedPage = 'subscribe'"
|
||||
>
|
||||
{{ $t('subscribe') }}
|
||||
</div>
|
||||
<div
|
||||
class="nav-item text-center"
|
||||
:class="{active: selectedPage === 'gems'}"
|
||||
@click="selectedPage = 'gems'"
|
||||
>
|
||||
{{ $t('buyGems') }}
|
||||
</div>
|
||||
</div>
|
||||
<div v-show="selectedPage === 'gems'">
|
||||
<div v-if="hasSubscription">
|
||||
<div class="row text-center">
|
||||
<h2 class="mx-auto text-leadin">
|
||||
{{ $t('subscriptionAlreadySubscribedLeadIn') }}
|
||||
</h2>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<div class="col-6 offset-3">
|
||||
<p>{{ $t("gemsPurchaseNote") }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="hasSubscription">
|
||||
<div class="row text-center">
|
||||
<h2 class="mx-auto text-leadin">
|
||||
{{ $t('gemBenefitLeadin') }}
|
||||
{{ $t('subscriptionAlreadySubscribedLeadIn') }}
|
||||
</h2>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('gemBenefit1') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('gemBenefit2') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('gemBenefit3') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('gemBenefit4') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-deck gem-deck">
|
||||
<div
|
||||
class="card text-center col-3"
|
||||
:class="{active: gemAmount === 20 }"
|
||||
>
|
||||
<div class="card-img-top">
|
||||
<div
|
||||
class="mx-auto"
|
||||
style="'height: 55px; width: 47.5px; margin-top: 1.85em;'"
|
||||
v-html="icons.twentyOneGems"
|
||||
></div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="gem-count">
|
||||
20
|
||||
</div>
|
||||
<div class="gem-text">
|
||||
{{ $t('gems') }}
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<button
|
||||
class="btn btn-primary"
|
||||
@click="gemAmount === 20 ? gemAmount = 0 : gemAmount = 20"
|
||||
>
|
||||
{{ gemAmount === 20 ? $t('selected') : '$5.00' }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<h2 class="mx-auto text-payment">
|
||||
{{ $t('choosePaymentMethod') }}
|
||||
</h2>
|
||||
</div>
|
||||
<div class="payments-column">
|
||||
<button
|
||||
class="purchase btn btn-primary payment-button payment-item"
|
||||
@click="showStripe({})"
|
||||
>
|
||||
<div
|
||||
class="svg-icon credit-card-icon"
|
||||
v-html="icons.creditCardIcon"
|
||||
></div>
|
||||
{{ $t('card') }}
|
||||
</button>
|
||||
<button
|
||||
class="btn payment-item paypal-checkout payment-button"
|
||||
@click="openPaypal(paypalCheckoutLink, 'gems')"
|
||||
>
|
||||
|
||||
<img
|
||||
src="~@/assets/images/paypal-checkout.png"
|
||||
:alt="$t('paypal')"
|
||||
>
|
||||
</button>
|
||||
<amazon-button
|
||||
class="payment-item"
|
||||
:amazon-data="{type: 'single'}"
|
||||
/>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<div
|
||||
class="svg-icon mx-auto"
|
||||
style="'height: 24px; width: 24px;'"
|
||||
v-html="icons.heart"
|
||||
></div>
|
||||
</div>
|
||||
<div class="row text-center text-outtro">
|
||||
<div class="col-6 offset-3">
|
||||
{{ $t('buyGemsSupportsDevs') }}
|
||||
<p>{{ $t("gemsPurchaseNote") }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-show="selectedPage === 'subscribe'">
|
||||
<div v-if="hasSubscription">
|
||||
<div class="row text-center">
|
||||
<h2 class="mx-auto text-leadin">
|
||||
{{ $t('subscriptionAlreadySubscribedLeadIn') }}
|
||||
</h2>
|
||||
<div class="row text-center">
|
||||
<h2 class="mx-auto text-leadin">
|
||||
{{ $t('gemBenefitLeadin') }}
|
||||
</h2>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('gemBenefit1') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<div class="col-10 offset-1">
|
||||
<p v-html="$t('subscriptionAlreadySubscribed1')"></p>
|
||||
<div class="row">
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('gemBenefit2') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!hasSubscription">
|
||||
<div class="row text-center">
|
||||
<h2 class="mx-auto text-leadin">
|
||||
{{ $t('subscriptionBenefitLeadin') }}
|
||||
</h2>
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('gemBenefit3') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('subscriptionBenefit1') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('subscriptionBenefit2') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('subscriptionBenefit3') }}</p>
|
||||
</div>
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('subscriptionBenefit4') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('subscriptionBenefit5') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-2 offset-1">
|
||||
<div class="d-flex bubble justify-content-center align-items-center">
|
||||
<div
|
||||
class="svg-icon check mx-auto"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('subscriptionBenefit6') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8 align-self-center">
|
||||
<p>{{ $t('gemBenefit4') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-deck">
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-deck gem-deck">
|
||||
<div
|
||||
class="card text-center col-3"
|
||||
:class="{active: gemAmount === 20 }"
|
||||
>
|
||||
<div class="card-img-top">
|
||||
<div
|
||||
class="card text-center"
|
||||
:class="{active: subscriptionPlan === 'basic_earned'}"
|
||||
>
|
||||
<div class="card-body">
|
||||
<div class="subscription-price">
|
||||
<span class="superscript">$</span>
|
||||
<span>5</span>
|
||||
<span class="superscript muted">.00</span>
|
||||
</div>
|
||||
<div
|
||||
v-once
|
||||
class="small"
|
||||
>
|
||||
{{ $t('everyMonth') }}
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<p
|
||||
v-markdown="$t('earnGemsMonthly', {cap:25})"
|
||||
class="benefits"
|
||||
></p>
|
||||
<div class="spacer"></div>
|
||||
<button
|
||||
class="btn btn-primary"
|
||||
@click="subscriptionPlan = 'basic_earned'"
|
||||
>
|
||||
{{ subscriptionPlan === "basic_earned" ? $t('selected') : $t('select') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="card text-center"
|
||||
:class="{active: subscriptionPlan === 'basic_3mo'}"
|
||||
>
|
||||
<div class="card-body">
|
||||
<div class="subscription-price">
|
||||
<span class="superscript">$</span>
|
||||
<span>15</span>
|
||||
<span class="superscript muted">.00</span>
|
||||
</div>
|
||||
<div
|
||||
v-once
|
||||
class="small"
|
||||
>
|
||||
{{ $t('everyXMonths', {interval: 3}) }}
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<p
|
||||
v-markdown="$t('earnGemsMonthly', {cap:30})"
|
||||
class="benefits"
|
||||
></p>
|
||||
<p
|
||||
v-markdown="$t('receiveMysticHourglass')"
|
||||
class="benefits"
|
||||
></p>
|
||||
<button
|
||||
class="btn btn-primary"
|
||||
@click="subscriptionPlan = 'basic_3mo'"
|
||||
>
|
||||
{{ subscriptionPlan === "basic_3mo" ? $t('selected') : $t('select') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="card text-center"
|
||||
:class="{active: subscriptionPlan === 'basic_6mo'}"
|
||||
>
|
||||
<div class="card-body">
|
||||
<div class="subscription-price">
|
||||
<span class="superscript">$</span>
|
||||
<span>30</span>
|
||||
<span class="superscript muted">.00</span>
|
||||
</div>
|
||||
<div
|
||||
v-once
|
||||
class="small"
|
||||
>
|
||||
{{ $t('everyXMonths', {interval: 6}) }}
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<p
|
||||
v-markdown="$t('earnGemsMonthly', {cap:35})"
|
||||
class="benefits"
|
||||
></p>
|
||||
<p
|
||||
v-markdown="$t('receiveMysticHourglasses', {amount:2})"
|
||||
class="benefits"
|
||||
></p>
|
||||
<button
|
||||
class="btn btn-primary"
|
||||
@click="subscriptionPlan = 'basic_6mo'"
|
||||
>
|
||||
{{ subscriptionPlan === "basic_6mo" ? $t('selected') : $t('select') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="card text-center"
|
||||
:class="{active: subscriptionPlan === 'basic_12mo'}"
|
||||
>
|
||||
<div class="card-body">
|
||||
<div class="subscription-price">
|
||||
<span class="superscript">$</span>
|
||||
<span>48</span>
|
||||
<span class="superscript muted">.00</span>
|
||||
</div>
|
||||
<div
|
||||
v-once
|
||||
class="small"
|
||||
>
|
||||
{{ $t('everyYear') }}
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<p
|
||||
v-markdown="$t('earnGemsMonthly', {cap:45})"
|
||||
class="benefits"
|
||||
></p>
|
||||
<p
|
||||
v-markdown="$t('receiveMysticHourglasses', {amount:4})"
|
||||
class="benefits"
|
||||
></p>
|
||||
<button
|
||||
class="btn btn-primary"
|
||||
@click="subscriptionPlan = 'basic_12mo'"
|
||||
>
|
||||
{{ subscriptionPlan === "basic_12mo" ? $t('selected') : $t('select') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="subscriptionPlan"
|
||||
class="row text-center"
|
||||
>
|
||||
<h2
|
||||
v-once
|
||||
class="mx-auto text-payment"
|
||||
>
|
||||
{{ $t('choosePaymentMethod') }}
|
||||
</h2>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<a
|
||||
v-once
|
||||
class="mx-auto"
|
||||
>{{ $t('haveCouponCode') }}</a>
|
||||
</div>
|
||||
<div
|
||||
v-if="subscriptionPlan"
|
||||
class="payments-column"
|
||||
>
|
||||
<button
|
||||
class="purchase btn btn-primary payment-button payment-item"
|
||||
@click="showStripe({subscription: subscriptionPlan})"
|
||||
>
|
||||
<div
|
||||
class="svg-icon credit-card-icon"
|
||||
v-html="icons.creditCardIcon"
|
||||
></div>
|
||||
{{ $t('card') }}
|
||||
</button>
|
||||
<button
|
||||
class="btn payment-item paypal-checkout payment-button"
|
||||
@click="openPaypal(paypalSubscriptionLink, 'subscription')"
|
||||
>
|
||||
|
||||
<img
|
||||
src="~@/assets/images/paypal-checkout.png"
|
||||
:alt="$t('paypal')"
|
||||
>
|
||||
</button>
|
||||
<amazon-button
|
||||
class="payment-item"
|
||||
:amazon-data="{type: 'subscription', subscription: subscriptionPlan}"
|
||||
/>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<div
|
||||
class="svg-icon mx-auto"
|
||||
style="'height: 24px; width: 24px;'"
|
||||
v-html="icons.heart"
|
||||
style="'height: 55px; width: 47.5px; margin-top: 1.85em;'"
|
||||
v-html="icons.twentyOneGems"
|
||||
></div>
|
||||
</div>
|
||||
<div class="row text-center text-outtro">
|
||||
<div class="col-6 offset-3">
|
||||
{{ $t('subscribeSupportsDevs') }}
|
||||
<div class="card-body">
|
||||
<div class="gem-count">
|
||||
20
|
||||
</div>
|
||||
<div class="gem-text">
|
||||
{{ $t('gems') }}
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<button
|
||||
class="btn btn-primary"
|
||||
@click="gemAmount === 20 ? gemAmount = 0 : gemAmount = 20"
|
||||
>
|
||||
{{ gemAmount === 20 ? $t('selected') : '$5.00' }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<h2 class="mx-auto text-payment">
|
||||
{{ $t('choosePaymentMethod') }}
|
||||
</h2>
|
||||
</div>
|
||||
<div class="payments-column">
|
||||
<button
|
||||
class="purchase btn btn-primary payment-button payment-item"
|
||||
@click="showStripe({})"
|
||||
>
|
||||
<div
|
||||
class="svg-icon credit-card-icon"
|
||||
v-html="icons.creditCardIcon"
|
||||
></div>
|
||||
{{ $t('card') }}
|
||||
</button>
|
||||
<button
|
||||
class="btn payment-item paypal-checkout payment-button"
|
||||
@click="openPaypal(paypalCheckoutLink, 'gems')"
|
||||
>
|
||||
|
||||
<img
|
||||
src="~@/assets/images/paypal-checkout.png"
|
||||
:alt="$t('paypal')"
|
||||
>
|
||||
</button>
|
||||
<amazon-button
|
||||
class="payment-item"
|
||||
:amazon-data="{type: 'single'}"
|
||||
/>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<div
|
||||
class="svg-icon mx-auto"
|
||||
style="'height: 24px; width: 24px;'"
|
||||
v-html="icons.heart"
|
||||
></div>
|
||||
</div>
|
||||
<div class="row text-center text-outtro">
|
||||
<div class="col-6 offset-3">
|
||||
{{ $t('buyGemsSupportsDevs') }}
|
||||
</div>
|
||||
</div>
|
||||
</b-modal>
|
||||
</div>
|
||||
</template>
|
||||
@@ -522,10 +210,6 @@
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.benefits {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.bubble {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
@@ -579,46 +263,6 @@
|
||||
height: 56px;
|
||||
}
|
||||
|
||||
.muted {
|
||||
color: #c3c0c7;
|
||||
}
|
||||
|
||||
.nav {
|
||||
font-weight: bold;
|
||||
background-color: $gray-600;
|
||||
}
|
||||
|
||||
.nav-item {
|
||||
box-sizing: border-box;
|
||||
display: inline-block;
|
||||
font-size: 16px;
|
||||
margin: 0rem;
|
||||
padding: 1rem;
|
||||
width: 7.5rem;
|
||||
}
|
||||
|
||||
.nav-item:hover, .nav-item.active {
|
||||
color: #4f2a93;
|
||||
border-bottom: 4px solid $purple-300;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.spacer {
|
||||
height: 4em;
|
||||
}
|
||||
|
||||
.subscription-price {
|
||||
font-family: Roboto Condensed;
|
||||
font-size: 48px;
|
||||
font-weight: bold;
|
||||
color: #1ca372;
|
||||
}
|
||||
|
||||
.superscript {
|
||||
font-size: 24px;
|
||||
vertical-align: super;
|
||||
}
|
||||
|
||||
.svg-icon.check {
|
||||
color: #bda8ff;
|
||||
width: 1rem;
|
||||
@@ -696,9 +340,6 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
...mapState({ user: 'user.data' }),
|
||||
startingPageOption () {
|
||||
return this.$store.state.gemModalOptions.startingPage;
|
||||
},
|
||||
hasSubscription () {
|
||||
return Boolean(this.user.purchased.plan.customerId);
|
||||
},
|
||||
@@ -708,11 +349,6 @@ export default {
|
||||
>= (this.user.purchased.plan.consecutive.gemCapExtra + this.planGemLimits.convCap);
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
startingPageOption () {
|
||||
this.selectedPage = this.$store.state.gemModalOptions.startingPage;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
close () {
|
||||
this.$root.$emit('bv::hide::modal', 'buy-gems');
|
||||
|
||||
219
website/client/src/components/payments/selectUserModal.vue
Normal file
@@ -0,0 +1,219 @@
|
||||
<template>
|
||||
<b-modal
|
||||
id="select-user-modal"
|
||||
:hide-header="true"
|
||||
:hide-footer="true"
|
||||
@hide="onHide()"
|
||||
>
|
||||
<h2 class="ml-2"> {{ $t('sendGift')}} </h2>
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<div
|
||||
class="modal-close"
|
||||
@click="close()"
|
||||
>
|
||||
<div class="svg-icon" v-html="icons.close"></div>
|
||||
</div>
|
||||
<div class="ml-2 mr-auto">
|
||||
<strong> {{ $t('sendGiftToWhom')}} </strong>
|
||||
</div>
|
||||
<div
|
||||
class="form"
|
||||
name="selectUser"
|
||||
novalidate="novalidate"
|
||||
>
|
||||
<div class="input-group">
|
||||
<input
|
||||
id="selectUser"
|
||||
v-model="userSearchTerm"
|
||||
class="form-control"
|
||||
type="text"
|
||||
:placeholder="$t('usernameOrUserId')"
|
||||
:class="{
|
||||
'input-valid': foundUser._id,
|
||||
'is-invalid input-invalid': userNotFound,
|
||||
}"
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
v-if="userSearchTerm.length > 0 && userNotFound"
|
||||
class="input-error text-center mt-2"
|
||||
>
|
||||
{{ $t('userWithUsernameOrUserIdNotFound') }}
|
||||
</div>
|
||||
<div class="d-flex justify-content-center align-items-middle mt-3">
|
||||
<a
|
||||
class="my-auto ml-auto mr-3 cancel-link"
|
||||
@click="close()"
|
||||
>
|
||||
{{ $t('cancel') }}
|
||||
</a>
|
||||
<button
|
||||
class="btn btn-primary my-auto mr-auto"
|
||||
type="submit"
|
||||
:disabled="searchCannotSubmit"
|
||||
@click="selectUser()"
|
||||
>
|
||||
{{ $t('selectGift') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</b-modal>
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
@import '~@/assets/scss/modal.scss';
|
||||
|
||||
#select-user-modal {
|
||||
@include centeredModal();
|
||||
|
||||
.modal-dialog {
|
||||
width: 29.5rem;
|
||||
margin-top: 25vh;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
|
||||
a:not([href]) {
|
||||
color: $blue-10;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
width: 26.5rem;
|
||||
border: 0px;
|
||||
color: $gray-50;
|
||||
}
|
||||
|
||||
.g1g1 {
|
||||
background-image: url('~@/assets/images/g1g1-send.png');
|
||||
background-size: 472px 152px;
|
||||
width: 470px;
|
||||
height: 152px;
|
||||
margin: -1rem 0rem 0rem -1rem;
|
||||
border-radius: 0.3rem 0.3rem 0rem 0rem;
|
||||
padding: 1.5rem;
|
||||
color: $white;
|
||||
|
||||
.heading {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.details {
|
||||
padding: 0rem 6rem;
|
||||
}
|
||||
}
|
||||
|
||||
.input-error {
|
||||
color: $red-50;
|
||||
font-size: 90%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.input-group {
|
||||
border-radius: 2px;
|
||||
border: solid 1px $gray-400;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
.input-group:focus-within {
|
||||
border-color: $purple-500;
|
||||
}
|
||||
|
||||
.modal-close {
|
||||
position: absolute;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
padding: 4px;
|
||||
right: 16px;
|
||||
top: 16px;
|
||||
cursor: pointer;
|
||||
|
||||
.svg-icon {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import debounce from 'lodash/debounce';
|
||||
import isUUID from 'validator/lib/isUUID';
|
||||
import closeIcon from '@/assets/svg/close.svg';
|
||||
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
userNotFound: false,
|
||||
userSearchTerm: '',
|
||||
foundUser: {},
|
||||
icons: Object.freeze({
|
||||
close: closeIcon,
|
||||
}),
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
searchCannotSubmit () {
|
||||
if (this.userSearchTerm.length < 1) return true;
|
||||
return typeof this.foundUser._id === 'undefined';
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
userSearchTerm: {
|
||||
handler () {
|
||||
this.searchUser(this.userSearchTerm);
|
||||
},
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
close () {
|
||||
this.$root.$emit('habitica::dismiss-modal', 'select-user-modal');
|
||||
},
|
||||
searchUser: debounce(async function userSearch (searchTerm) {
|
||||
this.foundUser = {};
|
||||
if (searchTerm.length < 1) {
|
||||
this.userNotFound = false;
|
||||
return;
|
||||
}
|
||||
let result;
|
||||
if (isUUID(searchTerm)) {
|
||||
try {
|
||||
result = await this.$store.dispatch('members:fetchMember', {
|
||||
memberId: searchTerm,
|
||||
});
|
||||
} catch {
|
||||
result = null;
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
result = await this.$store.dispatch('members:fetchMemberByUsername', {
|
||||
username: searchTerm,
|
||||
});
|
||||
} catch {
|
||||
result = null;
|
||||
}
|
||||
}
|
||||
if (!result || !result.data || !result.data.data) {
|
||||
this.userNotFound = true;
|
||||
return;
|
||||
}
|
||||
this.userNotFound = false;
|
||||
this.foundUser = result.data.data;
|
||||
}, 500),
|
||||
selectUser () {
|
||||
this.$root.$emit('habitica::send-gems', this.foundUser);
|
||||
this.close();
|
||||
},
|
||||
onHide () {
|
||||
this.userNotFound = false;
|
||||
this.userSearchTerm = '';
|
||||
this.foundUser = {};
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -2,7 +2,6 @@
|
||||
<b-modal
|
||||
id="payments-success-modal"
|
||||
:title="$t('accountSuspendedTitle')"
|
||||
size="sm"
|
||||
:hide-footer="isFromBalance"
|
||||
:modal-class="isFromBalance ? ['modal-hidden-footer'] : []"
|
||||
>
|
||||
@@ -102,6 +101,10 @@
|
||||
<style lang="scss">
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
|
||||
#payments-success-modal .modal-md {
|
||||
max-width: 20.5rem;
|
||||
}
|
||||
|
||||
#payments-success-modal .modal-content {
|
||||
background: transparent;
|
||||
}
|
||||
@@ -115,7 +118,7 @@
|
||||
justify-content: center;
|
||||
padding-top: 24px;
|
||||
padding-bottom: 0px;
|
||||
background: $green-10;
|
||||
background: $green-100;
|
||||
border-top-right-radius: 8px;
|
||||
border-top-left-radius: 8px;
|
||||
border-bottom: none;
|
||||
@@ -241,7 +244,7 @@ export default {
|
||||
methods: {
|
||||
close () {
|
||||
this.paymentData = {};
|
||||
this.$root.$emit('bv::hide::modal', 'payments-success-modal');
|
||||
this.$root.$emit('habitica::dismiss-modal', 'payments-success-modal');
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,263 +1,510 @@
|
||||
<template>
|
||||
<div class="standard-page pt-0 px-0">
|
||||
<h1>{{ $t('subscription') }}</h1>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h2>{{ $t('benefits') }}</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<span
|
||||
class="hint"
|
||||
:popover="$t('buyGemsGoldText', {gemCostTranslation})"
|
||||
popover-trigger="mouseenter"
|
||||
popover-placement="right"
|
||||
>{{ $t('buyGemsGold') }}</span>
|
||||
<span
|
||||
v-if="subscription.key !== 'basic_earned'"
|
||||
class="badge badge-success"
|
||||
>{{ $t('buyGemsGoldCap', buyGemsGoldCap) }}</span>
|
||||
</li>
|
||||
<li>
|
||||
<span
|
||||
class="hint"
|
||||
:popover="$t('retainHistoryText')"
|
||||
popover-trigger="mouseenter"
|
||||
popover-placement="right"
|
||||
>{{ $t('retainHistory') }}</span>
|
||||
</li>
|
||||
<li>
|
||||
<span
|
||||
class="hint"
|
||||
:popover="$t('doubleDropsText')"
|
||||
popover-trigger="mouseenter"
|
||||
popover-placement="right"
|
||||
>{{ $t('doubleDrops') }}</span>
|
||||
</li>
|
||||
<li>
|
||||
<span
|
||||
class="hint"
|
||||
:popover="$t('mysteryItemText')"
|
||||
popover-trigger="mouseenter"
|
||||
popover-placement="right"
|
||||
>{{ $t('mysteryItem') }}</span>
|
||||
<div v-if="subscription.key !== 'basic_earned'">
|
||||
<div class="badge badge-success">
|
||||
{{ $t('mysticHourglass', mysticHourglass) }}
|
||||
</div>
|
||||
<div class="small muted">
|
||||
{{ $t('mysticHourglassText') }}
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<span
|
||||
class="hint"
|
||||
:popover="$t('exclusiveJackalopePetText')"
|
||||
popover-trigger="mouseenter"
|
||||
popover-placement="right"
|
||||
>{{ $t('exclusiveJackalopePet') }}</span>
|
||||
</li>
|
||||
<li>
|
||||
<span
|
||||
class="hint"
|
||||
:popover="$t('supportDevsText')"
|
||||
popover-trigger="mouseenter"
|
||||
popover-placement="right"
|
||||
>{{ $t('supportDevs') }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div v-if="!hasSubscription && !hasCanceledSubscription">
|
||||
<div class="row mt-3">
|
||||
<div class="block-header mx-auto">
|
||||
{{ $t('support') }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<h2>Plan</h2>
|
||||
<table
|
||||
v-if="hasSubscription"
|
||||
class="table alert alert-info"
|
||||
>
|
||||
<tr v-if="hasCanceledSubscription">
|
||||
<td class="alert alert-warning">
|
||||
<span class="noninteractive-button btn-danger">{{ $t('canceledSubscription') }}</span>
|
||||
<i class="glyphicon glyphicon-time"></i>
|
||||
{{ $t('subCanceled') }}
|
||||
<strong>{{ dateTerminated }}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="!hasCanceledSubscription">
|
||||
<td>
|
||||
<h4>{{ $t('subscribed') }}</h4>
|
||||
<p v-if="hasPlan && !hasGroupPlan">
|
||||
{{ $t('purchasedPlanId', purchasedPlanIdInfo) }}
|
||||
</p>
|
||||
<p v-if="hasGroupPlan">
|
||||
{{ $t('youHaveGroupPlan') }}
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="user.purchased.plan.extraMonths">
|
||||
<td>
|
||||
<span class="glyphicon glyphicon-credit-card"></span>
|
||||
{{ $t('purchasedPlanExtraMonths', purchasedPlanExtraMonthsDetails) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-if="hasConsecutiveSubscription">
|
||||
<td>
|
||||
<span class="glyphicon glyphicon-forward"></span>
|
||||
{{ $t('consecutiveSubscription') }}
|
||||
<ul class="list-unstyled">
|
||||
<li>{{ $t('consecutiveMonths') }} {{ user.purchased.plan.consecutive.count + user.purchased.plan.consecutive.offset }}</li> <!-- eslint-disable-line max-len -->
|
||||
<li>{{ $t('gemCapExtra') }} {{ user.purchased.plan.consecutive.gemCapExtra }}</li>
|
||||
<li>{{ $t('mysticHourglasses') }} {{ user.purchased.plan.consecutive.trinkets }}</li> <!-- eslint-disable-line max-len -->
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div v-if="!hasSubscription || hasCanceledSubscription">
|
||||
<h4 v-if="hasCanceledSubscription">
|
||||
{{ $t("resubscribe") }}
|
||||
</h4>
|
||||
<div class="form-group reduce-top-margin">
|
||||
<!-- eslint-disable vue/no-use-v-if-with-v-for -->
|
||||
<div
|
||||
v-for="block in subscriptionBlocksOrdered"
|
||||
v-if="block.target !== 'group' && block.canSubscribe === true"
|
||||
:key="block.key"
|
||||
class="radio"
|
||||
>
|
||||
<!-- eslint-enable vue/no-use-v-if-with-v-for -->
|
||||
<label>
|
||||
<input
|
||||
v-model="subscription.key"
|
||||
type="radio"
|
||||
name="subRadio"
|
||||
:value="block.key"
|
||||
>
|
||||
<span v-if="block.original">
|
||||
<span class="label label-success line-through">${{ block.original }}</span>
|
||||
{{ $t('subscriptionRateText', {price: block.price, months: block.months}) }}
|
||||
</span>
|
||||
<span
|
||||
v-if="!block.original"
|
||||
>{{ $t('subscriptionRateText', {price: block.price, months: block.months}) }}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-inline">
|
||||
<div class="form-group">
|
||||
<input
|
||||
v-model="subscription.coupon"
|
||||
class="form-control"
|
||||
type="text"
|
||||
:placeholder="$t('couponPlaceholder')"
|
||||
>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<button
|
||||
class="btn btn-primary"
|
||||
type="button"
|
||||
@click="applyCoupon(subscription.coupon)"
|
||||
>
|
||||
{{ $t("apply") }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="hasSubscription">
|
||||
<div
|
||||
v-if="canEditCardDetails"
|
||||
class="btn btn-primary"
|
||||
@click="showStripeEdit()"
|
||||
>
|
||||
{{ $t('subUpdateCard') }}
|
||||
</div>
|
||||
<div
|
||||
v-if="canCancelSubscription && !loading"
|
||||
class="btn btn-sm btn-danger"
|
||||
@click="cancelSubscriptionConfirm()"
|
||||
>
|
||||
{{ $t('cancelSub') }}
|
||||
</div>
|
||||
<small
|
||||
v-if="!canCancelSubscription && !hasCanceledSubscription"
|
||||
v-html="getCancelSubInfo()"
|
||||
></small>
|
||||
</div>
|
||||
<div class="row mb-5">
|
||||
<div
|
||||
v-if="!hasSubscription || hasCanceledSubscription"
|
||||
class="subscribe-pay"
|
||||
>
|
||||
<h3>{{ $t('subscribeUsing') }}</h3>
|
||||
<div class="payments-column">
|
||||
<button
|
||||
class="purchase btn btn-primary payment-button payment-item"
|
||||
:disabled="!subscription.key"
|
||||
@click="showStripe({subscription:subscription.key, coupon:subscription.coupon})"
|
||||
>
|
||||
v-once
|
||||
class="svg-icon svg-logo mx-auto mt-1"
|
||||
v-html="icons.logo"
|
||||
></div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-center">
|
||||
<div>
|
||||
<div class="row col-12 ml-1">
|
||||
<h2> {{ $t('subscribersReceiveBenefits') }} </h2>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-2">
|
||||
<div
|
||||
class="svg-icon credit-card-icon"
|
||||
v-html="icons.creditCardIcon"
|
||||
v-once
|
||||
class="svg-icon svg-gems ml-3 mt-1"
|
||||
v-html="icons.subscriberGems"
|
||||
></div>
|
||||
{{ $t('card') }}
|
||||
</button>
|
||||
<button
|
||||
class="btn payment-item paypal-checkout payment-button"
|
||||
:disabled="!subscription.key"
|
||||
@click="openPaypal(paypalPurchaseLink, 'subscription')"
|
||||
>
|
||||
|
||||
<img
|
||||
src="~@/assets/images/paypal-checkout.png"
|
||||
:alt="$t('paypal')"
|
||||
>
|
||||
</button>
|
||||
<amazon-button
|
||||
class="payment-item"
|
||||
:amazon-data="{
|
||||
type: 'subscription', subscription: subscription.key, coupon: subscription.coupon}"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-10">
|
||||
<h3> {{ $t('buyGemsGold') }} </h3>
|
||||
<p> {{ $t('subscriptionBenefit1') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-2">
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-hourglasses ml-3 mt-1"
|
||||
v-html="icons.subscriberHourglasses"
|
||||
></div>
|
||||
</div>
|
||||
<div class="col-10">
|
||||
<h3> {{ $t('mysticHourglassesTooltip') }} </h3>
|
||||
<p> {{ $t('subscriptionBenefit6') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-2">
|
||||
<div
|
||||
:class="currentMysterySet"
|
||||
class="mt-n1"
|
||||
></div>
|
||||
</div>
|
||||
<div class="col-10">
|
||||
<h3> {{ $t('monthlyMysteryItems') }} </h3>
|
||||
<p> {{ $t('subscriptionBenefit4') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-2">
|
||||
<div class="Pet-Jackalope-RoyalPurple"></div>
|
||||
</div>
|
||||
<div class="col-10">
|
||||
<h3> {{ $t('exclusiveJackalopePet') }} </h3>
|
||||
<p> {{ $t('subscriptionBenefit5') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-2">
|
||||
<div class="image-foods ml-2 mt-2"></div>
|
||||
</div>
|
||||
<div class="col-10">
|
||||
<h3> {{ $t('doubleDropCap') }} </h3>
|
||||
<p> {{ $t('subscriptionBenefit3') }} </p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-spacer"></div>
|
||||
<div>
|
||||
<div class="subscribe-card d-flex flex-column">
|
||||
<subscription-options class="mb-4"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h2 v-once>
|
||||
{{ $t('giftSubscription') }}
|
||||
</h2>
|
||||
<ol>
|
||||
<li v-once>
|
||||
{{ $t('giftSubscriptionText1') }}
|
||||
</li>
|
||||
<li v-once>
|
||||
{{ $t('giftSubscriptionText2') }}
|
||||
</li>
|
||||
<li v-once>
|
||||
{{ $t('giftSubscriptionText3') }}
|
||||
</li>
|
||||
</ol>
|
||||
<h4 v-once>
|
||||
{{ $t('giftSubscriptionText4') }}
|
||||
</h4>
|
||||
<div
|
||||
v-if="hasSubscription"
|
||||
class="d-flex flex-column align-items-center"
|
||||
>
|
||||
<h1 class="mt-4 mx-auto">{{ $t('subscription') }}</h1>
|
||||
<div class="subscribe-card mx-auto">
|
||||
<div
|
||||
v-if="hasSubscription && !hasCanceledSubscription"
|
||||
class="d-flex flex-column align-items-center my-4"
|
||||
>
|
||||
<div class="round-container bg-green-10 d-flex align-items-center justify-content-center">
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-check"
|
||||
v-html="icons.checkmarkIcon"
|
||||
></div>
|
||||
</div>
|
||||
<h2 class="green-10 mx-auto">{{ $t('youAreSubscribed') }}</h2>
|
||||
<div
|
||||
v-if="hasGroupPlan"
|
||||
class="mx-5 text-center"
|
||||
>
|
||||
{{ $t('youHaveGroupPlan') }}
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="w-55 text-center"
|
||||
v-html="$t('paymentSubBillingWithMethod', {
|
||||
amount: purchasedPlanIdInfo.price,
|
||||
months: purchasedPlanIdInfo.months,
|
||||
paymentMethod: purchasedPlanIdInfo.plan
|
||||
})"
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
v-if="canEditCardDetails"
|
||||
class="mt-4 text-center"
|
||||
>
|
||||
<div class="font-weight-bold gray-10 mb-2">{{ $t('needToUpdateCard') }}</div>
|
||||
<button
|
||||
class="btn btn-primary btn-update-card
|
||||
d-flex justify-content-center align-items-center"
|
||||
@click="showStripeEdit()"
|
||||
>
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-credit-card mr-2"
|
||||
v-html="icons.creditCardIcon"
|
||||
></div>
|
||||
<div>{{ $t('subUpdateCard') }}</div>
|
||||
</button>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="svg-icon"
|
||||
:class="paymentMethodLogo.class"
|
||||
v-html="paymentMethodLogo.icon"
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
v-if="purchasedPlanExtraMonthsDetails.months > 0"
|
||||
class="extra-months green-10 py-2 px-3 mt-4"
|
||||
v-html="$t('purchasedPlanExtraMonths',
|
||||
{months: purchasedPlanExtraMonthsDetails.months})"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="hasCanceledSubscription"
|
||||
class="d-flex flex-column align-items-center mt-4"
|
||||
>
|
||||
<div class="round-container bg-gray-300 d-flex align-items-center justify-content-center">
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-close"
|
||||
v-html="icons.closeIcon"
|
||||
></div>
|
||||
</div>
|
||||
<h2 class="gray-50">{{ $t('subscriptionCanceled') }}</h2>
|
||||
<div
|
||||
class="w-75 text-center mb-4"
|
||||
v-html="$t('subscriptionInactiveDate', {date: subscriptionEndDate})"
|
||||
>
|
||||
</div>
|
||||
<h2>{{ $t('readyToResubscribe') }}</h2>
|
||||
<subscription-options class="w-100 mb-2"/>
|
||||
</div>
|
||||
<div
|
||||
v-if="hasSubscription"
|
||||
class="bg-gray-700 p-2 text-center"
|
||||
>
|
||||
<div class="header-mini mb-3">{{ $t('subscriptionStats') }}</div>
|
||||
<div class="d-flex justify-content-around">
|
||||
<div class="ml-4 mr-3">
|
||||
<div class="d-flex justify-content-center align-items-center">
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-calendar mr-2"
|
||||
v-html="icons.calendarIcon"
|
||||
>
|
||||
</div>
|
||||
<div class="number-heavy">
|
||||
{{ user.purchased.plan.consecutive.count +
|
||||
user.purchased.plan.consecutive.offset }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="stats-label">{{ $t('subMonths') }}</div>
|
||||
</div>
|
||||
<div class="stats-spacer"></div>
|
||||
<div>
|
||||
<div class="d-flex justify-content-center align-items-center">
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-gem mr-2"
|
||||
v-html="icons.gemIcon"
|
||||
>
|
||||
</div>
|
||||
<div class="number-heavy">
|
||||
{{ user.purchased.plan.consecutive.gemCapExtra }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="stats-label">{{ $t('gemCapExtra') }}</div>
|
||||
</div>
|
||||
<div class="stats-spacer"></div>
|
||||
<div>
|
||||
<div class="d-flex justify-content-center align-items-center">
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-hourglass mt-1 mr-2"
|
||||
v-html="icons.hourglassIcon"
|
||||
>
|
||||
</div>
|
||||
<div class="number-heavy">
|
||||
{{ user.purchased.plan.consecutive.trinkets }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="stats-label">{{ $t('mysticHourglassesTooltip') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-column justify-content-center align-items-center mt-4 mb-3">
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-heart mb-1"
|
||||
v-html="icons.heartIcon"
|
||||
>
|
||||
</div>
|
||||
<div class="stats-label">{{ $t('giftSubscriptionText4') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="hasSubscription && !hasCanceledSubscription"
|
||||
class="d-flex flex-column align-items-center mt-3"
|
||||
>
|
||||
<div class="cancel-card p-4 text-center">
|
||||
<h2 class="maroon-50">{{ $t('cancelYourSubscription') }}</h2>
|
||||
<div v-if="hasGroupPlan">{{ $t('cancelSubInfoGroupPlan') }}</div>
|
||||
<div
|
||||
v-if="!hasGroupPlan && !canCancelSubscription"
|
||||
v-html="$t(`cancelSubInfo${user.purchased.plan.paymentMethod}`)"
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
v-if="canCancelSubscription"
|
||||
v-html="$t('cancelSubAlternatives')"
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
class="btn btn-danger mt-4"
|
||||
:class="{disabled: !canCancelSubscription}"
|
||||
:disabled="!canCancelSubscription"
|
||||
@click="cancelSubscriptionConfirm({canCancel: canCancelSubscription})"
|
||||
>
|
||||
{{ $t('cancelSub') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-column align-items-center mt-4">
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-gift-box m-auto"
|
||||
v-html="icons.giftBox"
|
||||
>
|
||||
</div>
|
||||
<div class="muted mx-auto mt-3 mb-1">
|
||||
{{ $t('giftSubscription') }}
|
||||
</div>
|
||||
<a
|
||||
class="mx-auto"
|
||||
@click="showSelectUser()"
|
||||
>
|
||||
{{ $t('giftASubscription') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
|
||||
.badge.badge-success {
|
||||
a {
|
||||
color: $purple-300;
|
||||
}
|
||||
|
||||
h1, h2 {
|
||||
color: $purple-200;
|
||||
}
|
||||
|
||||
p {
|
||||
max-width: 21rem;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.bg-green-10 {
|
||||
background-color: $green-10;
|
||||
}
|
||||
|
||||
.bg-gray-300 {
|
||||
background-color: $gray-300;
|
||||
}
|
||||
|
||||
.bg-gray-700 {
|
||||
background-color: $gray-700;
|
||||
}
|
||||
|
||||
.block-header {
|
||||
color: $purple-200;
|
||||
letter-spacing: 0.25rem;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.btn-update-card {
|
||||
width: 12.5rem;
|
||||
height: 2.5rem;
|
||||
border-radius: 4px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.cancel-card {
|
||||
width: 28rem;
|
||||
border: 2px solid $gray-500;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.disabled {
|
||||
opacity: 0.64;
|
||||
|
||||
.btn, .btn:hover, .btn:active {
|
||||
box-shadow: none;
|
||||
cursor: default !important;
|
||||
}
|
||||
}
|
||||
|
||||
.extra-months {
|
||||
border-radius: 2px;
|
||||
border: 1px solid $green-50;
|
||||
}
|
||||
|
||||
.flex-spacer {
|
||||
width: 4rem;
|
||||
}
|
||||
|
||||
.gray-10 {
|
||||
color: $gray-10;
|
||||
}
|
||||
|
||||
.gray-50 {
|
||||
color: $gray-50;
|
||||
}
|
||||
|
||||
.green-10 {
|
||||
color: $green-10;
|
||||
}
|
||||
|
||||
.header-mini {
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.image-foods {
|
||||
background: url(~@/assets/images/subscriber-food.png);
|
||||
background-size: contain;
|
||||
width: 46px;
|
||||
height: 49px;
|
||||
}
|
||||
|
||||
.maroon-50 {
|
||||
color: $maroon-50;
|
||||
}
|
||||
|
||||
.muted {
|
||||
font-size: 14px;
|
||||
color: $gray-200;
|
||||
}
|
||||
|
||||
.number-heavy {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.Pet-Jackalope-RoyalPurple {
|
||||
margin-top: -1.75rem;
|
||||
transform: scale(0.75);
|
||||
}
|
||||
|
||||
.round-container {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
border-radius: 50%;
|
||||
margin: 0 auto;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.stats-label {
|
||||
font-size: 12px;
|
||||
color: $gray-200;
|
||||
}
|
||||
|
||||
.stats-spacer {
|
||||
width: 1px;
|
||||
height: 3rem;
|
||||
background-color: $gray-500;
|
||||
}
|
||||
|
||||
.subscribe-card {
|
||||
width: 28rem;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 2px 2px 0 rgba(26, 24, 29, 0.16), 0 1px 4px 0 rgba(26, 24, 29, 0.12);
|
||||
background-color: $white;
|
||||
}
|
||||
|
||||
.subscribe-option {
|
||||
border-bottom: 1px solid $gray-600;
|
||||
}
|
||||
|
||||
.svg-amazon-pay {
|
||||
width: 208px;
|
||||
}
|
||||
|
||||
.svg-apple-pay {
|
||||
width: 97.1px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.svg-calendar, .svg-heart {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.svg-check {
|
||||
width: 35.1px;
|
||||
height: 28px;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.subscribe-pay {
|
||||
margin-top: 1em;
|
||||
.svg-close {
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
|
||||
& ::v-deep svg path {
|
||||
stroke: $white;
|
||||
stroke-width: 3;
|
||||
}
|
||||
}
|
||||
|
||||
.svg-credit-card {
|
||||
width: 21.3px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.svg-gem {
|
||||
width: 32px;
|
||||
height: 28px;
|
||||
}
|
||||
|
||||
.svg-gems {
|
||||
width: 42px;
|
||||
height: 52px;
|
||||
}
|
||||
|
||||
.svg-google-pay {
|
||||
width: 99.7px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.svg-hourglass {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
|
||||
.svg-gift-box {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
.svg-hourglasses {
|
||||
width: 43px;
|
||||
height: 53px;
|
||||
}
|
||||
|
||||
.svg-logo {
|
||||
width: 256px;
|
||||
height: 56px;
|
||||
}
|
||||
|
||||
.svg-paypal {
|
||||
width: 148px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.w-55 {
|
||||
width: 55%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import axios from 'axios';
|
||||
import filter from 'lodash/filter';
|
||||
import sortBy from 'lodash/sortBy';
|
||||
import min from 'lodash/min';
|
||||
import moment from 'moment';
|
||||
import { mapState } from '@/libs/store';
|
||||
|
||||
import subscriptionBlocks from '@/../../common/script/content/subscriptionBlocks';
|
||||
@@ -265,12 +512,27 @@ import planGemLimits from '@/../../common/script/libs/planGemLimits';
|
||||
import paymentsMixin from '../../mixins/payments';
|
||||
import notificationsMixin from '../../mixins/notifications';
|
||||
|
||||
import amazonButton from '@/components/payments/amazonButton';
|
||||
import subscriptionOptions from './subscriptionOptions.vue';
|
||||
|
||||
import amazonPayLogo from '@/assets/svg/amazonpay.svg';
|
||||
import applePayLogo from '@/assets/svg/apple-pay-logo.svg';
|
||||
import calendarIcon from '@/assets/svg/calendar-purple.svg';
|
||||
import checkmarkIcon from '@/assets/svg/check.svg';
|
||||
import closeIcon from '@/assets/svg/close.svg';
|
||||
import creditCardIcon from '@/assets/svg/credit-card-icon.svg';
|
||||
import gemIcon from '@/assets/svg/gem.svg';
|
||||
import giftBox from '@/assets/svg/gift-purple.svg';
|
||||
import googlePayLogo from '@/assets/svg/google-pay-logo.svg';
|
||||
import heartIcon from '@/assets/svg/health.svg';
|
||||
import hourglassIcon from '@/assets/svg/hourglass.svg';
|
||||
import logo from '@/assets/svg/habitica-logo-purple.svg';
|
||||
import paypalLogo from '@/assets/svg/paypal-logo.svg';
|
||||
import subscriberGems from '@/assets/svg/subscriber-gems.svg';
|
||||
import subscriberHourglasses from '@/assets/svg/subscriber-hourglasses.svg';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
amazonButton,
|
||||
subscriptionOptions,
|
||||
},
|
||||
mixins: [paymentsMixin, notificationsMixin],
|
||||
data () {
|
||||
@@ -281,7 +543,7 @@ export default {
|
||||
gemLimit: planGemLimits.convRate,
|
||||
},
|
||||
subscription: {
|
||||
key: 'basic_earned',
|
||||
key: null,
|
||||
},
|
||||
// @TODO: Remove the need for this or move it to mixin
|
||||
amazonPayments: {},
|
||||
@@ -294,17 +556,26 @@ export default {
|
||||
GIFT: 'Gift',
|
||||
},
|
||||
icons: Object.freeze({
|
||||
amazonPayLogo,
|
||||
applePayLogo,
|
||||
calendarIcon,
|
||||
checkmarkIcon,
|
||||
closeIcon,
|
||||
creditCardIcon,
|
||||
gemIcon,
|
||||
giftBox,
|
||||
googlePayLogo,
|
||||
heartIcon,
|
||||
hourglassIcon,
|
||||
logo,
|
||||
paypalLogo,
|
||||
subscriberGems,
|
||||
subscriberHourglasses,
|
||||
}),
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState({ user: 'user.data', credentials: 'credentials' }),
|
||||
subscriptionBlocksOrdered () {
|
||||
const subscriptions = filter(subscriptionBlocks, o => o.discount !== true);
|
||||
|
||||
return sortBy(subscriptions, [o => o.months]);
|
||||
},
|
||||
purchasedPlanIdInfo () {
|
||||
if (!this.subscriptionBlocks[this.user.purchased.plan.planId]) {
|
||||
// @TODO: find which subs are in the common
|
||||
@@ -391,6 +662,41 @@ export default {
|
||||
&& !this.hasGroupPlan
|
||||
);
|
||||
},
|
||||
currentMysterySet () {
|
||||
return `shop_set_mystery_${moment().format('YYYYMM')}`;
|
||||
},
|
||||
paymentMethodLogo () {
|
||||
switch (this.user.purchased.plan.paymentMethod) {
|
||||
case this.paymentMethods.AMAZON_PAYMENTS:
|
||||
return {
|
||||
icon: this.icons.amazonPayLogo,
|
||||
class: 'svg-amazon-pay mt-3',
|
||||
};
|
||||
case this.paymentMethods.APPLE:
|
||||
return {
|
||||
icon: this.icons.applePayLogo,
|
||||
class: 'svg-apple-pay mt-4',
|
||||
};
|
||||
case this.paymentMethods.GOOGLE:
|
||||
return {
|
||||
icon: this.icons.googlePayLogo,
|
||||
class: 'svg-google-pay mt-4',
|
||||
};
|
||||
case this.paymentMethods.PAYPAL:
|
||||
return {
|
||||
icon: this.icons.paypalLogo,
|
||||
class: 'svg-paypal mt-4',
|
||||
};
|
||||
default:
|
||||
return {
|
||||
icon: null,
|
||||
class: null,
|
||||
};
|
||||
}
|
||||
},
|
||||
subscriptionEndDate () {
|
||||
return moment(this.user.purchased.plan.dateTerminated).format('MM/DD/YYYY');
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
async applyCoupon (coupon) {
|
||||
@@ -406,6 +712,9 @@ export default {
|
||||
if (payMethod === 'Group Plan') payMethod = 'GroupPlan';
|
||||
return this.$t(`cancelSubInfo${payMethod}`);
|
||||
},
|
||||
showSelectUser () {
|
||||
this.$root.$emit('bv::show::modal', 'select-user-modal');
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
178
website/client/src/components/settings/subscriptionOptions.vue
Normal file
@@ -0,0 +1,178 @@
|
||||
<template>
|
||||
<div id="subscription-form">
|
||||
<b-form-group class="mb-4 w-100 h-100">
|
||||
<!-- eslint-disable vue/no-use-v-if-with-v-for -->
|
||||
<b-form-radio
|
||||
v-for="block in subscriptionBlocksOrdered"
|
||||
v-if="block.target !== 'group' && block.canSubscribe === true"
|
||||
:value="block.key"
|
||||
:key="block.key"
|
||||
v-model="subscription.key"
|
||||
class="subscribe-option pt-2 pl-5 pb-3 mb-0"
|
||||
:class="{selected: subscription.key === block.key}"
|
||||
@click.native="subscription.key = block.key"
|
||||
>
|
||||
<!-- eslint-enable vue/no-use-v-if-with-v-for -->
|
||||
<div
|
||||
v-html="$t('subscriptionRateText', {price: block.price, months: block.months})"
|
||||
class="subscription-text ml-2 mb-1"
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
v-html="subscriptionBubbles(block.key)"
|
||||
class="ml-2"
|
||||
>
|
||||
</div>
|
||||
</b-form-radio>
|
||||
</b-form-group>
|
||||
<div class="payments-column mx-auto mt-auto">
|
||||
<button
|
||||
class="purchase btn btn-primary payment-button payment-item"
|
||||
:class="{disabled: !subscription.key}"
|
||||
:disabled="!subscription.key"
|
||||
@click="showStripe({subscription:subscription.key, coupon:subscription.coupon})"
|
||||
>
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon credit-card-icon"
|
||||
v-html="icons.creditCardIcon"
|
||||
></div>
|
||||
{{ $t('card') }}
|
||||
</button>
|
||||
<button
|
||||
class="btn payment-item paypal-checkout payment-button"
|
||||
:class="{disabled: !subscription.key}"
|
||||
:disabled="!subscription.key"
|
||||
@click="openPaypal(paypalPurchaseLink, 'subscription')"
|
||||
>
|
||||
|
||||
<img
|
||||
src="~@/assets/images/paypal-checkout.png"
|
||||
:alt="$t('paypal')"
|
||||
>
|
||||
</button>
|
||||
<amazon-button
|
||||
class="payment-item"
|
||||
:class="{disabled: !subscription.key}"
|
||||
:disabled="!subscription.key"
|
||||
:amazon-data="{
|
||||
type: 'subscription',
|
||||
subscription: subscription.key,
|
||||
coupon: subscription.coupon
|
||||
}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
<style lang="scss">
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
#subscription-form {
|
||||
.disabled .amazonpay-button-inner-image {
|
||||
cursor: default !important;
|
||||
}
|
||||
|
||||
.custom-control .custom-control-label::before,
|
||||
.custom-radio .custom-control-input:checked ~ .custom-control-label::after {
|
||||
margin-top: 0.75rem;
|
||||
}
|
||||
|
||||
.selected {
|
||||
background-color: rgba(213, 200, 255, 0.32);
|
||||
|
||||
.subscription-bubble {
|
||||
background-color: $purple-300;
|
||||
color: $white;
|
||||
}
|
||||
.subscription-text {
|
||||
color: $purple-200;
|
||||
}
|
||||
}
|
||||
|
||||
.subscription-bubble, .discount-bubble {
|
||||
border-radius: 100px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.subscription-bubble {
|
||||
background-color: $gray-600;
|
||||
color: $gray-200;
|
||||
}
|
||||
|
||||
.discount-bubble {
|
||||
background-color: $green-10;
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
|
||||
.disabled {
|
||||
opacity: 0.64;
|
||||
|
||||
.btn, .btn:hover, .btn:active {
|
||||
box-shadow: none;
|
||||
cursor: default !important;
|
||||
}
|
||||
}
|
||||
|
||||
.subscribe-option {
|
||||
border-bottom: 1px solid $gray-600;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import filter from 'lodash/filter';
|
||||
import sortBy from 'lodash/sortBy';
|
||||
|
||||
import amazonButton from '@/components/payments/amazonButton';
|
||||
import creditCardIcon from '@/assets/svg/credit-card-icon.svg';
|
||||
import paymentsMixin from '../../mixins/payments';
|
||||
import subscriptionBlocks from '@/../../common/script/content/subscriptionBlocks';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
amazonButton,
|
||||
},
|
||||
mixins: [
|
||||
paymentsMixin,
|
||||
],
|
||||
data () {
|
||||
return {
|
||||
subscription: {
|
||||
key: null,
|
||||
},
|
||||
icons: Object.freeze({
|
||||
creditCardIcon,
|
||||
}),
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
subscriptionBlocks () {
|
||||
return subscriptionBlocks;
|
||||
},
|
||||
subscriptionBlocksOrdered () {
|
||||
const subscriptions = filter(subscriptionBlocks, o => o.discount !== true);
|
||||
|
||||
return sortBy(subscriptions, [o => o.months]);
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
subscriptionBubbles (subscription) {
|
||||
switch (subscription) {
|
||||
case 'basic_3mo':
|
||||
return '<span class="subscription-bubble px-2 py-1 mr-1">Gem cap raised to 30</span><span class="subscription-bubble px-2 py-1">+1 Mystic Hourglass</span>';
|
||||
case 'basic_6mo':
|
||||
return '<span class="subscription-bubble px-2 py-1 mr-1">Gem cap raised to 35</span><span class="subscription-bubble px-2 py-1">+2 Mystic Hourglass</span>';
|
||||
case 'basic_12mo':
|
||||
return '<span class="discount-bubble px-2 py-1 mr-1">Save 20%</span><span class="subscription-bubble px-2 py-1 mr-1">Gem cap raised to 45</span><span class="subscription-bubble px-2 py-1">+4 Mystic Hourglass</span>';
|
||||
default:
|
||||
return '<span class="subscription-bubble px-2 py-1">Gem cap at 25</span>';
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -209,7 +209,6 @@
|
||||
<!-- eslint-disable vue/no-use-v-if-with-v-for, max-len -->
|
||||
<div
|
||||
v-for="(items, key) in getGrouped(questItems(category, selectedSortItemsBy,searchTextThrottled, hideLocked, hidePinned))"
|
||||
v-if="key !== 'questGroupEarnable'"
|
||||
:key="key"
|
||||
class="group"
|
||||
>
|
||||
|
||||
@@ -289,7 +289,7 @@
|
||||
<div class="container featured">
|
||||
<div class="row text-center">
|
||||
<h3 class="col-12">
|
||||
{{ $t('joinMany') }}
|
||||
{{ $t('joinMany', {userCountInMillions}) }}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="row">
|
||||
@@ -824,7 +824,7 @@ export default {
|
||||
makeuseof,
|
||||
thenewyorktimes,
|
||||
}),
|
||||
userCountInMillions: 3,
|
||||
userCountInMillions: 4,
|
||||
username: '',
|
||||
password: '',
|
||||
passwordConfirm: '',
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
</div>
|
||||
<transition
|
||||
name="slide-up"
|
||||
@afterLeave="adjustPagePadding"
|
||||
@afterEnter="adjustPagePadding"
|
||||
>
|
||||
<div
|
||||
v-show="isOpen"
|
||||
@@ -194,19 +192,7 @@ export default {
|
||||
return this.open;
|
||||
},
|
||||
},
|
||||
mounted () {
|
||||
// Make sure the page has enough space so the drawer does not overlap content
|
||||
this.adjustPagePadding();
|
||||
},
|
||||
methods: {
|
||||
adjustPagePadding () {
|
||||
const minPaddingBottom = 20;
|
||||
const drawerHeight = this.$el.offsetHeight;
|
||||
const standardPage = document.getElementsByClassName('standard-page')[0];
|
||||
if (standardPage) {
|
||||
standardPage.style.paddingBottom = `${drawerHeight + minPaddingBottom}px`;
|
||||
}
|
||||
},
|
||||
toggle () {
|
||||
this.open = !this.isOpen;
|
||||
this.$emit('toggled', this.open);
|
||||
|
||||
@@ -284,6 +284,7 @@ export default {
|
||||
this.amazonPayments.group = null;
|
||||
},
|
||||
cancelSubscriptionConfirm (config) {
|
||||
if (config.canCancel === false) return;
|
||||
this.$root.$emit('habitica:cancel-subscription-confirm', config);
|
||||
},
|
||||
async cancelSubscription (config) {
|
||||
|
||||
@@ -31,6 +31,12 @@ export async function fetchMember (store, payload) {
|
||||
return response;
|
||||
}
|
||||
|
||||
export async function fetchMemberByUsername (store, payload) {
|
||||
const url = `${apiv4Prefix}/members/username/${payload.username}`;
|
||||
const response = await axios.get(url);
|
||||
return response;
|
||||
}
|
||||
|
||||
export async function getGroupInvites (store, payload) {
|
||||
let url = `${apiv4Prefix}/groups/${payload.groupId}/invites`;
|
||||
if (payload.includeAllPublicFields) {
|
||||
|
||||
@@ -78,9 +78,8 @@ async function buyArmoire (store, params) {
|
||||
// @TODO: We might need to abstract notifications to library rather than mixin
|
||||
const notificationOptions = isExperience
|
||||
? {
|
||||
text: `+ ${item.value}`,
|
||||
type: 'xp',
|
||||
flavorMessage: message,
|
||||
text: message,
|
||||
type: 'success',
|
||||
}
|
||||
: {
|
||||
text: message,
|
||||
@@ -93,6 +92,10 @@ async function buyArmoire (store, params) {
|
||||
timeout: true,
|
||||
...notificationOptions,
|
||||
});
|
||||
|
||||
if (isExperience) {
|
||||
await store.dispatch('user:fetch', { forceLoad: true });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,8 @@ export function canDelete (store) {
|
||||
&& group.leader._id === userId);
|
||||
const isUserGroupManager = group && (group.managers
|
||||
&& Boolean(group.managers[userId]));
|
||||
const isUserChallenge = userId === (challenge && challenge.leader.id);
|
||||
const isUserChallenge = userId === (challenge
|
||||
&& challenge.leader !== null && challenge.leader.id);
|
||||
|
||||
let isUserCanDeleteTask = onUserDashboard;
|
||||
|
||||
@@ -81,7 +82,8 @@ export function canEdit (store) {
|
||||
&& group.leader._id === userId);
|
||||
const isUserGroupManager = group && (group.managers
|
||||
&& Boolean(group.managers[userId]));
|
||||
const isUserChallenge = userId === (challenge && challenge.leader.id);
|
||||
const isUserChallenge = userId === (challenge
|
||||
&& challenge.leader !== null && challenge.leader.id);
|
||||
|
||||
|
||||
switch (taskCategory) {
|
||||
|
||||
@@ -114,9 +114,6 @@ export default function () {
|
||||
profileOptions: {
|
||||
startingPage: '',
|
||||
},
|
||||
gemModalOptions: {
|
||||
startingPage: '',
|
||||
},
|
||||
rageModalOptions: {
|
||||
npc: '',
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"frequentlyAskedQuestions": "বারবার জিজ্ঞাসিত প্রশ্ন",
|
||||
"faqQuestion0": "I'm confused. Where do I get an overview?",
|
||||
"iosFaqAnswer0": "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 > Customize Avatar.\n\n Some basic ways to interact: click the (+) in the upper-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-left-hand corner, and expand and contract checklists by clicking on the checklist bubble.",
|
||||
"faqQuestion0": "আমি কনফিউসড। আমি কিভাবে ধারনা পেতে পারি?",
|
||||
"iosFaqAnswer0": "প্রথমত, আপনি প্রতিদিন কি করবেন তা নির্ধারন করতে হবে। এরপর নির্ধারিত কোন কাজ সম্পন্ন করে এবং টিক দিয়ে আপনি এক্সপিরিয়েন্স ও গোল্ড পয়েন্ট পাবেন। গোল্ড পয়েন্ট বিভিন্ন উপকরন কিনতে ব্যবহৃত হয়। এক্সপিরিয়েন্স পয়েন্ট আপনার লেভেল আপ করতে সাহায্য করে যার মাদ্ধ্যমে আপনার দক্ষতা, পোষা প্রানি, অভিযানের মত বিভিন্ন কন্টেন্ট আনলক হয়! আপনি আপনার অবতার Menu > Customize Avatar থেকে পরিবর্তন করতে পারবেন।\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": "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! For more detail, check out a step-by-step overview of the game at [Help -> Overview for New Users](https://habitica.com/static/overview).",
|
||||
"faqQuestion1": "How do I set up my tasks?",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"clearCompleted": "বাদ দেওয়া সম্পূর্ণ",
|
||||
"clearCompletedDescription": "Completed To-Dos are deleted after 30 days for non-subscribers and 90 days for subscribers.",
|
||||
"clearCompleted": "সমাপ্ত কাজগুলো মুছুন",
|
||||
"clearCompletedDescription": "সম্পন্ন হওয়া কাজ গুলো নন-সাবস্ক্রাইবারদের ৩০ দিন এবং সাবস্ক্রাইবারদের ৯০ দিন পর মুছে ফেলা হয়।",
|
||||
"clearCompletedConfirm": "Are you sure you want to delete your completed To-Dos?",
|
||||
"sureDeleteCompletedTodos": "Are you sure you want to delete your completed To-Dos?",
|
||||
"lotOfToDos": "Your most recent 30 completed To-Dos are shown here. You can see older completed To-Dos from Data > Data Display Tool or Data > Export Data > User Data.",
|
||||
|
||||
@@ -5,40 +5,40 @@
|
||||
"levelup": "Al complir els teus objectius a la vida real, has pujat de nivell i has recuperat la salut!",
|
||||
"reachedLevel": "Has assolit el nivell <%= level %>",
|
||||
"achievementLostMasterclasser": "Completador d'aventures: Sèrie Arximestra",
|
||||
"achievementLostMasterclasserText": "Per haver completat les setze missions de la Sèrie Arximestra i haver resolt el misteri de l'Arximestra Perduda!",
|
||||
"achievementLostMasterclasserText": "Per haver completat les setze missions de la sèrie Arximestra i haver resolt el misteri de l'arximestra perduda!",
|
||||
"achievementMindOverMatterText": "Per haver completat les missions de la Roca, el Llim i el Fil.",
|
||||
"achievementMindOverMatter": "Ment Sobre Matèria",
|
||||
"achievementUndeadUndertakerModalText": "Has domat totes les Muntures Zombi!",
|
||||
"achievementUndeadUndertakerText": "Per haver domat totes les Muntures Zombi.",
|
||||
"achievementUndeadUndertaker": "Enterrador de Morts Vivents",
|
||||
"achievementMonsterMagusModalText": "Has aconseguit totes les Mascotes Zombi!",
|
||||
"achievementMonsterMagusText": "Per haver aconseguit totes les Mascotes Zombi.",
|
||||
"achievementMonsterMagus": "Mag dels Monstres",
|
||||
"achievementUndeadUndertakerModalText": "Has domat totes les muntures zombi!",
|
||||
"achievementUndeadUndertakerText": "Per haver domat totes les muntures zombi.",
|
||||
"achievementUndeadUndertaker": "Enterrador de morts vivents",
|
||||
"achievementMonsterMagusModalText": "Has aconseguit totes les mascotes zombi!",
|
||||
"achievementMonsterMagusText": "Per haver aconseguit totes les mascotes zombi.",
|
||||
"achievementMonsterMagus": "Mag dels monstres",
|
||||
"achievementPartyOn": "El teu equip ja té 4 membres!",
|
||||
"achievementKickstarter2019Text": "Has donat suport al projecte Pin Kickstarter 2019",
|
||||
"achievementKickstarter2019": "Pin Patrocinador de Kickstarter",
|
||||
"achievementAridAuthorityModalText": "Has domat totes les Mascotes Desèrtiques!",
|
||||
"achievementAridAuthorityText": "Per haver domat totes les Mascotes Desèrtiques.",
|
||||
"achievementAridAuthority": "Autoritat Àrida",
|
||||
"achievementKickstarter2019": "Pin patrocinador de Kickstarter",
|
||||
"achievementAridAuthorityModalText": "Has domat totes les mascotes desèrtiques!",
|
||||
"achievementAridAuthorityText": "Per haver domat totes les mascotes desèrtiques.",
|
||||
"achievementAridAuthority": "Autoritat àrida",
|
||||
"achievementPartyUp": "Has format equip amb algú!",
|
||||
"achievementDustDevilModalText": "Has aconseguit totes les Mascotes Desèrtiques!",
|
||||
"achievementDustDevilText": "Per haver aconseguit totes les Mascotes Desèrtiques.",
|
||||
"achievementDustDevil": "Remolí de Pols",
|
||||
"achievementAllYourBaseModalText": "Has domat totes les Montures Bàsiques!",
|
||||
"achievementAllYourBaseText": "Per haver domat totes les Muntures Bàsiques.",
|
||||
"achievementAllYourBase": "Tots els teus Bàsics",
|
||||
"achievementBackToBasicsModalText": "Has aconseguit totes les Mascotes Bàsiques!",
|
||||
"achievementBackToBasics": "Tornar als Inicis",
|
||||
"achievementBackToBasicsText": "Per haver aconseguit totes les Mascotes Bàsiques.",
|
||||
"achievementDustDevilModalText": "Has aconseguit totes les mascotes desèrtiques!",
|
||||
"achievementDustDevilText": "Per haver aconseguit totes les mascotes desèrtiques.",
|
||||
"achievementDustDevil": "Remolí de pols",
|
||||
"achievementAllYourBaseModalText": "Has domat totes les muntures bàsiques!",
|
||||
"achievementAllYourBaseText": "Per haver domat totes les muntures bàsiques.",
|
||||
"achievementAllYourBase": "Tots els teus bàsics",
|
||||
"achievementBackToBasicsModalText": "Has aconseguit totes les mascotes bàsiques!",
|
||||
"achievementBackToBasics": "Tornar als inicis",
|
||||
"achievementBackToBasicsText": "Per haver aconseguit totes les mascotes bàsiques.",
|
||||
"achievementJustAddWaterModalText": "Has completat les missions del Pop, el Cavall de Mar, la Sèpia, la Balena, la Tortuga, el Nudibranqui, la Serp Marina i el Dofí!",
|
||||
"achievementJustAddWaterText": "Per haver completat les missions del Pop, el Cavall de Mar, la Sèpia, la Balena, la Tortuga, el Nudibranqui, la Serp Marina i el Dofí.",
|
||||
"achievementJustAddWater": "Només Posa-hi Aigua",
|
||||
"achievementJustAddWater": "Posa-hi aigua",
|
||||
"achievementMindOverMatterModalText": "Has completat les missions de la Roca, el Llim i el Fil!",
|
||||
"achievementLostMasterclasserModalText": "Has completat les setze missions de la Sèrie Arximestra i has resolt el misteri de l'Arximestra Perduda!",
|
||||
"achievementPearlyProModalText": "Has domat totes les Muntures Blanques!",
|
||||
"achievementPearlyProText": "Per haver domat totes les Muntures Blanques.",
|
||||
"achievementPearlyPro": "Pro de les Perles",
|
||||
"achievementPrimedForPaintingModalText": "Has aconseguit totes les Mascotes Blanques!",
|
||||
"achievementPrimedForPaintingText": "Per haver aconseguit totes les Mascotes Blanques.",
|
||||
"achievementPrimedForPainting": "Preparat per Pintar"
|
||||
"achievementLostMasterclasserModalText": "Has completat les setze missions de la sèrie Arximestra i has resolt el misteri de l'arximestra perduda!",
|
||||
"achievementPearlyProModalText": "Has domat totes les muntures blanques!",
|
||||
"achievementPearlyProText": "Per haver domat totes les muntures blanques.",
|
||||
"achievementPearlyPro": "Pro de les perles",
|
||||
"achievementPrimedForPaintingModalText": "Has aconseguit totes les mascotes blanques!",
|
||||
"achievementPrimedForPaintingText": "Per haver aconseguit totes les mascotes blanques.",
|
||||
"achievementPrimedForPainting": "Preparat per pintar"
|
||||
}
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
"backgroundBambooForestNotes": "Passeja al bosc de bambú.",
|
||||
"backgroundCozyLibraryText": "Biblioteca acollidora",
|
||||
"backgroundCozyLibraryNotes": "Llegeix a l'acollidora biblioteca.",
|
||||
"backgroundGrandStaircaseText": "Escalinata Gran",
|
||||
"backgroundGrandStaircaseText": "Gran escalinata",
|
||||
"backgroundGrandStaircaseNotes": "Baixa per la Gran Escala.",
|
||||
"backgrounds032016": "22è conjunt: publicat el Març de 2016",
|
||||
"backgroundDeepMineText": "Mina profunda",
|
||||
@@ -190,16 +190,16 @@
|
||||
"backgroundIdyllicCabinText": "Cabana Idílica",
|
||||
"backgroundIdyllicCabinNotes": "Retirat cap a una Cabana Idílica.",
|
||||
"backgroundMountainPyramidText": "Muntanya Piràmica",
|
||||
"backgroundMountainPyramidNotes": "Puja tots els escalons de la Muntanya Piràmide.",
|
||||
"backgroundMountainPyramidNotes": "Puja tots els escalons de la piràmide.",
|
||||
"backgroundStormyShipText": "Vaixel Tormentós",
|
||||
"backgroundStormyShipNotes": "No deixis que el vent i l'aigua et mogui de sobre el Vaixell de Tempesta.",
|
||||
"backgroundStormyShipNotes": "No deixis que el vent i l'aigua et mogui de sobre el vaixell de tempesta.",
|
||||
"backgrounds092016": "Conjunt 28: Estrenat el Setembre del 2016",
|
||||
"backgroundCornfieldsText": "Camps de Blat",
|
||||
"backgroundCornfieldsNotes": "Gaudeix d'un dia magnífic als Camps de Blat.",
|
||||
"backgroundFarmhouseText": "Granja",
|
||||
"backgroundFarmhouseNotes": "Saluda els animals en el teu camí cap a la Granja.",
|
||||
"backgroundOrchardText": "Arbres Fruiters",
|
||||
"backgroundOrchardNotes": "Recull la fruita dels Arbres Fruiters.",
|
||||
"backgroundOrchardText": "Arbres fruiters",
|
||||
"backgroundOrchardNotes": "Recull la fruita dels arbres fruiters.",
|
||||
"backgrounds102016": "Conjunt 29: Estrenat l'Octubre 2016",
|
||||
"backgroundSpiderWebText": "Tela d'aranya",
|
||||
"backgroundSpiderWebNotes": "Queda atrapat en una Tela d'Aranya.",
|
||||
@@ -210,8 +210,8 @@
|
||||
"backgrounds112016": "Conjunt 30: Estrenat el Novembre 2016",
|
||||
"backgroundMidnightCloudsText": "Núvols de Midjanit",
|
||||
"backgroundMidnightCloudsNotes": "Vola a través dels Núvols de Midjanit.",
|
||||
"backgroundStormyRooftopsText": "Teulades Tempestoses",
|
||||
"backgroundStormyRooftopsNotes": "Llisca per les Teulades Tempestoses.",
|
||||
"backgroundStormyRooftopsText": "Teulades tempestuoses",
|
||||
"backgroundStormyRooftopsNotes": "Llisca per les teulades tempestuoses.",
|
||||
"backgroundWindyAutumnText": "Tardor Ventosa",
|
||||
"backgroundWindyAutumnNotes": "Persegueix les fulles en la Tardor Ventosa.",
|
||||
"incentiveBackgrounds": "Conjunt d'Escenaris Lliços",
|
||||
@@ -228,8 +228,8 @@
|
||||
"backgroundYellowText": "Groc",
|
||||
"backgroundYellowNotes": "Un agradable fons groc.",
|
||||
"backgrounds122016": "Conjunt 31: Estrenat el Decembre del 2016",
|
||||
"backgroundShimmeringIcePrismText": "Prismes de Gel Brillants",
|
||||
"backgroundShimmeringIcePrismNotes": "Balla a través dels Prismes de Gel Brillants.",
|
||||
"backgroundShimmeringIcePrismText": "Prismes de gel brillants",
|
||||
"backgroundShimmeringIcePrismNotes": "Balla a través dels prismes de gel brillants.",
|
||||
"backgroundWinterFireworksText": "Focs Artificials d'Hivern",
|
||||
"backgroundWinterFireworksNotes": "Prepareu els Focs Artificials d'Hivern.",
|
||||
"backgroundWinterStorefrontText": "Botiga d'Hivern",
|
||||
@@ -238,252 +238,252 @@
|
||||
"backgroundBlizzardText": "Torb",
|
||||
"backgroundBlizzardNotes": "Enfronta't a una Turmenta de Neu ferotgia.",
|
||||
"backgroundSparklingSnowflakeText": "Floc de Neu Brillant",
|
||||
"backgroundSparklingSnowflakeNotes": "Llisca en un Floc de Neu Brillant.",
|
||||
"backgroundSparklingSnowflakeNotes": "Llisca en un floc de neu brillant.",
|
||||
"backgroundStoikalmVolcanoesText": "Volcans d'Stoïkalm",
|
||||
"backgroundStoikalmVolcanoesNotes": "Explora els Volcans d'Stoïkalm.",
|
||||
"backgrounds022017": "33ª sèrie: febrer del 2017",
|
||||
"backgrounds022017": "33a sèrie: febrer del 2017",
|
||||
"backgroundBellTowerText": "Campanar",
|
||||
"backgroundBellTowerNotes": "Puja al Campanar.",
|
||||
"backgroundTreasureRoomText": "Sala del Tresor",
|
||||
"backgroundTreasureRoomNotes": "Gaudeix de la riquesa de la Sala del Tresor.",
|
||||
"backgroundWeddingArchText": "Arc de Casament",
|
||||
"backgroundWeddingArchNotes": "Posa sota un Arc de Casament.",
|
||||
"backgrounds032017": "34ª sèrie: març del 2017",
|
||||
"backgroundMagicBeanstalkText": "Mongetera Màgica",
|
||||
"backgroundMagicBeanstalkNotes": "Enfila't a una Mongetera Màgica.",
|
||||
"backgroundMeanderingCaveText": "Cova Serpejant",
|
||||
"backgroundMeanderingCaveNotes": "Explora la Cova Serpejant.",
|
||||
"backgroundMistiflyingCircusText": "Circ Volador Desconcertant",
|
||||
"backgroundMistiflyingCircusNotes": "Engresca't al Circ Volador Desconcertant.",
|
||||
"backgrounds042017": "35ª sèrie: abril del 2017",
|
||||
"backgroundBugCoveredLogText": "Tronc Ple d'Insectes",
|
||||
"backgroundBugCoveredLogNotes": "Investiga un Tronc Ple d'Insectes.",
|
||||
"backgroundGiantBirdhouseText": "Casa d'Ocells Gegant",
|
||||
"backgroundGiantBirdhouseNotes": "Penja't d'una Casa d'Ocells Gegant.",
|
||||
"backgroundMistShroudedMountainText": "Muntanya Envoltada de Boira",
|
||||
"backgroundMistShroudedMountainNotes": "Escala una Muntanya Envoltada de Boira.",
|
||||
"backgrounds052017": "36ª sèrie: maig del 2017",
|
||||
"backgroundGuardianStatuesText": "Estàtues Guardianes",
|
||||
"backgroundGuardianStatuesNotes": "Queda't vigilant davant les Estàtues Guardianes.",
|
||||
"backgroundHabitCityStreetsText": "Carrers de la Ciutat dels Hàbits",
|
||||
"backgroundHabitCityStreetsNotes": "Explora els Carrers de la Ciutat dels Hàbits.",
|
||||
"backgroundOnATreeBranchText": "Sobre una Branca d'un Arbre",
|
||||
"backgroundOnATreeBranchNotes": "Penja't d'una Branca d'un Arbre.",
|
||||
"backgrounds062017": "37ª sèrie: juny del 2017",
|
||||
"backgroundBuriedTreasureText": "Tresor Enterrat",
|
||||
"backgroundBuriedTreasureNotes": "Desenterra el Tresor Enterrat.",
|
||||
"backgroundOceanSunriseText": "Albada Oceànica",
|
||||
"backgroundOceanSunriseNotes": "Admira una Albada Oceànica.",
|
||||
"backgroundSandcastleText": "Castell de Sorra",
|
||||
"backgroundSandcastleNotes": "Regna sobre un Castell de Sorra.",
|
||||
"backgrounds072017": "38ª sèrie: juliol del 2017",
|
||||
"backgroundGiantSeashellText": "Petxina Gegant",
|
||||
"backgroundGiantSeashellNotes": "Descansa en una Petxina Gegant.",
|
||||
"backgroundKelpForestText": "Bosc d'Algues Marines",
|
||||
"backgroundKelpForestNotes": "Neda entre un Bosc d'Algues Marines.",
|
||||
"backgroundMidnightLakeText": "Llac de Mitjanit",
|
||||
"backgroundMidnightLakeNotes": "Descansa al costat d'un Llac de Mitjanit.",
|
||||
"backgrounds082017": "39ª sèrie: agost del 2017",
|
||||
"backgroundBackOfGiantBeastText": "Esquena d'una Bèstia Gegant",
|
||||
"backgroundBackOfGiantBeastNotes": "Cavalca a l'Esquena d'una Bèstia Gegant.",
|
||||
"backgroundDesertDunesText": "Dunes del Desert",
|
||||
"backgroundDesertDunesNotes": "Explora amb valentia les Dunes del Desert.",
|
||||
"backgroundSummerFireworksText": "Focs Artificials d'Estiu",
|
||||
"backgroundSummerFireworksNotes": "Celebra el Nomenament d'Habitica amb Focs Artificials d'Estiu!",
|
||||
"backgrounds092017": "40ª sèrie: setembre del 2017",
|
||||
"backgroundBesideWellText": "Al Costat d'un Pou",
|
||||
"backgroundBesideWellNotes": "Passeja al Costat d'un Pou.",
|
||||
"backgroundGardenShedText": "Cobert del Jardí",
|
||||
"backgroundGardenShedNotes": "Treballa al Cobert del Jardí.",
|
||||
"backgroundPixelistsWorkshopText": "Taller de Pixel·lació",
|
||||
"backgroundPixelistsWorkshopNotes": "Crea obres mestres al Taller de Pixel·lació.",
|
||||
"backgrounds102017": "41ª sèrie: octubre del 2017",
|
||||
"backgroundMagicalCandlesText": "Espelmes Màgiques",
|
||||
"backgroundMagicalCandlesNotes": "Gaudeix de la brillantor de les Espelmes Màgiques.",
|
||||
"backgroundSpookyHotelText": "Hotel Esgarrifós",
|
||||
"backgroundSpookyHotelNotes": "Infiltra't al passadís d'un Hotel Esgarrifós.",
|
||||
"backgroundTarPitsText": "Pous de Quitrà",
|
||||
"backgroundTarPitsNotes": "Camina de puntetes als Pous de Quitrà.",
|
||||
"backgrounds112017": "42ª sèrie: novembre del 2017",
|
||||
"backgroundFiberArtsRoomText": "Saló d'Arts Fibroses",
|
||||
"backgroundFiberArtsRoomNotes": "Mou fils en un Saló d'Arts Fibroses.",
|
||||
"backgroundMidnightCastleText": "Castell de Mitjanit",
|
||||
"backgroundMidnightCastleNotes": "Passeja pel Castelll de Mitjanit.",
|
||||
"backgroundBellTowerNotes": "Puja al campanar.",
|
||||
"backgroundTreasureRoomText": "Sala del tresor",
|
||||
"backgroundTreasureRoomNotes": "Gaudeix de la riquesa de la sala del tresor.",
|
||||
"backgroundWeddingArchText": "Arc de casament",
|
||||
"backgroundWeddingArchNotes": "Posa sota un arc de casament.",
|
||||
"backgrounds032017": "34a sèrie: març del 2017",
|
||||
"backgroundMagicBeanstalkText": "Mongetera màgica",
|
||||
"backgroundMagicBeanstalkNotes": "Enfila't a una mongetera màgica.",
|
||||
"backgroundMeanderingCaveText": "Cova serpejant",
|
||||
"backgroundMeanderingCaveNotes": "Explora la cova serpejant.",
|
||||
"backgroundMistiflyingCircusText": "Circ volador desconcertant",
|
||||
"backgroundMistiflyingCircusNotes": "Engresca't al circ volador desconcertant.",
|
||||
"backgrounds042017": "35a sèrie: abril del 2017",
|
||||
"backgroundBugCoveredLogText": "Tronc ple d'insectes",
|
||||
"backgroundBugCoveredLogNotes": "Investiga un tronc ple d'insectes.",
|
||||
"backgroundGiantBirdhouseText": "Casa d'ocells gegant",
|
||||
"backgroundGiantBirdhouseNotes": "Penja't d'una casa d'ocells gegant.",
|
||||
"backgroundMistShroudedMountainText": "Muntanya envoltada de boira",
|
||||
"backgroundMistShroudedMountainNotes": "Escala una muntanya envoltada de boira.",
|
||||
"backgrounds052017": "36a sèrie: maig del 2017",
|
||||
"backgroundGuardianStatuesText": "Estàtues guardianes",
|
||||
"backgroundGuardianStatuesNotes": "Queda't vigilant davant les estàtues guardianes.",
|
||||
"backgroundHabitCityStreetsText": "Carrers de la ciutat dels hàbits",
|
||||
"backgroundHabitCityStreetsNotes": "Explora els carrers de la ciutat dels hàbits.",
|
||||
"backgroundOnATreeBranchText": "Sobre una branca d'un arbre",
|
||||
"backgroundOnATreeBranchNotes": "Penja't d'una branca d'un arbre.",
|
||||
"backgrounds062017": "37a sèrie: juny del 2017",
|
||||
"backgroundBuriedTreasureText": "Tresor enterrat",
|
||||
"backgroundBuriedTreasureNotes": "Desenterra el tresor enterrat.",
|
||||
"backgroundOceanSunriseText": "Albada oceànica",
|
||||
"backgroundOceanSunriseNotes": "Admira una albada oceànica.",
|
||||
"backgroundSandcastleText": "Castell de sorra",
|
||||
"backgroundSandcastleNotes": "Regna sobre un castell de sorra.",
|
||||
"backgrounds072017": "38a sèrie: juliol del 2017",
|
||||
"backgroundGiantSeashellText": "Petxina gegant",
|
||||
"backgroundGiantSeashellNotes": "Descansa en una petxina gegant.",
|
||||
"backgroundKelpForestText": "Bosc d'algues marines",
|
||||
"backgroundKelpForestNotes": "Neda entre un bosc d'algues marines.",
|
||||
"backgroundMidnightLakeText": "Llac de mitjanit",
|
||||
"backgroundMidnightLakeNotes": "Descansa al costat d'un llac de mitjanit.",
|
||||
"backgrounds082017": "39a sèrie: agost del 2017",
|
||||
"backgroundBackOfGiantBeastText": "Esquena d'una bèstia gegant",
|
||||
"backgroundBackOfGiantBeastNotes": "Cavalca a l'esquena d'una bèstia gegant.",
|
||||
"backgroundDesertDunesText": "Dunes del desert",
|
||||
"backgroundDesertDunesNotes": "Explora amb valentia les dunes del desert.",
|
||||
"backgroundSummerFireworksText": "Focs artificials d'estiu",
|
||||
"backgroundSummerFireworksNotes": "Celebra el nomenament d'Habitica amb focs artificials d'estiu!",
|
||||
"backgrounds092017": "40a sèrie: setembre del 2017",
|
||||
"backgroundBesideWellText": "Al costat d'un pou",
|
||||
"backgroundBesideWellNotes": "Passeja al costat d'un pou.",
|
||||
"backgroundGardenShedText": "Cobert del jardí",
|
||||
"backgroundGardenShedNotes": "Treballa al cobert del jardí.",
|
||||
"backgroundPixelistsWorkshopText": "Taller de pixel·lació",
|
||||
"backgroundPixelistsWorkshopNotes": "Crea obres mestres al taller de pixel·lació.",
|
||||
"backgrounds102017": "41a sèrie: octubre del 2017",
|
||||
"backgroundMagicalCandlesText": "Espelmes màgiques",
|
||||
"backgroundMagicalCandlesNotes": "Gaudeix de la brillantor de les espelmes màgiques.",
|
||||
"backgroundSpookyHotelText": "Hotel esgarrifós",
|
||||
"backgroundSpookyHotelNotes": "Infiltra't al passadís d'un hotel esgarrifós.",
|
||||
"backgroundTarPitsText": "Pous de quitrà",
|
||||
"backgroundTarPitsNotes": "Camina de puntetes als pous de quitrà.",
|
||||
"backgrounds112017": "42a sèrie: novembre del 2017",
|
||||
"backgroundFiberArtsRoomText": "Saló d'arts fibroses",
|
||||
"backgroundFiberArtsRoomNotes": "Mou fils en un saló d'arts fibroses.",
|
||||
"backgroundMidnightCastleText": "Castell de mitjanit",
|
||||
"backgroundMidnightCastleNotes": "Passeja pel castell de mitjanit.",
|
||||
"backgroundTornadoText": "Tornado",
|
||||
"backgroundTornadoNotes": "Vola a través d'un Tornado.",
|
||||
"backgrounds122017": "43ª sèrie: desembre del 2017",
|
||||
"backgroundCrosscountrySkiTrailText": "Ruta d'Esquí Tot Terreny",
|
||||
"backgroundCrosscountrySkiTrailNotes": "Llisca per la Ruta d'Esquí Tot Terrey.",
|
||||
"backgroundStarryWinterNightText": "Nit d'Hivern Estrellada",
|
||||
"backgroundStarryWinterNightNotes": "Admira una Nit d'Hivern Estrellada.",
|
||||
"backgroundToymakersWorkshopText": "Taller de Fabricació de Joguines",
|
||||
"backgroundToymakersWorkshopNotes": "Gaudeix de les meravelles del Taller de Fabricació de Joguines.",
|
||||
"backgrounds012018": "44ª sèrie: gener del 2018",
|
||||
"backgroundTornadoNotes": "Vola a través d'un tornado.",
|
||||
"backgrounds122017": "43a sèrie: desembre del 2017",
|
||||
"backgroundCrosscountrySkiTrailText": "Ruta d'esquí tot terreny",
|
||||
"backgroundCrosscountrySkiTrailNotes": "Llisca per la ruta d'esquí tot terreny.",
|
||||
"backgroundStarryWinterNightText": "Nit d'hivern estrellada",
|
||||
"backgroundStarryWinterNightNotes": "Admira una nit d'hivern estrellada.",
|
||||
"backgroundToymakersWorkshopText": "Taller de fabricació de joguines",
|
||||
"backgroundToymakersWorkshopNotes": "Gaudeix de les meravelles del taller de fabricació de joguines.",
|
||||
"backgrounds012018": "44a sèrie: gener del 2018",
|
||||
"backgroundAuroraText": "Aurora",
|
||||
"backgroundAuroraNotes": "Gaudeix de la brillantor hivernal d'una Aurora.",
|
||||
"backgroundAuroraNotes": "Gaudeix de la brillantor hivernal d'una aurora.",
|
||||
"backgroundDrivingASleighText": "Trineu",
|
||||
"backgroundDrivingASleighNotes": "Condueix un Trineu sobre camps nevats.",
|
||||
"backgroundFlyingOverIcySteppesText": "Estepes Gelades",
|
||||
"backgroundFlyingOverIcySteppesNotes": "Sobrevola Estepes Gelades.",
|
||||
"backgrounds022018": "45ª sèrie: febrer del 2018",
|
||||
"backgroundChessboardLandText": "País del Tauler d'Escacs",
|
||||
"backgroundChessboardLandNotes": "Juga una partida al País del Tauler d'Escacs.",
|
||||
"backgroundMagicalMuseumText": "Museu Màgic",
|
||||
"backgroundMagicalMuseumNotes": "Visita un Museu Màgic.",
|
||||
"backgroundRoseGardenText": "Jardí de Roses",
|
||||
"backgroundRoseGardenNotes": "Paseja per un Jardí de Roses aromàtic.",
|
||||
"backgrounds032018": "46ª sèrie: març del 2018",
|
||||
"backgroundGorgeousGreenhouseText": "Hivernacle Preciós",
|
||||
"backgroundGorgeousGreenhouseNotes": "Camina entre la flora que es cuida en un Hivernacle Preciós.",
|
||||
"backgroundElegantBalconyText": "Balcó Elegant",
|
||||
"backgroundElegantBalconyNotes": "Mira el paisatge des d'un Balcó Elegant.",
|
||||
"backgroundDrivingACoachText": "Conduint un Carro",
|
||||
"backgroundDrivingACoachNotes": "Gaudeix Conduint un Carro pels camps de flors.",
|
||||
"backgrounds042018": "47ª sèrie: abril del 2018",
|
||||
"backgroundTulipGardenText": "Jardí de Tulipes",
|
||||
"backgroundTulipGardenNotes": "Passa de puntetes per un Jardí de Tulipes.",
|
||||
"backgroundFlyingOverWildflowerFieldText": "Cap de Flors Salvatges",
|
||||
"backgroundFlyingOverWildflowerFieldNotes": "Alça't per sobre d'un Camp de Flors Salvatges.",
|
||||
"backgroundFlyingOverAncientForestText": "Bosc Antic",
|
||||
"backgroundFlyingOverAncientForestNotes": "Sobrevola les copes dels arbres d'un Bosc Antic.",
|
||||
"backgrounds052018": "48ª sèrie: maig del 2018",
|
||||
"backgroundTerracedRiceFieldText": "Camp d'Arròs Adossat",
|
||||
"backgroundTerracedRiceFieldNotes": "Gaudeix d'un Camp d'Arròs Adossat en època de creixement.",
|
||||
"backgroundFantasticalShoeStoreText": "Sabateria Fantàstica",
|
||||
"backgroundFantasticalShoeStoreNotes": "Busca calçat nou a la Sabateria Fantàstica.",
|
||||
"backgroundChampionsColosseumText": "Coliseu dels Campions",
|
||||
"backgroundChampionsColosseumNotes": "Gaudeix de la glòria del Coliseu dels Campions.",
|
||||
"backgrounds062018": "49ª sèrie: juny del 2018",
|
||||
"backgroundDrivingASleighNotes": "Condueix un trineu sobre camps nevats.",
|
||||
"backgroundFlyingOverIcySteppesText": "Estepes gelades",
|
||||
"backgroundFlyingOverIcySteppesNotes": "Sobrevola estepes gelades.",
|
||||
"backgrounds022018": "45a sèrie: febrer del 2018",
|
||||
"backgroundChessboardLandText": "País del tauler d'escacs",
|
||||
"backgroundChessboardLandNotes": "Juga una partida al país del tauler d'escacs.",
|
||||
"backgroundMagicalMuseumText": "Museu màgic",
|
||||
"backgroundMagicalMuseumNotes": "Visita un museu màgic.",
|
||||
"backgroundRoseGardenText": "Jardí de roses",
|
||||
"backgroundRoseGardenNotes": "Passeja per un jardí de roses aromàtic.",
|
||||
"backgrounds032018": "46a sèrie: març del 2018",
|
||||
"backgroundGorgeousGreenhouseText": "Hivernacle preciós",
|
||||
"backgroundGorgeousGreenhouseNotes": "Camina entre la flora que es cuida en un hivernacle preciós.",
|
||||
"backgroundElegantBalconyText": "Balcó elegant",
|
||||
"backgroundElegantBalconyNotes": "Mira el paisatge des d'un balcó elegant.",
|
||||
"backgroundDrivingACoachText": "Conduint un carro",
|
||||
"backgroundDrivingACoachNotes": "Gaudeix conduint un carro pels camps de flors.",
|
||||
"backgrounds042018": "47a sèrie: abril del 2018",
|
||||
"backgroundTulipGardenText": "Jardí de tulipes",
|
||||
"backgroundTulipGardenNotes": "Passa de puntetes per un jardí de tulipes.",
|
||||
"backgroundFlyingOverWildflowerFieldText": "Cap de flors salvatges",
|
||||
"backgroundFlyingOverWildflowerFieldNotes": "Alça't per sobre d'un camp de flors salvatges.",
|
||||
"backgroundFlyingOverAncientForestText": "Bosc antic",
|
||||
"backgroundFlyingOverAncientForestNotes": "Sobrevola les copes dels arbres d'un bosc antic.",
|
||||
"backgrounds052018": "48a sèrie: maig del 2018",
|
||||
"backgroundTerracedRiceFieldText": "Camp d'arròs adossat",
|
||||
"backgroundTerracedRiceFieldNotes": "Gaudeix d'un camp d'arròs adossat en època de creixement.",
|
||||
"backgroundFantasticalShoeStoreText": "Sabateria fantàstica",
|
||||
"backgroundFantasticalShoeStoreNotes": "Busca calçat nou a la sabateria fantàstica.",
|
||||
"backgroundChampionsColosseumText": "Coliseu dels campions",
|
||||
"backgroundChampionsColosseumNotes": "Gaudeix de la glòria del coliseu dels campions.",
|
||||
"backgrounds062018": "49a sèrie: juny del 2018",
|
||||
"backgroundDocksText": "Moll",
|
||||
"backgroundDocksNotes": "Pesca des de dalt del Moll.",
|
||||
"backgroundRowboatText": "Barca de Rems",
|
||||
"backgroundRowboatNotes": "Canta en una Barca de Rems.",
|
||||
"backgroundPirateFlagText": "Bandera Pirata",
|
||||
"backgroundPirateFlagNotes": "Alça una Bandera Pirata aterridora.",
|
||||
"backgrounds072018": "50ª sèrie: juliol del 2018",
|
||||
"backgroundDarkDeepText": "Profunditats Fosques",
|
||||
"backgroundDarkDeepNotes": "Neda a les Profunditats Fosques, entre bestioles bioluminescents.",
|
||||
"backgroundDocksNotes": "Pesca des de dalt del moll.",
|
||||
"backgroundRowboatText": "Barca de rems",
|
||||
"backgroundRowboatNotes": "Canta en una barca de rems.",
|
||||
"backgroundPirateFlagText": "Bandera pirata",
|
||||
"backgroundPirateFlagNotes": "Alça una bandera pirata aterridora.",
|
||||
"backgrounds072018": "50a sèrie: juliol del 2018",
|
||||
"backgroundDarkDeepText": "Profunditats fosques",
|
||||
"backgroundDarkDeepNotes": "Neda a les profunditats fosques, entre bestioles bioluminescents.",
|
||||
"backgroundDilatoryCityText": "Ciutat de Dilatòria",
|
||||
"backgroundDilatoryCityNotes": "Passeja per la Ciutat submarina de Dilatòria.",
|
||||
"backgroundTidePoolText": "Bassa de la Marea",
|
||||
"backgroundTidePoolNotes": "Observa la vida de l'oceà prop la Bassa de la Marea.",
|
||||
"backgrounds082018": "51ª sèrie: agost del 2018",
|
||||
"backgroundTrainingGroundsText": "Àrea d'Entrenament",
|
||||
"backgroundTrainingGroundsNotes": "Practica a l'Àrea d'Entrenament.",
|
||||
"backgroundFlyingOverRockyCanyonText": "Canyó Rocós",
|
||||
"backgroundFlyingOverRockyCanyonNotes": "Contempla un paisatge sorprenent mentre sobrevoles un Canyó Rocós.",
|
||||
"backgroundDilatoryCityNotes": "Passeja per la ciutat submarina de Dilatòria.",
|
||||
"backgroundTidePoolText": "Bassa de la marea",
|
||||
"backgroundTidePoolNotes": "Observa la vida de l'oceà prop la bassa de la marea.",
|
||||
"backgrounds082018": "51a sèrie: agost del 2018",
|
||||
"backgroundTrainingGroundsText": "Àrea d'entrenament",
|
||||
"backgroundTrainingGroundsNotes": "Practica a l'àrea d'entrenament.",
|
||||
"backgroundFlyingOverRockyCanyonText": "Canyó rocós",
|
||||
"backgroundFlyingOverRockyCanyonNotes": "Contempla un paisatge sorprenent mentre sobrevoles un canyó rocós.",
|
||||
"backgroundBridgeText": "Pont",
|
||||
"backgroundBridgeNotes": "Travessa un Pont encisador.",
|
||||
"backgrounds092018": "52ª sèrie: setembre del 2018",
|
||||
"backgroundApplePickingText": "Collita de Pomes",
|
||||
"backgroundApplePickingNotes": "Vés a Collir Pomes i porta'n unes quantes a casa.",
|
||||
"backgroundGiantBookText": "Llibre Gegant",
|
||||
"backgroundGiantBookNotes": "Llegeix mentre camines per les pàgines d'un Llibre Gegant.",
|
||||
"backgroundCozyBarnText": "Graner Acollidor",
|
||||
"backgroundCozyBarnNotes": "Relaxa't amb les teves mascotes i muntures al Graner Acollidor.",
|
||||
"backgrounds102018": "53ª sèrie: octubre del 2018",
|
||||
"backgroundBridgeNotes": "Travessa un pont encisador.",
|
||||
"backgrounds092018": "52a sèrie: setembre del 2018",
|
||||
"backgroundApplePickingText": "Collita de pomes",
|
||||
"backgroundApplePickingNotes": "Vés a collir pomes i porta'n unes quantes a casa.",
|
||||
"backgroundGiantBookText": "Llibre gegant",
|
||||
"backgroundGiantBookNotes": "Llegeix mentre camines per les pàgines d'un llibre gegant.",
|
||||
"backgroundCozyBarnText": "Graner acollidor",
|
||||
"backgroundCozyBarnNotes": "Relaxa't amb les teves mascotes i muntures al graner acollidor.",
|
||||
"backgrounds102018": "53a sèrie: octubre del 2018",
|
||||
"backgroundBayouText": "Aiguamoll",
|
||||
"backgroundBayouNotes": "Gaudeix de la llum de les lluernes dels Aiguamolls emboirats.",
|
||||
"backgroundCreepyCastleText": "Castell Aterridor",
|
||||
"backgroundCreepyCastleNotes": "Atreveix-te a apropar-te al Castell Aterridor.",
|
||||
"backgroundBayouNotes": "Gaudeix de la llum de les lluernes dels aiguamolls emboirats.",
|
||||
"backgroundCreepyCastleText": "Castell aterridor",
|
||||
"backgroundCreepyCastleNotes": "Atreveix-te a apropar-te al castell aterridor.",
|
||||
"backgroundDungeonText": "Masmorra",
|
||||
"backgroundDungeonNotes": "Rescata els presoners de la Masmorra aterridora.",
|
||||
"backgrounds112018": "54ª sèrie: novembre del 2018",
|
||||
"backgroundBackAlleyText": "Carreró Fosc",
|
||||
"backgroundBackAlleyNotes": "Passeja sospitosament per un Carreró Fosc.",
|
||||
"backgroundGlowingMushroomCaveText": "Cova de Bolets Lluminosos",
|
||||
"backgroundGlowingMushroomCaveNotes": "Queda't bocabadat davant la Cova de Bolets Lluminosos.",
|
||||
"backgroundCozyBedroomText": "Dormitori Acollidor",
|
||||
"backgroundCozyBedroomNotes": "Arrauleix-te en un Dormitori Acollidor.",
|
||||
"backgrounds122018": "55ª sèrie: desembre del 2018",
|
||||
"backgroundFlyingOverSnowyMountainsText": "Muntanyes Nevades",
|
||||
"backgroundFlyingOverSnowyMountainsNotes": "Passa per sobre les Muntayes Nevades de nit.",
|
||||
"backgroundFrostyForestText": "Bosc Gelat",
|
||||
"backgroundFrostyForestNotes": "Equipa't per una caminada a través del Bosc Gelat.",
|
||||
"backgroundSnowyDayFireplaceText": "Llar de Foc d'un Dia de Neu",
|
||||
"backgroundSnowyDayFireplaceNotes": "Arrauleix-te al costat de la Llar de Foc en un Dia de Neu.",
|
||||
"backgrounds012019": "56ª sèrie: gener del 2019",
|
||||
"backgroundDungeonNotes": "Rescata els presoners de la masmorra aterridora.",
|
||||
"backgrounds112018": "54a sèrie: novembre del 2018",
|
||||
"backgroundBackAlleyText": "Carreró fosc",
|
||||
"backgroundBackAlleyNotes": "Passeja sospitosament per un carreró fosc.",
|
||||
"backgroundGlowingMushroomCaveText": "Cova de bolets lluminosos",
|
||||
"backgroundGlowingMushroomCaveNotes": "Queda't bocabadat davant la cova de bolets lluminosos.",
|
||||
"backgroundCozyBedroomText": "Dormitori acollidor",
|
||||
"backgroundCozyBedroomNotes": "Arrauleix-te en un dormitori acollidor.",
|
||||
"backgrounds122018": "55a sèrie: desembre del 2018",
|
||||
"backgroundFlyingOverSnowyMountainsText": "Muntanyes nevades",
|
||||
"backgroundFlyingOverSnowyMountainsNotes": "Passa per sobre les muntayes nevades de nit.",
|
||||
"backgroundFrostyForestText": "Bosc gelat",
|
||||
"backgroundFrostyForestNotes": "Equipa't per una caminada a través del bosc gelat.",
|
||||
"backgroundSnowyDayFireplaceText": "Llar de foc d'un dia de neu",
|
||||
"backgroundSnowyDayFireplaceNotes": "Arrauleix-te al costat de la llar de foc en un dia de neu.",
|
||||
"backgrounds012019": "56a sèrie: gener del 2019",
|
||||
"backgroundAvalancheText": "Allau",
|
||||
"backgroundAvalancheNotes": "Escapa de la enorme força d'una Allau.",
|
||||
"backgroundArchaeologicalDigText": "Excavació Arqueològica",
|
||||
"backgroundArchaeologicalDigNotes": "Desenterra els secrets del passat en una Excavació Arqueològica.",
|
||||
"backgroundScribesWorkshopText": "Taller dels Escribes",
|
||||
"backgroundScribesWorkshopNotes": "Escriu el teu pròxim pergamí d'èxit al Taller dels Escribes.",
|
||||
"backgroundSchoolOfFishNotes": "Neda enmig d'un Banc de Peixos.",
|
||||
"backgroundSchoolOfFishText": "Banc de Peixos",
|
||||
"backgrounds062019": "61ª sèrie: juny del 2019",
|
||||
"backgroundRainbowMeadowNotes": "Troba un pot ple d'or on acaba l'Arc de Sant Martí al Prat.",
|
||||
"backgroundRainbowMeadowText": "Prat Arc de Sant Martí",
|
||||
"backgroundParkWithStatueNotes": "Segueix un camí de flors pel Parc amb una Estàtua.",
|
||||
"backgroundParkWithStatueText": "Parc amb Estàtua",
|
||||
"backgroundDojoNotes": "Aprèn moviments nous al Dojo.",
|
||||
"backgroundAvalancheNotes": "Escapa de l'enorme força d'una allau.",
|
||||
"backgroundArchaeologicalDigText": "Excavació arqueològica",
|
||||
"backgroundArchaeologicalDigNotes": "Desenterra els secrets del passat en una excavació arqueològica.",
|
||||
"backgroundScribesWorkshopText": "Taller dels escribes",
|
||||
"backgroundScribesWorkshopNotes": "Escriu el teu pròxim pergamí d'èxit al taller dels escribes.",
|
||||
"backgroundSchoolOfFishNotes": "Neda enmig d'un banc de peixos.",
|
||||
"backgroundSchoolOfFishText": "Banc de peixos",
|
||||
"backgrounds062019": "61a sèrie: juny del 2019",
|
||||
"backgroundRainbowMeadowNotes": "Troba un pot ple d'or on acaba l'arc de Sant Martí al prat.",
|
||||
"backgroundRainbowMeadowText": "Prat arc de Sant Martí",
|
||||
"backgroundParkWithStatueNotes": "Segueix un camí de flors pel parc amb una estàtua.",
|
||||
"backgroundParkWithStatueText": "Parc amb estàtua",
|
||||
"backgroundDojoNotes": "Aprèn moviments nous al dojo.",
|
||||
"backgroundDojoText": "Dojo",
|
||||
"backgrounds052019": "60ª sèrie: maig del 2019",
|
||||
"backgroundBlossomingDesertNotes": "Presencia una floració extraordinària al Desert Florent.",
|
||||
"backgroundBlossomingDesertText": "Desert Florit",
|
||||
"backgroundHalflingsHouseNotes": "Visita una encantadora Casa del Mestís.",
|
||||
"backgroundHalflingsHouseText": "Casa del Mestís",
|
||||
"backgroundBirchForestNotes": "Passa-ho bé al tranquil Bosc de Bedolls.",
|
||||
"backgroundBirchForestText": "Bosc de Bedolls",
|
||||
"backgrounds042019": "59ª sèrie: abril del 2019",
|
||||
"backgroundFlowerMarketNotes": "Troba els colors ideals per un ram o un jardí al Mercat de Flors.",
|
||||
"backgroundFlowerMarketText": "Mercat de Flors",
|
||||
"backgroundFieldWithColoredEggsNotes": "Busca un tresor primaveral al Camp amb Ous de Colors.",
|
||||
"backgroundFieldWithColoredEggsText": "Camp amb Ous de Colors",
|
||||
"backgroundDuckPondNotes": "Alimenta els ocells aquàtics a l'Estanc d'Ànecs.",
|
||||
"backgroundDuckPondText": "Estanc d'Ànecs",
|
||||
"backgrounds032019": "58ª sèrie: març del 2019",
|
||||
"backgroundValentinesDayFeastingHallNotes": "Sent l'amor al Saló de Festes de Sant Valentí.",
|
||||
"backgroundValentinesDayFeastingHallText": "Saló de Festes de Sant Valentí",
|
||||
"backgroundOldFashionedBakeryNotes": "Gaudeix d'olors boníssimes fora d'una Fleca Antiga.",
|
||||
"backgroundOldFashionedBakeryText": "Fleca Antiga",
|
||||
"backgroundMedievalKitchenNotes": "Cuina una tempesta a una Cuina Medieval.",
|
||||
"backgroundMedievalKitchenText": "Cuina Medieval",
|
||||
"backgrounds022019": "57ª sèrie: febrer del 2019",
|
||||
"backgroundWinterNocturneNotes": "Gaudeix de les estrelles d'un Hivern Nocturn.",
|
||||
"backgroundWinterNocturneText": "Hivern Nocturn",
|
||||
"backgroundHolidayWreathNotes": "Adorna el teu avatar amb una Garlanda Festiva elegant.",
|
||||
"backgroundHolidayWreathText": "Garlanda Festiva",
|
||||
"backgroundHolidayMarketNotes": "Troba les decoracions i els regals perfectes al Mercat de Nadal.",
|
||||
"backgrounds052019": "60a sèrie: maig del 2019",
|
||||
"backgroundBlossomingDesertNotes": "Presencia una floració extraordinària al desert florit.",
|
||||
"backgroundBlossomingDesertText": "Desert florit",
|
||||
"backgroundHalflingsHouseNotes": "Visita una encantadora casa del mestís.",
|
||||
"backgroundHalflingsHouseText": "Casa del mestís",
|
||||
"backgroundBirchForestNotes": "Passa-ho bé al tranquil bosc de bedolls.",
|
||||
"backgroundBirchForestText": "Bosc de bedolls",
|
||||
"backgrounds042019": "59a sèrie: abril del 2019",
|
||||
"backgroundFlowerMarketNotes": "Troba els colors ideals per un ram o un jardí al mercat de flors.",
|
||||
"backgroundFlowerMarketText": "Mercat de flors",
|
||||
"backgroundFieldWithColoredEggsNotes": "Busca un tresor primaveral al camp amb ous de colors.",
|
||||
"backgroundFieldWithColoredEggsText": "Camp amb ous de colors",
|
||||
"backgroundDuckPondNotes": "Alimenta els ocells aquàtics a l'estanc d'ànecs.",
|
||||
"backgroundDuckPondText": "Estanc d'ànecs",
|
||||
"backgrounds032019": "58a sèrie: març del 2019",
|
||||
"backgroundValentinesDayFeastingHallNotes": "Sent l'amor al saló de festes de Sant Valentí.",
|
||||
"backgroundValentinesDayFeastingHallText": "Saló de festes de Sant Valentí",
|
||||
"backgroundOldFashionedBakeryNotes": "Gaudeix d'olors boníssimes fora d'una fleca antiga.",
|
||||
"backgroundOldFashionedBakeryText": "Fleca antiga",
|
||||
"backgroundMedievalKitchenNotes": "Cuina una tempesta a una cuina medieval.",
|
||||
"backgroundMedievalKitchenText": "Cuina medieval",
|
||||
"backgrounds022019": "57a sèrie: febrer del 2019",
|
||||
"backgroundWinterNocturneNotes": "Gaudeix de les estrelles d'un hivern nocturn.",
|
||||
"backgroundWinterNocturneText": "Hivern nocturn",
|
||||
"backgroundHolidayWreathNotes": "Adorna el teu avatar amb una garlanda festiva elegant.",
|
||||
"backgroundHolidayWreathText": "Garlanda festiva",
|
||||
"backgroundHolidayMarketNotes": "Troba les decoracions i els regals perfectes al mercat de Nadal.",
|
||||
"backgroundHolidayMarketText": "Mercat de Nadal",
|
||||
"backgrounds122019": "67ª sèrie: desembre del 2019",
|
||||
"backgroundPotionShopNotes": "Troba un elixir per qualsevol malaltia a la Botiga de Pocions.",
|
||||
"backgroundPotionShopText": "Botiga de Pocions",
|
||||
"backgroundFlyingInAThunderstormNotes": "Persegueix una Tempesta Tumultuosa de tan a prop com t'atreveixis.",
|
||||
"backgroundFlyingInAThunderstormText": "Tempesta Tumultuosa",
|
||||
"backgroundFarmersMarketNotes": "Compra el menjar més fresc al Mercat Ecològic.",
|
||||
"backgroundFarmersMarketText": "Mercat Ecològic",
|
||||
"backgrounds112019": "66ª sèrie: novembre del 2019",
|
||||
"backgroundMonsterMakersWorkshopNotes": "Experimenta amb ciències desacreditades en un Taller de Creació de Monstres.",
|
||||
"backgroundMonsterMakersWorkshopText": "Taller de Creació de Monstres",
|
||||
"backgroundPumpkinCarriageNotes": "Puja a la Carrossa de Carbassa encantada abans que el rellotge toqui les dotze.",
|
||||
"backgroundPumpkinCarriageText": "Carrossa de Carbassa",
|
||||
"backgroundFoggyMoorNotes": "Mira per on vas quan travessis un Indret Emboirat.",
|
||||
"backgroundFoggyMoorText": "Indret Emboirat",
|
||||
"backgrounds102019": "65ª sèrie: octubre del 2019",
|
||||
"backgroundInAClassroomNotes": "Absorveix el coneixement dels teus mentors en una Classe.",
|
||||
"backgrounds122019": "67a sèrie: desembre del 2019",
|
||||
"backgroundPotionShopNotes": "Troba un elixir per qualsevol malaltia a la botiga de pocions.",
|
||||
"backgroundPotionShopText": "Botiga de pocions",
|
||||
"backgroundFlyingInAThunderstormNotes": "Persegueix una tempesta tumultuosa de tan a prop com t'atreveixis.",
|
||||
"backgroundFlyingInAThunderstormText": "Tempesta tumultuosa",
|
||||
"backgroundFarmersMarketNotes": "Compra el menjar més fresc al mercat ecològic.",
|
||||
"backgroundFarmersMarketText": "Mercat ecològic",
|
||||
"backgrounds112019": "66a sèrie: novembre del 2019",
|
||||
"backgroundMonsterMakersWorkshopNotes": "Experimenta amb ciències desacreditades en un taller de creació de monstres.",
|
||||
"backgroundMonsterMakersWorkshopText": "Taller de creació de monstres",
|
||||
"backgroundPumpkinCarriageNotes": "Puja a la carrossa de carbassa encantada abans que el rellotge toqui les dotze.",
|
||||
"backgroundPumpkinCarriageText": "Carrossa de carbassa",
|
||||
"backgroundFoggyMoorNotes": "Mira per on vas quan travessis un indret emboirat.",
|
||||
"backgroundFoggyMoorText": "Indret emboirat",
|
||||
"backgrounds102019": "65a sèrie: octubre del 2019",
|
||||
"backgroundInAClassroomNotes": "Absorbeix el coneixement dels teus mentors en una classe.",
|
||||
"backgroundInAClassroomText": "Classe",
|
||||
"backgroundInAnAncientTombNotes": "Enfronta't als misteris d'una Tomba Antiga.",
|
||||
"backgroundInAnAncientTombText": "Tomba Antiga",
|
||||
"backgroundAutumnFlowerGardenNotes": "Sent la calidesa d'un Jardí de Flors de Tardor.",
|
||||
"backgroundAutumnFlowerGardenText": "Jardí de Flors de Tardor",
|
||||
"backgrounds092019": "64ª sèrie: setembre del 2019",
|
||||
"backgroundTreehouseNotes": "Passa l'estona en un amagatall arbori només per a tu, a la teva pròpia Casa de l'Arbre.",
|
||||
"backgroundTreehouseText": "Casa de l'Arbre",
|
||||
"backgroundGiantDandelionsNotes": "Passeja entre Dents de Lleó Gegants.",
|
||||
"backgroundGiantDandelionsText": "Dents de Lleó Gegants",
|
||||
"backgroundAmidAncientRuinsNotes": "Fés una reverència al passat misteriós Entremig de Ruïnes Antigues.",
|
||||
"backgroundAmidAncientRuinsText": "Entremig de Ruïnes Antigues",
|
||||
"backgrounds082019": "63ª sèrie: agost del 2019",
|
||||
"backgroundAmongGiantAnemonesNotes": "Explora la vida de l'escull, protegit dels depredadors Entre Anemones Gegants.",
|
||||
"backgroundAmongGiantAnemonesText": "Entre Anemones Gegants",
|
||||
"backgroundFlyingOverTropicalIslandsNotes": "El paisatge et deixarà sense respiració mentre Sobrevoles Illes Tropicals.",
|
||||
"backgroundFlyingOverTropicalIslandsText": "Sobrevolant Illes Tropicals",
|
||||
"backgroundLakeWithFloatingLanternsNotes": "Mira les estrelles des de l'atmosfera festiva del Llac amb Llanternes Flotants.",
|
||||
"backgroundLakeWithFloatingLanternsText": "Llac amb Llanternes Flotants",
|
||||
"backgrounds072019": "62ª sèrie: juliol del 2019",
|
||||
"backgroundUnderwaterVentsNotes": "Capbussa't ben avall, cap als Conductes Submarins.",
|
||||
"backgroundUnderwaterVentsText": "Conductes Submarins",
|
||||
"backgroundSeasideCliffsNotes": "Relaxa't en una platja amb la bellesa dels Penya-segats Costaners darrera.",
|
||||
"backgroundSeasideCliffsText": "Penya-segats Costaners"
|
||||
"backgroundInAnAncientTombNotes": "Enfronta't als misteris d'una tomba antiga.",
|
||||
"backgroundInAnAncientTombText": "Tomba antiga",
|
||||
"backgroundAutumnFlowerGardenNotes": "Sent la calidesa d'un jardí de flors de tardor.",
|
||||
"backgroundAutumnFlowerGardenText": "Jardí de flors de tardor",
|
||||
"backgrounds092019": "64a sèrie: setembre del 2019",
|
||||
"backgroundTreehouseNotes": "Passa l'estona en un amagatall arbori només per a tu, a la teva pròpia casa de l'arbre.",
|
||||
"backgroundTreehouseText": "Casa de l'arbre",
|
||||
"backgroundGiantDandelionsNotes": "Passeja entre dents de lleó gegants.",
|
||||
"backgroundGiantDandelionsText": "Dents de lleó gegants",
|
||||
"backgroundAmidAncientRuinsNotes": "Fés una reverència al passat misteriós entremig de ruïnes antigues.",
|
||||
"backgroundAmidAncientRuinsText": "Entremig de ruïnes antigues",
|
||||
"backgrounds082019": "63a sèrie: agost del 2019",
|
||||
"backgroundAmongGiantAnemonesNotes": "Explora la vida de l'escull, protegit dels depredadors entre anemones gegants.",
|
||||
"backgroundAmongGiantAnemonesText": "Entre anemones gegants",
|
||||
"backgroundFlyingOverTropicalIslandsNotes": "El paisatge et deixarà sense respiració mentre sobrevoles illes tropicals.",
|
||||
"backgroundFlyingOverTropicalIslandsText": "Sobrevolant illes tropicals",
|
||||
"backgroundLakeWithFloatingLanternsNotes": "Mira les estrelles des de l'atmosfera festiva del llac amb llanternes flotants.",
|
||||
"backgroundLakeWithFloatingLanternsText": "Llac amb llanternes flotants",
|
||||
"backgrounds072019": "62a sèrie: juliol del 2019",
|
||||
"backgroundUnderwaterVentsNotes": "Capbussa't ben avall, cap als conductes submarins.",
|
||||
"backgroundUnderwaterVentsText": "Conductes submarins",
|
||||
"backgroundSeasideCliffsNotes": "Relaxa't en una platja amb la bellesa dels penya-segats costaners darrera.",
|
||||
"backgroundSeasideCliffsText": "Penya-segats costaners"
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
"addTask": "Afegeix una Tasca",
|
||||
"editChallenge": "Edita el Repte",
|
||||
"challengeDescription": "Descripció del Repte",
|
||||
"selectChallengeWinnersDescription": "Tria un guanyador entre els participants del Repte",
|
||||
"selectChallengeWinnersDescription": "Tria un guanyador entre els participants del repte",
|
||||
"awardWinners": "Guanyador del premi",
|
||||
"doYouWantedToDeleteChallenge": "Vols suprimir aquest Repte?",
|
||||
"deleteChallenge": "Borra el Repte",
|
||||
@@ -120,7 +120,7 @@
|
||||
"shortName": "Nom Curt",
|
||||
"shortNamePlaceholder": "Quin tipus de classificació s'hauria d'utilitzar per identificar el teu Repte?",
|
||||
"updateChallenge": "Actualitza el Repte",
|
||||
"haveNoChallenges": "Aquest grup no té Reptes",
|
||||
"haveNoChallenges": "Aquest grup no té reptes",
|
||||
"loadMore": "Carrega Més",
|
||||
"exportChallengeCsv": "Exporta el Repte",
|
||||
"editingChallenge": "Editant el Repte",
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"communityGuidelinesWarning": "Please keep in mind that your Display Name, profile photo, and blurb must comply with the <a href='https://habitica.com/static/community-guidelines' target='_blank'>Community Guidelines</a> (e.g. no profanity, no adult topics, no insults, etc). If you have any questions about whether or not something is appropriate, feel free to email <%= hrefBlankCommunityManagerEmail %>!",
|
||||
"communityGuidelinesWarning": "Recorda que el teu nom, foto de perfil i descripció ha de seguir les <a href='https://habitica.com/static/community-guidelines' target='_blank'>normes de la comunitat</a> (per exemple, no es permet l'ús de llenguatge groller, temes adults, insults, etc.). Per qualsevol dubte sobre un llenguatge adequat no dubtis a enviar un correu electrònic a <%= hrefBlankCommunityManagerEmail %>!",
|
||||
"profile": "Perfil",
|
||||
"avatar": "Personalitza l'Avatar",
|
||||
"editAvatar": "Edita el teu Avatar",
|
||||
"noDescription": "This Habitican hasn't added a description.",
|
||||
"noPhoto": "This Habitican hasn't added a photo.",
|
||||
"noDescription": "Aquest habitant no ha afegit cap descripció.",
|
||||
"noPhoto": "Aquest habitant no ha afegit cap foto.",
|
||||
"other": "Altres",
|
||||
"fullName": "Nom complet",
|
||||
"displayName": "Display name",
|
||||
"changeDisplayName": "Change Display Name",
|
||||
"newDisplayName": "New Display Name",
|
||||
"displayName": "Nom públic",
|
||||
"changeDisplayName": "Canvia el nom públic",
|
||||
"newDisplayName": "Nou nom públic",
|
||||
"displayPhoto": "Foto",
|
||||
"displayBlurb": "Alguna cosa sobre tu mateix",
|
||||
"displayBlurbPlaceholder": "Presenta't sisplau",
|
||||
@@ -35,7 +35,7 @@
|
||||
"color": "Color",
|
||||
"bodyHair": "Cabells",
|
||||
"hair": "Cabell",
|
||||
"bangs": "Bangs",
|
||||
"bangs": "Serrell",
|
||||
"hairBangs": "Serrells",
|
||||
"ponytail": "Cua",
|
||||
"glasses": "Ulleres",
|
||||
@@ -47,8 +47,8 @@
|
||||
"beard": "Barba",
|
||||
"mustache": "Bigoti",
|
||||
"flower": "Flor",
|
||||
"accent": "Accent",
|
||||
"headband": "Headband",
|
||||
"accent": "Accessori",
|
||||
"headband": "Diadema",
|
||||
"wheelchair": "Cadira de rodes",
|
||||
"extra": "Extra",
|
||||
"basicSkins": "Pells bàsiques",
|
||||
@@ -64,27 +64,27 @@
|
||||
"winteryColors": "Colors hivernals",
|
||||
"equipment": "Equipament",
|
||||
"equipmentBonus": "Equipament",
|
||||
"equipmentBonusText": "Stat bonuses provided by your equipped battle gear. See the Equipment tab under Inventory to select your battle gear.",
|
||||
"classBonusText": "Your class (Warrior, if you haven't unlocked or selected another class) uses its own equipment more effectively than gear from other classes. Equipped gear from your current class gets a 50% boost to the Stat bonus it grants.",
|
||||
"equipmentBonusText": "El teu equipament de combat et dona bonificacions d'atributs. Mira la pestanya d'equipament de l'inventori per triar el teu equipament de combat.",
|
||||
"classBonusText": "La teva classe (Guerrer, si no has desbloquejat o seleccionat cap altra classe) aprofita millor el seu propi equipament que el d'altres classes. L'equipament que portis posat de la teva classe augmentarà un 50% de la bonificació d'atributs que atorgui.",
|
||||
"classEquipBonus": "Bonificació de classe",
|
||||
"battleGear": "Equip de guerra",
|
||||
"gear": "Gear",
|
||||
"battleGearText": "Aquest és l'equip que duus a la batalla, afecta els números quan interactues amb les teves tasques",
|
||||
"gear": "Equipament",
|
||||
"battleGearText": "Aquest és l'equip que duus a la batalla, afecta els números quan interactues amb les teves tasques.",
|
||||
"autoEquipBattleGear": "Equipar automàticament nou equip",
|
||||
"costume": "Disfressa",
|
||||
"costumeText": "Si prefereixes la imatge d'un equip diferent del que duus, selecciona la casella \"Usar disfressa\" per portar visualment una disfressa mentre tens equipat a sota el teu equip de guerra.",
|
||||
"useCostume": "Usar disfressa",
|
||||
"useCostumeInfo1": "Click \"Use Costume\" to equip items to your avatar without affecting the Stats from your Battle Gear! This means that you can equip for the best Stats on the left, and dress up your avatar with your equipment on the right.",
|
||||
"useCostumeInfo2": "Once you click \"Use Costume\" your avatar will look pretty basic... but don't worry! If you look on the left, you'll see that your Battle Gear is still equipped. Next, you can make things fancy! Anything you equip on the right won't affect your Stats, but can make you look super awesome. Try out different combos, mixing sets, and coordinating your Costume with your pets, mounts, and backgrounds.<br><br>Got more questions? Check out the <a href=\"http://habitica.wikia.com/wiki/Equipment#Costumes\">Costume page</a> on the wiki. Find the perfect ensemble? Show it off in the <a href=\"/groups/guild/3884eeaa-2d6a-45e8-a279-ada6de9709e1\">Costume Carnival guild</a> or brag in the Tavern!",
|
||||
"costumePopoverText": "Select \"Use Costume\" to equip items to your avatar without affecting the Stats from your Battle Gear! This means that you can dress up your avatar in whatever outfit you like while still having your best Battle Gear equipped.",
|
||||
"useCostumeInfo1": "Feu clic a \"Utilitza una disfressa\" per equipar el teu avatar sense que afecti als atributs del teu equipament de combat! D'aquesta manera pots posar-te l'equipament amb millors atributs a l'esquerra i disfressar el teu avatar amb l'equipament a la dreta.",
|
||||
"useCostumeInfo2": "Un cop has fet clic a \"Utilitza una disfressa\" l'avatar es veurà una mica bàsic... però no et preocupis! Si mires a l'esquerra, veuràs que el teu equipament de combat encara està posat. Després podràs fer coses sofisticades! Qualsevol cosa que et posis a la dreta no afectarà els teus atributs però et pot fer quedar de meravella. Prova diferents combinacions, barreja sèries i coordina la teva disfressa amb les mascotes, muntures i fons.<br><br>Tens més preguntes? Fes un cop d'ull a <a href=\"http://habitica.wikia.com/wiki/Equipment#Costumes\">Pàgina de disfresses</a> a la wiki. Has trobat el conjunt perfecte? Ensenya'l al <a href=\"/groups/guild/3884eeaa-2d6a-45e8-a279-ada6de9709e1\">gremi de disfresses de carnaval</a> o presumeix-ne a la taverna!",
|
||||
"costumePopoverText": "Selecciona \"Utilitza una disfressa\" per equipar el teu avatar sense que afecti als atributs del teu equipament de combat! D'aquesta manera pots disfressar el teu avatar amb l'equipament que vulguis mentre tens posat l'equipament de combat amb millors atributs.",
|
||||
"autoEquipPopoverText": "Selecciona aquesta opció per equipar-te de manera automàtica l'equip nou tant bon punt el compris.",
|
||||
"costumeDisabled": "Has desactivat la teva disfressa",
|
||||
"costumeDisabled": "Has desactivat la teva disfressa.",
|
||||
"gearAchievement": "Has aconseguit la fita \"Equipament Definitiu\" per aver actualitzar al màxim l'equipament d'una classe! Has aconseguit els sets complets llistats a continuació:",
|
||||
"gearAchievementNotification": "You have earned the \"Ultimate Gear\" Achievement for upgrading to the maximum gear set for a class!",
|
||||
"moreGearAchievements": "To attain more Ultimate Gear badges, change classes on <a href='/user/settings/site' target='_blank'>the Settings > Site page</a> and buy your new class's gear!",
|
||||
"gearAchievementNotification": "Has aconseguit la fita \"Equipament Definitiu\" per aver actualitzar al màxim l'equipament d'una classe!",
|
||||
"moreGearAchievements": "Per aconseguir més insígnies d'equipament definitiu, canvia de classe a <a href='/user/settings/site' target='_blank'>la pàgina > de configuració</a> i compra equipament per la nova classe!",
|
||||
"armoireUnlocked": "Per a més equipament, fes una ullada a l'<strong>Armari Encantat</strong>. Clica sobre la Recompensa de l'Armari Encantat per a obtenir aleatoriament Equipament especial! També pots aconseguir una quantitat aleatòria d'XP o aliments.",
|
||||
"ultimGearName": "Ultimate Gear - <%= ultClass %>",
|
||||
"ultimGearText": "Has upgraded to the maximum weapon and armor set for the <%= ultClass %> class.",
|
||||
"ultimGearName": "Equipament definitiu - <%= ultClass %>",
|
||||
"ultimGearText": "Has actualitzat al màxim les armes i l'armadura de la classe <%= ultClass %>.",
|
||||
"level": "Nivell",
|
||||
"levelUp": "Has pujat de nivell!",
|
||||
"gainedLevel": "Has pujat un nivell!",
|
||||
@@ -97,31 +97,31 @@
|
||||
"xp": "EX",
|
||||
"health": "Vida",
|
||||
"allocateStr": "Punts assignats a Força:",
|
||||
"allocateStrPop": "Add a Point to Strength",
|
||||
"allocateStrPop": "Afegeix un punt a Força",
|
||||
"allocateCon": "Punts assignats a Constitució:",
|
||||
"allocateConPop": "Add a Point to Constitution",
|
||||
"allocateConPop": "Afegeix un punt a Constitució",
|
||||
"allocatePer": "Punts assignats a Percepció:",
|
||||
"allocatePerPop": "Add a Point to Perception",
|
||||
"allocatePerPop": "Afegeix un punt a Percepció",
|
||||
"allocateInt": "Punts assignats a Intel·ligència:",
|
||||
"allocateIntPop": "Add a Point to Intelligence",
|
||||
"noMoreAllocate": "Now that you've hit level 100, you won't gain any more Stat Points. You can continue leveling up, or start a new adventure at level 1 by using the <a href='http://habitica.wikia.com/wiki/Orb_of_Rebirth' target='_blank'>Orb of Rebirth</a>, now available for free in the Market.",
|
||||
"stats": "Estadístiques",
|
||||
"allocateIntPop": "Afegeix un punt a Intel·ligència",
|
||||
"noMoreAllocate": "Ara que has arribat al nivell 100, no guanyaràs més punts d'atributs. Pots continuar pujant de nivell o començar una nova aventura al nivell 1 utilitzant<a href='http://habitica.wikia.com/wiki/Orb_of_Rebirth' target='_blank'>l'esfera de renaixement</a>!",
|
||||
"stats": "Atributs",
|
||||
"achievs": "Fites",
|
||||
"strength": "Força",
|
||||
"strText": "Strength increases the chance of random \"critical hits\" and the Gold, Experience, and drop chance boost from them. It also helps deal damage to boss monsters.",
|
||||
"strText": "La Força augmenta la possiblitat de fer un \"cop crític\" i de rebre més monedes, experiència i objectes. També ajuda a fer més mal als monstres finals.",
|
||||
"constitution": "Constitució",
|
||||
"conText": "La Constitució redueix el mal obtingut dels Habits negatius i les Tasques Diàries",
|
||||
"conText": "La Constitució redueix el mal obtingut dels Habits negatius i les Tasques Diàries.",
|
||||
"perception": "Percepció",
|
||||
"perText": "La percepció augmenta l'Or que aconsegueixes, i un cop has desbloquejat el Mercat, augmenta les possibilitats de trobar objectes quan aconsegueixes tasques.",
|
||||
"intelligence": "Intel·ligència",
|
||||
"intText": "La Intel·ligència augmenta la quantitat d'experiència que reps, i un cop hagis desbloquejat les classes, determina el màxim Manà disponible per les habilitats de classe.",
|
||||
"levelBonus": "Bonificació de nivell",
|
||||
"levelBonusText": "Each Stat gets a bonus equal to half of (your Level minus 1).",
|
||||
"levelBonusText": "Cada atribut guanya una bonificació igual a la meitat del (teu nivell menys 1).",
|
||||
"allocatedPoints": "Punts assignats",
|
||||
"allocatedPointsText": "Stat Points you've earned and assigned. Assign Points using the Character Build column.",
|
||||
"allocatedPointsText": "Punts d'atributs que has guanyat i assignat. Assigna punts utilitzant la columna de construcció del personatge.",
|
||||
"allocated": "Assignats",
|
||||
"buffs": "Bonificadors",
|
||||
"buffsText": "Temporary Stat bonuses from abilities and achievements. These wear off at the end of your day. The abilities you've unlocked appear in the Rewards list of your Tasks page.",
|
||||
"buffsText": "Bonificacions temporals d'atributs d'habilitats i assoliments. S'esgoten al final del dia. Les habilitats que hagis desbloquejat apareixeràn a la llista de recompenses de la pàgina de tasques.",
|
||||
"characterBuild": "Construcció del personatge",
|
||||
"class": "Classe",
|
||||
"experience": "Experiència",
|
||||
@@ -131,23 +131,23 @@
|
||||
"mage": "Mag",
|
||||
"wizard": "Mag",
|
||||
"mystery": "Objecte misteriós",
|
||||
"changeClass": "Change Class, Refund Stat Points",
|
||||
"changeClass": "Canvia de classe, Devolució de punts d'atribut",
|
||||
"lvl10ChangeClass": "Per canviar de classe has d'estar com a mínim al nivell 10.",
|
||||
"changeClassConfirmCost": "Estàs segur de que vols canviar la teva classe per 3 diamants?",
|
||||
"invalidClass": "Classe invalida. Si us plau especifica 'guerrer', 'lladre', 'mag' o 'curander'.",
|
||||
"levelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options.",
|
||||
"unallocated": "Unallocated Stat Points",
|
||||
"haveUnallocated": "You have <%= points %> unallocated Stat Point(s)",
|
||||
"levelPopover": "Cada nivell et dona un punt per assignar a l'atribut que trïis. Pots fer-ho manualment o deixar que el joc decideixi per tu utilitzant l'opció d'assignació automàtica.",
|
||||
"unallocated": "Punts d'atribut sense assignar",
|
||||
"haveUnallocated": "Tens<%= points %> punt(s) d'atribut sense assignar",
|
||||
"autoAllocation": "Assignació automàtica",
|
||||
"autoAllocationPop": "Places Points into Stats according to your preferences, when you level up.",
|
||||
"evenAllocation": "Distribute Stat Points evenly",
|
||||
"evenAllocationPop": "Assigns the same number of Points to each Stat.",
|
||||
"classAllocation": "Distribute Points based on Class",
|
||||
"classAllocationPop": "Assigns more Points to the Stats important to your Class.",
|
||||
"taskAllocation": "Distribute Points based on task activity",
|
||||
"taskAllocationPop": "Assigns Points based on the Strength, Intelligence, Constitution, and Perception categories associated with the tasks you complete.",
|
||||
"autoAllocationPop": "Assigna punts als atributs que vulguis quan pugis de nivell.",
|
||||
"evenAllocation": "Distribueix els punts d'atribut equitativament",
|
||||
"evenAllocationPop": "Assigna el mateix número de punts a cada atribut.",
|
||||
"classAllocation": "Distribueix els punts segons la teva classe",
|
||||
"classAllocationPop": "Assigna més punts als atributs importants per la teva classe.",
|
||||
"taskAllocation": "Distribueix els punts segons l'activitat de les teves tasques",
|
||||
"taskAllocationPop": "Assigna els punts segons les categories de Força, Intel·ligència, Constitució i Percepció associades a les tasques que completis.",
|
||||
"distributePoints": "Distribueix els punts no assignats",
|
||||
"distributePointsPop": "Assigns all unallocated Stat Points according to the selected allocation scheme.",
|
||||
"distributePointsPop": "Assigna tots els punts d'atributs sense assignar segons l'esquema d'assignació seleccionat.",
|
||||
"warriorText": "Els Guerrers guanyes més i millors \"cops crítics\", que aleatòriament donen bonificacions d'Or, Experiència i una probabilitat de marcar una tasca. També reben més mal dels monstres finals. Juga amb el Guerrer si t'agraden les recompenses aleatòries o si vols repartir mal als monstres finals!",
|
||||
"wizardText": "Els Mags aprenen ràpidament, guanyant experiència i pujant de nivell més ràpidament que les altres classes. A més, també es beneficien de més Mana per utilitzar les seves habilitat especials. Juga com a Mag si t'agrada explorar els aspectes més tècnics d'Habitica, o si estàs molt motivat per pujar de nivell ràpid i desbloquejar aspectes més avançats!",
|
||||
"mageText": "Els Mags aprenen ràpidament, guanyant experiència i pujant de nivell més ràpidament que les altres classes. A més, també es beneficien de més Mana per utilitzar les seves habilitat especials. Juga com a Mag si t'agrada explorar els aspectes més tècnics d'Habitica, o si estàs molt motivat per pujar de nivell ràpid i desbloquejar aspectes més avançats!",
|
||||
@@ -157,8 +157,8 @@
|
||||
"optOutOfPMs": "Abandona-les",
|
||||
"chooseClass": "Tria la teva classe",
|
||||
"chooseClassLearnMarkdown": "[Aprèn més sobre el sistema de classes d'Habitica](http://habitica.wikia.com/wiki/Class_System)",
|
||||
"optOutOfClassesText": "Can't be bothered with classes? Want to choose later? Opt out - you'll be a warrior with no special abilities. You can read about the class system later on the wiki and enable classes at any time under User Icon > Settings.",
|
||||
"selectClass": "Select <%= heroClass %>",
|
||||
"optOutOfClassesText": "No t'importen les classes? Vols triar més tard? Cap problema - seràs un guerrer sense cap habilitat especial. Pots informar-te sobre els sistema de classes més tard a la wiki i habilitar les classes en qualsevol moment a Icona de l'usuari > Configuració.",
|
||||
"selectClass": "Selecciona <%= heroClass %>",
|
||||
"select": "Selecciona",
|
||||
"stealth": "Sigil",
|
||||
"stealthNewDay": "Quan comenci un nou dia, evitaràs que aquestes tasques diàries saltades et facin mal.",
|
||||
@@ -167,15 +167,15 @@
|
||||
"respawn": "Reviu!",
|
||||
"youDied": "Has mort!",
|
||||
"dieText": "Has perdut un nivell, totes les monedes, i una peça de l'equip aleatòria. Alça't, habitícula, i torna-ho a intentar! Domina aquests mals hàbits, sigues diligent en completar les tasques diàries, i mantingue's la mort a ratlla amb una poció de vida si les forces et flaquejen!",
|
||||
"sureReset": "Are you sure? This will reset your character's class and allocated Stat Points (you'll get them all back to re-allocate), and costs 3 Gems.",
|
||||
"sureReset": "N'estàs segur? Això reiniciarà la classe del teu personatge i els punts d'atribut assignats (els tornaràs a tenir per reassignar-los) i costa 3 gemmes.",
|
||||
"purchaseFor": "Comprar per <%= cost %> Gemmes?",
|
||||
"purchaseForHourglasses": "Purchase for <%= cost %> Hourglasses?",
|
||||
"purchaseForHourglasses": "Compra per <%= cost %> rellotges de sorra?",
|
||||
"notEnoughMana": "No tens prou manà.",
|
||||
"invalidTarget": "No pots llençar les teves habilitats en això.",
|
||||
"youCast": "Llances <%= spell %>.",
|
||||
"youCastTarget": "Llances <%= spell %> contra <%= target %>.",
|
||||
"youCastParty": "Llances <%= spell %> per a la festa.",
|
||||
"critBonus": "Cop crític! Bonificació:",
|
||||
"critBonus": "Cop crític! Bonificació: ",
|
||||
"gainedGold": "Has guanyat or",
|
||||
"gainedMana": "Has guanyat Mana",
|
||||
"gainedHealth": "Has recuperat una mica de vida",
|
||||
@@ -184,7 +184,7 @@
|
||||
"lostMana": "Has utilitzat una mica de Mana",
|
||||
"lostHealth": "Has perdut una mica de Vida",
|
||||
"lostExperience": "Has perdut una mica d'Experiència",
|
||||
"displayNameDescription1": "This is what appears in messages you post in the Tavern, guilds, and party chat, along with what is displayed on your avatar. To change it, click the Edit button above. If instead you want to change your username, go to",
|
||||
"displayNameDescription1": "Això és el que apareix als missatges que publiquis a la taverna, els gremis i el xat d'equip, juntament amb el que es mostra amb el teu avatar. Per canviar-ho, fes clic al botó superior d'editar. En canvi, si vols canviar el teu nom d'usuari, vés a",
|
||||
"displayNameDescription2": "Opcions->Pàgina",
|
||||
"displayNameDescription3": "i mira la secció de Registre.",
|
||||
"unequipBattleGear": "Desequipar Equip de batalla",
|
||||
@@ -203,26 +203,30 @@
|
||||
"con": "CON",
|
||||
"per": "PER",
|
||||
"int": "INT",
|
||||
"showQuickAllocation": "Show Stat Allocation",
|
||||
"hideQuickAllocation": "Hide Stat Allocation",
|
||||
"quickAllocationLevelPopover": "Each level earns you one Point to assign to a Stat of your choice. You can do so manually, or let the game decide for you using one of the Automatic Allocation options found in User Icon > Stats.",
|
||||
"notEnoughAttrPoints": "You don't have enough Stat Points.",
|
||||
"classNotSelected": "You must select Class before you can assign Stat Points.",
|
||||
"showQuickAllocation": "Mostra l'assignació d'atributs",
|
||||
"hideQuickAllocation": "Amaga l'assignació d'atributs",
|
||||
"quickAllocationLevelPopover": "Cada nivell et dona un punt per assignar a l'atribut que trïis. Pots fer-ho manualment o deixar que el joc decideixi per tu utilitzant una de les opcions d'assignació automàtica que trobaràs a Icona de l'usuari > Atributs.",
|
||||
"notEnoughAttrPoints": "No tens prous punts d'atributs.",
|
||||
"classNotSelected": "Selecciona una classe abans d'assignar punts d'atribut.",
|
||||
"style": "Estil",
|
||||
"facialhair": "Facial",
|
||||
"photo": "Fotogràfia",
|
||||
"facialhair": "Cara",
|
||||
"photo": "Foto",
|
||||
"info": "Informació",
|
||||
"joined": "Unit",
|
||||
"totalLogins": "Total Check Ins",
|
||||
"latestCheckin": "Latest Check In",
|
||||
"totalLogins": "Total d'entrades",
|
||||
"latestCheckin": "Última entrada",
|
||||
"editProfile": "Modifica el teu perfil",
|
||||
"challengesWon": "Reptes guanyats",
|
||||
"questsCompleted": "Quests Completed",
|
||||
"headAccess": "Head Access.",
|
||||
"backAccess": "Back Access.",
|
||||
"bodyAccess": "Body Access.",
|
||||
"mainHand": "Main-Hand",
|
||||
"offHand": "Off-Hand",
|
||||
"statPoints": "Stat Points",
|
||||
"pts": "pts"
|
||||
"questsCompleted": "Missions completades",
|
||||
"headAccess": "Accessori del cap.",
|
||||
"backAccess": "Accessori de l'esquena.",
|
||||
"bodyAccess": "Accessori del cos.",
|
||||
"mainHand": "Mà principal",
|
||||
"offHand": "Mà secundària",
|
||||
"statPoints": "Punts d'atribut",
|
||||
"pts": "punts",
|
||||
"chatCastSpellUser": "<%= username %> llança <%= spell %> contra <%= target %>.",
|
||||
"chatCastSpellParty": "<%= username %> llança <%= spell %> per l'equip.",
|
||||
"purchasePetItemConfirm": "Aquesta compra supera el número d'objectes que necessites per covar totes les mascotes <%= itemText %> possibles. N'estàs segur?",
|
||||
"purchaseForGold": "Compra per <%= cost %> monedes?"
|
||||
}
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
{
|
||||
"iAcceptCommunityGuidelines": "Em comprometo a seguir les Normes de la Comunitat",
|
||||
"tavernCommunityGuidelinesPlaceholder": "Friendly reminder: this is an all-ages chat, so please keep content and language appropriate! Consult the Community Guidelines in the sidebar if you have questions.",
|
||||
"lastUpdated": "Last updated:",
|
||||
"tavernCommunityGuidelinesPlaceholder": "Recorda: aquest és un xat per a totes les edats. Si us plau, utilitza un contingut i llenguatge adeqüats! Consulta les normes de la comunitat a la barra lateral si tens qualsevol dubte.",
|
||||
"lastUpdated": "Última actualització:",
|
||||
"commGuideHeadingWelcome": "Benvingut a Habitica!",
|
||||
"commGuidePara001": "Greetings, adventurer! Welcome to Habitica, the land of productivity, healthy living, and the occasional rampaging gryphon. We have a cheerful community full of helpful people supporting each other on their way to self-improvement. To fit in, all it takes is a positive attitude, a respectful manner, and the understanding that everyone has different skills and limitations -- including you! Habiticans are patient with one another and try to help whenever they can.",
|
||||
"commGuidePara002": "To help keep everyone safe, happy, and productive in the community, we do have some guidelines. We have carefully crafted them to make them as friendly and easy-to-read as possible. Please take the time to read them before you start chatting.",
|
||||
"commGuidePara001": "Salutacions, aventurer! Benvingut a Habitica, la terra de la productivitat, la vida saludable i un griu ocasionalment desbocat. Tenim una comunitat alegre plena de gent atenta que es recolza mútuament de camí cap a la superació personal. Per encaixar només es necessita tenir una actitud positiva, una manera respectuosa i comprendre que cadascú té diferents habilitats i limitacions, fins i tot tu! Els habitants d'Habitica són pacients amb els altres i intenten ajudar sempre que poden.",
|
||||
"commGuidePara002": "Per ajudar a que tothom es senti segur, feliç i productiu a la comunitat tenim unes normes. Les hem dissenyat cuidadosament per fer-les tant agradables i fàcils de llegir com ha estat posible. Si us plau, pren-te el temps que necessitis per llegir-les abans que comencis a xatejar.",
|
||||
"commGuidePara003": "Aquestes normes valen per tots els espais socials que utilitzem, incloent (però no necessàriament limitant-se a) Trello, Github, Transifex i la Wikia (la wiki). A vegades esdeveniràn situacions imprevistes, com un nou origen de conflicte o un feroç ocultista. Quan això passi, els moderadors poden intervenir editant aquestes normes per mantenir-nos a tots segurs de nous perills. No pateixis: seràs notificat per un anunci d'en Bailey si canvien les normes.",
|
||||
"commGuidePara004": "Ara prepara les teves plomes i pergamins per prendre nota, i comencem!",
|
||||
"commGuideHeadingInteractions": "Interactions in Habitica",
|
||||
"commGuidePara015": "Habitica has two kinds of social spaces: public, and private. Public spaces include the Tavern, Public Guilds, GitHub, Trello, and the Wiki. Private spaces are Private Guilds, Party chat, and Private Messages. All Display Names must comply with the public space guidelines. To change your Display Name, go on the website to User > Profile and click on the \"Edit\" button.",
|
||||
"commGuideHeadingInteractions": "Interaccions a Habitica",
|
||||
"commGuidePara015": "Habitica té dos tipus d'espais socials: públic i privat. Els espais públics inclouen la taverna, els gremis públics, GitHub, Trello i la Wiki. Els espais privats són gremis privats, xat de l'equip i missatges privats. Tots els noms públics han de seguir la normativa dels espais públics. Per canviar el vostre nom públic, aneu a la pàgina web a Usuari > Perfil i feu clic al botó \"Edita\".",
|
||||
"commGuidePara016": "Quan navegues els espais públics de Habitica, hi han algunes normes generals per mantenir a tothom segur i feliç. Aquestes haurien de ser fàcils per a aventurers com tu!",
|
||||
"commGuideList02A": "<strong>Respect each other</strong>. Be courteous, kind, friendly, and helpful. Remember: Habiticans come from all backgrounds and have had wildly divergent experiences. This is part of what makes Habitica so cool! Building a community means respecting and celebrating our differences as well as our similarities. Here are some easy ways to respect each other:",
|
||||
"commGuideList02B": "<strong>Obey all of the <a href='/static/terms' target='_blank'>Terms and Conditions</a></strong>.",
|
||||
"commGuideList02C": "<strong>Do not post images or text that are violent, threatening, or sexually explicit/suggestive, or that promote discrimination, bigotry, racism, sexism, hatred, harassment or harm against any individual or group</strong>. Not even as a joke. This includes slurs as well as statements. Not everyone has the same sense of humor, and so something that you consider a joke may be hurtful to another. Attack your Dailies, not each other.",
|
||||
"commGuideList02D": "<strong>Keep discussions appropriate for all ages</strong>. We have many young Habiticans who use the site! Let's not tarnish any innocents or hinder any Habiticans in their goals.",
|
||||
"commGuideList02E": "<strong>Avoid profanity. This includes milder, religious-based oaths that may be acceptable elsewhere</strong>. We have people from all religious and cultural backgrounds, and we want to make sure that all of them feel comfortable in public spaces. <strong>If a moderator or staff member tells you that a term is disallowed on Habitica, even if it is a term that you did not realize was problematic, that decision is final</strong>. Additionally, slurs will be dealt with very severely, as they are also a violation of the Terms of Service.",
|
||||
"commGuideList02F": "<strong>Avoid extended discussions of divisive topics in the Tavern and where it would be off-topic</strong>. If you feel that someone has said something rude or hurtful, do not engage them. If someone mentions something that is allowed by the guidelines but which is hurtful to you, it’s okay to politely let someone know that. If it is against the guidelines or the Terms of Service, you should flag it and let a mod respond. When in doubt, flag the post.",
|
||||
"commGuideList02G": "<strong>Comply immediately with any Mod request</strong>. This could include, but is not limited to, requesting you limit your posts in a particular space, editing your profile to remove unsuitable content, asking you to move your discussion to a more suitable space, etc.",
|
||||
"commGuideList02H": "<strong>Take time to reflect instead of responding in anger</strong> if someone tells you that something you said or did made them uncomfortable. There is great strength in being able to sincerely apologize to someone. If you feel that the way they responded to you was inappropriate, contact a mod rather than calling them out on it publicly.",
|
||||
"commGuideList02I": "<strong>Divisive/contentious conversations should be reported to mods</strong> by flagging the messages involved or using the <a href='http://contact.habitica.com/' target='_blank'>Moderator Contact Form</a>. If you feel that a conversation is getting heated, overly emotional, or hurtful, cease to engage. Instead, report the posts to let us know about it. Moderators will respond as quickly as possible. It's our job to keep you safe. If you feel that more context is required, you can report the problem using the <a href='http://contact.habitica.com/' target='_blank'>Moderator Contact Form</a>.",
|
||||
"commGuideList02J": "<strong>Do not spam</strong>. Spamming may include, but is not limited to: posting the same comment or query in multiple places, posting links without explanation or context, posting nonsensical messages, posting multiple promotional messages about a Guild, Party or Challenge, or posting many messages in a row. Asking for gems or a subscription in any of the chat spaces or via Private Message is also considered spamming. If people clicking on a link will result in any benefit to you, you need to disclose that in the text of your message or that will also be considered spam.<br/><br/>It is up to the mods to decide if something constitutes spam or might lead to spam, even if you don’t feel that you have been spamming. For example, advertising a Guild is acceptable once or twice, but multiple posts in one day would probably constitute spam, no matter how useful the Guild is!",
|
||||
"commGuideList02K": "<strong>Avoid posting large header text in the public chat spaces, particularly the Tavern</strong>. Much like ALL CAPS, it reads as if you were yelling, and interferes with the comfortable atmosphere.",
|
||||
"commGuideList02L": "<strong>We highly discourage the exchange of personal information -- particularly information that can be used to identify you -- in public chat spaces</strong>. Identifying information can include but is not limited to: your address, your email address, and your API token/password. This is for your safety! Staff or moderators may remove such posts at their discretion. If you are asked for personal information in a private Guild, Party, or PM, we highly recommend that you politely refuse and alert the staff and moderators by either 1) flagging the message if it is in a Party or private Guild, or 2) filling out the <a href='http://contact.habitica.com/' target='_blank'>Moderator Contact Form</a> and including screenshots.",
|
||||
"commGuidePara019": "<strong>In private spaces</strong>, users have more freedom to discuss whatever topics they would like, but they still may not violate the Terms and Conditions, including posting slurs or any discriminatory, violent, or threatening content. Note that, because Challenge names appear in the winner's public profile, ALL Challenge names must obey the public space guidelines, even if they appear in a private space.",
|
||||
"commGuidePara020": "<strong>Private Messages (PMs)</strong> have some additional guidelines. If someone has blocked you, do not contact them elsewhere to ask them to unblock you. Additionally, you should not send PMs to someone asking for support (since public answers to support questions are helpful to the community). Finally, do not send anyone PMs begging for a gift of gems or a subscription, as this can be considered spamming.",
|
||||
"commGuidePara020A": "<strong>If you see a post that you believe is in violation of the public space guidelines outlined above, or if you see a post that concerns you or makes you uncomfortable, you can bring it to the attention of Moderators and Staff by clicking the flag icon to report it</strong>. A Staff member or Moderator will respond to the situation as soon as possible. Please note that intentionally reporting innocent posts is an infraction of these Guidelines (see below in “Infractions”). PMs cannot be flagged at this time, so if you need to report a PM, please contact the Mods via the form on the “Contact Us” page, which you can also access via the help menu by clicking “<a href='http://contact.habitica.com/' target='_blank'>Contact the Moderation Team</a>.” You may want to do this if there are multiple problematic posts by the same person in different Guilds, or if the situation requires some explanation. You may contact us in your native language if that is easier for you: we may have to use Google Translate, but we want you to feel comfortable about contacting us if you have a problem.",
|
||||
"commGuidePara021": "Furthermore, some public spaces in Habitica have additional guidelines.",
|
||||
"commGuideHeadingTavern": "La Taverna",
|
||||
"commGuidePara022": "The Tavern is the main spot for Habiticans to mingle. Daniel the Innkeeper keeps the place spic-and-span, and Lemoness will happily conjure up some lemonade while you sit and chat. Just keep in mind…",
|
||||
"commGuidePara023": "<strong>Conversation tends to revolve around casual chatting and productivity or life improvement tips</strong>. Because the Tavern chat can only hold 200 messages, <strong>it isn't a good place for prolonged conversations on topics, especially sensitive ones</strong> (ex. politics, religion, depression, whether or not goblin-hunting should be banned, etc.). These conversations should be taken to an applicable Guild. A Mod may direct you to a suitable Guild, but it is ultimately your responsibility to find and post in the appropriate place.",
|
||||
"commGuideList02A": "<strong>Respectar-se mútuament</strong>. Sigueu cortesos, amables, amistosos i atents. Recordeu: els habitants venen de tot arreu i han viscut experiències extremadament diferents. Això és una de les coses que fan que Habitica sigui divertit! Formar una comunitat significa respectar i celebrar tant les nostres diferències com les semblances. Aquestes són algunes de les maneres de respectar-se mútuament:",
|
||||
"commGuideList02B": "<strong>Seguiu els <a href='/static/terms' target='_blank'>termes and condicions</a></strong>.",
|
||||
"commGuideList02C": "<strong>No publiqueu imatges o textos que siguin violents, amenaçadors o sexualment explícits/insinuants o que promoguin discriminació, intolerància, racisme, sexisme, odi, abús o dany contra qualsevol individu o grup</strong>. Ni tan sols com una broma. Això inclou tant insults com declaracions. No tothom té el mateix sentit de l'humor, per tant, coses que considereu una broma poden fer mal a altres. Ataqueu les vostres tasques diaries i no entre vosaltres.",
|
||||
"commGuideList02D": "<strong>Mantingueu converses apropiades per totes les edats</strong>. Tenim força habitants joves que utilitzen aquesta pàgina! No corromprem cap innocent ni dificultarem a altre habitants assolir els seus objectius.",
|
||||
"commGuideList02E": "<strong>Eviteu blasfemar. Això inclou comentaris lleus o basats en la religió que poden ser acceptables a altres llocs</strong>. Tenim gent de totes les religions i cultures i volem assegurar-nos que tots es sentin còmodes als espais públics. <strong>Si un moderador o membre del personal us diu que un terme no s'accepta a Habitica, fins i tot si és un terme que no us en havíeu adonat que era problematic, la decisió és final</strong>. A més, les faltes de respecte es tractaràn amb severitat perquè violen els termes d'ús.",
|
||||
"commGuideList02F": "<strong>Eviteu discussions extenses sobre temes divisoris a la taverna i on estigui fora de lloc</strong>. Si creieu que algú ha fet algun comentari desagradable o punyent, no us hi involucreu. Si algú fa un comentari que està permés segons les normes però que us fa mal, no passa res si ho digueu amablement. Si va contra les normes o els termes d'ús, ho haurieu de denunciar i deixar que un moderador respongui. Quan dubteu, denuncieu la publicació.",
|
||||
"commGuideList02G": "<strong>Compliu immediatament qualsevol sol·licitud d'un moderador</strong>. Això inclou, entre altres coses, que us demani limitar les vostres publicacions en un espai en particular, editar el vostre perfil per borrar contingut inadequat, demanar-vos que mogueu una discussió a un espai més adequat, etc.",
|
||||
"commGuideList02H": "<strong>Preneu-vos el temps per reflexionar abans de respondre enfadats</strong> si algú us diu que alguna cosa que heu fet o publicat els ha fet sentir incòmodes. Demanar disculpes sinceres és un gran acte de coratge. Si creieu que la manera de contestar ha estat inadequada, contacteu un moderador en comptes de respondre públicament.",
|
||||
"commGuideList02I": "<strong>Les converses divisives o controvertides s'han de denunciar als moderadors</strong> assenyalant els missatges en qüestió o utilitzant el <a href='http://contact.habitica.com/' target='_blank'>formulari de contacte</a>. Si creieu que una conversa està pujant de to o és massa emocional o dolorosa, deixeu de participar-hi. A canvi, denuncia les publicacions per fer-nos-ho saber. Els moderadors respondran tan aviat com sigui possible. La nostra feina és protegir-vos. Si creieu necessari donar més context, podeu denunciar el problema utilitzant el <a href='http://contact.habitica.com/' target='_blank'>formulari de contacte</a>.",
|
||||
"commGuideList02J": "<strong>No feu comentaris brossa</strong>. Els comentaris brossa inclouen però no estan limitats a: publicar el mateix contingut o dubte a més d'un lloc, publicar enllaços sense explicació ni context, publicar missatges sense sentit, publicar múltiples missatges promocionals sobre un gremi, equip o repte, o publicar massa missatges de cop. Demanar gemmes o una subscripció a qualsevol xat o a través de missatges privats també es considera comentari brossa. Si el fet que la gent cliqui el vostre enllaç us beneficia d'alguna manera, n'heu de deixar constància al comentari; sinó, també serà considerat un comentari brossa.<br/><br/>Depèn dels moderadors decidir si alguna cosa és brossa o pot desembocar-hi encara que no creieu que ho hagueu estat fent. Per exemple, promoure un gremi un parell de cops al dia, s'accepta, però múltiples publicacions poden ser considerades comentaris brossa, independentment de com d'útil sigui el gremi!",
|
||||
"commGuideList02K": "<strong>Eviteu publicar capçaleres grans als espais públics, especialment a la taverna</strong>. Igual que TOT EN MAJÚSCULA es llegeix com si estiguéssiu cridant i interfereix amb un ambient còmode.",
|
||||
"commGuideList02L": "<strong>Desaconsellem l'intercanvi d'informació personal als espais públics, particularment informació que us pugui identificar</strong>. La informació identificadora pot incolure però no es limita a: la vostra adreça, correu electrònic i contrassenya del codi de l'API. És per la vostra seguretat! El personal o els moderados poden eliminar aquestes publicacions a la seva discreció. Si us demanen informació personal a un gremi privat, equip o MP, recomanem que ho rebutgeu educadament i alerteu al personal o moderadors o bé 1) denunciant el missatge si és en un equip o gremi privat o 2) emplenant el <a href='http://contact.habitica.com/' target='_blank'>formulari de contacte</a> incloent-hi captures de pantalla.",
|
||||
"commGuidePara019": "<strong>Als espais privats</strong> els usuaris tenen més llibertat per debatre qualsevol tema que vulguin però no poden violar els termes i condicions. Això inclou publicar insults o qualevol contingut discriminatori, violent o amenaçador. Tingueu en compte que, com que el nom del repte apareix al perfil públic del guanyador, TOTS els reptes han de seguir les normes dels espais públics, encara que apareixin en un espai privat.",
|
||||
"commGuidePara020": "<strong>Els missatges privats (MPs)</strong> tenen normes addicionals. Si algú us ha bloquejat, no els contacteu des d'un altre lloc per demanar que us desbloquejin. A més, tampoc hauríeu d'enviar MPs demanant ajuda perquè les respostes públiques a preguntes d'ajuda són útils per la cominutat. Per acabar, no envieu MPs a ningú demanant regals com gemmes o subscripcions perquè podria ser considerat un comentari brossa.",
|
||||
"commGuidePara020A": "<strong>Si veieu alguna publicació que creieu que viola les normes de l'espai públic descrites anteriorment o si veieu alguna publicació que us incumbeixi o us incomodi, podeu cridar l'atenció dels moderadors o personal fent clic a la icona de la bandera per denunciar-ho</strong>. Un membre del personal o moderador respondrà el més aviat possible. Tingueu en compte que denunciar publicacions innocents de manera intencionada és una infracció d'aquestes normes (vegeu: \"Infraccions\"). Actualment no es poden denunciar els MPs, de manera que si n'heu de denunciar un, si us plau contacteu els moderadors a través del formulari de la pàgina “Contacta'ns”, on també pots accedir a través del menú d'ajuda fent clic a “<a href='http://contact.habitica.com/' target='_blank'>Contacta l'equip de moderadors</a>.” Pot ser que vulgeu fer això si hi ha múltiples publicacions problemàtiques d'una mateixa person a diferents gremis o si la situació requereix una explicació. Ens podeu contactar en la vostra llengua si us és més còmode. Pot ser que haguem d'utilitzar el Traductor de Google, però volem que us sentiu còmodes si ens heu de contactar per un problema.",
|
||||
"commGuidePara021": "A més a més, alguns espais públics d'Habitica tenen normes addicionals.",
|
||||
"commGuideHeadingTavern": "La taverna",
|
||||
"commGuidePara022": "La taverna és l'epai principal de socialització. Daniel l'hosteler manté el lloc net i ordenat i Lemoness farà aparèixer llimonada mentre seieu a xatejar. Només heu de tenir en compte…",
|
||||
"commGuidePara023": "<strong>Les converses solen girar al voltant de temes casuals, consells de productivitat o de com millorar la vida</strong>. Com que el xat de la taverna només pot contenir 200 missatges,<strong> no és un bon lloc per converses llargues sobre alguns temes, sobretot els delicats</strong> (per exemple: políticam religió, depressió, si s'hauria de prohibir o no la caça de follets, etc.). Aquestes converses s'haurien de traslladar a un gremi de temàtica adequada. Un moderador et pot guiar a un gremi adequat però al final és responsabilitat teva trobar i publicar al lloc adequat.",
|
||||
"commGuidePara024": "<strong>Don't discuss anything addictive in the Tavern</strong>. Many people use Habitica to try to quit their bad Habits. Hearing people talk about addictive/illegal substances may make this much harder for them! Respect your fellow Tavern-goers and take this into consideration. This includes, but is not exclusive to: smoking, alcohol, pornography, gambling, and drug use/abuse.",
|
||||
"commGuidePara027": "<strong>When a moderator directs you to take a conversation elsewhere, if there is no relevant Guild, they may suggest you use the Back Corner</strong>. The Back Corner Guild is a free public space to discuss potentially sensitive subjects that should only be used when directed there by a moderator. It is carefully monitored by the moderation team. It is not a place for general discussions or conversations, and you will be directed there by a mod only when it is appropriate.",
|
||||
"commGuideHeadingPublicGuilds": "Public Guilds",
|
||||
@@ -125,4 +125,4 @@
|
||||
"commGuideLink06": "<a href='https://trello.com/b/vwuE9fbO/' target='_blank'>The Art Trello</a>: for submitting pixel art.",
|
||||
"commGuideLink07": "<a href='https://trello.com/b/nnv4QIRX/' target='_blank'>The Quest Trello</a>: for submitting quest writing.",
|
||||
"commGuidePara069": "The following talented artists contributed to these illustrations:"
|
||||
}
|
||||
}
|
||||
|
||||