Merge branch 'develop' into fix-antidotes-from-revert

This commit is contained in:
Xaz16 2019-11-17 23:54:09 +03:00
commit 960985dee5
411 changed files with 29206 additions and 29664 deletions

View file

@ -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)

View file

@ -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"]

View 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

File diff suppressed because it is too large Load diff

View file

@ -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",

View file

@ -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);
});
});

View file

@ -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';

View file

@ -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"
}

View file

@ -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",

View file

@ -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;
}

View file

@ -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;

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -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;
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 482 KiB

After

Width:  |  Height:  |  Size: 481 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 657 KiB

After

Width:  |  Height:  |  Size: 669 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 385 KiB

After

Width:  |  Height:  |  Size: 369 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 303 KiB

After

Width:  |  Height:  |  Size: 318 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 KiB

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 KiB

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 KiB

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 122 KiB

View file

@ -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;
}
}

View file

@ -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';

View file

@ -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) {

View file

@ -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>

View file

@ -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'),

View file

@ -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 });

View file

@ -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') }}

View file

@ -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"
>

View file

@ -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)

View file

@ -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 {

View file

@ -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 {

View file

@ -70,7 +70,8 @@
}
.text {
height: 60px;
height: auto;
min-height: 60px;
font-size: 14px;
line-height: 1.43;
text-align: center;

View file

@ -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);

View file

@ -19,7 +19,7 @@
:key="member._id"
@click="selectMember(member)"
>
{{ member.profile.name }}
@{{ member.auth.local.username }}
</b-dropdown-item>
</b-dropdown>
</template>

View file

@ -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);
}

View file

@ -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>

View file

@ -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;

View file

@ -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({

View file

@ -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;

View file

@ -246,6 +246,8 @@
@import '~@/assets/scss/create-task.scss';
.user-tasks-page {
padding-left: 12px;
padding-right: 12px;
padding-top: 16px;
}

View file

@ -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

View file

@ -756,6 +756,7 @@ export default {
},
mounted () {
this.loadUser();
this.selectPage(this.startingPage);
},
methods: {
async loadUser () {

View file

@ -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);
};
}

View file

@ -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);
});
});

View file

@ -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);
});
});

View file

@ -0,0 +1 @@
{}

View file

@ -0,0 +1 @@
{}

View file

@ -0,0 +1 @@
{}

View file

@ -0,0 +1 @@
{}

View file

@ -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."
}
}

View file

@ -0,0 +1 @@
{}

View file

@ -0,0 +1 @@
{}

View file

@ -0,0 +1 @@
{}

View file

@ -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"
}
}

View file

@ -0,0 +1 @@
{}

Some files were not shown because too many files have changed in this diff Show more