Merge branch 'develop' into fix-antidotes-from-revert
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
|
|
@ -1,7 +1,7 @@
|
|||
[//]: # (Note: See http://habitica.fandom.com/wiki/Using_Your_Local_Install_to_Modify_Habitica%27s_Website_and_API for more info)
|
||||
|
||||
[//]: # (Put Issue # here, if applicable. This will automatically close the issue if your PR is merged in)
|
||||
Fixes put_#_and_issue_numer_here
|
||||
Fixes put_#_and_issue_number_here
|
||||
|
||||
### Changes
|
||||
[//]: # (Describe the changes that were made in detail here. Include pictures if necessary)
|
||||
|
|
|
|||
|
|
@ -19,9 +19,9 @@ RUN npm install -g gulp-cli mocha
|
|||
RUN mkdir -p /usr/src/habitrpg
|
||||
WORKDIR /usr/src/habitrpg
|
||||
RUN git clone --branch release --depth 1 https://github.com/HabitRPG/habitica.git /usr/src/habitrpg
|
||||
RUN npm set unsafe-perm true
|
||||
RUN npm install
|
||||
RUN gulp build:prod --force
|
||||
|
||||
# Start Habitica
|
||||
EXPOSE 3000
|
||||
EXPOSE 80 8080 36612
|
||||
CMD ["node", "./website/transpiled-babel/index.js"]
|
||||
|
|
|
|||
82
migrations/archive/2019/20191031_habitoween_ladder.js
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* Award Habitoween ladder items to participants in this month's Habitoween festivities
|
||||
*/
|
||||
/* eslint-disable no-console */
|
||||
|
||||
const MIGRATION_NAME = '20191031_habitoween_ladder'; // Update when running in future years
|
||||
|
||||
import { model as User } from '../../../website/server/models/user';
|
||||
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count++;
|
||||
|
||||
const set = {};
|
||||
const inc = {
|
||||
'items.food.Candy_Skeleton': 1,
|
||||
'items.food.Candy_Base': 1,
|
||||
'items.food.Candy_CottonCandyBlue': 1,
|
||||
'items.food.Candy_CottonCandyPink': 1,
|
||||
'items.food.Candy_Shade': 1,
|
||||
'items.food.Candy_White': 1,
|
||||
'items.food.Candy_Golden': 1,
|
||||
'items.food.Candy_Zombie': 1,
|
||||
'items.food.Candy_Desert': 1,
|
||||
'items.food.Candy_Red': 1,
|
||||
};
|
||||
|
||||
set.migration = MIGRATION_NAME;
|
||||
|
||||
if (user && user.items && user.items.pets && user.items.pets['JackOLantern-Glow']) {
|
||||
set['items.mounts.JackOLantern-Glow'] = true;
|
||||
} else if (user && user.items && user.items.mounts && user.items.mounts['JackOLantern-Ghost']) {
|
||||
set['items.pets.JackOLantern-Glow'] = 5;
|
||||
} else if (user && user.items && user.items.pets && user.items.pets['JackOLantern-Ghost']) {
|
||||
set['items.mounts.JackOLantern-Ghost'] = true;
|
||||
} else if (user && user.items && user.items.mounts && user.items.mounts['JackOLantern-Base']) {
|
||||
set['items.pets.JackOLantern-Ghost'] = 5;
|
||||
} else if (user && user.items && user.items.pets && user.items.pets['JackOLantern-Base']) {
|
||||
set['items.mounts.JackOLantern-Base'] = true;
|
||||
} else {
|
||||
set['items.pets.JackOLantern-Base'] = 5;
|
||||
}
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
return await User.update({_id: user._id}, {$inc: inc, $set: set}).exec();
|
||||
}
|
||||
|
||||
module.exports = async function processUsers () {
|
||||
let query = {
|
||||
migration: {$ne: MIGRATION_NAME},
|
||||
'auth.timestamps.loggedin': {$gt: new Date('2019-10-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],
|
||||
};
|
||||
}
|
||||
|
||||
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
|
||||
}
|
||||
};
|
||||
4875
package-lock.json
generated
24
package.json
|
|
@ -1,9 +1,12 @@
|
|||
{
|
||||
"name": "habitica",
|
||||
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
||||
"version": "4.118.0",
|
||||
"version": "4.121.0",
|
||||
"main": "./website/server/index.js",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.7.2",
|
||||
"@babel/preset-env": "^7.7.1",
|
||||
"@babel/register": "^7.7.0",
|
||||
"@google-cloud/trace-agent": "^4.2.2",
|
||||
"@slack/client": "^3.8.1",
|
||||
"accepts": "^1.3.5",
|
||||
|
|
@ -11,7 +14,7 @@
|
|||
"amplitude": "^3.5.0",
|
||||
"apidoc": "^0.17.5",
|
||||
"apn": "^2.2.0",
|
||||
"aws-sdk": "^2.556.0",
|
||||
"aws-sdk": "^2.568.0",
|
||||
"bcrypt": "^3.0.6",
|
||||
"body-parser": "^1.18.3",
|
||||
"compression": "^1.7.4",
|
||||
|
|
@ -20,10 +23,13 @@
|
|||
"csv-stringify": "^5.1.0",
|
||||
"cwait": "^1.1.1",
|
||||
"domain-middleware": "~0.1.0",
|
||||
"eslint": "^6.6.0",
|
||||
"eslint-config-habitrpg": "^6.2.0",
|
||||
"eslint-plugin-mocha": "^5.0.0",
|
||||
"express": "^4.16.3",
|
||||
"express-basic-auth": "^1.1.5",
|
||||
"express-validator": "^5.2.0",
|
||||
"glob": "^7.1.5",
|
||||
"glob": "^7.1.6",
|
||||
"got": "^9.0.0",
|
||||
"gulp": "^4.0.0",
|
||||
"gulp-babel": "^8.0.0",
|
||||
|
|
@ -40,7 +46,7 @@
|
|||
"method-override": "^3.0.0",
|
||||
"moment": "^2.24.0",
|
||||
"moment-recur": "^1.0.7",
|
||||
"mongoose": "^5.7.7",
|
||||
"mongoose": "^5.7.9",
|
||||
"morgan": "^1.7.0",
|
||||
"nconf": "^0.10.0",
|
||||
"node-gcm": "^1.0.2",
|
||||
|
|
@ -55,7 +61,7 @@
|
|||
"regenerator-runtime": "^0.13.3",
|
||||
"rimraf": "^3.0.0",
|
||||
"short-uuid": "^3.0.0",
|
||||
"stripe": "^7.10.0",
|
||||
"stripe": "^7.13.0",
|
||||
"superagent": "^5.0.2",
|
||||
"universal-analytics": "^0.4.17",
|
||||
"useragent": "^2.1.9",
|
||||
|
|
@ -73,7 +79,7 @@
|
|||
},
|
||||
"scripts": {
|
||||
"lint": "eslint --ext .js --fix . && cd website/client && npm run lint",
|
||||
"lint-no-fix": "eslint --ext .js . && cd website/client && npm run lint --no-fix",
|
||||
"lint-no-fix": "eslint --ext .js . && cd website/client && npm run lint-no-fix",
|
||||
"test": "npm run lint && gulp test && gulp apidoc",
|
||||
"test:build": "gulp test:prepare:build",
|
||||
"test:api-v3": "gulp test:api-v3",
|
||||
|
|
@ -96,16 +102,10 @@
|
|||
"apidoc": "gulp apidoc"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.6.4",
|
||||
"@babel/preset-env": "^7.6.3",
|
||||
"@babel/register": "^7.6.2",
|
||||
"axios": "^0.19.0",
|
||||
"chai": "^4.1.2",
|
||||
"chai-as-promised": "^7.1.1",
|
||||
"chalk": "^2.4.1",
|
||||
"eslint": "^6.6.0",
|
||||
"eslint-config-habitrpg": "^6.2.0",
|
||||
"eslint-plugin-mocha": "^5.0.0",
|
||||
"expect.js": "^0.3.1",
|
||||
"istanbul": "^1.1.0-alpha.1",
|
||||
"mocha": "^5.1.1",
|
||||
|
|
|
|||
|
|
@ -206,16 +206,16 @@ describe('GET /challenges/:challengeId/members', () => {
|
|||
for (let i = 0; i < 3; i += 1) {
|
||||
usersToGenerate.push(generateUser({
|
||||
challenges: [challenge._id],
|
||||
'profile.name': `${i}profilename`,
|
||||
'auth.local.username': `${i}username`,
|
||||
}));
|
||||
}
|
||||
const generatedUsers = await Promise.all(usersToGenerate);
|
||||
const profileNames = generatedUsers.map(generatedUser => generatedUser.profile.name);
|
||||
const usernames = generatedUsers.map(generatedUser => generatedUser.auth.local.username);
|
||||
|
||||
const firstProfileName = profileNames[0];
|
||||
const nameToSearch = firstProfileName.substring(0, 4);
|
||||
const firstUsername = usernames[0];
|
||||
const nameToSearch = firstUsername.substring(0, 4);
|
||||
|
||||
const response = await user.get(`/challenges/${challenge._id}/members?search=${nameToSearch}`);
|
||||
expect(response[0].profile.name).to.eql(firstProfileName);
|
||||
expect(response[0].auth.local.username).to.eql(firstUsername);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -63,6 +63,26 @@ describe('PUT /user/webhook/:id', () => {
|
|||
expect(webhook.options).to.eql(options);
|
||||
});
|
||||
|
||||
it('updates a webhook with empty label', async () => {
|
||||
const url = 'http://a-new-url.com';
|
||||
const type = 'groupChatReceived';
|
||||
const label = '';
|
||||
const options = { groupId: generateUUID() };
|
||||
|
||||
await user.put(`/user/webhook/${webhookToUpdate.id}`, {
|
||||
url, type, options, label,
|
||||
});
|
||||
|
||||
await user.sync();
|
||||
|
||||
const webhook = user.webhooks.find(hook => webhookToUpdate.id === hook.id);
|
||||
|
||||
expect(webhook.url).to.equal(url);
|
||||
expect(webhook.label).to.equal(label);
|
||||
expect(webhook.type).to.equal(type);
|
||||
expect(webhook.options).to.eql(options);
|
||||
});
|
||||
|
||||
it('returns the updated webhook', async () => {
|
||||
const url = 'http://a-new-url.com';
|
||||
const type = 'groupChatReceived';
|
||||
|
|
|
|||
124
website/client/package-lock.json
generated
|
|
@ -1748,9 +1748,9 @@
|
|||
}
|
||||
},
|
||||
"acorn-jsx": {
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz",
|
||||
"integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw=="
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz",
|
||||
"integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw=="
|
||||
},
|
||||
"acorn-walk": {
|
||||
"version": "6.2.0",
|
||||
|
|
@ -3283,9 +3283,9 @@
|
|||
}
|
||||
},
|
||||
"core-js": {
|
||||
"version": "3.3.4",
|
||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.3.4.tgz",
|
||||
"integrity": "sha512-BtibooaAmSOptGLRccsuX/dqgPtXwNgqcvYA6kOTTMzonRxZ+pJS4e+6mvVutESfXMeTnK8m3M+aBu3bkJbR+w=="
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.4.0.tgz",
|
||||
"integrity": "sha512-lQxb4HScV71YugF/X28LtePZj9AB7WqOpcB+YztYxusvhrgZiQXPmCYfPC5LHsw/+ScEtDbXU3xbqH3CjBRmYA=="
|
||||
},
|
||||
"core-js-compat": {
|
||||
"version": "3.3.4",
|
||||
|
|
@ -3487,12 +3487,19 @@
|
|||
"integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w=="
|
||||
},
|
||||
"css-tree": {
|
||||
"version": "1.0.0-alpha.33",
|
||||
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz",
|
||||
"integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==",
|
||||
"version": "1.0.0-alpha.37",
|
||||
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
|
||||
"integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
|
||||
"requires": {
|
||||
"mdn-data": "2.0.4",
|
||||
"source-map": "^0.5.3"
|
||||
"source-map": "^0.6.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"css-unit-converter": {
|
||||
|
|
@ -3582,27 +3589,11 @@
|
|||
"integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q=="
|
||||
},
|
||||
"csso": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz",
|
||||
"integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==",
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz",
|
||||
"integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==",
|
||||
"requires": {
|
||||
"css-tree": "1.0.0-alpha.29"
|
||||
},
|
||||
"dependencies": {
|
||||
"css-tree": {
|
||||
"version": "1.0.0-alpha.29",
|
||||
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz",
|
||||
"integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==",
|
||||
"requires": {
|
||||
"mdn-data": "~1.1.0",
|
||||
"source-map": "^0.5.3"
|
||||
}
|
||||
},
|
||||
"mdn-data": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
|
||||
"integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA=="
|
||||
}
|
||||
"css-tree": "1.0.0-alpha.37"
|
||||
}
|
||||
},
|
||||
"cssom": {
|
||||
|
|
@ -4381,6 +4372,37 @@
|
|||
"requires": {
|
||||
"ramda": "^0.26.1"
|
||||
}
|
||||
},
|
||||
"eslint-plugin-vue": {
|
||||
"version": "5.2.3",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz",
|
||||
"integrity": "sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw==",
|
||||
"requires": {
|
||||
"vue-eslint-parser": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"espree": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz",
|
||||
"integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==",
|
||||
"requires": {
|
||||
"acorn": "^6.0.2",
|
||||
"acorn-jsx": "^5.0.0",
|
||||
"eslint-visitor-keys": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"vue-eslint-parser": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz",
|
||||
"integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==",
|
||||
"requires": {
|
||||
"debug": "^4.1.0",
|
||||
"eslint-scope": "^4.0.0",
|
||||
"eslint-visitor-keys": "^1.0.0",
|
||||
"espree": "^4.1.0",
|
||||
"esquery": "^1.0.1",
|
||||
"lodash": "^4.17.11"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -4503,11 +4525,11 @@
|
|||
}
|
||||
},
|
||||
"eslint-plugin-vue": {
|
||||
"version": "5.2.3",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz",
|
||||
"integrity": "sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw==",
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-6.0.0.tgz",
|
||||
"integrity": "sha512-+LxTJCd6nDt+AKQ1X+ySD48xJHft8OkeQmAhiq6UoAMxRFTiEKIDusiGgEUJLwKyiwGUGWbbqEbbWvupH5TSjg==",
|
||||
"requires": {
|
||||
"vue-eslint-parser": "^5.0.0"
|
||||
"vue-eslint-parser": "^6.0.4"
|
||||
}
|
||||
},
|
||||
"eslint-scope": {
|
||||
|
|
@ -9757,9 +9779,9 @@
|
|||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"sass": {
|
||||
"version": "1.23.1",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.23.1.tgz",
|
||||
"integrity": "sha512-zQzJ3UETUWOMd/pJJGH/zvRsBVO97m11RcpfUhcQUHEXf0yHUBgOIE/Nw8aK0m1XyVJPeq228iIK7gVxsJ/Puw==",
|
||||
"version": "1.23.3",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.23.3.tgz",
|
||||
"integrity": "sha512-1DKRZxJMOh4Bme16AbWTyYeJAjTlrvw2+fWshHHaepeJfGq2soFZTnt0YhWit+bohtDu4LdyPoEj6VFD4APHog==",
|
||||
"requires": {
|
||||
"chokidar": ">=2.0.0 <4.0.0"
|
||||
}
|
||||
|
|
@ -10640,16 +10662,16 @@
|
|||
}
|
||||
},
|
||||
"svgo": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz",
|
||||
"integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==",
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
|
||||
"integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
|
||||
"requires": {
|
||||
"chalk": "^2.4.1",
|
||||
"coa": "^2.0.2",
|
||||
"css-select": "^2.0.0",
|
||||
"css-select-base-adapter": "^0.1.1",
|
||||
"css-tree": "1.0.0-alpha.33",
|
||||
"csso": "^3.5.1",
|
||||
"css-tree": "1.0.0-alpha.37",
|
||||
"csso": "^4.0.2",
|
||||
"js-yaml": "^3.13.1",
|
||||
"mkdirp": "~0.5.1",
|
||||
"object.values": "^1.1.0",
|
||||
|
|
@ -11265,24 +11287,24 @@
|
|||
"integrity": "sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ=="
|
||||
},
|
||||
"vue-eslint-parser": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz",
|
||||
"integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==",
|
||||
"version": "6.0.5",
|
||||
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-6.0.5.tgz",
|
||||
"integrity": "sha512-Bvjlx7rH1Ulvus56KHeLXOjEi3JMOYTa1GAqZr9lBQhd8weK8mV7U7V2l85yokBZEWHJQjLn6X3nosY8TzkOKg==",
|
||||
"requires": {
|
||||
"debug": "^4.1.0",
|
||||
"debug": "^4.1.1",
|
||||
"eslint-scope": "^4.0.0",
|
||||
"eslint-visitor-keys": "^1.0.0",
|
||||
"espree": "^4.1.0",
|
||||
"espree": "^5.0.0",
|
||||
"esquery": "^1.0.1",
|
||||
"lodash": "^4.17.11"
|
||||
},
|
||||
"dependencies": {
|
||||
"espree": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz",
|
||||
"integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
|
||||
"integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
|
||||
"requires": {
|
||||
"acorn": "^6.0.2",
|
||||
"acorn": "^6.0.7",
|
||||
"acorn-jsx": "^5.0.0",
|
||||
"eslint-visitor-keys": "^1.0.0"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
"build": "vue-cli-service build",
|
||||
"test:unit": "vue-cli-service test:unit --require ./tests/unit/helpers.js",
|
||||
"lint": "vue-cli-service lint .",
|
||||
"lint-no-fix": "vue-cli-service lint --no-fix .",
|
||||
"postinstall": "node ./scripts/npm-postinstall.js"
|
||||
},
|
||||
"dependencies": {
|
||||
|
|
@ -23,11 +24,11 @@
|
|||
"bootstrap": "^4.3.1",
|
||||
"bootstrap-vue": "^2.0.4",
|
||||
"chai": "^4.1.2",
|
||||
"core-js": "^3.3.4",
|
||||
"core-js": "^3.4.0",
|
||||
"eslint": "^6.6.0",
|
||||
"eslint-config-habitrpg": "^6.2.0",
|
||||
"eslint-plugin-mocha": "^5.3.0",
|
||||
"eslint-plugin-vue": "^5.0.0",
|
||||
"eslint-plugin-vue": "^6.0.0",
|
||||
"habitica-markdown": "^1.3.0",
|
||||
"hellojs": "^1.18.1",
|
||||
"inspectpack": "^4.2.2",
|
||||
|
|
@ -36,12 +37,12 @@
|
|||
"lodash": "^4.17.15",
|
||||
"moment": "^2.24.0",
|
||||
"nconf": "^0.10.0",
|
||||
"sass": "^1.23.1",
|
||||
"sass": "^1.23.3",
|
||||
"sass-loader": "^8.0.0",
|
||||
"smartbanner.js": "^1.14.5",
|
||||
"svg-inline-loader": "^0.8.0",
|
||||
"svg-url-loader": "^3.0.2",
|
||||
"svgo": "^1.3.0",
|
||||
"svgo": "^1.3.2",
|
||||
"svgo-loader": "^2.2.1",
|
||||
"uuid": "^3.3.3",
|
||||
"validator": "^11.1.0",
|
||||
|
|
|
|||
|
|
@ -1,102 +1,48 @@
|
|||
.promo_armoire_backgrounds_201910 {
|
||||
.promo_armoire_backgrounds_201911 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -424px -576px;
|
||||
background-position: 0px -451px;
|
||||
width: 423px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_costume_achievement {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -737px -387px;
|
||||
background-position: 0px -747px;
|
||||
width: 144px;
|
||||
height: 156px;
|
||||
}
|
||||
.promo_desert_pet_achievements {
|
||||
.promo_delightful_dinos {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -205px -872px;
|
||||
width: 204px;
|
||||
height: 102px;
|
||||
background-position: -424px -451px;
|
||||
width: 423px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_fall_festival_2018 {
|
||||
.promo_ember_thunderstorm_potions {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px -395px;
|
||||
width: 372px;
|
||||
height: 180px;
|
||||
}
|
||||
.promo_fall_festival_2019 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -376px 0px;
|
||||
width: 360px;
|
||||
height: 189px;
|
||||
}
|
||||
.promo_fall_skins {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px -187px;
|
||||
width: 336px;
|
||||
height: 207px;
|
||||
}
|
||||
.customize-option.promo_fall_skins {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -25px -202px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
background-position: 0px -599px;
|
||||
width: 423px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_mystery_201910 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -376px -190px;
|
||||
background-position: -424px -599px;
|
||||
width: 282px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_seasonal_shop_fall {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -373px -395px;
|
||||
width: 162px;
|
||||
height: 138px;
|
||||
}
|
||||
.promo_shadow_spooky_potions {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px -576px;
|
||||
width: 423px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_spooky_sparkles {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -424px -724px;
|
||||
width: 423px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_take_this {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -882px -387px;
|
||||
background-position: -451px -365px;
|
||||
width: 96px;
|
||||
height: 69px;
|
||||
}
|
||||
.promo_witchy_familiars {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px -724px;
|
||||
width: 423px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_zombie_achievements {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px -872px;
|
||||
width: 204px;
|
||||
height: 102px;
|
||||
}
|
||||
.scene_arts_crafts {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -737px 0px;
|
||||
width: 256px;
|
||||
height: 256px;
|
||||
}
|
||||
.scene_quest_shop {
|
||||
.scene_habitica_map {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px 0px;
|
||||
width: 375px;
|
||||
height: 186px;
|
||||
width: 450px;
|
||||
height: 450px;
|
||||
}
|
||||
.scene_strength {
|
||||
.scene_seaserpent {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -737px -257px;
|
||||
width: 192px;
|
||||
height: 129px;
|
||||
background-position: -451px 0px;
|
||||
width: 476px;
|
||||
height: 364px;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -742,415 +742,415 @@
|
|||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_farmhouse {
|
||||
.background_farmers_market {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -1480px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_fiber_arts_room {
|
||||
.background_farmhouse {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -1480px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_field_with_colored_eggs {
|
||||
.background_fiber_arts_room {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_floating_islands {
|
||||
.background_field_with_colored_eggs {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_floral_meadow {
|
||||
.background_floating_islands {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_flower_market {
|
||||
.background_floral_meadow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.customize-option.background_flower_market {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1161px -903px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.background_flying_over_a_field_of_wildflowers {
|
||||
.background_flower_market {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.customize-option.background_flying_over_a_field_of_wildflowers {
|
||||
.customize-option.background_flower_market {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1161px -755px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.background_flying_over_an_ancient_forest {
|
||||
.background_flying_in_a_thunderstorm {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_flying_over_icy_steppes {
|
||||
.background_flying_over_a_field_of_wildflowers {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_flying_over_rocky_canyon {
|
||||
.customize-option.background_flying_over_a_field_of_wildflowers {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1161px -459px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.background_flying_over_an_ancient_forest {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_flying_over_snowy_mountains {
|
||||
.background_flying_over_icy_steppes {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_flying_over_tropical_islands {
|
||||
.background_flying_over_rocky_canyon {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_foggy_moor {
|
||||
.background_flying_over_snowy_mountains {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_forest {
|
||||
.background_flying_over_tropical_islands {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_frigid_peak {
|
||||
.background_foggy_moor {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_frosty_forest {
|
||||
.background_forest {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_frozen_lake {
|
||||
.background_frigid_peak {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_garden_shed {
|
||||
.background_frosty_forest {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_gazebo {
|
||||
.background_frozen_lake {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_giant_birdhouse {
|
||||
.background_garden_shed {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_giant_book {
|
||||
.background_gazebo {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_giant_dandelions {
|
||||
.background_giant_birdhouse {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_giant_florals {
|
||||
.background_giant_book {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_giant_seashell {
|
||||
.background_giant_dandelions {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_giant_wave {
|
||||
.background_giant_florals {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_glowing_mushroom_cave {
|
||||
.background_giant_seashell {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_gorgeous_greenhouse {
|
||||
.background_giant_wave {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_grand_staircase {
|
||||
.background_glowing_mushroom_cave {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_graveyard {
|
||||
.background_gorgeous_greenhouse {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_green {
|
||||
.background_grand_staircase {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_guardian_statues {
|
||||
.background_graveyard {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_gumdrop_land {
|
||||
.background_green {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_habit_city_streets {
|
||||
.background_guardian_statues {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_halflings_house {
|
||||
.background_gumdrop_land {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_harvest_feast {
|
||||
.background_habit_city_streets {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_harvest_fields {
|
||||
.background_halflings_house {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_harvest_moon {
|
||||
.background_harvest_feast {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_haunted_house {
|
||||
.background_harvest_fields {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_ice_cave {
|
||||
.background_harvest_moon {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_iceberg {
|
||||
.background_haunted_house {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_idyllic_cabin {
|
||||
.background_ice_cave {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_in_a_classroom {
|
||||
.background_iceberg {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_in_an_ancient_tomb {
|
||||
.background_idyllic_cabin {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_island_waterfalls {
|
||||
.background_in_a_classroom {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_kelp_forest {
|
||||
.background_in_an_ancient_tomb {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_lake_with_floating_lanterns {
|
||||
.background_island_waterfalls {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_lighthouse_shore {
|
||||
.background_kelp_forest {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_lilypad {
|
||||
.background_lake_with_floating_lanterns {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_magic_beanstalk {
|
||||
.background_lighthouse_shore {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_magical_candles {
|
||||
.background_lilypad {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_magical_museum {
|
||||
.background_magic_beanstalk {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_marble_temple {
|
||||
.background_magical_candles {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_market {
|
||||
.background_magical_museum {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_meandering_cave {
|
||||
.background_marble_temple {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_medieval_kitchen {
|
||||
.background_market {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_midnight_castle {
|
||||
.background_meandering_cave {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_midnight_clouds {
|
||||
.background_medieval_kitchen {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_midnight_lake {
|
||||
.background_midnight_castle {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_mist_shrouded_mountain {
|
||||
.background_midnight_clouds {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_mistiflying_circus {
|
||||
.background_midnight_lake {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_monster_makers_workshop {
|
||||
.background_mist_shrouded_mountain {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_mountain_lake {
|
||||
.background_mistiflying_circus {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_mountain_pyramid {
|
||||
.background_monster_makers_workshop {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_night_dunes {
|
||||
.background_mountain_lake {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_ocean_sunrise {
|
||||
.background_mountain_pyramid {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_old_fashioned_bakery {
|
||||
.background_night_dunes {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_on_tree_branch {
|
||||
.background_ocean_sunrise {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px 0px;
|
||||
width: 141px;
|
||||
|
|
|
|||
|
|
@ -1,66 +1,330 @@
|
|||
.Pet_Currency_Gem {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1913px -1269px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_Currency_Gem1x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1992px -592px;
|
||||
width: 15px;
|
||||
height: 13px;
|
||||
}
|
||||
.Pet_Currency_Gem2x {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1766px -1474px;
|
||||
width: 30px;
|
||||
height: 26px;
|
||||
}
|
||||
.PixelPaw-Gold {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1929px -711px;
|
||||
width: 51px;
|
||||
height: 51px;
|
||||
}
|
||||
.PixelPaw {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1627px -1474px;
|
||||
width: 51px;
|
||||
height: 51px;
|
||||
}
|
||||
.PixelPaw002 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1913px -1614px;
|
||||
width: 51px;
|
||||
height: 51px;
|
||||
}
|
||||
.inventory_present {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1935px -854px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_present_11 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1913px -1200px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_present_12 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -1269px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_birthday {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -993px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_congrats {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1913px -1338px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_fortify {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -1407px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_getwell {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -1476px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_goodluck {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1929px -642px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_greeting {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1935px -763px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_nye {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1913px -1062px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_opaquePotion {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1913px -1131px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_seafoam {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -1338px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_shinySeed {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -1545px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_snowball {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -1614px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_spookySparkles {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1913px -993px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_thankyou {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -1062px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_trinket {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -1131px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.inventory_special_valentine {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -1200px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.knockout {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -945px;
|
||||
width: 120px;
|
||||
height: 47px;
|
||||
}
|
||||
.pet_key {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1913px -1545px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.rebirth_orb {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1913px -1476px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.seafoam_star {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -854px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.shop_armoire {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1913px -1407px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.snowman {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -763px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.zzz {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1963px -551px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
.zzz_light {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1963px -510px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
.notif_inventory_present_01 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1981px -711px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
.notif_inventory_present_02 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1965px -945px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
.notif_inventory_present_03 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1965px -1614px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
.notif_inventory_present_04 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -1683px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
.notif_inventory_present_05 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1873px -1683px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
.notif_inventory_present_06 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1902px -1683px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
.notif_inventory_present_07 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1737px -1474px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
.notif_inventory_present_08 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1960px -1683px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
.notif_inventory_present_09 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1679px -1474px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
.notif_inventory_present_10 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1963px -592px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
.notif_inventory_present_11 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1708px -1474px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
.notif_inventory_present_12 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1931px -1683px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
.notif_inventory_special_birthday {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -2010px -288px;
|
||||
background-position: -1982px -1131px;
|
||||
width: 20px;
|
||||
height: 24px;
|
||||
}
|
||||
.notif_inventory_special_congrats {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -2010px -313px;
|
||||
background-position: -1982px -1156px;
|
||||
width: 20px;
|
||||
height: 22px;
|
||||
}
|
||||
.notif_inventory_special_getwell {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -2010px -359px;
|
||||
background-position: -1981px -740px;
|
||||
width: 20px;
|
||||
height: 22px;
|
||||
}
|
||||
.notif_inventory_special_goodluck {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -2010px -211px;
|
||||
background-position: -1982px -1020px;
|
||||
width: 20px;
|
||||
height: 26px;
|
||||
}
|
||||
.notif_inventory_special_greeting {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -2010px -336px;
|
||||
background-position: -1982px -1200px;
|
||||
width: 20px;
|
||||
height: 22px;
|
||||
}
|
||||
.notif_inventory_special_nye {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -2010px -184px;
|
||||
background-position: -1982px -993px;
|
||||
width: 24px;
|
||||
height: 26px;
|
||||
}
|
||||
.notif_inventory_special_thankyou {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -2010px -263px;
|
||||
background-position: -1982px -1087px;
|
||||
width: 20px;
|
||||
height: 24px;
|
||||
}
|
||||
.notif_inventory_special_valentine {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -2010px -238px;
|
||||
background-position: -1982px -1062px;
|
||||
width: 20px;
|
||||
height: 24px;
|
||||
}
|
||||
.npc_bailey {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1963px -836px;
|
||||
background-position: -220px -203px;
|
||||
width: 60px;
|
||||
height: 72px;
|
||||
}
|
||||
.npc_justin {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -968px;
|
||||
background-position: -1844px -642px;
|
||||
width: 84px;
|
||||
height: 120px;
|
||||
}
|
||||
.npc_matt {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -389px -1535px;
|
||||
background-position: -1155px -1315px;
|
||||
width: 195px;
|
||||
height: 138px;
|
||||
}
|
||||
|
|
@ -72,115 +336,115 @@
|
|||
}
|
||||
.banner_flair_dysheartener {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1963px -909px;
|
||||
background-position: -1935px -832px;
|
||||
width: 69px;
|
||||
height: 18px;
|
||||
}
|
||||
.phobia_dysheartener {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1187px -880px;
|
||||
background-position: -1627px -1278px;
|
||||
width: 201px;
|
||||
height: 195px;
|
||||
}
|
||||
.quest_alligator {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1627px -1079px;
|
||||
background-position: -1627px -862px;
|
||||
width: 201px;
|
||||
height: 213px;
|
||||
}
|
||||
.quest_armadillo {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -967px -220px;
|
||||
background-position: -527px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_atom1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -885px -1315px;
|
||||
background-position: -445px -1315px;
|
||||
width: 250px;
|
||||
height: 150px;
|
||||
}
|
||||
.quest_atom2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1387px -1315px;
|
||||
background-position: -947px -1315px;
|
||||
width: 207px;
|
||||
height: 138px;
|
||||
}
|
||||
.quest_atom3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -747px -440px;
|
||||
background-position: -967px -660px;
|
||||
width: 216px;
|
||||
height: 180px;
|
||||
}
|
||||
.quest_axolotl {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -440px -875px;
|
||||
background-position: 0px -655px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_badger {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -660px -875px;
|
||||
background-position: -880px -875px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_basilist {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -392px;
|
||||
background-position: -191px -1529px;
|
||||
width: 189px;
|
||||
height: 141px;
|
||||
}
|
||||
.quest_beetle {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1627px -1293px;
|
||||
background-position: -1627px -1076px;
|
||||
width: 204px;
|
||||
height: 201px;
|
||||
}
|
||||
.quest_bronze {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1187px -220px;
|
||||
background-position: -1187px -660px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_bunny {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -967px -660px;
|
||||
background-position: -1187px -880px;
|
||||
width: 210px;
|
||||
height: 186px;
|
||||
}
|
||||
.quest_butterfly {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1187px -660px;
|
||||
background-position: -1407px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_cheetah {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -1095px;
|
||||
background-position: -1407px -660px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_cow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -1535px;
|
||||
background-position: -307px -220px;
|
||||
width: 174px;
|
||||
height: 213px;
|
||||
}
|
||||
.quest_dilatory {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -307px 0px;
|
||||
background-position: -1407px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_dilatoryDistress1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1627px -868px;
|
||||
background-position: -1627px -651px;
|
||||
width: 210px;
|
||||
height: 210px;
|
||||
}
|
||||
.quest_dilatoryDistress2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -685px;
|
||||
background-position: -1844px -208px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
|
|
@ -192,73 +456,73 @@
|
|||
}
|
||||
.quest_dilatory_derby {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px -1095px;
|
||||
background-position: -1407px -440px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_dolphin {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1407px 0px;
|
||||
background-position: -880px -1095px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_dustbunnies {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1407px -220px;
|
||||
background-position: -660px -1095px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_egg {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -184px;
|
||||
background-position: -1844px 0px;
|
||||
width: 165px;
|
||||
height: 207px;
|
||||
}
|
||||
.quest_evilsanta {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -836px;
|
||||
background-position: -1844px -510px;
|
||||
width: 118px;
|
||||
height: 131px;
|
||||
}
|
||||
.quest_evilsanta2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1407px -880px;
|
||||
background-position: -440px -1095px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_falcon {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px -655px;
|
||||
background-position: -220px -1095px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_ferret {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1407px -440px;
|
||||
background-position: 0px -1095px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_frog {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -440px -1315px;
|
||||
background-position: 0px -1315px;
|
||||
width: 221px;
|
||||
height: 213px;
|
||||
}
|
||||
.quest_ghost_stag {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -660px -1095px;
|
||||
background-position: -1187px -440px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_goldenknight1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -440px -1095px;
|
||||
background-position: -1187px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_goldenknight2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1136px -1315px;
|
||||
background-position: -696px -1315px;
|
||||
width: 250px;
|
||||
height: 150px;
|
||||
}
|
||||
|
|
@ -270,19 +534,19 @@
|
|||
}
|
||||
.quest_gryphon {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -307px -220px;
|
||||
background-position: -747px -440px;
|
||||
width: 216px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_guineapig {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1187px 0px;
|
||||
background-position: -1407px -880px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_harpy {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px -875px;
|
||||
background-position: -660px -875px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
|
|
@ -294,19 +558,19 @@
|
|||
}
|
||||
.quest_hippo {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -967px -440px;
|
||||
background-position: -440px -875px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_horse {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -967px 0px;
|
||||
background-position: -220px -875px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_kangaroo {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -660px -655px;
|
||||
background-position: 0px -875px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
|
|
@ -318,79 +582,79 @@
|
|||
}
|
||||
.quest_lostMasterclasser1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -747px -220px;
|
||||
background-position: -967px -440px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_lostMasterclasser2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -747px 0px;
|
||||
background-position: -967px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_lostMasterclasser3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px -435px;
|
||||
background-position: -967px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_mayhemMistiflying1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px -534px;
|
||||
background-position: -1844px -359px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
.quest_mayhemMistiflying2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px -1315px;
|
||||
background-position: -660px -655px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_mayhemMistiflying3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -1315px;
|
||||
background-position: -440px -655px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_monkey {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1407px -660px;
|
||||
background-position: -220px -655px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moon1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1627px -651px;
|
||||
background-position: -1627px -217px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_moon2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -880px -1095px;
|
||||
background-position: -747px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moon3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -880px -875px;
|
||||
background-position: -747px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moonstone1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -875px;
|
||||
background-position: -440px -435px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moonstone2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -440px -655px;
|
||||
background-position: -220px -435px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moonstone3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -655px;
|
||||
background-position: 0px -435px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
|
|
@ -402,13 +666,13 @@
|
|||
}
|
||||
.quest_octopus {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -662px -1315px;
|
||||
background-position: -222px -1315px;
|
||||
width: 222px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_owl {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -440px -435px;
|
||||
background-position: -307px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
|
|
@ -420,37 +684,13 @@
|
|||
}
|
||||
.quest_penguin {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1844px 0px;
|
||||
background-position: 0px -1529px;
|
||||
width: 190px;
|
||||
height: 183px;
|
||||
}
|
||||
.quest_pterodactyl {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -435px;
|
||||
background-position: -1187px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_rat {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -527px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_robot {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1187px -440px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_rock {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1627px -217px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_rooster {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -175px -1535px;
|
||||
width: 213px;
|
||||
height: 174px;
|
||||
}
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 482 KiB After Width: | Height: | Size: 481 KiB |
|
Before Width: | Height: | Size: 657 KiB After Width: | Height: | Size: 669 KiB |
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 111 KiB |
|
Before Width: | Height: | Size: 385 KiB After Width: | Height: | Size: 369 KiB |
|
Before Width: | Height: | Size: 303 KiB After Width: | Height: | Size: 318 KiB |
|
Before Width: | Height: | Size: 155 KiB After Width: | Height: | Size: 150 KiB |
|
Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 167 KiB After Width: | Height: | Size: 176 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 140 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 148 KiB |
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 153 KiB |
|
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 182 KiB |
|
Before Width: | Height: | Size: 161 KiB After Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 122 KiB |
|
|
@ -1,41 +1,83 @@
|
|||
.tier1 {
|
||||
color: #c42870;
|
||||
|
||||
&:hover, &:active, &:focus {
|
||||
color: #c42870;
|
||||
}
|
||||
}
|
||||
|
||||
.tier2 {
|
||||
color: #b01515;
|
||||
|
||||
&:hover, &:active, &:focus {
|
||||
color: #b01515;
|
||||
}
|
||||
}
|
||||
|
||||
.tier3 {
|
||||
color: #d70e14;
|
||||
|
||||
:hover, :active, :focus {
|
||||
color: #d70e14;
|
||||
}
|
||||
}
|
||||
|
||||
.tier4 {
|
||||
color: #c24d00;
|
||||
|
||||
&:hover, &:active, :focus {
|
||||
color: #c24d00;
|
||||
}
|
||||
}
|
||||
|
||||
.tier5 {
|
||||
color: #9e650f;
|
||||
|
||||
:hover, :active, :focus {
|
||||
color: #9e650f;
|
||||
}
|
||||
}
|
||||
|
||||
.tier6 {
|
||||
color: #2b8363;
|
||||
|
||||
:hover, :active, &:focus {
|
||||
color: #2b8363;
|
||||
}
|
||||
}
|
||||
|
||||
.tier7 {
|
||||
color: #167e87;
|
||||
|
||||
&:hover, &:active, &:focus {
|
||||
color: #167e87;
|
||||
}
|
||||
}
|
||||
|
||||
.tier8 {
|
||||
color: #277eab;
|
||||
|
||||
&:hover, &:active, &:focus {
|
||||
color: #277eab;
|
||||
}
|
||||
}
|
||||
|
||||
.tier9 {
|
||||
color: #6133b4;
|
||||
|
||||
&:hover, &:active, &:focus {
|
||||
color: #6133b4;
|
||||
}
|
||||
}
|
||||
|
||||
.tierNPC, .npc {
|
||||
color: #77f4c7;
|
||||
fill: #77f4c7;
|
||||
stroke: #005737;
|
||||
|
||||
&:hover, &:active, &:focus {
|
||||
color: #77f4c7;
|
||||
fill: #77f4c7;
|
||||
stroke: #005737;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
// possible values are: normal, fall, habitoween, thanksgiving, winter, nye, birthday, valentines, spring, summer
|
||||
// more to be added on future seasons
|
||||
|
||||
$npc_market_flavor: 'fall';
|
||||
$npc_quests_flavor: 'fall';
|
||||
$npc_seasonal_flavor: 'fall';
|
||||
$npc_timetravelers_flavor: 'fall';
|
||||
$npc_tavern_flavor: 'fall';
|
||||
$npc_market_flavor: 'normal';
|
||||
$npc_quests_flavor: 'normal';
|
||||
$npc_seasonal_flavor: 'normal';
|
||||
$npc_timetravelers_flavor: 'normal';
|
||||
$npc_tavern_flavor: 'normal';
|
||||
|
|
|
|||
|
|
@ -225,32 +225,30 @@ export default {
|
|||
classGear (heroClass) {
|
||||
if (heroClass === 'rogue') {
|
||||
return {
|
||||
armor: 'armor_special_fall2019Rogue',
|
||||
eyewear: 'eyewear_special_fall2019Rogue',
|
||||
head: 'head_special_fall2019Rogue',
|
||||
shield: 'shield_special_fall2019Rogue',
|
||||
weapon: 'weapon_special_fall2019Rogue',
|
||||
armor: 'armor_rogue_5',
|
||||
head: 'head_rogue_5',
|
||||
shield: 'shield_rogue_6',
|
||||
weapon: 'weapon_rogue_6',
|
||||
};
|
||||
} if (heroClass === 'wizard') {
|
||||
return {
|
||||
armor: 'armor_special_fall2019Mage',
|
||||
head: 'head_special_fall2019Mage',
|
||||
weapon: 'weapon_special_fall2019Mage',
|
||||
armor: 'armor_wizard_5',
|
||||
head: 'head_wizard_5',
|
||||
weapon: 'weapon_wizard_6',
|
||||
};
|
||||
} if (heroClass === 'healer') {
|
||||
return {
|
||||
armor: 'armor_special_fall2019Healer',
|
||||
eyewear: 'eyewear_special_fall2019Healer',
|
||||
head: 'head_special_fall2019Healer',
|
||||
shield: 'shield_special_fall2019Healer',
|
||||
weapon: 'weapon_special_fall2019Healer',
|
||||
armor: 'armor_healer_5',
|
||||
head: 'head_healer_5',
|
||||
shield: 'shield_healer_5',
|
||||
weapon: 'weapon_healer_6',
|
||||
};
|
||||
}
|
||||
return {
|
||||
armor: 'armor_special_fall2019Warrior',
|
||||
head: 'head_special_fall2019Warrior',
|
||||
shield: 'shield_special_fall2019Warrior',
|
||||
weapon: 'weapon_special_fall2019Warrior',
|
||||
armor: 'armor_warrior_5',
|
||||
head: 'head_warrior_5',
|
||||
shield: 'shield_warrior_5',
|
||||
weapon: 'weapon_warrior_6',
|
||||
};
|
||||
},
|
||||
selectionBox (selectedClass, heroClass) {
|
||||
|
|
|
|||
|
|
@ -33,8 +33,9 @@
|
|||
v-model="user.preferences.suppressModals.streak"
|
||||
type="checkbox"
|
||||
@change="suppressModals"
|
||||
id="user-preferences-suppressModals-streak"
|
||||
>
|
||||
<label>{{ $t('dontShowAgain') }}</label>
|
||||
<label for="user-preferences-suppressModals-streak">{{ $t('dontShowAgain') }}</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -256,12 +256,18 @@ export default {
|
|||
none: true,
|
||||
};
|
||||
|
||||
sets.push({
|
||||
options: [
|
||||
emptyHairBase,
|
||||
...this.baseHair1.map(key => this.mapKeysToFreeOption(key, 'hair', 'base')),
|
||||
],
|
||||
});
|
||||
|
||||
if (this.editing) {
|
||||
sets.push({
|
||||
fullSet: !this.userOwnsSet('hair', this.baseHair3Keys, 'base'),
|
||||
unlock: () => this.unlock(`hair.base.${this.baseHair3Keys.join(',hair.base.')}`),
|
||||
options: [
|
||||
emptyHairBase,
|
||||
...this.baseHair3,
|
||||
],
|
||||
});
|
||||
|
|
@ -275,13 +281,6 @@ export default {
|
|||
});
|
||||
}
|
||||
|
||||
sets.push({
|
||||
options: [
|
||||
emptyHairBase,
|
||||
...this.baseHair1.map(key => this.mapKeysToFreeOption(key, 'hair', 'base')),
|
||||
],
|
||||
});
|
||||
|
||||
if (this.editing) {
|
||||
sets.push({
|
||||
fullSet: !this.userOwnsSet('hair', this.baseHair2Keys, 'base'),
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@
|
|||
class="svg-icon gem-icon"
|
||||
v-html="icons.gemIcon"
|
||||
></div>
|
||||
{{ challenge.prize }}
|
||||
{{ challenge.prize || 0 }}
|
||||
<div
|
||||
v-once
|
||||
class="details"
|
||||
|
|
@ -123,7 +123,7 @@
|
|||
class="col-12 col-sm-6"
|
||||
:type="column"
|
||||
:task-list-override="tasksByType[column]"
|
||||
:show-options="showOptions"
|
||||
:challenge="challenge"
|
||||
@editTask="editTask"
|
||||
@taskDestroyed="taskDestroyed"
|
||||
/>
|
||||
|
|
@ -386,9 +386,6 @@ export default {
|
|||
canJoin () {
|
||||
return !this.isMember;
|
||||
},
|
||||
showOptions () {
|
||||
return this.isLeader;
|
||||
},
|
||||
},
|
||||
mounted () {
|
||||
if (!this.searchId) this.searchId = this.challengeId;
|
||||
|
|
@ -417,7 +414,12 @@ export default {
|
|||
return cleansedTask;
|
||||
},
|
||||
async loadChallenge () {
|
||||
this.challenge = await this.$store.dispatch('challenges:getChallenge', { challengeId: this.searchId });
|
||||
try {
|
||||
this.challenge = await this.$store.dispatch('challenges:getChallenge', { challengeId: this.searchId });
|
||||
} catch (e) {
|
||||
this.$router.push('/challenges/findChallenges');
|
||||
return;
|
||||
}
|
||||
this.members = await this
|
||||
.loadMembers({ challengeId: this.searchId, includeAllPublicFields: true });
|
||||
const tasks = await this.$store.dispatch('tasks:getChallengeTasks', { challengeId: this.searchId });
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
class="svg-icon"
|
||||
v-html="icons.gemIcon"
|
||||
></span>
|
||||
<span class="value">{{ challenge.prize }}</span>
|
||||
<span class="value">{{ challenge.prize || 0 }}</span>
|
||||
</div>
|
||||
<div class="label">
|
||||
{{ $t('prize') }}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
<b-modal
|
||||
id="challenge-modal"
|
||||
:title="title"
|
||||
:no-close-on-esc="true"
|
||||
:no-close-on-backdrop="true"
|
||||
size="lg"
|
||||
@shown="shown"
|
||||
>
|
||||
|
|
|
|||
|
|
@ -75,7 +75,6 @@
|
|||
class="col-12 col-md-3"
|
||||
:type="column"
|
||||
:task-list-override="tasksByType[column]"
|
||||
:show-options="showOptions"
|
||||
:group="group"
|
||||
:search-text="searchText"
|
||||
@editTask="editTask"
|
||||
|
|
@ -199,9 +198,6 @@ export default {
|
|||
return (this.group.leader && this.group.leader._id === this.user._id)
|
||||
|| (this.group.managers && Boolean(this.group.managers[this.user._id]));
|
||||
},
|
||||
showOptions () {
|
||||
return this.canCreateTasks;
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
// call again the method if the route changes (when this route is already active)
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="px-3 py-3">
|
||||
<quest-sidebar-section
|
||||
v-if="isParty"
|
||||
:group="group"
|
||||
|
|
@ -255,11 +255,10 @@
|
|||
.sidebar {
|
||||
background-color: $gray-600;
|
||||
padding-bottom: 2em;
|
||||
|
||||
}
|
||||
|
||||
.buttons-wrapper {
|
||||
padding-top: 2.8em;
|
||||
padding: 2.8em 24px 0em 24px;
|
||||
}
|
||||
|
||||
.card {
|
||||
|
|
|
|||
|
|
@ -229,7 +229,7 @@
|
|||
-info-button(@click="showWorldBossInfo()") {{$t('whatIsWorldBoss') }}
|
||||
-->
|
||||
</div>
|
||||
<div class="sleep below-header-sections">
|
||||
<div class="sleep px-4 py-3">
|
||||
<strong v-once>{{ $t('sleepDescription') }}</strong>
|
||||
<ul>
|
||||
<li v-once>
|
||||
|
|
@ -263,7 +263,7 @@
|
|||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-3">
|
||||
<div class="px-4">
|
||||
<sidebar-section :title="$t('staffAndModerators')">
|
||||
<div class="row">
|
||||
<div
|
||||
|
|
@ -511,10 +511,6 @@
|
|||
.sidebar {
|
||||
background-color: $gray-600;
|
||||
padding: 0em;
|
||||
|
||||
.below-header-sections {
|
||||
padding: 1em 1.75em 1em 1.75em;
|
||||
}
|
||||
}
|
||||
|
||||
.pause-button {
|
||||
|
|
|
|||
|
|
@ -70,7 +70,8 @@
|
|||
}
|
||||
|
||||
.text {
|
||||
height: 60px;
|
||||
height: auto;
|
||||
min-height: 60px;
|
||||
font-size: 14px;
|
||||
line-height: 1.43;
|
||||
text-align: center;
|
||||
|
|
|
|||
|
|
@ -767,7 +767,6 @@ export default {
|
|||
case 'sortByHatchable': {
|
||||
if (isPetList) {
|
||||
const sortFunc = i => (i.isHatchable() ? 0 : 1);
|
||||
|
||||
animals = _sortBy(animals, [sortFunc]);
|
||||
}
|
||||
break;
|
||||
|
|
@ -800,6 +799,8 @@ export default {
|
|||
groupKey = 'potionKey';
|
||||
} else if (sortBy === 'AZ') {
|
||||
groupKey = '';
|
||||
} else if (sortBy === 'sortByHatchable') {
|
||||
groupKey = i => (i.isHatchable() ? 0 : 1);
|
||||
}
|
||||
|
||||
return groupBy(pets, groupKey);
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
:key="member._id"
|
||||
@click="selectMember(member)"
|
||||
>
|
||||
{{ member.profile.name }}
|
||||
@{{ member.auth.local.username }}
|
||||
</b-dropdown-item>
|
||||
</b-dropdown>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -184,11 +184,19 @@ const NOTIFICATIONS = {
|
|||
achievement: true,
|
||||
label: $t => `${$t('achievement')}: ${$t('achievementPartyUp')}`,
|
||||
modalId: 'generic-achievement',
|
||||
data: {
|
||||
message: $t => $t('achievement'),
|
||||
modalText: $t => $t('achievementPartyUp'),
|
||||
},
|
||||
},
|
||||
ACHIEVEMENT_PARTY_ON: {
|
||||
achievement: true,
|
||||
label: $t => `${$t('achievement')}: ${$t('achievementPartyOn')}`,
|
||||
modalId: 'generic-achievement',
|
||||
data: {
|
||||
message: $t => $t('achievement'),
|
||||
modalText: $t => $t('achievementPartyOn'),
|
||||
},
|
||||
},
|
||||
ACHIEVEMENT_BEAST_MASTER: {
|
||||
achievement: true,
|
||||
|
|
@ -196,7 +204,7 @@ const NOTIFICATIONS = {
|
|||
modalId: 'generic-achievement',
|
||||
data: {
|
||||
message: $t => $t('achievement'),
|
||||
modalText: $t => $t('mountAchievement'),
|
||||
modalText: $t => $t('beastAchievement'),
|
||||
},
|
||||
},
|
||||
ACHIEVEMENT_MOUNT_MASTER: {
|
||||
|
|
@ -445,10 +453,10 @@ export default {
|
|||
data = notification.data;
|
||||
}
|
||||
|
||||
if (!data.modalText && config.data.modalText) {
|
||||
if (!data.modalText && config && config.data && config.data.modalText) {
|
||||
data.modalText = config.data.modalText(this.$t);
|
||||
}
|
||||
if (!data.message && config.data.message) {
|
||||
if (!data.message && config && config.data && config.data.message) {
|
||||
data.message = config.data.message(this.$t);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,14 +32,8 @@
|
|||
<br>
|
||||
{{ $t('beeminderDesc') }}
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
target="_blank"
|
||||
href="https://chrome.google.com/webstore/detail/habitrpg-chat-client/hidkdfgonpoaiannijofifhjidbnilbb"
|
||||
>{{ $t('chromeChatExtension') }}</a>
|
||||
<br>
|
||||
{{ $t('chromeChatExtensionDesc') }}
|
||||
</li>
|
||||
<li v-html="$t('chatExtension')"></li>
|
||||
<span>{{ $t('chatExtensionDesc') }}</span>
|
||||
<li>
|
||||
<a
|
||||
target="_blank"
|
||||
|
|
@ -48,10 +42,8 @@
|
|||
<br>
|
||||
{{ $t('dataToolDesc') }}
|
||||
</li>
|
||||
<li v-html="$t('otherExtensions')">
|
||||
<br>
|
||||
{{ $t('otherDesc') }}
|
||||
</li>
|
||||
<li v-html="$t('otherExtensions')"></li>
|
||||
<span>{{ $t('otherDesc') }}</span>
|
||||
</ul>
|
||||
<hr>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -215,8 +215,12 @@ export default {
|
|||
},
|
||||
},
|
||||
created () {
|
||||
const timeout = this.notification && this.notification.timeout
|
||||
? this.notification.timeout : true;
|
||||
const timeout = (
|
||||
this.notification
|
||||
&& this.notification.timeout !== undefined
|
||||
&& this.notification.timeout !== null
|
||||
) ? this.notification.timeout : true;
|
||||
|
||||
if (timeout) {
|
||||
let delay = this.notification.delay || 1500;
|
||||
delay += this.$store.state.notificationStore.length * 1000;
|
||||
|
|
|
|||
|
|
@ -90,8 +90,8 @@
|
|||
:key="task.id"
|
||||
:task="task"
|
||||
:is-user="isUser"
|
||||
:show-options="showOptions"
|
||||
:group="group"
|
||||
:challenge="challenge"
|
||||
@editTask="editTask"
|
||||
@moveTo="moveTo"
|
||||
@taskDestroyed="taskDestroyed"
|
||||
|
|
@ -371,10 +371,7 @@ export default {
|
|||
selectedTags: {},
|
||||
taskListOverride: {},
|
||||
group: {},
|
||||
showOptions: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
challenge: {},
|
||||
}, // @TODO: maybe we should store the group on state?
|
||||
data () {
|
||||
const icons = Object.freeze({
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@
|
|||
</div>
|
||||
<div slot="dropdown-content">
|
||||
<div
|
||||
v-if="showEdit"
|
||||
ref="editTaskItem"
|
||||
class="dropdown-item edit-task-item"
|
||||
>
|
||||
|
|
@ -137,7 +138,7 @@
|
|||
</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="canDelete(task)"
|
||||
v-if="showDelete"
|
||||
class="dropdown-item"
|
||||
@click="destroy"
|
||||
>
|
||||
|
|
@ -371,7 +372,7 @@
|
|||
|
||||
&:hover {
|
||||
box-shadow: 0 1px 8px 0 rgba($black, 0.12), 0 4px 4px 0 rgba($black, 0.16);
|
||||
z-index: 10;
|
||||
z-index: 11;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -789,6 +790,7 @@ import moment from 'moment';
|
|||
import axios from 'axios';
|
||||
import Vue from 'vue';
|
||||
import uuid from 'uuid';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
import { mapState, mapGetters, mapActions } from '@/libs/store';
|
||||
import scoreTask from '@/../../common/script/ops/scoreTask';
|
||||
import * as Analytics from '@/libs/analytics';
|
||||
|
|
@ -825,7 +827,7 @@ export default {
|
|||
markdown: markdownDirective,
|
||||
},
|
||||
mixins: [notifications],
|
||||
props: ['task', 'isUser', 'group', 'dueDate', 'showOptions'], // @TODO: maybe we should store the group on state?
|
||||
props: ['task', 'isUser', 'group', 'challenge', 'dueDate'], // @TODO: maybe we should store the group on state?
|
||||
data () {
|
||||
return {
|
||||
random: uuid.v4(), // used to avoid conflicts between checkboxes ids
|
||||
|
|
@ -859,6 +861,7 @@ export default {
|
|||
getTagsFor: 'tasks:getTagsFor',
|
||||
getTaskClasses: 'tasks:getTaskClasses',
|
||||
canDelete: 'tasks:canDelete',
|
||||
canEdit: 'tasks:canEdit',
|
||||
}),
|
||||
hasChecklist () {
|
||||
return this.task.checklist && this.task.checklist.length > 0;
|
||||
|
|
@ -937,6 +940,27 @@ export default {
|
|||
|
||||
return this.task.challenge.shortName ? this.task.challenge.shortName.toString() : '';
|
||||
},
|
||||
isChallangeTask () {
|
||||
return !isEmpty(this.task.challenge);
|
||||
},
|
||||
isGroupTask () {
|
||||
return this.task.group.taskId || this.task.group.id;
|
||||
},
|
||||
taskCategory () {
|
||||
let taskCategory = 'default';
|
||||
if (this.isGroupTask) taskCategory = 'group';
|
||||
else if (this.isChallangeTask) taskCategory = 'challenge';
|
||||
return taskCategory;
|
||||
},
|
||||
showDelete () {
|
||||
return this.canDelete(this.task, this.taskCategory, this.isUser, this.group, this.challenge);
|
||||
},
|
||||
showEdit () {
|
||||
return this.canEdit(this.task, this.taskCategory, this.isUser, this.group, this.challenge);
|
||||
},
|
||||
showOptions () {
|
||||
return this.showEdit || this.showDelete || this.isUser;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
...mapActions({
|
||||
|
|
@ -950,7 +974,7 @@ export default {
|
|||
this.scoreChecklistItem({ taskId: this.task._id, itemId: item.id });
|
||||
},
|
||||
edit (e, task) {
|
||||
if (this.isRunningYesterdailies) return;
|
||||
if (this.isRunningYesterdailies || !this.showEdit) return;
|
||||
|
||||
// Prevent clicking on a link from opening the edit modal
|
||||
const target = e.target || e.srcElement;
|
||||
|
|
|
|||
|
|
@ -246,6 +246,8 @@
|
|||
@import '~@/assets/scss/create-task.scss';
|
||||
|
||||
.user-tasks-page {
|
||||
padding-left: 12px;
|
||||
padding-right: 12px;
|
||||
padding-top: 16px;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<span class="dropdown-label">{{ label }}</span>
|
||||
<b-dropdown right="right">
|
||||
<span
|
||||
slot="text"
|
||||
slot="button-content"
|
||||
:class="{'dropdown-icon-item': withIcon}"
|
||||
>
|
||||
<slot
|
||||
|
|
|
|||
|
|
@ -756,6 +756,7 @@ export default {
|
|||
},
|
||||
mounted () {
|
||||
this.loadUser();
|
||||
this.selectPage(this.startingPage);
|
||||
},
|
||||
methods: {
|
||||
async loadUser () {
|
||||
|
|
|
|||
|
|
@ -34,12 +34,75 @@ function getTaskColor (task) {
|
|||
return 'best';
|
||||
}
|
||||
|
||||
export function canDelete () {
|
||||
return task => {
|
||||
const isUserChallenge = Boolean(task.userId);
|
||||
const activeChallenge = isUserChallenge
|
||||
&& task.challenge && task.challenge.id && !task.challenge.broken;
|
||||
return !activeChallenge;
|
||||
export function canDelete (store) {
|
||||
return (task, taskCategory, onUserDashboard, group, challenge) => {
|
||||
const user = store.state.user.data;
|
||||
const userId = user.id || user._id;
|
||||
|
||||
const isUserAdmin = user.contributor && !!user.contributor.admin;
|
||||
const isUserGroupLeader = group && (group.leader
|
||||
&& group.leader._id === userId);
|
||||
const isUserGroupManager = group && (group.managers
|
||||
&& Boolean(group.managers[userId]));
|
||||
const isUserChallenge = userId === (challenge && challenge.leader.id);
|
||||
|
||||
let isUserCanDeleteTask = onUserDashboard;
|
||||
|
||||
switch (taskCategory) {
|
||||
case 'challenge':
|
||||
if (!onUserDashboard) {
|
||||
isUserCanDeleteTask = isUserChallenge || isUserAdmin;
|
||||
} else {
|
||||
isUserCanDeleteTask = isUserAdmin;
|
||||
}
|
||||
break;
|
||||
case 'group':
|
||||
if (!onUserDashboard) {
|
||||
isUserCanDeleteTask = isUserGroupLeader || isUserGroupManager || isUserAdmin;
|
||||
} else {
|
||||
isUserCanDeleteTask = isUserAdmin;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return Boolean(isUserCanDeleteTask);
|
||||
};
|
||||
}
|
||||
|
||||
export function canEdit (store) {
|
||||
return (task, taskCategory, onUserDashboard, group, challenge) => {
|
||||
let isUserCanEditTask = onUserDashboard;
|
||||
const user = store.state.user.data;
|
||||
const userId = user.id || user._id;
|
||||
|
||||
const isUserAdmin = user.contributor && !!user.contributor.admin;
|
||||
const isUserGroupLeader = group && (group.leader
|
||||
&& group.leader._id === userId);
|
||||
const isUserGroupManager = group && (group.managers
|
||||
&& Boolean(group.managers[userId]));
|
||||
const isUserChallenge = userId === (challenge && challenge.leader.id);
|
||||
|
||||
|
||||
switch (taskCategory) {
|
||||
case 'challenge':
|
||||
if (!onUserDashboard) {
|
||||
isUserCanEditTask = isUserChallenge || isUserAdmin;
|
||||
} else {
|
||||
isUserCanEditTask = true;
|
||||
}
|
||||
break;
|
||||
case 'group':
|
||||
if (!onUserDashboard) {
|
||||
isUserCanEditTask = isUserGroupLeader || isUserGroupManager || isUserAdmin;
|
||||
} else {
|
||||
isUserCanEditTask = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return Boolean(isUserCanEditTask);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +1,73 @@
|
|||
import generateStore from '@/store';
|
||||
|
||||
|
||||
describe('canDelete getter', () => {
|
||||
it('cannot delete active challenge task', () => {
|
||||
const store = generateStore();
|
||||
let store;
|
||||
let group;
|
||||
let challenge;
|
||||
let task;
|
||||
|
||||
beforeEach(() => {
|
||||
store = generateStore();
|
||||
|
||||
const task = { userId: 1, challenge: { id: 2 } };
|
||||
expect(store.getters['tasks:canDelete'](task)).to.equal(false);
|
||||
store.state.user.data = {
|
||||
id: 10,
|
||||
contributor: {
|
||||
admin: false,
|
||||
},
|
||||
};
|
||||
|
||||
group = {
|
||||
leader: {
|
||||
_id: 123,
|
||||
},
|
||||
managers: {
|
||||
123984: {},
|
||||
},
|
||||
};
|
||||
|
||||
challenge = {
|
||||
leader: {
|
||||
id: 123,
|
||||
},
|
||||
};
|
||||
|
||||
task = { userId: 1, challenge: { id: 2 } };
|
||||
});
|
||||
it('cannot Delete challenge or group task in own dashboard', () => {
|
||||
expect(store.getters['tasks:canDelete'](task, 'challenge', true, null, challenge)).to.equal(false);
|
||||
expect(store.getters['tasks:canDelete'](task, 'group', true, group, null)).to.equal(false);
|
||||
});
|
||||
|
||||
it('can delete broken challenge task', () => {
|
||||
const store = generateStore();
|
||||
it('can Delete any challenge task as admin', () => {
|
||||
store.state.user.data.contributor.admin = true;
|
||||
|
||||
expect(store.getters['tasks:canDelete'](task, 'challenge', true, null, challenge)).to.equal(true);
|
||||
});
|
||||
|
||||
const task = { userId: 1, challenge: { id: 2, broken: true } };
|
||||
expect(store.getters['tasks:canDelete'](task)).to.equal(true);
|
||||
it('can Delete own challenge task if leader', () => {
|
||||
store.state.user.data.id = 123;
|
||||
|
||||
expect(store.getters['tasks:canDelete'](task, 'challenge', false, null, challenge)).to.equal(true);
|
||||
});
|
||||
|
||||
it('cannot Delete challenge task if non leader on challenge page', () => {
|
||||
expect(store.getters['tasks:canDelete'](task, 'challenge', false, null, challenge)).to.equal(false);
|
||||
});
|
||||
|
||||
it('can Delete group task as leader on group page', () => {
|
||||
store.state.user.data.id = 123;
|
||||
|
||||
expect(store.getters['tasks:canDelete'](task, 'group', false, group)).to.equal(true);
|
||||
});
|
||||
|
||||
it('can Delete group task if manager on group page', () => {
|
||||
store.state.user.data.id = 123984;
|
||||
|
||||
expect(store.getters['tasks:canDelete'](task, 'group', false, group)).to.equal(true);
|
||||
});
|
||||
|
||||
it('cannot Delete group task if not a leader on group page', () => {
|
||||
expect(store.getters['tasks:canDelete'](task, 'group', false, group)).to.equal(false);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,75 @@
|
|||
import generateStore from '@/store';
|
||||
|
||||
|
||||
describe('canEdit getter', () => {
|
||||
let store;
|
||||
let group;
|
||||
let challenge;
|
||||
let task;
|
||||
|
||||
beforeEach(() => {
|
||||
store = generateStore();
|
||||
|
||||
store.state.user.data = {
|
||||
id: 10,
|
||||
contributor: {
|
||||
admin: false,
|
||||
},
|
||||
};
|
||||
|
||||
group = {
|
||||
leader: {
|
||||
_id: 123,
|
||||
},
|
||||
managers: {
|
||||
123984: {},
|
||||
},
|
||||
};
|
||||
|
||||
challenge = {
|
||||
leader: {
|
||||
id: 123,
|
||||
},
|
||||
};
|
||||
|
||||
task = { userId: 1, challenge: { id: 2 } };
|
||||
});
|
||||
it('can Edit task in own dashboard', () => {
|
||||
expect(store.getters['tasks:canEdit'](task, 'challenge', true, null, challenge)).to.equal(true);
|
||||
expect(store.getters['tasks:canEdit'](task, 'group', true, group, null)).to.equal(true);
|
||||
});
|
||||
|
||||
it('can Edit any challenge task if admin', () => {
|
||||
store.state.user.data.contributor.admin = true;
|
||||
|
||||
expect(store.getters['tasks:canEdit'](task, 'challenge', true, null, challenge)).to.equal(true);
|
||||
expect(store.getters['tasks:canEdit'](task, 'challenge', false, null, challenge)).to.equal(true);
|
||||
});
|
||||
|
||||
it('can Edit own challenge task if leader', () => {
|
||||
store.state.user.data.id = 123;
|
||||
|
||||
expect(store.getters['tasks:canEdit'](task, 'challenge', true, null, challenge)).to.equal(true);
|
||||
expect(store.getters['tasks:canEdit'](task, 'challenge', false, null, challenge)).to.equal(true);
|
||||
});
|
||||
|
||||
it('cannot Edit challenge task if not leader on challenge page', () => {
|
||||
expect(store.getters['tasks:canEdit'](task, 'challenge', false, null, challenge)).to.equal(false);
|
||||
});
|
||||
|
||||
it('can Edit group task as leader on group page', () => {
|
||||
store.state.user.data.id = 123;
|
||||
|
||||
expect(store.getters['tasks:canEdit'](task, 'group', false, group)).to.equal(true);
|
||||
});
|
||||
|
||||
it('can Edit group task if manager on group page', () => {
|
||||
store.state.user.data.id = 123984;
|
||||
|
||||
expect(store.getters['tasks:canEdit'](task, 'group', false, group)).to.equal(true);
|
||||
});
|
||||
|
||||
it('cannot Edit group task if not leader on group page', () => {
|
||||
expect(store.getters['tasks:canEdit'](task, 'group', false, group)).to.equal(false);
|
||||
});
|
||||
});
|
||||
1
website/common/locales/ach/front.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||
1
website/common/locales/ach/pets.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||
1
website/common/locales/af/front.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||
1
website/common/locales/af/pets.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
"spellRogueStealthNotes": "With each cast, a few of your undone Dailies won't cause damage tonight. Their streaks and colors won't change. (Based on: PER)",
|
||||
"spellRogueStealthDaliesAvoided": "<%= originalText %> Number of dailies avoided: <%= number %>.",
|
||||
"spellRogueStealthMaxedOut": "You have already avoided all your dailies; there's no need to cast this again.",
|
||||
"spellHealerHealText": "Genesende Lig\n",
|
||||
"spellHealerHealText": "Genesende Lig",
|
||||
"spellHealerHealNotes": "Shining light restores your health! (Based on: CON and INT)",
|
||||
"spellHealerBrightnessText": "Searing Brightness",
|
||||
"spellHealerBrightnessNotes": "A burst of light makes your tasks more blue/less red! (Based on: INT)",
|
||||
|
|
@ -56,4 +56,4 @@
|
|||
"groupTasksNoCast": "Casting a skill on group tasks is not allowed.",
|
||||
"spellNotOwned": "You don't own this skill.",
|
||||
"spellLevelTooHigh": "You must be level <%= level %> to use this skill."
|
||||
}
|
||||
}
|
||||
|
|
|
|||
1
website/common/locales/ar/front.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||
1
website/common/locales/ar/pets.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||
1
website/common/locales/be/front.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||
|
|
@ -329,7 +329,7 @@
|
|||
"approvalRequested": "Approval Requested",
|
||||
"refreshApprovals": "Refresh Approvals",
|
||||
"refreshGroupTasks": "Refresh Group Tasks",
|
||||
"claimedBy": "Claimed by: <%= claimingUsers %>",
|
||||
"claimedBy": "\n\nClaimed by: <%= claimingUsers %>",
|
||||
"cantDeleteAssignedGroupTasks": "Can't delete group tasks that are assigned to you.",
|
||||
"confirmGuildPlanCreation": "Create this group?",
|
||||
"groupPlanUpgraded": "<strong><%= groupName %></strong> was upgraded to a Group Plan!",
|
||||
|
|
@ -480,4 +480,4 @@
|
|||
"recurringCompletion": "None - Group task does not complete",
|
||||
"singleCompletion": "Single - Completes when any assigned user finishes",
|
||||
"allAssignedCompletion": "All - Completes when all assigned users finish"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
1
website/common/locales/be/pets.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||