mirror of
https://github.com/HabitRPG/habitica.git
synced 2026-05-12 11:39:44 -05:00
Compare commits
60 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 167e6b2bf1 | |||
| 9b54e4d80a | |||
| 987a27ffa1 | |||
| 7fb1c9db8c | |||
| f66b05f707 | |||
| f8ba191eea | |||
| a03d265cd3 | |||
| 0dbd597d0b | |||
| b97f85fa60 | |||
| 0a06fe6d2e | |||
| 70f5aa1f55 | |||
| 5a384d8d16 | |||
| 4fea87af8a | |||
| 8a45f753ca | |||
| 19253cd9b5 | |||
| eac5e58ac7 | |||
| 3eee1a572e | |||
| f572aa442e | |||
| 101be5d6a6 | |||
| 1c9c9908c5 | |||
| 916cb03a3a | |||
| bb095ae296 | |||
| 97c63e2be7 | |||
| b7c6ded375 | |||
| 8db8a8267b | |||
| 4b9a5472bd | |||
| a374add2eb | |||
| 592c178544 | |||
| ed907c1ae5 | |||
| 021825ebb9 | |||
| 45aae7ff62 | |||
| 47bd890dd7 | |||
| add435d4f7 | |||
| d262a16269 | |||
| aeef31d0d4 | |||
| 5717e58613 | |||
| 535477b804 | |||
| a80ef78be0 | |||
| f119304d9e | |||
| cb168338ee | |||
| 1892d6288a | |||
| 1aa81d1440 | |||
| efe4483a04 | |||
| 9cee9ebfe3 | |||
| 33b6de85cc | |||
| 1026a721ac | |||
| affeca6045 | |||
| 05ac144e4f | |||
| fdb5d75372 | |||
| 02770dd1a9 | |||
| 6aed03380a | |||
| be822b6bbe | |||
| 9aa15d9e64 | |||
| 4e33a0f7f8 | |||
| 7ff9f67aab | |||
| 43fcce7242 | |||
| 099274969e | |||
| 5bb97218bd | |||
| 57fe1d6b22 | |||
| 7aecadfe68 |
@@ -104,42 +104,6 @@ updates:
|
||||
- 7.7.0
|
||||
- 7.8.0
|
||||
- 7.9.0
|
||||
- dependency-name: "@storybook/addon-knobs"
|
||||
versions:
|
||||
- 6.1.17
|
||||
- 6.1.18
|
||||
- 6.1.20
|
||||
- 6.1.21
|
||||
- 6.2.2
|
||||
- 6.2.3
|
||||
- 6.2.7
|
||||
- dependency-name: "@storybook/addon-links"
|
||||
versions:
|
||||
- 6.1.17
|
||||
- 6.1.18
|
||||
- 6.1.20
|
||||
- 6.1.21
|
||||
- 6.2.2
|
||||
- 6.2.3
|
||||
- 6.2.7
|
||||
- dependency-name: "@storybook/vue"
|
||||
versions:
|
||||
- 6.1.17
|
||||
- 6.1.18
|
||||
- 6.1.20
|
||||
- 6.1.21
|
||||
- 6.2.2
|
||||
- 6.2.3
|
||||
- 6.2.7
|
||||
- dependency-name: "@storybook/addon-actions"
|
||||
versions:
|
||||
- 6.1.17
|
||||
- 6.1.18
|
||||
- 6.1.20
|
||||
- 6.1.21
|
||||
- 6.2.2
|
||||
- 6.2.3
|
||||
- 6.2.7
|
||||
- dependency-name: core-js
|
||||
versions:
|
||||
- 3.10.0
|
||||
|
||||
+1
-1
@@ -51,7 +51,7 @@ gulp.task('build:prepare-mongo', async () => {
|
||||
console.log('MongoDB data folder is missing, setting up.'); // eslint-disable-line no-console
|
||||
|
||||
// use run-rs without --keep, kill it as soon as the replica set starts
|
||||
const runRsProcess = spawn('run-rs', ['-v', '4.2.8', '-l', 'ubuntu1804', '--dbpath', 'mongodb-data', '--number', '1', '--quiet']);
|
||||
const runRsProcess = spawn('run-rs', ['-v', '4.1.1', '-l', 'ubuntu1804', '--dbpath', 'mongodb-data', '--number', '1', '--quiet']);
|
||||
|
||||
for await (const chunk of runRsProcess.stdout) {
|
||||
const stringChunk = chunk.toString();
|
||||
|
||||
+1
-1
Submodule habitica-images updated: f74a3b4e97...e6d883bc2e
@@ -0,0 +1,124 @@
|
||||
/* eslint-disable no-console */
|
||||
const MIGRATION_NAME = '20231114_pet_group_achievements';
|
||||
import { model as User } from '../../../website/server/models/user';
|
||||
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count++;
|
||||
|
||||
let set = {
|
||||
migration: MIGRATION_NAME,
|
||||
};
|
||||
|
||||
if (user && user.items && user.items.pets) {
|
||||
const pets = user.items.pets;
|
||||
if (pets['Cactus-Zombie'] > 0
|
||||
&& pets['Cactus-Skeleton'] > 0
|
||||
&& pets['Cactus-Base'] > 0
|
||||
&& pets['Cactus-Desert'] > 0
|
||||
&& pets['Cactus-Red'] > 0
|
||||
&& pets['Cactus-Shade'] > 0
|
||||
&& pets['Cactus-White']> 0
|
||||
&& pets['Cactus-Golden'] > 0
|
||||
&& pets['Cactus-CottonCandyBlue'] > 0
|
||||
&& pets['Cactus-CottonCandyPink'] > 0
|
||||
&& pets['Hedgehog-Zombie'] > 0
|
||||
&& pets['Hedgehog-Skeleton'] > 0
|
||||
&& pets['Hedgehog-Base'] > 0
|
||||
&& pets['Hedgehog-Desert'] > 0
|
||||
&& pets['Hedgehog-Red'] > 0
|
||||
&& pets['Hedgehog-Shade'] > 0
|
||||
&& pets['Hedgehog-White'] > 0
|
||||
&& pets['Hedgehog-Golder'] > 0
|
||||
&& pets['Hedgehog-CottonCandyBlue'] > 0
|
||||
&& pets['Hedgehog-CottonCandyPink'] > 0
|
||||
&& pets['Rock-Zombie'] > 0
|
||||
&& pets['Rock-Skeleton'] > 0
|
||||
&& pets['Rock-Base'] > 0
|
||||
&& pets['Rock-Desert'] > 0
|
||||
&& pets['Rock-Red'] > 0
|
||||
&& pets['Rock-Shade'] > 0
|
||||
&& pets['Rock-White'] > 0
|
||||
&& pets['Rock-Golden'] > 0
|
||||
&& pets['Rock-CottonCandyBlue'] > 0
|
||||
&& pets['Rock-CottonCandyPink'] > 0 ) {
|
||||
set['achievements.roughRider'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (user && user.items && user.items.mounts) {
|
||||
const mounts = user.items.mounts;
|
||||
if (mounts['Cactus-Zombie']
|
||||
&& mounts['Cactus-Skeleton']
|
||||
&& mounts['Cactus-Base']
|
||||
&& mounts['Cactus-Desert']
|
||||
&& mounts['Cactus-Red']
|
||||
&& mounts['Cactus-Shade']
|
||||
&& mounts['Cactus-White']
|
||||
&& mounts['Cactus-Golden']
|
||||
&& mounts['Cactus-CottonCandyPink']
|
||||
&& mounts['Cactus-CottonCandyBlue']
|
||||
&& mounts['Hedgehog-Zombie']
|
||||
&& mounts['Hedgehog-Skeleton']
|
||||
&& mounts['Hedgehog-Base']
|
||||
&& mounts['Hedgehog-Desert']
|
||||
&& mounts['Hedgehog-Red']
|
||||
&& mounts['Hedgehog-Shade']
|
||||
&& mounts['Hedgehog-White']
|
||||
&& mounts['Hedgehog-Golden']
|
||||
&& mounts['Hedgehog-CottonCandyPink']
|
||||
&& mounts['Hedgehog-CottonCandyBlue']
|
||||
&& mounts['Rock-Zombie']
|
||||
&& mounts['Rock-Skeleton']
|
||||
&& mounts['Rock-Base']
|
||||
&& mounts['Rock-Desert']
|
||||
&& mounts['Rock-Red']
|
||||
&& mounts['Rock-Shade']
|
||||
&& mounts['Rock-White']
|
||||
&& mounts['Rock-Golden']
|
||||
&& mounts['Rock-CottonCandyPink']
|
||||
&& mounts['Rock-CottonCandyBlue'] ) {
|
||||
set['achievements.roughRider'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
|
||||
return await User.update({ _id: user._id }, { $set: set }).exec();
|
||||
}
|
||||
|
||||
module.exports = async function processUsers () {
|
||||
let query = {
|
||||
migration: { $ne: MIGRATION_NAME },
|
||||
'auth.timestamps.loggedin': { $gt: new Date('2023-02-01') },
|
||||
};
|
||||
|
||||
const fields = {
|
||||
_id: 1,
|
||||
items: 1,
|
||||
};
|
||||
|
||||
while (true) { // eslint-disable-line no-constant-condition
|
||||
const users = await User // eslint-disable-line no-await-in-loop
|
||||
.find(query)
|
||||
.limit(250)
|
||||
.sort({_id: 1})
|
||||
.select(fields)
|
||||
.lean()
|
||||
.exec();
|
||||
|
||||
if (users.length === 0) {
|
||||
console.warn('All appropriate users found and modified.');
|
||||
console.warn(`\n${count} users processed\n`);
|
||||
break;
|
||||
} else {
|
||||
query._id = {
|
||||
$gt: users[users.length - 1]._id,
|
||||
};
|
||||
}
|
||||
|
||||
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,87 @@
|
||||
/* eslint-disable no-console */
|
||||
const MIGRATION_NAME = '20231228_nye';
|
||||
import { model as User } from '../../../website/server/models/user';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count++;
|
||||
|
||||
const set = { migration: MIGRATION_NAME };
|
||||
let push = {};
|
||||
|
||||
if (typeof user.items.gear.owned.head_special_nye2022 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2023'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2021 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2022'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2020 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2021'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2019 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2020'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2018 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2019'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2017 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2018'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2016 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2017'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2015 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2016'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2014 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2015'] = true;
|
||||
} else if (typeof user.items.gear.owned.head_special_nye !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2014'] = true;
|
||||
} else {
|
||||
set['items.gear.owned.head_special_nye'] = true;
|
||||
}
|
||||
|
||||
push.notifications = {
|
||||
type: 'ITEM_RECEIVED',
|
||||
data: {
|
||||
icon: 'notif_head_special_nye',
|
||||
title: 'Happy New Year!',
|
||||
text: 'Check your Equipment for this year\'s party hat!',
|
||||
destination: 'inventory/equipment',
|
||||
},
|
||||
seen: false,
|
||||
};
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
|
||||
return await User.updateOne({_id: user._id}, {$set: set, $push: push}).exec();
|
||||
}
|
||||
|
||||
export default async function processUsers () {
|
||||
let query = {
|
||||
'auth.timestamps.loggedin': { $gt: new Date('2023-12-01') },
|
||||
migration: { $ne: MIGRATION_NAME },
|
||||
};
|
||||
|
||||
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
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,102 @@
|
||||
/* eslint-disable no-console */
|
||||
import { v4 as uuid } from 'uuid';
|
||||
import { model as User } from '../../../website/server/models/user';
|
||||
|
||||
const MIGRATION_NAME = '20240131_habit_birthday';
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count += 1;
|
||||
|
||||
const inc = {
|
||||
'items.food.Cake_Skeleton': 1,
|
||||
'items.food.Cake_Base': 1,
|
||||
'items.food.Cake_CottonCandyBlue': 1,
|
||||
'items.food.Cake_CottonCandyPink': 1,
|
||||
'items.food.Cake_Shade': 1,
|
||||
'items.food.Cake_White': 1,
|
||||
'items.food.Cake_Golden': 1,
|
||||
'items.food.Cake_Zombie': 1,
|
||||
'items.food.Cake_Desert': 1,
|
||||
'items.food.Cake_Red': 1,
|
||||
'achievements.habitBirthdays': 1,
|
||||
};
|
||||
const set = {};
|
||||
const push = {
|
||||
notifications: {
|
||||
type: 'ITEM_RECEIVED',
|
||||
data: {
|
||||
icon: 'notif_namingDay_cake',
|
||||
title: 'Happy Habit Birthday!',
|
||||
text: 'Habitica turns 11 today! Enjoy free party robes and cake!',
|
||||
destination: 'inventory/equipment',
|
||||
},
|
||||
seen: false,
|
||||
},
|
||||
};
|
||||
|
||||
set.migration = MIGRATION_NAME;
|
||||
|
||||
if (typeof user.items.gear.owned.armor_special_birthday2023 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2024'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2022 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2023'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2021 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2022'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2020 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2021'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2019 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2020'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2018 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2019'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2017 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2018'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2016 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2017'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2015 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2016'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2015'] = true;
|
||||
} else {
|
||||
set['items.gear.owned.armor_special_birthday'] = true;
|
||||
}
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
|
||||
return await User.updateOne({_id: user._id}, {$inc: inc, $set: set, $push: push}).exec();
|
||||
}
|
||||
|
||||
export default async function processUsers () {
|
||||
let query = {
|
||||
migration: {$ne: MIGRATION_NAME},
|
||||
'auth.timestamps.loggedin': {$gt: new Date('2023-12-23')},
|
||||
};
|
||||
|
||||
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
|
||||
}
|
||||
};
|
||||
Generated
+137
-103
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "habitica",
|
||||
"version": "5.11.0",
|
||||
"version": "5.15.1",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -1609,9 +1609,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/register": {
|
||||
"version": "7.22.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz",
|
||||
"integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==",
|
||||
"version": "7.22.15",
|
||||
"resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz",
|
||||
"integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==",
|
||||
"requires": {
|
||||
"clone-deep": "^4.0.1",
|
||||
"find-cache-dir": "^2.0.0",
|
||||
@@ -3323,7 +3323,7 @@
|
||||
"array-flatten": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
|
||||
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
|
||||
},
|
||||
"array-includes": {
|
||||
"version": "3.1.1",
|
||||
@@ -4789,7 +4789,7 @@
|
||||
"co": {
|
||||
"version": "4.6.0",
|
||||
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
|
||||
"integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
|
||||
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
|
||||
"dev": true
|
||||
},
|
||||
"coa": {
|
||||
@@ -5053,7 +5053,7 @@
|
||||
"contentstream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/contentstream/-/contentstream-1.0.0.tgz",
|
||||
"integrity": "sha512-jqWbfFZFG9tZbdej7+TzXI4kanABh3BLtTWY6NxqTK5zo6iTIeo5aq4iRVfYsLQ0y8ccQqmJR/J4NeMmEdnR2w==",
|
||||
"integrity": "sha1-C9z6RtowRkqGzo+n7OVlQQ3G+aU=",
|
||||
"requires": {
|
||||
"readable-stream": "~1.0.33-1"
|
||||
},
|
||||
@@ -5061,7 +5061,7 @@
|
||||
"isarray": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
|
||||
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "1.0.34",
|
||||
@@ -5132,7 +5132,7 @@
|
||||
"cookie-signature": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
||||
},
|
||||
"cookiejar": {
|
||||
"version": "2.1.4",
|
||||
@@ -5368,7 +5368,7 @@
|
||||
"cwise-compiler": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz",
|
||||
"integrity": "sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ==",
|
||||
"integrity": "sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU=",
|
||||
"requires": {
|
||||
"uniq": "^1.0.0"
|
||||
}
|
||||
@@ -5393,7 +5393,7 @@
|
||||
"data-uri-to-buffer": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-0.0.3.tgz",
|
||||
"integrity": "sha512-Cp+jOa8QJef5nXS5hU7M1DWzXPEIoVR3kbV0dQuVGwROZg8bGf1DcCnkmajBTnvghTtSNMUdRrPjgaT6ZQucbw=="
|
||||
"integrity": "sha1-GK6XmmoMqZSwYlhTkW0mYruuCxo="
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.1.1",
|
||||
@@ -5989,7 +5989,7 @@
|
||||
"encodeurl": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
|
||||
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
|
||||
},
|
||||
"end-of-stream": {
|
||||
"version": "1.4.4",
|
||||
@@ -6011,7 +6011,7 @@
|
||||
"ent": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
|
||||
"integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA=="
|
||||
"integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0="
|
||||
},
|
||||
"entities": {
|
||||
"version": "2.0.3",
|
||||
@@ -6161,7 +6161,7 @@
|
||||
"escape-html": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
|
||||
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
|
||||
},
|
||||
"escape-string-regexp": {
|
||||
"version": "1.0.5",
|
||||
@@ -6536,7 +6536,7 @@
|
||||
"etag": {
|
||||
"version": "1.8.1",
|
||||
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
||||
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
|
||||
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
|
||||
},
|
||||
"event-stream": {
|
||||
"version": "3.3.4",
|
||||
@@ -7253,7 +7253,7 @@
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
},
|
||||
"on-finished": {
|
||||
"version": "2.4.1",
|
||||
@@ -7318,7 +7318,7 @@
|
||||
"first-chunk-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
|
||||
"integrity": "sha512-ArRi5axuv66gEsyl3UuK80CzW7t56hem73YGNYxNWTGNKFJUadSb9Gu9SHijYEUi8ulQMf1bJomYNwSCPHhtTQ=="
|
||||
"integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04="
|
||||
},
|
||||
"flagged-respawn": {
|
||||
"version": "1.0.1",
|
||||
@@ -7473,7 +7473,7 @@
|
||||
"fresh": {
|
||||
"version": "0.5.2",
|
||||
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
||||
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
|
||||
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
|
||||
},
|
||||
"from": {
|
||||
"version": "0.1.7",
|
||||
@@ -7769,7 +7769,7 @@
|
||||
"gif-encoder": {
|
||||
"version": "0.4.3",
|
||||
"resolved": "https://registry.npmjs.org/gif-encoder/-/gif-encoder-0.4.3.tgz",
|
||||
"integrity": "sha512-HMfSa+EIng62NbDhM63QGYoc49/m8DcZ9hhBtw+CXX9mKboSpeFVxjZ2WEWaMFZ14MUjfACK7jsrxrJffIVrCg==",
|
||||
"integrity": "sha1-iitP6MqJWkjjoLbLs0CgpqNXGJk=",
|
||||
"requires": {
|
||||
"readable-stream": "~1.1.9"
|
||||
},
|
||||
@@ -7777,7 +7777,7 @@
|
||||
"isarray": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
|
||||
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "1.1.14",
|
||||
@@ -7855,7 +7855,7 @@
|
||||
"github-from-package": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
|
||||
"integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
|
||||
"integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
|
||||
"dev": true
|
||||
},
|
||||
"glob": {
|
||||
@@ -8635,7 +8635,7 @@
|
||||
"handlebars-layouts": {
|
||||
"version": "3.1.4",
|
||||
"resolved": "https://registry.npmjs.org/handlebars-layouts/-/handlebars-layouts-3.1.4.tgz",
|
||||
"integrity": "sha512-2llBmvnj8ueOfxNHdRzJOcgalzZjYVd9+WAl93kPYmlX4WGx7FTHTzNxhK+i9YKY2OSjzfehgpLiIwP/OJr6tw=="
|
||||
"integrity": "sha1-JrO+uTG0uHffv35v6vQFjuYiiwI="
|
||||
},
|
||||
"har-schema": {
|
||||
"version": "2.0.0",
|
||||
@@ -9224,7 +9224,7 @@
|
||||
"iota-array": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
|
||||
"integrity": "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA=="
|
||||
"integrity": "sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc="
|
||||
},
|
||||
"ipaddr.js": {
|
||||
"version": "1.9.1",
|
||||
@@ -9564,7 +9564,7 @@
|
||||
"async": {
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
|
||||
"integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==",
|
||||
"integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
|
||||
"dev": true
|
||||
},
|
||||
"nopt": {
|
||||
@@ -9874,14 +9874,20 @@
|
||||
}
|
||||
},
|
||||
"jsonwebtoken": {
|
||||
"version": "9.0.1",
|
||||
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz",
|
||||
"integrity": "sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==",
|
||||
"version": "9.0.2",
|
||||
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
|
||||
"integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
|
||||
"requires": {
|
||||
"jws": "^3.2.2",
|
||||
"lodash": "^4.17.21",
|
||||
"lodash.includes": "^4.3.0",
|
||||
"lodash.isboolean": "^3.0.3",
|
||||
"lodash.isinteger": "^4.0.4",
|
||||
"lodash.isnumber": "^3.0.3",
|
||||
"lodash.isplainobject": "^4.0.6",
|
||||
"lodash.isstring": "^4.0.1",
|
||||
"lodash.once": "^4.0.0",
|
||||
"ms": "^2.1.1",
|
||||
"semver": "^7.3.8"
|
||||
"semver": "^7.5.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"jwa": {
|
||||
@@ -10041,7 +10047,7 @@
|
||||
"layout": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/layout/-/layout-2.2.0.tgz",
|
||||
"integrity": "sha512-+kdgg25XW11BA4cl9vF+SH01HaBipld2Nf/PlU2kSYncAbdUbDoahzrlh6yhR93N/wR2TGgcFoxebzR1LKmZUg==",
|
||||
"integrity": "sha1-MeRL/BjdEBmz/7II5AKku/4uavQ=",
|
||||
"requires": {
|
||||
"bin-pack": "~1.0.1"
|
||||
}
|
||||
@@ -10194,6 +10200,41 @@
|
||||
"integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
|
||||
"dev": true
|
||||
},
|
||||
"lodash.includes": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
|
||||
"integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
|
||||
},
|
||||
"lodash.isboolean": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
|
||||
"integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
|
||||
},
|
||||
"lodash.isinteger": {
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
|
||||
"integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
|
||||
},
|
||||
"lodash.isnumber": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
|
||||
"integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
|
||||
},
|
||||
"lodash.isplainobject": {
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
|
||||
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
|
||||
},
|
||||
"lodash.isstring": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
|
||||
"integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
|
||||
},
|
||||
"lodash.once": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
|
||||
"integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
|
||||
},
|
||||
"log-driver": {
|
||||
"version": "1.2.7",
|
||||
"resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
|
||||
@@ -10306,7 +10347,7 @@
|
||||
"lru-cache": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz",
|
||||
"integrity": "sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==",
|
||||
"integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=",
|
||||
"requires": {
|
||||
"pseudomap": "^1.0.1",
|
||||
"yallist": "^2.0.0"
|
||||
@@ -10315,7 +10356,7 @@
|
||||
"yallist": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
|
||||
"integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
|
||||
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -10565,7 +10606,7 @@
|
||||
"merge-descriptors": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
|
||||
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
|
||||
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
|
||||
},
|
||||
"merge-stream": {
|
||||
"version": "2.0.0",
|
||||
@@ -10891,7 +10932,7 @@
|
||||
"module-details-from-path": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz",
|
||||
"integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A=="
|
||||
"integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is="
|
||||
},
|
||||
"moment": {
|
||||
"version": "2.29.4",
|
||||
@@ -11242,7 +11283,7 @@
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -11296,9 +11337,9 @@
|
||||
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
|
||||
},
|
||||
"nconf": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.0.tgz",
|
||||
"integrity": "sha512-T3fZPw3c7Dfrz8JBQEbEcZJ2s8f7cUMpKuyBtsGQe0b71pcXx6gNh4oti2xh5dxB+gO9ufNfISBlGvvWtfyMcA==",
|
||||
"version": "0.12.1",
|
||||
"resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.1.tgz",
|
||||
"integrity": "sha512-p2cfF+B3XXacQdswUYWZ0w6Vld0832A/tuqjLBu3H1sfUcby4N2oVbGhyuCkZv+t3iY3aiFEj7gZGqax9Q2c1w==",
|
||||
"requires": {
|
||||
"async": "^3.0.0",
|
||||
"ini": "^2.0.0",
|
||||
@@ -11408,7 +11449,7 @@
|
||||
"ndarray-ops": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/ndarray-ops/-/ndarray-ops-1.2.2.tgz",
|
||||
"integrity": "sha512-BppWAFRjMYF7N/r6Ie51q6D4fs0iiGmeXIACKY66fLpnwIui3Wc3CXiD/30mgLbDjPpSLrsqcp3Z62+IcHZsDw==",
|
||||
"integrity": "sha1-WeiNLDKn7ryxvGkPrhQVeVV6YU4=",
|
||||
"requires": {
|
||||
"cwise-compiler": "^1.0.0"
|
||||
}
|
||||
@@ -11416,7 +11457,7 @@
|
||||
"ndarray-pack": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz",
|
||||
"integrity": "sha512-51cECUJMT0rUZNQa09EoKsnFeDL4x2dHRT0VR5U2H5ZgEcm95ZDWcMA5JShroXjHOejmAD/fg8+H+OvUnVXz2g==",
|
||||
"integrity": "sha1-jK6+qqJNXs9w/4YCBjeXfajuWFo=",
|
||||
"requires": {
|
||||
"cwise-compiler": "^1.1.2",
|
||||
"ndarray": "^1.0.13"
|
||||
@@ -11498,7 +11539,7 @@
|
||||
"node-bitmap": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz",
|
||||
"integrity": "sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA=="
|
||||
"integrity": "sha1-GA6scAPgxwdhjvMTaPYvhLKmkJE="
|
||||
},
|
||||
"node-fetch": {
|
||||
"version": "2.6.7",
|
||||
@@ -11534,13 +11575,30 @@
|
||||
}
|
||||
},
|
||||
"node-loggly-bulk": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/node-loggly-bulk/-/node-loggly-bulk-3.0.0.tgz",
|
||||
"integrity": "sha512-b/LmWZUYNt/4oQsMcGx3fy4H4IxjFavh3tO0xkINfD6UKcz28rtrkUEGrwXeHvPh9O8d3Ub6kqZocP3WHoKkzg==",
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/node-loggly-bulk/-/node-loggly-bulk-4.0.1.tgz",
|
||||
"integrity": "sha512-pVctkicMfJZC2TLFE0AJ7dFzc8vbboxQOS+WIIDGea1GblugHTodBbuxxhSTzLgT3U+NiezvPgWYUbApVvE1xQ==",
|
||||
"requires": {
|
||||
"axios": "1.3.4",
|
||||
"json-stringify-safe": "5.0.x",
|
||||
"moment": "^2.18.1",
|
||||
"request": ">=2.76.0 <3.0.0"
|
||||
"moment": "2.29.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz",
|
||||
"integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
|
||||
"requires": {
|
||||
"follow-redirects": "^1.15.0",
|
||||
"form-data": "^4.0.0",
|
||||
"proxy-from-env": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.15.3",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
|
||||
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"node-releases": {
|
||||
@@ -11586,7 +11644,7 @@
|
||||
"noop-logger": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
|
||||
"integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==",
|
||||
"integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=",
|
||||
"dev": true
|
||||
},
|
||||
"nopt": {
|
||||
@@ -11687,7 +11745,7 @@
|
||||
"obj-extend": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/obj-extend/-/obj-extend-0.1.0.tgz",
|
||||
"integrity": "sha512-or9c7Ue2wWCun41DuLP3+LKEUjSZcDSxfCM4HZQSX9tcjLL/yuzTW7MmtVNs+MmN16uDRpDrFmFK/WVSm4vklg=="
|
||||
"integrity": "sha1-u0SKR3X7les0p4H5CLusLfI9u1s="
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
@@ -12031,7 +12089,7 @@
|
||||
"parse-data-uri": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/parse-data-uri/-/parse-data-uri-0.2.0.tgz",
|
||||
"integrity": "sha512-uOtts8NqDcaCt1rIsO3VFDRsAfgE4c6osG4d9z3l4dCBlxYFzni6Di/oNU270SDrjkfZuUvLZx1rxMyqh46Y9w==",
|
||||
"integrity": "sha1-vwTYUd1ch7CrI45dAazklLYEtMk=",
|
||||
"requires": {
|
||||
"data-uri-to-buffer": "0.0.3"
|
||||
}
|
||||
@@ -12165,7 +12223,7 @@
|
||||
"path-to-regexp": {
|
||||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
|
||||
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
|
||||
},
|
||||
"path-type": {
|
||||
"version": "2.0.0",
|
||||
@@ -12191,7 +12249,7 @@
|
||||
"pause": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
|
||||
"integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
|
||||
"integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
|
||||
},
|
||||
"pause-stream": {
|
||||
"version": "0.0.11",
|
||||
@@ -12250,9 +12308,9 @@
|
||||
}
|
||||
},
|
||||
"pirates": {
|
||||
"version": "4.0.5",
|
||||
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
|
||||
"integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ=="
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
|
||||
"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg=="
|
||||
},
|
||||
"pixelsmith": {
|
||||
"version": "2.6.0",
|
||||
@@ -12339,7 +12397,7 @@
|
||||
"pngjs-nozlib": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pngjs-nozlib/-/pngjs-nozlib-1.0.0.tgz",
|
||||
"integrity": "sha512-N1PggqLp9xDqwAoKvGohmZ3m4/N9xpY0nDZivFqQLcpLHmliHnCp9BuNCsOeqHWMuEEgFjpEaq9dZq6RZyy0fA=="
|
||||
"integrity": "sha1-nmTWAs/pzOTZ1Zl9BodCmnPwt9c="
|
||||
},
|
||||
"posix-character-classes": {
|
||||
"version": "0.1.1",
|
||||
@@ -12440,8 +12498,7 @@
|
||||
"proxy-from-env": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
|
||||
},
|
||||
"ps-tree": {
|
||||
"version": "1.2.0",
|
||||
@@ -13053,7 +13110,7 @@
|
||||
"resolve-from": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
|
||||
"integrity": "sha512-qpFcKaXsq8+oRoLilkwyc7zHGF5i9Q2/25NIgLQQ/+VVv9rU4qvr6nXVAw1DsnXJyQkZsR4Ytfbtg5ehfcUssQ==",
|
||||
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
@@ -13383,7 +13440,7 @@
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -13650,7 +13707,7 @@
|
||||
"sliced": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
|
||||
"integrity": "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA=="
|
||||
"integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
|
||||
},
|
||||
"snapdragon": {
|
||||
"version": "0.8.2",
|
||||
@@ -13925,7 +13982,7 @@
|
||||
"concat-stream": {
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
|
||||
"integrity": "sha512-H6xsIBfQ94aESBG8jGHXQ7i5AEpy5ZeVaLDOisDICiTCKpqEfr34/KmTrspKQNoLKNu9gTkovlpQcUi630AKiQ==",
|
||||
"integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
|
||||
"requires": {
|
||||
"inherits": "~2.0.1",
|
||||
"readable-stream": "~2.0.0",
|
||||
@@ -13935,7 +13992,7 @@
|
||||
"process-nextick-args": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
|
||||
"integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw=="
|
||||
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.0.6",
|
||||
@@ -14271,7 +14328,7 @@
|
||||
"stubs": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz",
|
||||
"integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw=="
|
||||
"integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls="
|
||||
},
|
||||
"style-loader": {
|
||||
"version": "3.3.1",
|
||||
@@ -14796,7 +14853,7 @@
|
||||
"to-fast-properties": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
||||
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
|
||||
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
|
||||
},
|
||||
"to-object-path": {
|
||||
"version": "0.3.0",
|
||||
@@ -15262,7 +15319,7 @@
|
||||
"punycode": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
|
||||
"integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="
|
||||
"integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -15462,12 +15519,12 @@
|
||||
"clone": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
|
||||
"integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="
|
||||
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
|
||||
},
|
||||
"clone-stats": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
|
||||
"integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA=="
|
||||
"integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE="
|
||||
},
|
||||
"replace-ext": {
|
||||
"version": "0.0.1",
|
||||
@@ -15862,47 +15919,24 @@
|
||||
}
|
||||
},
|
||||
"winston-loggly-bulk": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/winston-loggly-bulk/-/winston-loggly-bulk-3.2.1.tgz",
|
||||
"integrity": "sha512-Ws4csTUuU3O8sepxzIj6VwacTlgyUWroVoNkIU0qcsEweW8lbheNUodKFi20lSiKzXKL9uF2J1hoVFyurD/M3w==",
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/winston-loggly-bulk/-/winston-loggly-bulk-3.3.0.tgz",
|
||||
"integrity": "sha512-JGRo1G7/k2VbD9e79/RNaRaKY9oW2HqAKay3SZpm3drKUy6XEP5dkgWdrc16T+a0sM4q/Qq13uatDFvlQIwjfA==",
|
||||
"requires": {
|
||||
"lodash.clonedeep": "^4.5.0",
|
||||
"node-loggly-bulk": "^3.0.0",
|
||||
"winston": "^3.3.3",
|
||||
"winston-transport": "^4.4.0"
|
||||
"lodash.clonedeep": "4.5.0",
|
||||
"node-loggly-bulk": "4.0.1",
|
||||
"winston": "3.10.0",
|
||||
"winston-transport": "4.5.0"
|
||||
}
|
||||
},
|
||||
"winston-transport": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz",
|
||||
"integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==",
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz",
|
||||
"integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==",
|
||||
"requires": {
|
||||
"readable-stream": "^2.3.7",
|
||||
"triple-beam": "^1.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"readable-stream": {
|
||||
"version": "2.3.7",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
||||
"requires": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
"isarray": "~1.0.0",
|
||||
"process-nextick-args": "~2.0.0",
|
||||
"safe-buffer": "~5.1.1",
|
||||
"string_decoder": "~1.1.1",
|
||||
"util-deprecate": "~1.0.1"
|
||||
}
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||
"requires": {
|
||||
"safe-buffer": "~5.1.0"
|
||||
}
|
||||
}
|
||||
"logform": "^2.3.2",
|
||||
"readable-stream": "^3.6.0",
|
||||
"triple-beam": "^1.3.0"
|
||||
}
|
||||
},
|
||||
"word-wrap": {
|
||||
|
||||
+6
-6
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "habitica",
|
||||
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
||||
"version": "5.11.0",
|
||||
"version": "5.15.1",
|
||||
"main": "./website/server/index.js",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.22.10",
|
||||
"@babel/preset-env": "^7.22.10",
|
||||
"@babel/register": "^7.22.5",
|
||||
"@babel/register": "^7.22.15",
|
||||
"@google-cloud/trace-agent": "^7.1.2",
|
||||
"@parse/node-apn": "^5.2.3",
|
||||
"@slack/webhook": "^6.1.0",
|
||||
@@ -43,7 +43,7 @@
|
||||
"image-size": "^1.0.2",
|
||||
"in-app-purchase": "^1.11.3",
|
||||
"js2xmlparser": "^5.0.0",
|
||||
"jsonwebtoken": "^9.0.1",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"jwks-rsa": "^2.1.5",
|
||||
"lodash": "^4.17.21",
|
||||
"merge-stream": "^2.0.0",
|
||||
@@ -52,7 +52,7 @@
|
||||
"moment-recur": "^1.0.7",
|
||||
"mongoose": "^5.13.20",
|
||||
"morgan": "^1.10.0",
|
||||
"nconf": "^0.12.0",
|
||||
"nconf": "^0.12.1",
|
||||
"node-gcm": "^1.0.5",
|
||||
"on-headers": "^1.0.2",
|
||||
"passport": "^0.5.3",
|
||||
@@ -76,7 +76,7 @@
|
||||
"validator": "^13.11.0",
|
||||
"vinyl-buffer": "^1.0.1",
|
||||
"winston": "^3.10.0",
|
||||
"winston-loggly-bulk": "^3.2.1",
|
||||
"winston-loggly-bulk": "^3.3.0",
|
||||
"xml2js": "^0.6.2"
|
||||
},
|
||||
"private": true,
|
||||
@@ -106,7 +106,7 @@
|
||||
"client:unit": "cd website/client && npm run test:unit",
|
||||
"start": "gulp nodemon",
|
||||
"debug": "gulp nodemon --inspect",
|
||||
"mongo:dev": "run-rs -v 4.2.8 -l ubuntu1804 --keep --dbpath mongodb-data --number 1 --quiet",
|
||||
"mongo:dev": "run-rs -v 4.1.1 -l ubuntu1804 --keep --dbpath mongodb-data --number 1 --quiet",
|
||||
"postinstall": "git config --global url.\"https://\".insteadOf git:// && gulp build && cd website/client && npm install",
|
||||
"apidoc": "gulp apidoc"
|
||||
},
|
||||
|
||||
@@ -90,7 +90,9 @@ describe('POST /tasks/unlink-one/:taskId', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('unlinks a task from a challenge and saves it on keep=keep', async () => {
|
||||
// These tests are causing trouble. Race condition?
|
||||
|
||||
xit('unlinks a task from a challenge and saves it on keep=keep', async () => {
|
||||
await user.post(`/tasks/challenge/${challenge._id}`, tasksToTest.daily);
|
||||
let [daily] = await user.get('/tasks/user');
|
||||
await user.del(`/challenges/${challenge._id}`);
|
||||
@@ -99,7 +101,7 @@ describe('POST /tasks/unlink-one/:taskId', () => {
|
||||
expect(daily.challenge).to.eql({});
|
||||
});
|
||||
|
||||
it('unlinks a task from a challenge and deletes it on keep=remove', async () => {
|
||||
xit('unlinks a task from a challenge and deletes it on keep=remove', async () => {
|
||||
await user.post(`/tasks/challenge/${challenge._id}`, tasksToTest.daily);
|
||||
const [daily] = await user.get('/tasks/user');
|
||||
await user.del(`/challenges/${challenge._id}`);
|
||||
|
||||
@@ -12,7 +12,7 @@ describe('GET /faq', () => {
|
||||
expect(res).to.have.property('stillNeedHelp');
|
||||
expect(res.stillNeedHelp.ios).to.equal(translate('iosFaqStillNeedHelp'));
|
||||
expect(res).to.have.property('questions');
|
||||
expect(res.questions[0].question).to.equal(translate('faqQuestion0'));
|
||||
expect(res.questions[0].question).to.equal(translate('faqQuestion25'));
|
||||
});
|
||||
|
||||
it('returns faq not in English', async () => {
|
||||
@@ -29,20 +29,6 @@ describe('GET /faq', () => {
|
||||
});
|
||||
|
||||
describe('platform parameter', () => {
|
||||
it('returns faq with answers for ios platform only', async () => {
|
||||
const res = await requester().get('/faq?platform=ios');
|
||||
|
||||
expect(res).to.have.property('stillNeedHelp');
|
||||
expect(res.stillNeedHelp).to.eql({ ios: translate('iosFaqStillNeedHelp') });
|
||||
|
||||
expect(res).to.have.property('questions');
|
||||
expect(res.questions[0]).to.eql({
|
||||
exclusions: [],
|
||||
heading: 'overview',
|
||||
question: translate('faqQuestion0'),
|
||||
ios: translate('iosFaqAnswer0'),
|
||||
});
|
||||
});
|
||||
it('returns an error when invalid platform parameter is specified', async () => {
|
||||
const request = requester().get('/faq?platform=wrong');
|
||||
await expect(request)
|
||||
@@ -60,9 +46,9 @@ describe('GET /faq', () => {
|
||||
expect(res).to.have.property('questions');
|
||||
expect(res.questions[0]).to.eql({
|
||||
exclusions: [],
|
||||
heading: 'overview',
|
||||
question: translate('faqQuestion0'),
|
||||
android: translate('androidFaqAnswer0'),
|
||||
heading: 'task-types',
|
||||
question: translate('faqQuestion25'),
|
||||
web: translate('webFaqAnswer25'),
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -17,9 +17,9 @@ function getFullArmoire () {
|
||||
|
||||
_.each(content.gearTypes, type => {
|
||||
_.each(content.gear.tree[type].armoire, gearObject => {
|
||||
const armoireKey = gearObject.key;
|
||||
|
||||
fullArmoire[armoireKey] = true;
|
||||
if (gearObject.released) {
|
||||
fullArmoire[gearObject.key] = true;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -15,12 +15,6 @@ describe('FAQ Locales', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('has a valid ios answers', () => {
|
||||
each(questions, question => {
|
||||
expectValidTranslationString(question.ios);
|
||||
});
|
||||
});
|
||||
|
||||
it('has a valid web answers', () => {
|
||||
each(questions, question => {
|
||||
expectValidTranslationString(question.web);
|
||||
@@ -29,10 +23,6 @@ describe('FAQ Locales', () => {
|
||||
});
|
||||
|
||||
describe('Still Need Help Message', () => {
|
||||
it('has a valid ios message', () => {
|
||||
expectValidTranslationString(stillNeedHelp.ios);
|
||||
});
|
||||
|
||||
it('has a valid web message', () => {
|
||||
expectValidTranslationString(stillNeedHelp.web);
|
||||
});
|
||||
|
||||
@@ -28,34 +28,6 @@ npm run lint
|
||||
### Customize configuration
|
||||
See [Configuration Reference](https://cli.vuejs.org/config/).
|
||||
|
||||
## Storybook
|
||||
|
||||
Storybook is mainly used while working on UI-Components to see changes faster instead of using the website.
|
||||
|
||||
### Start Storybook
|
||||
|
||||
```
|
||||
npm run storybook:serve
|
||||
```
|
||||
|
||||
This will start the storybook process, every `*.stories.js`-File is searched and added to the storybook overview.
|
||||
|
||||
### Storybook Worklow
|
||||
|
||||
Usually when you working on `component-name.vue` you also create a `component-name.stories.js` file.
|
||||
|
||||
Example of the stories structure - [Storybook Docs][StorybookDocsExample] - [CountBadge][CountBadgeExample]
|
||||
|
||||
[StorybookDocsExample]: https://storybook.js.org/docs/guides/guide-vue/#step-4-write-your-stories
|
||||
[CountBadgeExample]: src/components/ui/countBadge.stories.js
|
||||
|
||||
Each function or example of this component will be put after `storiesOf('Your Component', module)`,
|
||||
in a separate `.add('function of component', ...`
|
||||
|
||||
### Storybook Build
|
||||
|
||||
After each client build, storybook build is also triggered and will be available in `dist/storybook`
|
||||
|
||||
### Vue Structure
|
||||
|
||||
Currently pages and components are mixed in `/src/components` this is not a good way to find the files easy.
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
# Storybook Updates
|
||||
|
||||
Addon-Knobs has been deprecated inorder to update to the new `addons-controls` we need to:
|
||||
|
||||
1. Change to the new export syntax for each story `export const StoryTemplate`
|
||||
2. And use `StoryTemplate.args` and `StoryTemplate.argTypes` to have the same `knobs` as before
|
||||
|
||||
Maybe this can be made story by story and not all at once
|
||||
@@ -1,5 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import '@storybook/addon-actions/register';
|
||||
import '@storybook/addon-knobs/register';
|
||||
import '@storybook/addon-links/register';
|
||||
import '@storybook/addon-notes/register';
|
||||
@@ -1,65 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { configure } from '@storybook/vue';
|
||||
import './margin.css';
|
||||
import '../../src/assets/scss/index.scss';
|
||||
|
||||
import '../../src/assets/scss/sprites.scss';
|
||||
|
||||
import Vue from 'vue';
|
||||
import BootstrapVue from 'bootstrap-vue';
|
||||
import StoreModule from '@/libs/store';
|
||||
import getStore from '@/store';
|
||||
import '../../src/filters/registerGlobals';
|
||||
|
||||
import i18n from '../../../common/script/i18n';
|
||||
|
||||
// couldn't inject the languages easily,
|
||||
// so just a "$t()" string to show that this will be translated
|
||||
i18n.t = function translateString (...args) {
|
||||
return `$t(${JSON.stringify(args)})`;
|
||||
};
|
||||
Vue.prototype.$t = i18n.t;
|
||||
|
||||
Vue.use(BootstrapVue);
|
||||
Vue.use(StoreModule);
|
||||
|
||||
const store = getStore();
|
||||
store.state.user.data = {
|
||||
stats: {},
|
||||
tags: [],
|
||||
items: {
|
||||
quests: {
|
||||
moon1: 3,
|
||||
},
|
||||
},
|
||||
party: {
|
||||
quest: {
|
||||
|
||||
},
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
auth: {
|
||||
local: {
|
||||
// email: 'example@example.com',
|
||||
},
|
||||
facebook: {
|
||||
emails: [
|
||||
{
|
||||
value: 'test@test.de',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
Vue.prototype.$store = store;
|
||||
|
||||
const req = require.context('../../src', true, /.stories.js$/);
|
||||
|
||||
function loadStories () {
|
||||
req.keys().forEach(filename => req(filename));
|
||||
}
|
||||
|
||||
configure(loadStories, module);
|
||||
@@ -1,14 +0,0 @@
|
||||
.background {
|
||||
background: teal;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.inline-block {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.component-showcase {
|
||||
position: absolute;
|
||||
margin: 20px;
|
||||
width: calc(100% - 40px);
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
import { v4 as generateUUID } from 'uuid';
|
||||
import getters from '@/store/getters';
|
||||
|
||||
export const userStyles = {
|
||||
contributor: {
|
||||
admin: true,
|
||||
level: 9,
|
||||
text: '',
|
||||
},
|
||||
items: {
|
||||
gear: {
|
||||
equipped: {
|
||||
armor: 'armor_special_2',
|
||||
head: 'head_special_2',
|
||||
shield: 'shield_special_goldenknight',
|
||||
headAccessory: 'headAccessory_base_0',
|
||||
eyewear: 'eyewear_base_0',
|
||||
weapon: 'weapon_special_1',
|
||||
back: 'back_base_0',
|
||||
},
|
||||
costume: {
|
||||
armor: 'armor_special_fallRogue',
|
||||
head: 'head_special_fallRogue',
|
||||
shield: 'shield_armoire_shieldOfDiamonds',
|
||||
body: 'body_mystery_201706',
|
||||
eyewear: 'eyewear_special_blackHalfMoon',
|
||||
back: 'back_base_0',
|
||||
headAccessory: 'headAccessory_special_wolfEars',
|
||||
weapon: 'weapon_armoire_lamplighter',
|
||||
},
|
||||
},
|
||||
},
|
||||
preferences: {
|
||||
hair: {
|
||||
color: 'black', base: 0, bangs: 3, beard: 0, mustache: 0, flower: 0,
|
||||
},
|
||||
tasks: { groupByChallenge: false, confirmScoreNotes: false },
|
||||
size: 'broad',
|
||||
skin: 'wolf',
|
||||
shirt: 'zombie',
|
||||
chair: 'none',
|
||||
sleep: true,
|
||||
disableClasses: false,
|
||||
background: 'midnight_castle',
|
||||
costume: true,
|
||||
},
|
||||
stats: {
|
||||
buffs: {
|
||||
str: 0,
|
||||
int: 0,
|
||||
per: 0,
|
||||
con: 0,
|
||||
stealth: 0,
|
||||
streaks: false,
|
||||
snowball: false,
|
||||
spookySparkles: false,
|
||||
shinySeed: false,
|
||||
seafoam: false,
|
||||
},
|
||||
training: {
|
||||
int: 0, per: 0, str: 0, con: 0,
|
||||
},
|
||||
hp: 50,
|
||||
mp: 158,
|
||||
exp: 227,
|
||||
gp: 464.31937261345155,
|
||||
lvl: 17,
|
||||
class: 'rogue',
|
||||
points: 17,
|
||||
str: 0,
|
||||
con: 0,
|
||||
int: 0,
|
||||
per: 0,
|
||||
toNextLevel: 380,
|
||||
maxHealth: 50,
|
||||
maxMP: 158,
|
||||
},
|
||||
profile: {
|
||||
name: 'user',
|
||||
},
|
||||
_id: generateUUID(),
|
||||
flags: {
|
||||
classSelected: true,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
export function mockStore ({
|
||||
userData,
|
||||
...state
|
||||
}) {
|
||||
return {
|
||||
getters,
|
||||
dispatch: () => {
|
||||
},
|
||||
watch: () => {
|
||||
},
|
||||
state: {
|
||||
user: {
|
||||
data: {
|
||||
...userData,
|
||||
},
|
||||
},
|
||||
...state,
|
||||
},
|
||||
};
|
||||
}
|
||||
Generated
+117
-14644
File diff suppressed because it is too large
Load Diff
@@ -8,17 +8,9 @@
|
||||
"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",
|
||||
"storybook:build": "vue-cli-service storybook:build -c config/storybook -o dist/storybook",
|
||||
"storybook:serve": "vue-cli-service storybook:serve -p 6006 -c config/storybook"
|
||||
"postinstall": "node ./scripts/npm-postinstall.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/addon-actions": "6.5.8",
|
||||
"@storybook/addon-knobs": "6.2.9",
|
||||
"@storybook/addon-links": "6.5.8",
|
||||
"@storybook/addon-notes": "5.3.21",
|
||||
"@storybook/addons": "6.5.9",
|
||||
"@storybook/vue": "6.5.14",
|
||||
"@vue/cli-plugin-babel": "^5.0.8",
|
||||
"@vue/cli-plugin-eslint": "^4.5.19",
|
||||
"@vue/cli-plugin-router": "^5.0.8",
|
||||
@@ -32,7 +24,7 @@
|
||||
"bootstrap": "^4.6.0",
|
||||
"bootstrap-vue": "^2.23.1",
|
||||
"chai": "^4.3.7",
|
||||
"core-js": "^3.32.2",
|
||||
"core-js": "^3.33.1",
|
||||
"dompurify": "^3.0.3",
|
||||
"eslint": "^6.8.0",
|
||||
"eslint-config-habitrpg": "^6.2.0",
|
||||
@@ -42,10 +34,10 @@
|
||||
"hellojs": "^1.20.0",
|
||||
"inspectpack": "^4.7.1",
|
||||
"intro.js": "^7.2.0",
|
||||
"jquery": "^3.7.0",
|
||||
"jquery": "^3.7.1",
|
||||
"lodash": "^4.17.21",
|
||||
"moment": "^2.29.4",
|
||||
"nconf": "^0.12.0",
|
||||
"nconf": "^0.12.1",
|
||||
"sass": "^1.63.4",
|
||||
"sass-loader": "^8.0.2",
|
||||
"smartbanner.js": "^1.19.3",
|
||||
@@ -54,10 +46,9 @@
|
||||
"svg-url-loader": "^7.1.1",
|
||||
"svgo": "^1.3.2",
|
||||
"svgo-loader": "^2.2.1",
|
||||
"uuid": "^9.0.0",
|
||||
"uuid": "^9.0.1",
|
||||
"validator": "^13.9.0",
|
||||
"vue": "^2.7.10",
|
||||
"vue-cli-plugin-storybook": "2.1.0",
|
||||
"vue-fragment": "^1.6.0",
|
||||
"vue-mugen-scroll": "^0.2.6",
|
||||
"vue-router": "^3.6.5",
|
||||
|
||||
@@ -6,8 +6,4 @@ if (process.env.NODE_ENV === 'production') {
|
||||
execSync('npm run build', {
|
||||
stdio: 'inherit',
|
||||
});
|
||||
|
||||
/* execSync('npm run storybook:build', {
|
||||
stdio: 'inherit',
|
||||
}); */
|
||||
}
|
||||
|
||||
@@ -1179,6 +1179,11 @@
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_frozen_blue_pond {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_frozen_blue_pond.png');
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_frozen_lake {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_frozen_lake.png');
|
||||
width: 141px;
|
||||
@@ -1364,6 +1369,11 @@
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_holiday_tree_forest {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_holiday_tree_forest.png');
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_holiday_wreath {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_holiday_wreath.png');
|
||||
width: 141px;
|
||||
@@ -1379,6 +1389,11 @@
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_ice_bubble_lake {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_ice_bubble_lake.png');
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_ice_cave {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_ice_cave.png');
|
||||
width: 141px;
|
||||
@@ -1389,6 +1404,11 @@
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_ice_sculpture_festival {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_ice_sculpture_festival.png');
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_iceberg {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_iceberg.png');
|
||||
width: 141px;
|
||||
@@ -2249,11 +2269,21 @@
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_winter_full_moon {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_winter_full_moon.png');
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_winter_lake_with_swans {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_winter_lake_with_swans.png');
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_winter_mountain_range {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_winter_mountain_range.png');
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_winter_night {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_winter_night.png');
|
||||
width: 141px;
|
||||
@@ -2970,6 +3000,11 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.icon_background_frozen_blue_pond {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_frozen_blue_pond.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.icon_background_frozen_lake {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_frozen_lake.png');
|
||||
width: 68px;
|
||||
@@ -3155,6 +3190,11 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.icon_background_holiday_tree_forest {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_holiday_tree_forest.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.icon_background_holiday_wreath {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_holiday_wreath.png');
|
||||
width: 68px;
|
||||
@@ -3170,6 +3210,11 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.icon_background_ice_bubble_lake {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_ice_bubble_lake.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.icon_background_ice_cave {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_ice_cave.png');
|
||||
width: 68px;
|
||||
@@ -3180,6 +3225,11 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.icon_background_ice_sculpture_festival {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_ice_sculpture_festival.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.icon_background_iceberg {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_iceberg.png');
|
||||
width: 68px;
|
||||
@@ -4045,11 +4095,21 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.icon_background_winter_full_moon {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_winter_full_moon.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.icon_background_winter_lake_with_swans {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_winter_lake_with_swans.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.icon_background_winter_mountain_range {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_winter_mountain_range.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.icon_background_winter_night {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/icon_background_winter_night.png');
|
||||
width: 68px;
|
||||
@@ -18825,6 +18885,11 @@
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_armoire_greenFluffTrimmedCoat {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_greenFluffTrimmedCoat.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_armoire_guardiansGown {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_guardiansGown.png');
|
||||
width: 114px;
|
||||
@@ -18985,6 +19050,16 @@
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_armoire_schoolUniformPants {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_schoolUniformPants.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_armoire_schoolUniformSkirt {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_schoolUniformSkirt.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_armoire_scribesRobe {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_scribesRobe.png');
|
||||
width: 114px;
|
||||
@@ -19340,6 +19415,11 @@
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_armoire_greenTrapperHat {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_greenTrapperHat.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_armoire_guardiansBonnet {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_guardiansBonnet.png');
|
||||
width: 114px;
|
||||
@@ -19935,6 +20015,11 @@
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.shield_armoire_trustyPencil {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_trustyPencil.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.shield_armoire_trustyUmbrella {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_trustyUmbrella.png');
|
||||
width: 114px;
|
||||
@@ -20155,6 +20240,11 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_armoire_greenFluffTrimmedCoat {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_greenFluffTrimmedCoat.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_armoire_guardiansGown {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_guardiansGown.png');
|
||||
width: 68px;
|
||||
@@ -20315,6 +20405,16 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_armoire_schoolUniformPants {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_schoolUniformPants.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_armoire_schoolUniformSkirt {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_schoolUniformSkirt.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_armoire_scribesRobe {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_armoire_scribesRobe.png');
|
||||
width: 68px;
|
||||
@@ -20730,6 +20830,11 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_armoire_greenTrapperHat {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_armoire_greenTrapperHat.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_armoire_guardiansBonnet {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_armoire_guardiansBonnet.png');
|
||||
width: 68px;
|
||||
@@ -21325,6 +21430,11 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_shield_armoire_trustyPencil {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_trustyPencil.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_shield_armoire_trustyUmbrella {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_armoire_trustyUmbrella.png');
|
||||
width: 68px;
|
||||
@@ -21770,6 +21880,11 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_weapon_armoire_scholarlyTextbooks {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_scholarlyTextbooks.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_weapon_armoire_shadowMastersMace {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_shadowMastersMace.png');
|
||||
width: 68px;
|
||||
@@ -22030,6 +22145,11 @@
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_armoire_greenFluffTrimmedCoat {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_greenFluffTrimmedCoat.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_armoire_guardiansGown {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_guardiansGown.png');
|
||||
width: 114px;
|
||||
@@ -22190,6 +22310,16 @@
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_armoire_schoolUniformPants {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_schoolUniformPants.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_armoire_schoolUniformSkirt {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_schoolUniformSkirt.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_armoire_scribesRobe {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_scribesRobe.png');
|
||||
width: 114px;
|
||||
@@ -22730,6 +22860,11 @@
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.weapon_armoire_scholarlyTextbooks {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_scholarlyTextbooks.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.weapon_armoire_shadowMastersMace {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_armoire_shadowMastersMace.png');
|
||||
width: 114px;
|
||||
@@ -23600,6 +23735,11 @@
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_special_birthday2024 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_birthday2024.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.eyewear_special_anniversary {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/eyewear_special_anniversary.png');
|
||||
width: 90px;
|
||||
@@ -23655,6 +23795,11 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_special_birthday2024 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_birthday2024.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_back_special_anniversary {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_back_special_anniversary.png');
|
||||
width: 68px;
|
||||
@@ -23720,6 +23865,11 @@
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_special_birthday2024 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_birthday2024.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_special_fall2015Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_fall2015Healer.png');
|
||||
width: 93px;
|
||||
@@ -28815,6 +28965,66 @@
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.eyewear_mystery_202312 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/eyewear_mystery_202312.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_mystery_202312 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_mystery_202312.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.shop_eyewear_mystery_202312 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_eyewear_mystery_202312.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_mystery_202312 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_mystery_202312.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_set_mystery_202312 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_set_mystery_202312.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.back_mystery_202401 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/back_mystery_202401.png');
|
||||
width: 117px;
|
||||
height: 120px;
|
||||
}
|
||||
.broad_armor_mystery_202401 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_202401.png');
|
||||
width: 117px;
|
||||
height: 120px;
|
||||
}
|
||||
.shop_armor_mystery_202401 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_mystery_202401.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_back_mystery_202401 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_back_mystery_202401.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_set_mystery_202401 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_set_mystery_202401.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_weapon_armoire_scholarlyTextbooks {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_armoire_scholarlyTextbooks.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.slim_armor_mystery_202401 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_mystery_202401.png');
|
||||
width: 117px;
|
||||
height: 120px;
|
||||
}
|
||||
.broad_armor_mystery_301404 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_301404.png');
|
||||
width: 90px;
|
||||
@@ -32920,6 +33130,26 @@
|
||||
width: 114px;
|
||||
height: 117px;
|
||||
}
|
||||
.broad_armor_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_winter2024Healer.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_winter2024Mage.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_winter2024Rogue.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_winter2024Warrior.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.broad_armor_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_special_yeti.png');
|
||||
width: 90px;
|
||||
@@ -32980,6 +33210,11 @@
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_special_nye2023 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_nye2023.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_special_ski {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_ski.png');
|
||||
width: 90px;
|
||||
@@ -33170,6 +33405,26 @@
|
||||
width: 114px;
|
||||
height: 117px;
|
||||
}
|
||||
.head_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_winter2024Healer.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_winter2024Mage.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_winter2024Rogue.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_winter2024Warrior.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.head_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_special_yeti.png');
|
||||
width: 90px;
|
||||
@@ -33320,6 +33575,21 @@
|
||||
width: 114px;
|
||||
height: 117px;
|
||||
}
|
||||
.shield_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_winter2024Healer.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.shield_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_winter2024Rogue.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.shield_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_winter2024Warrior.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.shield_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_special_yeti.png');
|
||||
width: 90px;
|
||||
@@ -33520,6 +33790,26 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_winter2024Healer.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_winter2024Mage.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_winter2024Rogue.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_winter2024Warrior.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_armor_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_armor_special_yeti.png');
|
||||
width: 68px;
|
||||
@@ -33580,6 +33870,11 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_nye2023 {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_nye2023.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_ski {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_ski.png');
|
||||
width: 68px;
|
||||
@@ -33770,6 +34065,26 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_winter2024Healer.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_winter2024Mage.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_winter2024Rogue.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_winter2024Warrior.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_head_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_head_special_yeti.png');
|
||||
width: 68px;
|
||||
@@ -33920,6 +34235,21 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_shield_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_winter2024Healer.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_shield_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_winter2024Rogue.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_shield_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_winter2024Warrior.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_shield_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_shield_special_yeti.png');
|
||||
width: 68px;
|
||||
@@ -34120,6 +34450,26 @@
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_weapon_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_winter2024Healer.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_weapon_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_winter2024Mage.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_weapon_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_winter2024Rogue.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_weapon_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_winter2024Warrior.png');
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.shop_weapon_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shop_weapon_special_yeti.png');
|
||||
width: 68px;
|
||||
@@ -34320,6 +34670,26 @@
|
||||
width: 114px;
|
||||
height: 117px;
|
||||
}
|
||||
.slim_armor_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_winter2024Healer.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_winter2024Mage.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_winter2024Rogue.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_winter2024Warrior.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.slim_armor_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_special_yeti.png');
|
||||
width: 90px;
|
||||
@@ -34520,6 +34890,26 @@
|
||||
width: 114px;
|
||||
height: 117px;
|
||||
}
|
||||
.weapon_special_winter2024Healer {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_winter2024Healer.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.weapon_special_winter2024Mage {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_winter2024Mage.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.weapon_special_winter2024Rogue {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_winter2024Rogue.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.weapon_special_winter2024Warrior {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_winter2024Warrior.png');
|
||||
width: 114px;
|
||||
height: 90px;
|
||||
}
|
||||
.weapon_special_yeti {
|
||||
background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/weapon_special_yeti.png');
|
||||
width: 90px;
|
||||
|
||||
@@ -119,6 +119,10 @@ export default {
|
||||
SubscriptionAndPerks,
|
||||
},
|
||||
mixins: [userStateMixin],
|
||||
beforeRouteUpdate (to, from, next) {
|
||||
this.userIdentifier = to.params.userIdentifier;
|
||||
next();
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
userIdentifier: '',
|
||||
@@ -184,9 +188,5 @@ export default {
|
||||
this.resetCounter += 1; // tell child components to reinstantiate from scratch
|
||||
},
|
||||
},
|
||||
beforeRouteUpdate (to, from, next) {
|
||||
this.userIdentifier = to.params.userIdentifier;
|
||||
next();
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -57,13 +57,13 @@
|
||||
<div class="form-inline">
|
||||
Perk month count:
|
||||
<input
|
||||
v-model="hero.purchased.plan.perkMonthCount"
|
||||
class="form-control"
|
||||
type="number"
|
||||
min="0"
|
||||
max="2"
|
||||
step="1"
|
||||
>
|
||||
v-model="hero.purchased.plan.perkMonthCount"
|
||||
class="form-control"
|
||||
type="number"
|
||||
min="0"
|
||||
max="2"
|
||||
step="1"
|
||||
>
|
||||
</div>
|
||||
<div>
|
||||
Next Mystic Hourglass:
|
||||
|
||||
@@ -136,10 +136,10 @@ import foolPet from '../mixins/foolPet';
|
||||
import ClassBadge from '@/components/members/classBadge';
|
||||
|
||||
export default {
|
||||
mixins: [foolPet],
|
||||
components: {
|
||||
ClassBadge,
|
||||
},
|
||||
mixins: [foolPet],
|
||||
props: {
|
||||
member: {
|
||||
type: Object,
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { withKnobs } from '@storybook/addon-knobs';
|
||||
|
||||
|
||||
import bugReportModal from '@/components/bugReportModal';
|
||||
import bugReportSuccessModal from '@/components/bugReportSuccessModal';
|
||||
|
||||
const stories = storiesOf('Bug Report Modal', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('bugReportModal', () => ({
|
||||
components: { bugReportModal },
|
||||
data () {
|
||||
return {
|
||||
};
|
||||
},
|
||||
template: `
|
||||
<div>
|
||||
<bug-report-modal></bug-report-modal>
|
||||
</div>
|
||||
`,
|
||||
mounted () {
|
||||
this.$root.$emit('bv::show::modal', 'bug-report-modal');
|
||||
},
|
||||
}))
|
||||
.add('bugReportSuccessModal', () => ({
|
||||
components: { bugReportSuccessModal },
|
||||
data () {
|
||||
return {
|
||||
};
|
||||
},
|
||||
template: `
|
||||
<div>
|
||||
<bug-report-success-modal></bug-report-success-modal>
|
||||
</div>
|
||||
`,
|
||||
mounted () {
|
||||
this.$root.$emit('bv::show::modal', 'bug-report-success-modal');
|
||||
},
|
||||
}));
|
||||
@@ -65,7 +65,7 @@
|
||||
rows="5"
|
||||
:required="true"
|
||||
:placeholder="question ? $t('questionPlaceholder') : $t('reportDescriptionPlaceholder')"
|
||||
:class="{'input-invalid': messageInvalid && this.message.length === 0}"
|
||||
:class="{'input-invalid': messageInvalid && message.length === 0}"
|
||||
>
|
||||
|
||||
</textarea>
|
||||
|
||||
@@ -413,6 +413,11 @@ export default {
|
||||
groupLink,
|
||||
},
|
||||
mixins: [challengeMemberSearchMixin, externalLinks, userStateMixin],
|
||||
async beforeRouteUpdate (to, from, next) {
|
||||
this.searchId = to.params.challengeId;
|
||||
await this.loadChallenge();
|
||||
next();
|
||||
},
|
||||
props: ['challengeId'],
|
||||
data () {
|
||||
return {
|
||||
@@ -487,11 +492,6 @@ export default {
|
||||
updated () {
|
||||
this.handleExternalLinks();
|
||||
},
|
||||
async beforeRouteUpdate (to, from, next) {
|
||||
this.searchId = to.params.challengeId;
|
||||
await this.loadChallenge();
|
||||
next();
|
||||
},
|
||||
methods: {
|
||||
cleanUpTask (task) {
|
||||
const cleansedTask = omit(task, TASK_KEYS_TO_REMOVE);
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
<div class="row">
|
||||
<div
|
||||
v-if="!loading &&
|
||||
this.filteredChallenges.length === 0"
|
||||
filteredChallenges.length === 0"
|
||||
class="no-challenges text-center col-md-6 offset-3"
|
||||
>
|
||||
<h2 v-once>
|
||||
@@ -42,7 +42,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<div
|
||||
v-for="challenge in this.filteredChallenges"
|
||||
v-for="challenge in filteredChallenges"
|
||||
:key="challenge._id"
|
||||
class="col-12 col-md-6"
|
||||
>
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<div
|
||||
v-if="!loading && challenges.length > 0 && this.filteredChallenges.length === 0"
|
||||
v-if="!loading && challenges.length > 0 && filteredChallenges.length === 0"
|
||||
class="no-challenges text-center col-md-6 offset-3"
|
||||
>
|
||||
<h2 v-once>
|
||||
@@ -61,7 +61,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<div
|
||||
v-for="challenge in this.filteredChallenges"
|
||||
v-for="challenge in filteredChallenges"
|
||||
:key="challenge._id"
|
||||
class="col-12 col-md-6"
|
||||
>
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
v-if="editing"
|
||||
class="menu-container col-2"
|
||||
:class="{active: activeTopPage === 'backgrounds'}"
|
||||
@click="changeTopPage('backgrounds', '2023')"
|
||||
@click="changeTopPage('backgrounds', '2024')"
|
||||
>
|
||||
<div class="menu-item">
|
||||
<div
|
||||
@@ -182,8 +182,8 @@
|
||||
</div>
|
||||
<div
|
||||
v-for="bg in backgroundShopSets[0].items"
|
||||
:key="bg.key"
|
||||
:id="bg.key"
|
||||
:key="bg.key"
|
||||
class="col-2"
|
||||
@click="unlock('background.' + bg.key)"
|
||||
>
|
||||
@@ -215,8 +215,8 @@
|
||||
>
|
||||
<div
|
||||
v-for="bg in backgroundShopSets[2].items"
|
||||
:key="bg.key"
|
||||
:id="bg.key"
|
||||
:key="bg.key"
|
||||
class="col-4 text-center customize-option background-button"
|
||||
@click="unlock('background.' + bg.key)"
|
||||
>
|
||||
@@ -245,8 +245,8 @@
|
||||
>
|
||||
<div
|
||||
v-for="bg in backgroundShopSets[1].items"
|
||||
:key="bg.key"
|
||||
:id="bg.key"
|
||||
:key="bg.key"
|
||||
class="col-4 text-center customize-option background-button"
|
||||
@click="!user.purchased.background[bg.key]
|
||||
? backgroundSelected(bg) : unlock('background.' + bg.key)"
|
||||
@@ -316,8 +316,8 @@
|
||||
</div>
|
||||
<div
|
||||
v-for="bg in set.items"
|
||||
:key="bg.key"
|
||||
:id="bg.key"
|
||||
:key="bg.key"
|
||||
class="col-4 text-center customize-option background-button"
|
||||
@click="!user.purchased.background[bg.key]
|
||||
? backgroundSelected(bg) : unlock('background.' + bg.key)"
|
||||
@@ -377,8 +377,8 @@
|
||||
>
|
||||
<div
|
||||
v-for="(bg) in ownedBackgrounds"
|
||||
:key="bg.key"
|
||||
:id="bg.key"
|
||||
:key="bg.key"
|
||||
class="col-4 text-center customize-option background-button"
|
||||
@click="unlock('background.' + bg.key)"
|
||||
>
|
||||
@@ -1237,7 +1237,7 @@ export default {
|
||||
},
|
||||
],
|
||||
|
||||
bgSubMenuItems: ['2023', '2022', '2021', '2020', '2019', '2018', '2017', '2016', '2015', '2014'].map(y => ({
|
||||
bgSubMenuItems: ['2024', '2023', '2022', '2021', '2020', '2019', '2018', '2017', '2016', '2015', '2014'].map(y => ({
|
||||
id: y,
|
||||
label: y,
|
||||
})),
|
||||
@@ -1267,6 +1267,7 @@ export default {
|
||||
2021: [],
|
||||
2022: [],
|
||||
2023: [],
|
||||
2024: [],
|
||||
};
|
||||
|
||||
// Hack to force update for now until we restructure the data
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
|
||||
import FaceAvatar from './faceAvatar.vue';
|
||||
import Avatar from './avatar.vue';
|
||||
import { userStyles } from '../../config/storybook/mock.data';
|
||||
import content from '../../../common/script/content/index';
|
||||
import getters from '@/store/getters';
|
||||
|
||||
storiesOf('Face Avatar', module)
|
||||
.add('simple', () => ({
|
||||
components: { FaceAvatar },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<face-avatar :member="user"></face-avatar>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
user: userStyles,
|
||||
};
|
||||
},
|
||||
}))
|
||||
.add('compare', () => ({
|
||||
components: { FaceAvatar, Avatar },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<face-avatar :member="user"></face-avatar>
|
||||
<avatar :member="user"></avatar>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
user: userStyles,
|
||||
};
|
||||
},
|
||||
state: {
|
||||
content,
|
||||
},
|
||||
store: {
|
||||
getters,
|
||||
state: {
|
||||
content,
|
||||
},
|
||||
},
|
||||
}));
|
||||
@@ -13,8 +13,8 @@
|
||||
class="w-100 d-flex pt-2 justify-content-center"
|
||||
>
|
||||
<h2
|
||||
class="mx-auto mt-4"
|
||||
v-once
|
||||
class="mx-auto mt-4"
|
||||
>
|
||||
{{ $t('newGroupsWelcome') }}
|
||||
</h2>
|
||||
@@ -43,8 +43,8 @@
|
||||
>
|
||||
</div>
|
||||
<h3
|
||||
class="my-auto"
|
||||
v-once
|
||||
class="my-auto"
|
||||
>
|
||||
{{ $t('newGroupsWhatsNew') }}
|
||||
</h3>
|
||||
@@ -66,7 +66,8 @@
|
||||
<li>{{ $t('newGroupsBullet07') }}</li>
|
||||
<li>{{ $t('newGroupsBullet08') }}</li>
|
||||
<li>{{ $t('newGroupsBullet09') }}</li>
|
||||
<li>{{ $t('newGroupsBullet10') }}
|
||||
<li>
|
||||
{{ $t('newGroupsBullet10') }}
|
||||
<ul class="p-0">
|
||||
<li v-html="$t('newGroupsBullet10a')"></li>
|
||||
<li v-html="$t('newGroupsBullet10b')"></li>
|
||||
@@ -83,13 +84,13 @@
|
||||
>
|
||||
{{ $t('newGroupsEnjoy') }}
|
||||
</div>
|
||||
<button
|
||||
class="btn btn-primary mt-4 mb-1 mx-auto"
|
||||
@click="close()"
|
||||
@keypress.enter="close()"
|
||||
>
|
||||
{{ $t('getStarted') }}
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-primary mt-4 mb-1 mx-auto"
|
||||
@click="close()"
|
||||
@keypress.enter="close()"
|
||||
>
|
||||
{{ $t('getStarted') }}
|
||||
</button>
|
||||
</div>
|
||||
</b-modal>
|
||||
</template>
|
||||
|
||||
@@ -47,19 +47,21 @@
|
||||
</div>
|
||||
<div class="create-task-area ml-2">
|
||||
<button
|
||||
id="create-task-btn"
|
||||
v-if="canCreateTasks"
|
||||
id="create-task-btn"
|
||||
class="btn btn-primary create-btn d-flex align-items-center"
|
||||
:class="{open: openCreateBtn}"
|
||||
tabindex="0"
|
||||
@click.stop.prevent="openCreateBtn = !openCreateBtn"
|
||||
@keypress.enter="openCreateBtn = !openCreateBtn"
|
||||
tabindex="0"
|
||||
>
|
||||
<div
|
||||
class="svg-icon icon-10 color"
|
||||
v-html="icons.positive"
|
||||
></div>
|
||||
<div class="ml-75 mr-1"> {{ $t('addTask') }} </div>
|
||||
<div class="ml-75 mr-1">
|
||||
{{ $t('addTask') }}
|
||||
</div>
|
||||
</button>
|
||||
<div
|
||||
v-if="openCreateBtn"
|
||||
@@ -68,8 +70,8 @@
|
||||
<div
|
||||
v-for="type in columns"
|
||||
:key="type"
|
||||
@click="createTask(type)"
|
||||
class="dropdown-item d-flex px-2 py-1"
|
||||
@click="createTask(type)"
|
||||
>
|
||||
<div class="d-flex align-items-center justify-content-center task-icon">
|
||||
<div
|
||||
|
||||
@@ -1,401 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import {
|
||||
collectionQuestLeaderParticipating,
|
||||
collectionQuestNotParticipating,
|
||||
createStory,
|
||||
groupBossQuestParticipating,
|
||||
groupBossQuestRage,
|
||||
groupCollectionQuest,
|
||||
groupCollectionQuestPending,
|
||||
} from './group.stories.utils';
|
||||
|
||||
storiesOf('Group Components|Party/Quest States', module)
|
||||
.add('Not a Member', () => createStory({
|
||||
template: `
|
||||
<div class="component-showcase">
|
||||
<right-sidebar :group="group" :is-party="true"
|
||||
:is-leader="false" :is-member="false"
|
||||
class="col-12"/>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
group: {
|
||||
leader: {
|
||||
|
||||
},
|
||||
quest: {
|
||||
},
|
||||
purchased: {
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
user: {
|
||||
data: {
|
||||
_id: 'some-user',
|
||||
party: {
|
||||
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
challengeOptions: {},
|
||||
}))
|
||||
.add('Member/No Quest', () => createStory({
|
||||
template: `
|
||||
<div class="component-showcase">
|
||||
<right-sidebar :group="group" :is-party="true"
|
||||
:is-leader="false" :is-member="true"
|
||||
class="col-12"/>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
group: {
|
||||
leader: {
|
||||
|
||||
},
|
||||
quest: {
|
||||
},
|
||||
purchased: {
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
user: {
|
||||
data: {
|
||||
_id: 'some-user',
|
||||
party: {
|
||||
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
challengeOptions: {},
|
||||
}))
|
||||
.add('Leader/No Quest', () => createStory({
|
||||
template: `
|
||||
<div class="component-showcase">
|
||||
<right-sidebar :group="group" :is-party="true"
|
||||
:is-leader="true" :is-member="true"
|
||||
class="col-12"/>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
group: {
|
||||
description: 'Some text',
|
||||
leader: {
|
||||
|
||||
},
|
||||
quest: {
|
||||
},
|
||||
purchased: {
|
||||
},
|
||||
privacy: 'private',
|
||||
},
|
||||
};
|
||||
},
|
||||
user: {
|
||||
data: {
|
||||
_id: 'some-user',
|
||||
party: {
|
||||
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
challengeOptions: {},
|
||||
}))
|
||||
.add('Quest Owner/Quest Not Started', () => createStory({
|
||||
template: `
|
||||
<div class="component-showcase">
|
||||
<right-sidebar :group="group" :is-party="true" :is-member="true" class="col-12"/>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
group: groupCollectionQuest(false),
|
||||
};
|
||||
},
|
||||
user: {
|
||||
data: {
|
||||
_id: '05ca98f4-4706-47b5-8d02-142e6e78ba2e',
|
||||
party: {
|
||||
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
challengeOptions: {},
|
||||
}))
|
||||
.add('Member/Quest accepted/Quest Not Started', () => createStory({
|
||||
template: `
|
||||
<div class="component-showcase">
|
||||
<right-sidebar :group="group" :is-party="true" :is-member="true" class="col-12"/>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
group: groupCollectionQuest(false),
|
||||
};
|
||||
},
|
||||
user: {
|
||||
data: {
|
||||
_id: 'just-a-member',
|
||||
party: {
|
||||
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
challengeOptions: {},
|
||||
}))
|
||||
.add('Member/Quest accepted/Started', () => createStory({
|
||||
template: `
|
||||
<div class="component-showcase">
|
||||
<right-sidebar :group="group" :is-party="true" :is-member="true" class="col-12"/>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
group: groupCollectionQuest(true),
|
||||
};
|
||||
},
|
||||
user: {
|
||||
data: {
|
||||
_id: 'just-a-member',
|
||||
party: {
|
||||
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
challengeOptions: {},
|
||||
}))
|
||||
.add('Member/Quest Invite Pending', () => createStory({
|
||||
template: `
|
||||
<div class="component-showcase">
|
||||
<right-sidebar :group="group" :is-party="true"
|
||||
:is-member="true"
|
||||
class="col-12"/>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
group: groupCollectionQuestPending,
|
||||
};
|
||||
},
|
||||
user: {
|
||||
data: {
|
||||
_id: 'some-user',
|
||||
party: {
|
||||
quest: {
|
||||
RSVPNeeded: true,
|
||||
},
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
challengeOptions: {},
|
||||
}))
|
||||
.add('Collection Quest/Quest Owner Participating', () => createStory({
|
||||
template: `
|
||||
<div class="component-showcase">
|
||||
<right-sidebar :group="group" :is-party="true" :is-member="true" :is-leader="true" class="col-12"/>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
group: collectionQuestLeaderParticipating,
|
||||
};
|
||||
},
|
||||
user: {
|
||||
data: {
|
||||
_id: '05ca98f4-4706-47b5-8d02-142e6e78ba2e',
|
||||
party: {
|
||||
quest: {
|
||||
progress: {
|
||||
up: 0,
|
||||
down: 0,
|
||||
collectedItems: 2,
|
||||
collect: {},
|
||||
},
|
||||
},
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
challengeOptions: {},
|
||||
}))
|
||||
.add('Collection Quest/Not Participating', () => createStory({
|
||||
template: `
|
||||
<div class="component-showcase">
|
||||
<right-sidebar :group="group" :is-party="true" :is-member="true" class="col-12"/>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
group: collectionQuestNotParticipating,
|
||||
};
|
||||
},
|
||||
user: {
|
||||
data: {
|
||||
_id: 'not-the-leader',
|
||||
party: {
|
||||
quest: {
|
||||
progress: {
|
||||
up: 0,
|
||||
down: 0,
|
||||
collectedItems: 2,
|
||||
collect: {},
|
||||
},
|
||||
},
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
challengeOptions: {},
|
||||
}))
|
||||
.add('Boss Quest/Participating', () => createStory({
|
||||
template: `
|
||||
<div class="component-showcase">
|
||||
<right-sidebar :group="group" :is-party="true" :is-member="true" class="col-12"/>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
group: groupBossQuestParticipating,
|
||||
};
|
||||
},
|
||||
user: {
|
||||
data: {
|
||||
_id: 'acc2950e-9919-49bc-be7f-0ec4103e9f2b',
|
||||
party: {
|
||||
quest: {
|
||||
progress: {
|
||||
up: 20,
|
||||
down: 0,
|
||||
collectedItems: 2,
|
||||
collect: {},
|
||||
},
|
||||
},
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
challengeOptions: {},
|
||||
}))
|
||||
.add('Boss Quest/Participating - No Pending', () => createStory({
|
||||
template: `
|
||||
<div class="component-showcase">
|
||||
<right-sidebar :group="group" :is-party="true" :is-member="true" class="col-12"/>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
group: groupBossQuestParticipating,
|
||||
};
|
||||
},
|
||||
user: {
|
||||
data: {
|
||||
_id: 'acc2950e-9919-49bc-be7f-0ec4103e9f2b',
|
||||
party: {
|
||||
quest: {
|
||||
progress: {
|
||||
up: 0,
|
||||
down: 0,
|
||||
collectedItems: 2,
|
||||
collect: {},
|
||||
},
|
||||
},
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
challengeOptions: {},
|
||||
}))
|
||||
.add('Boss Quest/Rage Enabled', () => createStory({
|
||||
template: `
|
||||
<div class="component-showcase">
|
||||
<right-sidebar :group="group" :is-party="true" :is-member="true" class="col-12"/>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
group: groupBossQuestRage,
|
||||
};
|
||||
},
|
||||
user: {
|
||||
data: {
|
||||
_id: 'acc2950e-9919-49bc-be7f-0ec4103e9f2b',
|
||||
party: {
|
||||
quest: {
|
||||
progress: {
|
||||
up: 20,
|
||||
down: 0,
|
||||
collectedItems: 2,
|
||||
collect: {},
|
||||
},
|
||||
},
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
challengeOptions: {},
|
||||
}))
|
||||
.add('Not a party', () => createStory({
|
||||
template: `
|
||||
<div class="component-showcase">
|
||||
<right-sidebar :group="group" :is-party="false" :is-member="true" class="col-12"/>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
group: {
|
||||
quest: {},
|
||||
leader: {
|
||||
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
user: {
|
||||
data: {
|
||||
_id: 'some-user',
|
||||
party: {
|
||||
|
||||
},
|
||||
preferences: {
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
challengeOptions: {},
|
||||
}));
|
||||
@@ -4,12 +4,18 @@
|
||||
<group-plan-creation-modal />
|
||||
<div>
|
||||
<div class="header">
|
||||
<h1 v-once class="text-center">
|
||||
<h1
|
||||
v-once
|
||||
class="text-center"
|
||||
>
|
||||
{{ $t('groupPlanTitle') }}
|
||||
</h1>
|
||||
<div class="row">
|
||||
<div class="col-8 offset-2 text-center">
|
||||
<h2 v-once class="sub-text">
|
||||
<h2
|
||||
v-once
|
||||
class="sub-text"
|
||||
>
|
||||
{{ $t('groupBenefitsDescription') }}
|
||||
</h2>
|
||||
</div>
|
||||
@@ -24,8 +30,12 @@
|
||||
src="~@/assets/images/group-plans/group-14@3x.png"
|
||||
>
|
||||
<hr>
|
||||
<h2 v-once> {{ $t('teamBasedTasks') }} </h2>
|
||||
<p v-once> {{ $t('teamBasedTasksListDesc') }} </p>
|
||||
<h2 v-once>
|
||||
{{ $t('teamBasedTasks') }}
|
||||
</h2>
|
||||
<p v-once>
|
||||
{{ $t('teamBasedTasksListDesc') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
@@ -35,8 +45,12 @@
|
||||
src="~@/assets/images/group-plans/group-12@3x.png"
|
||||
>
|
||||
<hr>
|
||||
<h2 v-once> {{ $t('groupManagementControls') }} </h2>
|
||||
<p v-once> {{ $t('groupManagementControlsDesc') }} </p>
|
||||
<h2 v-once>
|
||||
{{ $t('groupManagementControls') }}
|
||||
</h2>
|
||||
<p v-once>
|
||||
{{ $t('groupManagementControlsDesc') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
@@ -46,8 +60,12 @@
|
||||
src="~@/assets/images/group-plans/group-13@3x.png"
|
||||
>
|
||||
<hr>
|
||||
<h2 v-once> {{ $t('inGameBenefits') }} </h2>
|
||||
<p v-once> {{ $t('inGameBenefitsDesc') }} </p>
|
||||
<h2 v-once>
|
||||
{{ $t('inGameBenefits') }}
|
||||
</h2>
|
||||
<p v-once>
|
||||
{{ $t('inGameBenefitsDesc') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -6,13 +6,23 @@
|
||||
class="fit-content mx-auto mt-4"
|
||||
>
|
||||
<div class="d-flex align-items-center">
|
||||
<h1 v-once class="my-auto mr-auto"> {{ $t('findPartyMembers') }}</h1>
|
||||
<h1
|
||||
v-once
|
||||
class="my-auto mr-auto"
|
||||
>
|
||||
{{ $t('findPartyMembers') }}
|
||||
</h1>
|
||||
<div
|
||||
class="btn btn-secondary btn-sync ml-auto my-auto pl-2 pr-3 d-flex"
|
||||
@click="refreshList()"
|
||||
>
|
||||
<div class="svg-icon icon-16 color my-auto mr-2" v-html="icons.sync"></div>
|
||||
<div class="ml-auto"> {{ $t('refreshList') }} </div>
|
||||
<div
|
||||
class="svg-icon icon-16 color my-auto mr-2"
|
||||
v-html="icons.sync"
|
||||
></div>
|
||||
<div class="ml-auto">
|
||||
{{ $t('refreshList') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex flex-wrap seeker-list">
|
||||
@@ -24,9 +34,9 @@
|
||||
<div class="d-flex">
|
||||
<avatar
|
||||
:member="seeker"
|
||||
:hideClassBadge="true"
|
||||
@click.native="showMemberModal(seeker._id)"
|
||||
:hide-class-badge="true"
|
||||
class="mr-3 mb-2"
|
||||
@click.native="showMemberModal(seeker._id)"
|
||||
/>
|
||||
<div class="card-data">
|
||||
<user-link
|
||||
@@ -54,26 +64,32 @@
|
||||
</strong>
|
||||
</div>
|
||||
<div>
|
||||
<strong v-once class="mr-2"> {{ $t('checkinsLabel') }} </strong>
|
||||
<strong
|
||||
v-once
|
||||
class="mr-2"
|
||||
> {{ $t('checkinsLabel') }} </strong>
|
||||
{{ seeker.loginIncentives }}
|
||||
</div>
|
||||
<div>
|
||||
<strong v-once class="mr-2"> {{ $t('languageLabel') }} </strong>
|
||||
<strong
|
||||
v-once
|
||||
class="mr-2"
|
||||
> {{ $t('languageLabel') }} </strong>
|
||||
{{ displayLanguage(seeker.preferences.language) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<strong
|
||||
v-if="!seeker.invited"
|
||||
@click="inviteUser(seeker._id, index)"
|
||||
class="btn btn-primary w-100"
|
||||
@click="inviteUser(seeker._id, index)"
|
||||
>
|
||||
{{ $t('inviteToParty') }}
|
||||
</strong>
|
||||
<div
|
||||
v-else
|
||||
@click="rescindInvite(seeker._id, index)"
|
||||
class="btn btn-success w-100"
|
||||
@click="rescindInvite(seeker._id, index)"
|
||||
v-html="$t('invitedToYourParty')"
|
||||
>
|
||||
</div>
|
||||
@@ -95,7 +111,6 @@
|
||||
class="svg-icon icon-32 color m-auto"
|
||||
v-html="icons.users"
|
||||
>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<strong class="mb-1"> {{ $t('findMorePartyMembers') }} </strong>
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
key-prop="value"
|
||||
@select="changeSortOption($event)"
|
||||
>
|
||||
<template v-slot:item="{ item }">
|
||||
<template #item="{ item }">
|
||||
<span
|
||||
v-if="item"
|
||||
class="label"
|
||||
@@ -64,7 +64,7 @@
|
||||
key-prop="value"
|
||||
@select="changeSortDirection($event)"
|
||||
>
|
||||
<template v-slot:item="{ item }">
|
||||
<template #item="{ item }">
|
||||
<span
|
||||
v-if="item"
|
||||
class="label"
|
||||
|
||||
@@ -1,89 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { withKnobs } from '@storybook/addon-knobs';
|
||||
|
||||
import { quests } from '@/../../common/script/content/quests';
|
||||
import content from '@/../../common/script/content';
|
||||
import questDetailModal from './questDetailModal';
|
||||
import questCompleted from '../achievements/questCompleted';
|
||||
|
||||
const stories = storiesOf('Quests/Dialog', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('selectQuestDialog', () => ({
|
||||
components: { questDetailModal },
|
||||
data () {
|
||||
return {
|
||||
quest: quests.goldenknight2,
|
||||
questWithDrop: quests.moon1,
|
||||
};
|
||||
},
|
||||
template: `
|
||||
<div>
|
||||
<quest-detail-modal :group="{}"></quest-detail-modal>
|
||||
</div>
|
||||
`,
|
||||
mounted () {
|
||||
this.$root.$emit('bv::show::modal', 'quest-detail-modal');
|
||||
},
|
||||
}))
|
||||
.add('questDetailModal', () => ({
|
||||
components: { questDetailModal },
|
||||
data () {
|
||||
return {
|
||||
quest: quests.goldenknight2,
|
||||
questWithDrop: quests.moon1,
|
||||
};
|
||||
},
|
||||
template: `
|
||||
<div>
|
||||
<quest-detail-modal :group="{}"></quest-detail-modal>
|
||||
</div>
|
||||
`,
|
||||
mounted () {
|
||||
this.$root.$emit('bv::show::modal', 'quest-detail-modal', {
|
||||
key: 'moon1',
|
||||
from: 'sidebar',
|
||||
});
|
||||
},
|
||||
}))
|
||||
.add('quest-completed', () => ({
|
||||
components: { questCompleted },
|
||||
data () {
|
||||
return {
|
||||
quest: quests.goldenknight2,
|
||||
questWithDrop: quests.moon1,
|
||||
};
|
||||
},
|
||||
template: `
|
||||
<div>
|
||||
<quest-completed></quest-completed>
|
||||
</div>
|
||||
`,
|
||||
mounted () {
|
||||
this.$root.$emit('bv::show::modal', 'quest-completed');
|
||||
},
|
||||
store: {
|
||||
state: {
|
||||
content,
|
||||
user: {
|
||||
data: {
|
||||
stats: {},
|
||||
tags: [],
|
||||
items: {
|
||||
quests: {
|
||||
moon1: 3,
|
||||
},
|
||||
},
|
||||
party: {
|
||||
quest: {
|
||||
completed: 'vice3',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}));
|
||||
@@ -23,7 +23,7 @@
|
||||
class="ml-2"
|
||||
:no-caret="true"
|
||||
>
|
||||
<template v-slot:button-content>
|
||||
<template #button-content>
|
||||
<span
|
||||
v-once
|
||||
class="svg-icon inline menuIcon"
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<template>
|
||||
<base-banner
|
||||
v-if="showChatWarning"
|
||||
banner-id="chat-warning"
|
||||
banner-class="chat-banner"
|
||||
class="chat-banner"
|
||||
height="3rem"
|
||||
v-if="showChatWarning"
|
||||
:class="{faq: faqPage}"
|
||||
>
|
||||
<div
|
||||
|
||||
@@ -47,7 +47,7 @@ export default {
|
||||
if (this.notification.data.destination.indexOf('backgrounds') !== -1) {
|
||||
this.$store.state.avatarEditorOptions.editingUser = true;
|
||||
this.$store.state.avatarEditorOptions.startingPage = 'backgrounds';
|
||||
this.$store.state.avatarEditorOptions.subpage = '2023';
|
||||
this.$store.state.avatarEditorOptions.subpage = '2024';
|
||||
this.$root.$emit('bv::show::modal', 'avatar-modal');
|
||||
} else {
|
||||
this.$router.push(this.notification.data.destination || '/inventory/items');
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
>{{ $t('editAvatar') }}</a>
|
||||
<a
|
||||
class="topbar-dropdown-item dropdown-item dropdown-separated"
|
||||
@click="showAvatar('backgrounds', '2023')"
|
||||
@click="showAvatar('backgrounds', '2024')"
|
||||
>{{ $t('backgrounds') }}</a>
|
||||
<a
|
||||
class="topbar-dropdown-item dropdown-item"
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
:inline-dropdown="false"
|
||||
@select="groupBy = $event"
|
||||
>
|
||||
<template v-slot:item="{ item }">
|
||||
<template #item="{ item }">
|
||||
<span class="label">{{ groupByLabel(item) }}</span>
|
||||
</template>
|
||||
</select-list>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
right="right"
|
||||
toggle-class="with-icon"
|
||||
>
|
||||
<template v-slot:button-content>
|
||||
<template #button-content>
|
||||
<span
|
||||
class="svg-icon inline color"
|
||||
v-html="icons.unequipIcon"
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
|
||||
import MemberDetails from './memberDetails.vue';
|
||||
import MemberDetailsNew from './memberDetailsNew.vue';
|
||||
import { userStyles } from '../../config/storybook/mock.data';
|
||||
|
||||
storiesOf('Member Details', module)
|
||||
.add('party header (old)', () => ({
|
||||
components: { MemberDetails },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<member-details :member="user"></member-details>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
user: userStyles,
|
||||
};
|
||||
},
|
||||
}))
|
||||
.add('quest participants (new)', () => ({
|
||||
components: { MemberDetailsNew },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<member-details-new :member="user"></member-details-new>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
user: userStyles,
|
||||
};
|
||||
},
|
||||
}));
|
||||
@@ -33,7 +33,7 @@
|
||||
:name="member.profile.name"
|
||||
:backer="member.backer"
|
||||
:contributor="member.contributor"
|
||||
:showBuffed="isBuffed"
|
||||
:show-buffed="isBuffed"
|
||||
:context="'profile'"
|
||||
/>
|
||||
</span>
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
size="md"
|
||||
>
|
||||
<div slot="modal-header">
|
||||
<h2 class="mt-2 mb-0"> {{ $t('reportPlayer') }} </h2>
|
||||
<h2 class="mt-2 mb-0">
|
||||
{{ $t('reportPlayer') }}
|
||||
</h2>
|
||||
<close-x
|
||||
@close="close()"
|
||||
/>
|
||||
@@ -14,7 +16,9 @@
|
||||
<div>
|
||||
<blockquote>
|
||||
<strong> {{ displayName }} </strong>
|
||||
<p class="mb-0"> {{ username }} </p>
|
||||
<p class="mb-0">
|
||||
{{ username }}
|
||||
</p>
|
||||
</blockquote>
|
||||
<div>
|
||||
<strong>{{ $t('whyReportingPlayer') }}</strong>
|
||||
@@ -26,7 +30,8 @@
|
||||
</div>
|
||||
<p
|
||||
class="mb-2"
|
||||
v-html="$t('playerReportModalBody', abuseFlagModalBody)">
|
||||
v-html="$t('playerReportModalBody', abuseFlagModalBody)"
|
||||
>
|
||||
</p>
|
||||
</div>
|
||||
<div class="footer text-center d-flex flex-column">
|
||||
|
||||
@@ -152,12 +152,12 @@ export default {
|
||||
components: {
|
||||
userLink,
|
||||
},
|
||||
mixins: [externalLinks],
|
||||
filters: {
|
||||
timeAgo (value) {
|
||||
return moment(value).fromNow();
|
||||
},
|
||||
},
|
||||
mixins: [externalLinks],
|
||||
props: {
|
||||
msg: {},
|
||||
},
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
v-for="(post, index) in posts"
|
||||
:key="post._id"
|
||||
class="static-view bailey"
|
||||
id="bailey"
|
||||
:class="{'bailey-last': index == (posts.length - 1)}"
|
||||
>
|
||||
<small
|
||||
@@ -33,6 +34,17 @@
|
||||
|
||||
<style lang='scss'>
|
||||
@import '~@/assets/scss/static.scss';
|
||||
#bailey {
|
||||
.markdown-img-link {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
img {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang='scss' scoped>
|
||||
|
||||
@@ -339,7 +339,6 @@ export default {
|
||||
userMp: 'user.data.stats.mp',
|
||||
userNotifications: 'user.data.notifications',
|
||||
userAchievements: 'user.data.achievements', // @TODO: does this watch deeply?
|
||||
armoireEmpty: 'user.data.flags.armoireEmpty',
|
||||
questCompleted: 'user.data.party.quest.completed',
|
||||
}),
|
||||
userClassSelect () {
|
||||
@@ -410,10 +409,6 @@ export default {
|
||||
if (this.user.needsCron) return;
|
||||
this.handleUserNotifications(after);
|
||||
},
|
||||
armoireEmpty (after, before) {
|
||||
if (after === before || after === false) return;
|
||||
this.$root.$emit('bv::show::modal', 'armoire-empty');
|
||||
},
|
||||
questCompleted () {
|
||||
if (!this.questCompleted) return;
|
||||
this.$root.$emit('bv::show::modal', 'quest-completed');
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
|
||||
import PaymentsButtonsList from './list.vue';
|
||||
import getStore from '@/store';
|
||||
import { setup as setupPayments } from '@/libs/payments';
|
||||
|
||||
setupPayments();
|
||||
|
||||
storiesOf('Subscriptions/Payments Buttons', module)
|
||||
.add('simple', () => ({
|
||||
components: { PaymentsButtonsList },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<payments-buttons-list
|
||||
:amazon-data="{type: 'single'}"
|
||||
:stripe-fn="() => {}"
|
||||
:paypal-fn="() => {}"
|
||||
></payments-buttons-list>
|
||||
</div>
|
||||
`,
|
||||
store: getStore(),
|
||||
}))
|
||||
.add('disabled', () => ({
|
||||
components: { PaymentsButtonsList },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<payments-buttons-list
|
||||
:disabled="true"
|
||||
:amazon-data="{type: 'single'}"
|
||||
:stripe-fn="() => {}"
|
||||
:paypal-fn="() => {}"
|
||||
></payments-buttons-list>
|
||||
</div>
|
||||
`,
|
||||
store: getStore(),
|
||||
}))
|
||||
.add('only stripe and amazon (example)', () => ({
|
||||
components: { PaymentsButtonsList },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<payments-buttons-list
|
||||
:amazon-data="{type: 'single'}"
|
||||
:stripe-fn="() => {}"
|
||||
></payments-buttons-list>
|
||||
</div>
|
||||
`,
|
||||
store: getStore(),
|
||||
}));
|
||||
@@ -165,11 +165,15 @@
|
||||
v-if="eventName === 'fall_extra_gems' || eventName === 'spooky_extra_gems'"
|
||||
class="d-flex flex-column justify-content-center"
|
||||
>
|
||||
<h4 class="mt-3 mx-auto"> {{ $t('howItWorks') }}</h4>
|
||||
<h4 class="mt-3 mx-auto">
|
||||
{{ $t('howItWorks') }}
|
||||
</h4>
|
||||
<small class="text-center">
|
||||
{{ $t('gemSaleHow', { eventStartMonth, eventStartOrdinal, eventEndOrdinal }) }}
|
||||
</small>
|
||||
<h4 class="mt-3 mx-auto"> {{ $t('limitations') }}</h4>
|
||||
<h4 class="mt-3 mx-auto">
|
||||
{{ $t('limitations') }}
|
||||
</h4>
|
||||
<small class="text-center">
|
||||
{{ $t('gemSaleLimitations', {
|
||||
eventStartMonth,
|
||||
@@ -189,7 +193,6 @@
|
||||
|
||||
#buy-gems {
|
||||
small {
|
||||
color: $gray-100;
|
||||
font-size: 12px;
|
||||
margin-left: 20px;
|
||||
margin-right: 20px;
|
||||
|
||||
@@ -124,7 +124,14 @@
|
||||
v-once
|
||||
class="mx-5 mt-1"
|
||||
>
|
||||
{{ $t('g1g1Limitations') }}
|
||||
{{ $t('g1g1Limitations', {
|
||||
promoStartMonth,
|
||||
promoStartOrdinal,
|
||||
promoStartTime,
|
||||
promoEndMonth,
|
||||
promoEndOrdinal,
|
||||
promoEndTime,
|
||||
}) }}
|
||||
</p>
|
||||
</div>
|
||||
</b-modal>
|
||||
@@ -289,6 +296,7 @@ h2 {
|
||||
import debounce from 'lodash/debounce';
|
||||
import find from 'lodash/find';
|
||||
import isUUID from 'validator/lib/isUUID';
|
||||
import moment from 'moment';
|
||||
import { mapState } from '@/libs/store';
|
||||
import closeIcon from '@/assets/svg/close.svg';
|
||||
import bigGiftIcon from '@/assets/svg/big-gift.svg';
|
||||
@@ -318,12 +326,35 @@ export default {
|
||||
if (this.userSearchTerm.length < 1) return true;
|
||||
return typeof this.foundUser._id === 'undefined';
|
||||
},
|
||||
|
||||
userInputInvalidIssues () {
|
||||
return this.userSearchTerm.length > 0 && this.userNotFound
|
||||
? [this.$t('userWithUsernameOrUserIdNotFound')]
|
||||
: [''];
|
||||
},
|
||||
promoStartMonth () {
|
||||
if (!this.currentEvent) return null;
|
||||
return moment(this.currentEvent.start).format('MMMM');
|
||||
},
|
||||
promoStartOrdinal () {
|
||||
if (!this.currentEvent) return null;
|
||||
return moment(this.currentEvent.start).format('Do');
|
||||
},
|
||||
promoStartTime () {
|
||||
if (!this.currentEvent) return null;
|
||||
return moment(this.currentEvent.start).format('hh:mm A');
|
||||
},
|
||||
promoEndMonth () {
|
||||
if (!this.currentEvent) return null;
|
||||
return moment(this.currentEvent.end).format('MMMM');
|
||||
},
|
||||
promoEndOrdinal () {
|
||||
if (!this.currentEvent) return null;
|
||||
return moment(this.currentEvent.end).format('Do');
|
||||
},
|
||||
promoEndTime () {
|
||||
if (!this.currentEvent) return null;
|
||||
return moment(this.currentEvent.end).format('hh:mm A');
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
userSearchTerm: {
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
>
|
||||
<avatar
|
||||
:member="userReceivingGift"
|
||||
:hideClassBadge="true"
|
||||
:hide-class-badge="true"
|
||||
class="d-flex flex-column mx-auto align-items-center"
|
||||
/>
|
||||
<div class="avatar-spacer"></div>
|
||||
@@ -74,8 +74,8 @@
|
||||
<subscription-options
|
||||
v-show="selectedPage === 'subscription'"
|
||||
class="subscribe-option"
|
||||
:userReceivingGift="userReceivingGift"
|
||||
:receiverName="receiverName"
|
||||
:user-receiving-gift="userReceivingGift"
|
||||
:receiver-name="receiverName"
|
||||
/>
|
||||
|
||||
<!-- gem block -->
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
|
||||
import Subscription from './subscription.vue';
|
||||
import { mockStore } from '../../../config/storybook/mock.data';
|
||||
|
||||
storiesOf('Subscriptions/Detail Page', module)
|
||||
.add('subscribed', () => ({
|
||||
components: { Subscription },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<subscription ></subscription>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
};
|
||||
},
|
||||
store: mockStore({
|
||||
userData: {
|
||||
purchased: {
|
||||
plan: {
|
||||
customerId: 'customer-id',
|
||||
planId: 'plan-id',
|
||||
subscriptionId: 'sub-id',
|
||||
gemsBought: 22,
|
||||
dateUpdated: new Date(2021, 0, 15),
|
||||
consecutive: {
|
||||
count: 2,
|
||||
gemCapExtra: 4,
|
||||
offset: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}),
|
||||
}));
|
||||
@@ -279,7 +279,10 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 nextHourglassDescription" v-once>
|
||||
<div
|
||||
v-once
|
||||
class="mt-4 nextHourglassDescription"
|
||||
>
|
||||
*{{ $t('nextHourglassDescription') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -177,6 +177,7 @@
|
||||
|
||||
.inner-content {
|
||||
margin: 33px auto auto;
|
||||
padding: 0px 24px;
|
||||
}
|
||||
|
||||
.item-notes {
|
||||
|
||||
@@ -447,7 +447,6 @@ function removeStopwordsFromText (text, language) {
|
||||
de: stopword.deu,
|
||||
en: stopword.eng,
|
||||
en_GB: stopword.eng,
|
||||
'en@pirate': stopword.eng.concat(["th'"]),
|
||||
es: stopword.spa,
|
||||
es_419: stopword.spa,
|
||||
fr: stopword.fra,
|
||||
@@ -463,7 +462,6 @@ function removeStopwordsFromText (text, language) {
|
||||
ro: stopword.ron,
|
||||
ru: stopword.rus,
|
||||
sk: stopword.slv,
|
||||
// sr: stopword.,
|
||||
sv: stopword.swe,
|
||||
tr: stopword.tur,
|
||||
uk: stopword.ukr,
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { withKnobs } from '@storybook/addon-knobs';
|
||||
|
||||
import { quests } from '@/../../common/script/content/quests';
|
||||
import questRewards from './questRewards';
|
||||
import itemWithLabel from '../itemWithLabel';
|
||||
import questPopover from './questPopover';
|
||||
|
||||
const stories = storiesOf('Quests/Sub Components', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('questRewads', () => ({
|
||||
components: { questRewards },
|
||||
data () {
|
||||
return {
|
||||
quest: quests.goldenknight2,
|
||||
questWithDrop: quests.stressbeast,
|
||||
questWithGear: quests.moon1,
|
||||
evilsanta: quests.evilsanta,
|
||||
};
|
||||
},
|
||||
template: `
|
||||
<div>
|
||||
<quest-rewards :quest="quest"></quest-rewards>
|
||||
<quest-rewards :quest="questWithDrop"></quest-rewards>
|
||||
<quest-rewards :quest="questWithGear"></quest-rewards>
|
||||
<quest-rewards :quest="evilsanta"></quest-rewards>
|
||||
</div>
|
||||
`,
|
||||
}))
|
||||
.add('itemWithLabel', () => ({
|
||||
components: { itemWithLabel },
|
||||
data () {
|
||||
return {
|
||||
};
|
||||
},
|
||||
template: `
|
||||
<div>
|
||||
<item-with-label :item="{}">
|
||||
<div slot="itemContent">
|
||||
|
||||
</div>
|
||||
<div slot="itemImage">
|
||||
Image
|
||||
</div>
|
||||
<div slot="label">
|
||||
Label
|
||||
</div>
|
||||
</item-with-label>
|
||||
|
||||
<item-with-label :item="{}" label-class="purple">
|
||||
<div slot="itemContent">
|
||||
|
||||
</div>
|
||||
<div slot="itemImage">
|
||||
Image
|
||||
</div>
|
||||
<div slot="label">
|
||||
Label
|
||||
</div>
|
||||
</item-with-label>
|
||||
</div>
|
||||
`,
|
||||
}))
|
||||
.add('questPopover', () => ({
|
||||
components: { questPopover },
|
||||
data () {
|
||||
return {
|
||||
quest: quests.goldenknight2,
|
||||
quest2: quests.moon1,
|
||||
};
|
||||
},
|
||||
template: `
|
||||
<div>
|
||||
<quest-popover :item="quest"></quest-popover>
|
||||
<quest-popover :item="quest2"></quest-popover>
|
||||
</div>
|
||||
`,
|
||||
}));
|
||||
@@ -1,215 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { boolean, withKnobs } from '@storybook/addon-knobs';
|
||||
|
||||
import Notification from './notification';
|
||||
import Notifications from './notifications';
|
||||
import notificationsMixin from '../../mixins/notifications';
|
||||
|
||||
const stories = storiesOf('Notifications', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('notifications overview', () => ({
|
||||
components: {
|
||||
Notification,
|
||||
},
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<div style="display: flex; flex-wrap: wrap; align-items: flex-start">
|
||||
<Notification v-for="notification of notifications"
|
||||
:notification="notification"
|
||||
:style="{outline: showBounds ? '1px solid green': ''}"
|
||||
style="margin-right: 1rem">
|
||||
|
||||
</Notification> <br/>
|
||||
</div>
|
||||
</div>
|
||||
`,
|
||||
|
||||
data () {
|
||||
const notifications = [];
|
||||
|
||||
notifications.push({
|
||||
type: 'hp',
|
||||
sign: '+',
|
||||
text: '+2',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'hp',
|
||||
sign: '-',
|
||||
text: '-2',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'mp',
|
||||
sign: '+',
|
||||
text: '+2',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'mp',
|
||||
sign: '-',
|
||||
text: '-2',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'xp',
|
||||
sign: '+',
|
||||
text: '+12',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'xp',
|
||||
sign: '-',
|
||||
text: '-12',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'gp',
|
||||
sign: '+',
|
||||
text: '+12',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'gp',
|
||||
sign: '-',
|
||||
text: '-12',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'streak',
|
||||
text: '12',
|
||||
});
|
||||
|
||||
|
||||
notifications.push({
|
||||
type: 'damage',
|
||||
sign: '+',
|
||||
text: '12',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'drop',
|
||||
icon: 'shop_weapon_wizard_2',
|
||||
text: 'Dropped something with a longer text to try',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'drop',
|
||||
icon: 'Pet_Egg_FlyingPig',
|
||||
text: 'Dropped flying pig egg',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'drop',
|
||||
icon: 'Pet_Food_Strawberry',
|
||||
text: 'You’ve found a Strawberry!',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'info',
|
||||
text: 'Info',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'success',
|
||||
text: 'Success!',
|
||||
});
|
||||
notifications.push({
|
||||
type: 'crit',
|
||||
text: 'Crit!',
|
||||
});
|
||||
notifications.push({
|
||||
type: 'lvl',
|
||||
text: 'Lvl Up',
|
||||
});
|
||||
|
||||
notifications.push({
|
||||
type: 'error',
|
||||
text: 'This is an error message. If it is too long, we can wrap to show the rest of the message',
|
||||
});
|
||||
|
||||
return {
|
||||
notifications,
|
||||
};
|
||||
},
|
||||
props: {
|
||||
showBounds: {
|
||||
default: boolean('show bounds', false),
|
||||
},
|
||||
},
|
||||
}))
|
||||
.add('trigger notifications', () => ({
|
||||
components: {
|
||||
Notifications,
|
||||
},
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<button @click="addNotification()">Add Notifications</button>
|
||||
|
||||
<button @click="crit(1337)">Crit</button>
|
||||
|
||||
<button @click="drop('Drop', {type:'weapon', key: 'wizard_2'})">Drop</button>
|
||||
|
||||
<button @click="quest('quest', 'val')">Quest</button>
|
||||
<button @click="damage(-13)">Damage</button>
|
||||
<button @click="exp(42)">Exp</button>
|
||||
<button @click="error('some error')">Error</button>
|
||||
|
||||
<br/>
|
||||
|
||||
<button @click="gp(23, 0)">Gold</button>
|
||||
|
||||
|
||||
<button @click="hp(23)">HP</button>
|
||||
<button @click="mp(23)">MP</button>
|
||||
|
||||
<button @click="lvl()">LVL</button>
|
||||
|
||||
<button @click="streak('Streak')">Streak</button>
|
||||
|
||||
<br/>
|
||||
<button @click="markdown('You cast a skill')">Markdown</button>
|
||||
|
||||
|
||||
<Notifications :prevent-queue="preventQueue"
|
||||
:debug-mode="debugMode"
|
||||
:style="{outline: showBounds ? '1px solid green': ''}">
|
||||
</Notifications>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
showBounds: {
|
||||
default: boolean('show bounds', false),
|
||||
},
|
||||
preventQueue: {
|
||||
default: boolean('prevent removing', false),
|
||||
},
|
||||
debugMode: {
|
||||
default: boolean('debug mode', true),
|
||||
},
|
||||
},
|
||||
data () {
|
||||
return {};
|
||||
},
|
||||
mixins: [notificationsMixin],
|
||||
methods: {
|
||||
addNotification () {
|
||||
this.text('notification!!');
|
||||
this.text('notification2!!');
|
||||
this.text('notification3!!');
|
||||
this.error('This should stay visible');
|
||||
this.text('notification4!!');
|
||||
this.exp(125);
|
||||
this.damage(-2);
|
||||
|
||||
this.error('This should stay visible too');
|
||||
this.text('notification5!!');
|
||||
this.exp(125);
|
||||
this.damage(-2);
|
||||
},
|
||||
},
|
||||
}));
|
||||
@@ -270,6 +270,11 @@ export default {
|
||||
return `${this.notification.type} ${this.negative}`;
|
||||
},
|
||||
},
|
||||
mounted () {
|
||||
if (this.notification.type === 'drop' && this.notification.emptied) {
|
||||
this.$root.$emit('bv::show::modal', 'armoire-empty');
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleOnClick () {
|
||||
if (typeof this.notification.onClick === 'function') {
|
||||
|
||||
@@ -153,7 +153,6 @@
|
||||
<div class="body-text">
|
||||
<p v-html="$t('sunsetFaqPara20')"></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- sidebar -->
|
||||
|
||||
@@ -1,85 +1,304 @@
|
||||
<template>
|
||||
<div
|
||||
class="container-fluid"
|
||||
role="tablist"
|
||||
>
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-6 offset-md-3">
|
||||
<h1
|
||||
v-once
|
||||
id="faq-heading"
|
||||
>
|
||||
{{ $t('frequentlyAskedQuestions') }}
|
||||
</h1>
|
||||
<div
|
||||
v-for="(entry, index) in faq.questions"
|
||||
:key="index"
|
||||
class="faq-question"
|
||||
>
|
||||
<h2
|
||||
<div class="top-container mx-auto">
|
||||
<div class="main-text mr-4 col-8">
|
||||
<!-- title -->
|
||||
<div
|
||||
class="title-details"
|
||||
role="tablist"
|
||||
>
|
||||
<div class="body-text">
|
||||
<h1
|
||||
v-once
|
||||
v-if="index === 0"
|
||||
id="faq-heading"
|
||||
>
|
||||
{{ $t('general') }}
|
||||
</h2>
|
||||
<h2
|
||||
v-once
|
||||
v-if="entry.heading === 'party-with-friends'"
|
||||
id="parties"
|
||||
{{ $t('frequentlyAskedQuestions') }}
|
||||
</h1>
|
||||
<!-- subheadings -->
|
||||
<div
|
||||
v-for="(entry, index) in faq.questions"
|
||||
:key="index"
|
||||
class="body-text"
|
||||
>
|
||||
{{ $t('parties') }}
|
||||
</h2>
|
||||
<h3
|
||||
v-once
|
||||
v-b-toggle="entry.heading"
|
||||
role="tab"
|
||||
variant="info"
|
||||
@click="handleClick($event)"
|
||||
>
|
||||
{{ entry.question }}
|
||||
</h3>
|
||||
<b-collapse
|
||||
:id="entry.heading"
|
||||
:visible="isVisible(entry.heading)"
|
||||
accordion="faq"
|
||||
role="tabpanel"
|
||||
>
|
||||
<div
|
||||
<h2
|
||||
v-if="index === 0"
|
||||
v-once
|
||||
v-markdown="entry.web"
|
||||
class="card-body"
|
||||
></div>
|
||||
</b-collapse>
|
||||
>
|
||||
{{ $t('commonQuestions') }}
|
||||
</h2>
|
||||
<h2
|
||||
v-if="entry.heading === 'play-with-others'"
|
||||
v-once
|
||||
id="parties"
|
||||
>
|
||||
{{ $t('parties') }}
|
||||
</h2>
|
||||
<h2
|
||||
v-if="entry.heading === 'what-is-group-plan'"
|
||||
v-once
|
||||
id="group-plans"
|
||||
>
|
||||
{{ $t('groupPlan') }}
|
||||
</h2>
|
||||
<!-- entry header -->
|
||||
<h3
|
||||
v-once
|
||||
v-b-toggle="entry.heading"
|
||||
role="tab"
|
||||
variant="info"
|
||||
class="headings"
|
||||
@click="handleClick($event)"
|
||||
>
|
||||
{{ entry.question }}
|
||||
</h3>
|
||||
<b-collapse
|
||||
:id="entry.heading"
|
||||
:visible="isVisible(entry.heading)"
|
||||
accordion="faq"
|
||||
role="tabpanel"
|
||||
>
|
||||
<!-- questions -->
|
||||
<div
|
||||
v-once
|
||||
v-markdown="entry.web"
|
||||
class="card-body p-0 pb-3"
|
||||
></div>
|
||||
</b-collapse>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- sidebar -->
|
||||
<div class="sidebar py-4 d-flex flex-column">
|
||||
<!-- staff -->
|
||||
<div class="ml-4">
|
||||
<h2>
|
||||
{{ $t('staff') }}
|
||||
</h2>
|
||||
<div class="d-flex flex-wrap">
|
||||
<div
|
||||
v-for="user in staff"
|
||||
:key="user.uuid"
|
||||
class="staff col-6 p-0"
|
||||
>
|
||||
<div class="d-flex">
|
||||
<router-link
|
||||
class="title"
|
||||
:to="{'name': 'userProfile', 'params': {'userId': user.uuid}}"
|
||||
>
|
||||
{{ user.name }}
|
||||
</router-link>
|
||||
<div
|
||||
v-if="user.type === 'Staff'"
|
||||
class="svg-icon staff-icon ml-1"
|
||||
v-html="icons.tierStaff"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- player tiers -->
|
||||
<div class="ml-4">
|
||||
<h2 class="mt-4 mb-1">
|
||||
{{ $t('playerTiers') }}
|
||||
</h2>
|
||||
<ul class="tier-list">
|
||||
<li
|
||||
v-once
|
||||
class="tier1 d-flex justify-content-center"
|
||||
>
|
||||
{{ $t('tier1') }}
|
||||
<div
|
||||
class="svg-icon ml-1"
|
||||
v-html="icons.tier1"
|
||||
></div>
|
||||
</li>
|
||||
<li
|
||||
v-once
|
||||
class="tier2 d-flex justify-content-center"
|
||||
>
|
||||
{{ $t('tier2') }}
|
||||
<div
|
||||
class="svg-icon ml-1"
|
||||
v-html="icons.tier2"
|
||||
></div>
|
||||
</li>
|
||||
<li
|
||||
v-once
|
||||
class="tier3 d-flex justify-content-center"
|
||||
>
|
||||
{{ $t('tier3') }}
|
||||
<div
|
||||
class="svg-icon ml-1"
|
||||
v-html="icons.tier3"
|
||||
></div>
|
||||
</li>
|
||||
<li
|
||||
v-once
|
||||
class="tier4 d-flex justify-content-center"
|
||||
>
|
||||
{{ $t('tier4') }}
|
||||
<div
|
||||
class="svg-icon ml-1"
|
||||
v-html="icons.tier4"
|
||||
></div>
|
||||
</li>
|
||||
<li
|
||||
v-once
|
||||
class="tier5 d-flex justify-content-center"
|
||||
>
|
||||
{{ $t('tier5') }}
|
||||
<div
|
||||
class="svg-icon ml-1"
|
||||
v-html="icons.tier5"
|
||||
></div>
|
||||
</li>
|
||||
<li
|
||||
v-once
|
||||
class="tier6 d-flex justify-content-center"
|
||||
>
|
||||
{{ $t('tier6') }}
|
||||
<div
|
||||
class="svg-icon ml-1"
|
||||
v-html="icons.tier6"
|
||||
></div>
|
||||
</li>
|
||||
<li
|
||||
v-once
|
||||
class="tier7 d-flex justify-content-center"
|
||||
>
|
||||
{{ $t('tier7') }}
|
||||
<div
|
||||
class="svg-icon ml-1"
|
||||
v-html="icons.tier7"
|
||||
></div>
|
||||
</li>
|
||||
<li
|
||||
v-once
|
||||
class="moderator d-flex justify-content-center"
|
||||
>
|
||||
{{ $t('tierModerator') }}
|
||||
<div
|
||||
class="svg-icon ml-1"
|
||||
v-html="icons.tierMod"
|
||||
></div>
|
||||
</li>
|
||||
<li
|
||||
v-once
|
||||
class="staff d-flex justify-content-center"
|
||||
>
|
||||
{{ $t('tierStaff') }}
|
||||
<div
|
||||
class="svg-icon ml-1"
|
||||
v-html="icons.tierStaff"
|
||||
></div>
|
||||
</li>
|
||||
<li
|
||||
v-once
|
||||
class="npc d-flex justify-content-center"
|
||||
>
|
||||
{{ $t('tierNPC') }}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- Daniel in sweet, sweet retirement with Jorts -->
|
||||
<div>
|
||||
<div class="gradient">
|
||||
</div>
|
||||
<div
|
||||
class="grassy-meadow-backdrop"
|
||||
:style="{'background-image': imageURLs.background}"
|
||||
>
|
||||
<div
|
||||
class="daniel_front"
|
||||
:style="{'background-image': imageURLs.npc}"
|
||||
></div>
|
||||
<div
|
||||
class="pixel-border"
|
||||
:style="{'background-image': imageURLs.pixel_border}"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- email admin -->
|
||||
<div class="d-flex flex-column justify-content-center">
|
||||
<div class="question mx-auto">
|
||||
{{ $t('anotherQuestion') }}
|
||||
</div>
|
||||
<div
|
||||
class="contact mx-auto"
|
||||
>
|
||||
<p v-html="$t('contactAdmin')"></p> <!-- there's html in here -->
|
||||
</div>
|
||||
<hr>
|
||||
<p
|
||||
v-once
|
||||
v-markdown="stillNeedHelp"
|
||||
></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang='scss' scoped>
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
|
||||
h1 {
|
||||
line-height: 1.33;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #34313a;
|
||||
border-bottom: 1px solid #e1e0e3;
|
||||
color: $gray-10;
|
||||
margin-top: 24px;
|
||||
|
||||
}
|
||||
li {
|
||||
padding-bottom: 16px;
|
||||
|
||||
&::marker {
|
||||
size: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 21px;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.top-container {
|
||||
display: flex;
|
||||
margin-top: 80px;
|
||||
width: 66.67%;
|
||||
|
||||
@media (max-width: 1024px) {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
}
|
||||
|
||||
.main-text {
|
||||
.body-text {
|
||||
color: $gray-10;
|
||||
font-size: 14px;
|
||||
line-height: 1.71;
|
||||
}
|
||||
|
||||
.headings {
|
||||
color: $purple-200;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
line-height: 1.75;
|
||||
}
|
||||
}
|
||||
|
||||
.faq-question {
|
||||
a {
|
||||
color: $purple-200;
|
||||
text-decoration: none;
|
||||
color: #4F2A93;
|
||||
}
|
||||
|
||||
h3 {
|
||||
cursor: pointer;
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
line-height: 1.75;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
@@ -87,27 +306,200 @@
|
||||
}
|
||||
|
||||
.card-body {
|
||||
padding: 0;
|
||||
font-size: 14px;
|
||||
line-height: 1.71;
|
||||
margin-bottom: 1em;
|
||||
margin-bottom: 16px;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.container-fluid {
|
||||
position: relative;
|
||||
top: 2rem;
|
||||
}
|
||||
.sidebar {
|
||||
height: fit-content;
|
||||
background-color: $gray-700;
|
||||
border-radius: 16px;
|
||||
width: 330px;
|
||||
margin-bottom: 24px;
|
||||
|
||||
@media only screen and (max-width: 768px) {
|
||||
.container-fluid {
|
||||
margin: auto;
|
||||
h2 {
|
||||
color: $gray-10;
|
||||
font-family: Roboto;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
line-height: 1.71;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
.staff {
|
||||
.staff-icon {
|
||||
margin-top: 5px;
|
||||
width: 10px;
|
||||
}
|
||||
|
||||
.title {
|
||||
color: $purple-300;
|
||||
display: inline-block;
|
||||
font-weight: bold;
|
||||
height: 24px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.tier-list {
|
||||
font-size: 1em !important;
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
width: 282px;
|
||||
|
||||
li {
|
||||
border-radius: 4px;
|
||||
border: solid 1px $gray-500;
|
||||
font-weight: bold;
|
||||
height: 40px;
|
||||
line-height: 1.71;
|
||||
margin-bottom: 8px;
|
||||
margin-right: 4px;
|
||||
padding: 8px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.tier1 {
|
||||
color: #c42870;
|
||||
.svg-icon {
|
||||
margin-top: 5px;
|
||||
width: 11px;
|
||||
}
|
||||
}
|
||||
|
||||
.tier2 {
|
||||
color: #b01515;
|
||||
.svg-icon {
|
||||
margin-top: 5px;
|
||||
width: 11px;
|
||||
}
|
||||
}
|
||||
|
||||
.tier3 {
|
||||
color: #d70e14;
|
||||
.svg-icon {
|
||||
margin-top: 4px;
|
||||
width: 13px;
|
||||
}
|
||||
}
|
||||
|
||||
.tier4 {
|
||||
color: #c24d00;
|
||||
.svg-icon {
|
||||
margin-top: 4px;
|
||||
width: 13px;
|
||||
}
|
||||
}
|
||||
|
||||
.tier5 {
|
||||
color: #9e650f;
|
||||
.svg-icon {
|
||||
margin-top: 7px;
|
||||
width: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.tier6 {
|
||||
color: #2b8363;
|
||||
.svg-icon {
|
||||
margin-top: 7px;
|
||||
width: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.tier7 {
|
||||
color: #167e87;
|
||||
.svg-icon {
|
||||
margin-top: 4px;
|
||||
width: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.moderator {
|
||||
color: #277eab;
|
||||
.svg-icon {
|
||||
margin-top: 3px;
|
||||
width: 13px;
|
||||
}
|
||||
}
|
||||
|
||||
.staff {
|
||||
color: #6133b4;
|
||||
.svg-icon {
|
||||
margin-top: 7px;
|
||||
width: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.npc {
|
||||
color: $black;
|
||||
}
|
||||
}
|
||||
|
||||
.gradient {
|
||||
background-image: linear-gradient(to bottom, $gray-700 0%, rgba(249, 249, 249, 0) 100%);
|
||||
height: 100px;
|
||||
position: absolute;
|
||||
margin: -1px 0 116px;
|
||||
width: 330px;
|
||||
}
|
||||
|
||||
.grassy-meadow-backdrop {
|
||||
background-repeat: repeat-x;
|
||||
height: 246px;
|
||||
width: 330px;
|
||||
}
|
||||
|
||||
.daniel_front {
|
||||
background-repeat: no-repeat;
|
||||
height: 246px;
|
||||
margin: 0 auto;
|
||||
width: 330px;
|
||||
}
|
||||
|
||||
.pixel-border {
|
||||
background-repeat: no-repeat;
|
||||
height: 30px;
|
||||
margin-top: -30px;
|
||||
position: absolute;
|
||||
width: 330px;
|
||||
}
|
||||
|
||||
.question {
|
||||
color: $gray-10;
|
||||
font-size: 1em;
|
||||
font-weight: bold;
|
||||
line-height: 1.71;
|
||||
margin-top: 24px;
|
||||
}
|
||||
|
||||
.contact p {
|
||||
font-size: 1em;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import find from 'lodash/find';
|
||||
import markdownDirective from '@/directives/markdown';
|
||||
import { mapState } from '@/libs/store';
|
||||
|
||||
import tier1 from '@/assets/svg/tier-1.svg';
|
||||
import tier2 from '@/assets/svg/tier-2.svg';
|
||||
import tier3 from '@/assets/svg/tier-3.svg';
|
||||
import tier4 from '@/assets/svg/tier-4.svg';
|
||||
import tier5 from '@/assets/svg/tier-5.svg';
|
||||
import tier6 from '@/assets/svg/tier-6.svg';
|
||||
import tier7 from '@/assets/svg/tier-7.svg';
|
||||
import tierMod from '@/assets/svg/tier-mod.svg';
|
||||
import tierNPC from '@/assets/svg/tier-npc.svg';
|
||||
import tierStaff from '@/assets/svg/tier-staff.svg';
|
||||
import staffList from '../../libs/staffList';
|
||||
|
||||
export default {
|
||||
directives: {
|
||||
@@ -118,8 +510,41 @@ export default {
|
||||
faq: {},
|
||||
headings: [],
|
||||
stillNeedHelp: '',
|
||||
icons: Object.freeze({
|
||||
tier1,
|
||||
tier2,
|
||||
tier3,
|
||||
tier4,
|
||||
tier5,
|
||||
tier6,
|
||||
tier7,
|
||||
tierMod,
|
||||
tierNPC,
|
||||
tierStaff,
|
||||
}),
|
||||
staff: staffList,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
currentEventList: 'worldState.data.currentEventList',
|
||||
}),
|
||||
imageURLs () {
|
||||
const currentEvent = find(this.currentEventList, event => Boolean(event.season));
|
||||
if (!currentEvent) {
|
||||
return {
|
||||
background: 'url(/static/npc/normal/tavern_background.png)',
|
||||
npc: 'url(/static/npc/normal/tavern_npc.png)',
|
||||
pixel_border: 'url(/static/npc/normal/pixel_border.png)',
|
||||
};
|
||||
}
|
||||
return {
|
||||
background: `url(/static/npc/${currentEvent.season}/tavern_background.png)`,
|
||||
npc: `url(/static/npc/${currentEvent.season}/tavern_npc.png)`,
|
||||
pixel_border: 'url(/static/npc/normal/pixel_border.png)',
|
||||
};
|
||||
},
|
||||
},
|
||||
async mounted () {
|
||||
this.$store.dispatch('common:setTitle', {
|
||||
section: this.$t('help'),
|
||||
@@ -130,6 +555,7 @@ export default {
|
||||
this.headings.push(entry.heading);
|
||||
}
|
||||
this.stillNeedHelp = this.faq.stillNeedHelp.web;
|
||||
document.body.style.background = '#ffffff';
|
||||
},
|
||||
methods: {
|
||||
isVisible (heading) {
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
:to="!isUserLoggedIn ? '/static/home' : '/'"
|
||||
>
|
||||
<div
|
||||
v-if="this.$route.name === 'plans'"
|
||||
v-if="$route.name === 'plans'"
|
||||
class="logo svg-icon"
|
||||
v-html="icons.purpleLogo"
|
||||
></div>
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
<div>
|
||||
<chat-banner />
|
||||
<static-header
|
||||
v-if="showContentWrap"
|
||||
:class="{
|
||||
'home-header': ['home', 'front'].indexOf($route.name) !== -1,
|
||||
'white-header': this.$route.name === 'plans'
|
||||
}"
|
||||
v-if="showContentWrap"
|
||||
:class="{
|
||||
'home-header': ['home', 'front'].indexOf($route.name) !== -1,
|
||||
'white-header': $route.name === 'plans'
|
||||
}"
|
||||
/>
|
||||
<div class="static-wrapper">
|
||||
<router-view />
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<strong> @{{ completion.userName }} </strong>
|
||||
</div>
|
||||
<div
|
||||
v-if='completion.completedDate'
|
||||
v-if="completion.completedDate"
|
||||
:class="{'green-10': completion.completed}"
|
||||
>
|
||||
{{ completion.completedDateString }}
|
||||
@@ -54,16 +54,16 @@
|
||||
v-html="message"
|
||||
></div>
|
||||
<div
|
||||
class="d-flex ml-auto mr-1 my-auto"
|
||||
v-if="task.group.assignedUsers && ['daily','todo'].indexOf(task.type) !== -1"
|
||||
class="d-flex ml-auto mr-1 my-auto"
|
||||
>
|
||||
<span
|
||||
v-if="assignedUsersCount > 1"
|
||||
class="d-flex mr-1 my-auto"
|
||||
>
|
||||
<span
|
||||
class="small-check"
|
||||
v-if="!showStatus && completionsCount"
|
||||
class="small-check"
|
||||
>
|
||||
<div
|
||||
class="svg-icon color"
|
||||
@@ -73,9 +73,9 @@
|
||||
</div>
|
||||
</span>
|
||||
<span
|
||||
v-if="!showStatus && completionsCount"
|
||||
class="ml-1 mr-2 my-auto"
|
||||
:class="{'green-10': completionsCount === assignedUsersCount}"
|
||||
v-if="!showStatus && completionsCount"
|
||||
>
|
||||
{{ completionsCount }}/{{ assignedUsersCount }}
|
||||
</span>
|
||||
@@ -98,10 +98,10 @@
|
||||
class="mr-1 d-inline-flex"
|
||||
>
|
||||
<span
|
||||
v-html="icons.lastComplete"
|
||||
v-b-tooltip.hover.bottom="$t('lastCompleted')"
|
||||
class="svg-icon color last-completed mr-1 my-auto"
|
||||
:class="{'gray-200': completionsCount !== assignedUsersCount}"
|
||||
v-html="icons.lastComplete"
|
||||
>
|
||||
</span>
|
||||
<span
|
||||
|
||||
@@ -697,13 +697,13 @@ export default {
|
||||
},
|
||||
setColumnBackgroundVisibility () {
|
||||
this.$nextTick(() => {
|
||||
if (!this.$refs.columnBackground || !this.$refs.tasksList) return;
|
||||
if (!this.$refs.columnBackground) return;
|
||||
|
||||
const tasksWrapperEl = this.$refs.tasksWrapper;
|
||||
|
||||
const tasksWrapperHeight = tasksWrapperEl.offsetHeight;
|
||||
const quickAddHeight = this.$refs.quickAdd ? this.$refs.quickAdd.offsetHeight : 0;
|
||||
const tasksListHeight = this.$refs.tasksList.$el.offsetHeight;
|
||||
const tasksListHeight = this.$refs.tasksList ? this.$refs.tasksList.$el.offsetHeight : 0;
|
||||
|
||||
let combinedTasksHeights = tasksListHeight + quickAddHeight;
|
||||
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { withKnobs } from '@storybook/addon-knobs';
|
||||
|
||||
import CheckList from './checklist.vue';
|
||||
|
||||
const stories = storiesOf('CheckList', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('simple', () => ({
|
||||
components: { CheckList },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px; background: white">
|
||||
<check-list :items.sync="checklist">
|
||||
|
||||
</check-list>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
Data: <br/>
|
||||
{{ checklist }}
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
checklist: [
|
||||
{
|
||||
id: 'c0890cd2-3c69-4889-bf2c-b63ac0ee6628',
|
||||
text: 'first',
|
||||
completed: false,
|
||||
},
|
||||
{
|
||||
id: '5b913020-b340-4099-9a53-afcd27dc5637',
|
||||
text: 'second',
|
||||
completed: true,
|
||||
},
|
||||
{
|
||||
id: '77b52a8e-4a0e-4717-9650-55fb5462b42f',
|
||||
text: 'third',
|
||||
completed: false,
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
}));
|
||||
@@ -10,8 +10,8 @@
|
||||
<div
|
||||
class="svg-icon icon-16 my-auto ml-auto pointer"
|
||||
:class="{'chevron-flip': showChecklist}"
|
||||
v-html="icons.chevron"
|
||||
@click="showChecklist = !showChecklist"
|
||||
v-html="icons.chevron"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,124 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { withKnobs, number } from '@storybook/addon-knobs';
|
||||
|
||||
import MultiList from './multiList';
|
||||
import SelectMulti from './selectMulti';
|
||||
|
||||
const stories = storiesOf('Multiple Select List', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
const exampleTagList = [
|
||||
1, 2, 3,
|
||||
];
|
||||
|
||||
const allTags = [
|
||||
{
|
||||
id: 1,
|
||||
name: 'Small Tag',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: 'This is a long tag',
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: 'This is a long tag',
|
||||
},
|
||||
{
|
||||
id: 12,
|
||||
name: 'This is a different tag',
|
||||
},
|
||||
{
|
||||
id: 9001,
|
||||
name: 'OVER 9000',
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
name: 'Four',
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
name: 'Five :tada:',
|
||||
challenge: true,
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
name: 'Six',
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
name: 'Seven **Markdown**',
|
||||
},
|
||||
];
|
||||
|
||||
stories
|
||||
.add('tag-list', () => ({
|
||||
components: { MultiList },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<MultiList :max-items="maxTags" :items="tagList"></MultiList>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
tagList: {
|
||||
default: allTags,
|
||||
},
|
||||
maxTags: {
|
||||
default: number('Max-Tags', 3),
|
||||
},
|
||||
},
|
||||
}))
|
||||
.add('select-tag', () => ({
|
||||
components: { SelectMulti },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<SelectMulti :selectedItems="tagList"
|
||||
:add-new="true"
|
||||
:all-items="allTags"
|
||||
style="width: 400px"
|
||||
@changed="tagList = $event"
|
||||
@addNew="added = $event">
|
||||
|
||||
</SelectMulti>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
Added event: {{ added }}
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
tagList: exampleTagList,
|
||||
added: '',
|
||||
};
|
||||
},
|
||||
props: {
|
||||
allTags: {
|
||||
default: allTags,
|
||||
},
|
||||
},
|
||||
}))
|
||||
.add('longer select-tag', () => ({
|
||||
components: { SelectMulti },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<SelectMulti :selectedItems="tagList"
|
||||
:all-items="allTags"
|
||||
style="width: 400px"
|
||||
@changed="tagList = $event"></SelectMulti>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
tagList: [],
|
||||
};
|
||||
},
|
||||
props: {
|
||||
allTags: {
|
||||
default: allTags,
|
||||
},
|
||||
},
|
||||
}));
|
||||
@@ -27,7 +27,7 @@
|
||||
@remove-item="removeItem($event)"
|
||||
/>
|
||||
</b-dropdown-header>
|
||||
<template v-slot:button-content>
|
||||
<template #button-content>
|
||||
<multi-list
|
||||
class="d-flex flex-wrap"
|
||||
:items="selectedItemsAsObjects"
|
||||
|
||||
@@ -19,14 +19,14 @@
|
||||
/>
|
||||
</div>
|
||||
</b-dropdown-header>
|
||||
<template v-slot:button-content>
|
||||
<template #button-content>
|
||||
<div
|
||||
class="mr-1 d-inline-flex align-items-center"
|
||||
@click.stop="selectItem({id: selectedItem})"
|
||||
v-markdown="
|
||||
allItemsMap[selectedItem] ? `@${allItemsMap[selectedItem].name}`
|
||||
: emptyMessage
|
||||
"
|
||||
class="mr-1 d-inline-flex align-items-center"
|
||||
@click.stop="selectItem({id: selectedItem})"
|
||||
>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
:placeholder="placeholder"
|
||||
@select="selectItem($event)"
|
||||
>
|
||||
<template v-slot:item="{ item }">
|
||||
<template #item="{ item }">
|
||||
<span class="label">{{ $t(item) }}</span>
|
||||
</template>
|
||||
</select-list>
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
<div
|
||||
class="spell-border"
|
||||
:class="{ disabled: spellDisabled(key) || user.stats.lvl < skill.lvl,
|
||||
'insufficient-mana': user.stats.mp < skill.mana }"
|
||||
'insufficient-mana': user.stats.mp < skill.mana }"
|
||||
>
|
||||
<div
|
||||
class="spell"
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
<template>
|
||||
<div class="task-wrapper" draggable>
|
||||
<div
|
||||
class="task-wrapper"
|
||||
draggable
|
||||
>
|
||||
<div
|
||||
class="task transition"
|
||||
:class="[{
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
</div>
|
||||
<div class="summary-block">
|
||||
<h3> {{ $t('description') }} </h3>
|
||||
<p v-html="summarySentence" ></p>
|
||||
<p v-html="summarySentence"></p>
|
||||
</div>
|
||||
<div
|
||||
v-if="task.checklist && task.checklist.length > 0"
|
||||
@@ -51,13 +51,13 @@
|
||||
>
|
||||
<checklist
|
||||
:items.sync="task.checklist"
|
||||
:disableDrag="true"
|
||||
:disableEdit="true"
|
||||
:disable-drag="true"
|
||||
:disable-edit="true"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="summary-block"
|
||||
v-if="assignedUsernames.length > 0"
|
||||
class="summary-block"
|
||||
>
|
||||
<h3> {{ $t('assignedTo') }} </h3>
|
||||
<div
|
||||
|
||||
@@ -173,15 +173,17 @@
|
||||
id="create-task-btn"
|
||||
class="btn btn-primary create-btn d-flex align-items-center"
|
||||
:class="{open: openCreateBtn}"
|
||||
tabindex="0"
|
||||
@click.stop.prevent="openCreateBtn = !openCreateBtn"
|
||||
@keypress.enter="openCreateBtn = !openCreateBtn"
|
||||
tabindex="0"
|
||||
>
|
||||
<div
|
||||
class="svg-icon icon-10 color"
|
||||
v-html="icons.positive"
|
||||
></div>
|
||||
<div class="ml-75 mr-1"> {{ $t('addTask') }} </div>
|
||||
<div class="ml-75 mr-1">
|
||||
{{ $t('addTask') }}
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="openCreateBtn"
|
||||
@@ -190,8 +192,8 @@
|
||||
<div
|
||||
v-for="type in columns"
|
||||
:key="type"
|
||||
@click="createTask(type)"
|
||||
class="dropdown-item d-flex px-2 py-1"
|
||||
@click="createTask(type)"
|
||||
>
|
||||
<div class="d-flex align-items-center justify-content-center task-icon">
|
||||
<div
|
||||
|
||||
@@ -1,129 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { withKnobs } from '@storybook/addon-knobs';
|
||||
|
||||
import positiveIcon from '@/assets/svg/positive.svg';
|
||||
|
||||
const stories = storiesOf('Buttons', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('all', () => ({
|
||||
components: { },
|
||||
data () {
|
||||
return {
|
||||
icon: positiveIcon,
|
||||
};
|
||||
},
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px; display: flex; flex-direction: row;">
|
||||
<div class="mr-3">
|
||||
<h3>Button</h3>
|
||||
<button class="btn btn-primary">Button Primary</button>
|
||||
<br/><br/>
|
||||
<button class="btn btn-primary" disabled>Button Primary Disabled</button>
|
||||
<br/><br/>
|
||||
|
||||
<button class="btn btn-secondary">Button Secondary</button>
|
||||
<br/><br/>
|
||||
<button class="btn btn-secondary" disabled>Button Secondary Disabled</button>
|
||||
</div>
|
||||
<div class="">
|
||||
<h3>Button with Icon</h3>
|
||||
<button class="btn btn-primary with-icon">
|
||||
<span class="svg-icon color inline icon-12 mr-2"
|
||||
v-html="icon"
|
||||
>
|
||||
|
||||
</span>
|
||||
<span class="button-label">
|
||||
Button Primary
|
||||
</span>
|
||||
</button>
|
||||
<br/>
|
||||
<button class="btn btn-primary with-icon" disabled>
|
||||
<span class="svg-icon color inline icon-12 mr-2"
|
||||
v-html="icon"
|
||||
>
|
||||
|
||||
</span>
|
||||
<span class="button-label">
|
||||
Button Primary Disabled
|
||||
</span>
|
||||
</button>
|
||||
<br/>
|
||||
|
||||
<button class="btn btn-secondary with-icon">
|
||||
<span class="svg-icon color inline icon-12 mr-2"
|
||||
v-html="icon"
|
||||
>
|
||||
|
||||
</span>
|
||||
<span class="button-label">
|
||||
Button Secondary
|
||||
</span>
|
||||
</button>
|
||||
<br/>
|
||||
<button class="btn btn-secondary with-icon" disabled>
|
||||
<span class="svg-icon color inline icon-12 mr-2"
|
||||
v-html="icon"
|
||||
>
|
||||
|
||||
</span>
|
||||
<span class="button-label">
|
||||
Button Secondary Disabled
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
`,
|
||||
}))
|
||||
.add('dropdowns', () => ({
|
||||
components: { },
|
||||
data () {
|
||||
return {
|
||||
items: ['one', 'two', 'three'],
|
||||
};
|
||||
},
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px; display: flex; flex-direction: row;">
|
||||
<div class="mr-3">
|
||||
<h3>Dropdowns</h3>
|
||||
<b-dropdown
|
||||
text="Dropdown Primary"
|
||||
right="right"
|
||||
>
|
||||
<b-dropdown-item
|
||||
v-for="item in items"
|
||||
:key="item"
|
||||
>
|
||||
{{ item }}
|
||||
</b-dropdown-item>
|
||||
</b-dropdown>
|
||||
<br/><br/>
|
||||
<b-dropdown
|
||||
text="Dropdown Primary Disabled"
|
||||
right="right"
|
||||
disabled
|
||||
>
|
||||
</b-dropdown>
|
||||
</div>
|
||||
<div class="">
|
||||
<h3>Button</h3>
|
||||
<button class="btn btn-secondary">
|
||||
<span class="button-label">
|
||||
Button Primary
|
||||
</span>
|
||||
</button>
|
||||
<br/>
|
||||
<br/>
|
||||
<button class="btn btn-secondary" disabled>
|
||||
<span class="button-label">
|
||||
Button Primary Disabled
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
`,
|
||||
}));
|
||||
@@ -1,70 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { withKnobs } from '@storybook/addon-knobs';
|
||||
|
||||
import Checkbox from './checkbox';
|
||||
import ToggleCheckbox from './toggleCheckbox';
|
||||
|
||||
const stories = storiesOf('Checkbox', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('checkbox', () => ({
|
||||
components: {
|
||||
Checkbox,
|
||||
},
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<Checkbox text="My Checkbox" id="someId"></Checkbox> <br/>
|
||||
<Checkbox text="My Checked Checkbox" id="someOtherId" :checked.sync="checked"></Checkbox>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
checked: true,
|
||||
};
|
||||
},
|
||||
}))
|
||||
.add('Toggle Checkbox Group', () => ({
|
||||
components: {
|
||||
ToggleCheckbox,
|
||||
},
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
{{ checked }}
|
||||
<div class="toggle-group" style="width: 300px">
|
||||
<ToggleCheckbox text="Su"></ToggleCheckbox>
|
||||
<ToggleCheckbox text="Mo"
|
||||
:checked.sync="checked"></ToggleCheckbox>
|
||||
<ToggleCheckbox text="Tu"></ToggleCheckbox>
|
||||
<ToggleCheckbox text="We"
|
||||
:checked.sync="checked"></ToggleCheckbox>
|
||||
<ToggleCheckbox text="Th"></ToggleCheckbox>
|
||||
<ToggleCheckbox text="Fr"
|
||||
:checked.sync="checked"></ToggleCheckbox>
|
||||
<ToggleCheckbox text="Sa"
|
||||
:checked.sync="checked"
|
||||
:disabled="true"></ToggleCheckbox>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
Disabled:
|
||||
<div class="toggle-group" style="width: 300px">
|
||||
<ToggleCheckbox text="Su" :disabled="true"></ToggleCheckbox>
|
||||
<ToggleCheckbox text="Mo" :disabled="true"></ToggleCheckbox>
|
||||
<ToggleCheckbox text="Tu" :disabled="true"></ToggleCheckbox>
|
||||
<ToggleCheckbox text="We" :disabled="true"></ToggleCheckbox>
|
||||
<ToggleCheckbox text="Th" :disabled="true"></ToggleCheckbox>
|
||||
<ToggleCheckbox text="Fr" :disabled="true"></ToggleCheckbox>
|
||||
<ToggleCheckbox text="Sa" :disabled="true"></ToggleCheckbox>
|
||||
</div>
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
checked: true,
|
||||
};
|
||||
},
|
||||
}));
|
||||
@@ -1,32 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { withKnobs, number } from '@storybook/addon-knobs';
|
||||
|
||||
import CountBadge from './countBadge.vue';
|
||||
|
||||
const stories = storiesOf('Count Badge', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('simple', () => ({
|
||||
components: { CountBadge },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<count-badge :count="2" :show="true"></count-badge>
|
||||
</div>
|
||||
`,
|
||||
}))
|
||||
.add('bind count', () => ({
|
||||
components: { CountBadge },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<count-badge :count="count" :show="true"></count-badge>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
count: {
|
||||
default: number('Count', 3),
|
||||
},
|
||||
},
|
||||
}));
|
||||
@@ -1,19 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { withKnobs } from '@storybook/addon-knobs';
|
||||
|
||||
import datepicker from './datepicker.vue';
|
||||
|
||||
const stories = storiesOf('Date Picker', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('simple', () => ({
|
||||
components: { datepicker },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<datepicker></datepicker>
|
||||
</div>
|
||||
`,
|
||||
}));
|
||||
@@ -6,12 +6,11 @@
|
||||
:value="selectedItem"
|
||||
class="array-select inline"
|
||||
:right="true"
|
||||
key-prop="id"
|
||||
:hide-icon="false"
|
||||
:inline-dropdown="false"
|
||||
@select="selectItem($event)"
|
||||
>
|
||||
<template v-slot:item="{ item }">
|
||||
<template #item="{ item }">
|
||||
<span :class="{'dropdown-icon-item': withIcon}">
|
||||
<slot
|
||||
name="item"
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { number, text, withKnobs } from '@storybook/addon-knobs';
|
||||
|
||||
import positiveIcon from '@/assets/svg/positive.svg';
|
||||
|
||||
const stories = storiesOf('Input-Group', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('states', () => ({
|
||||
components: { },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<div class="input-group">
|
||||
<div class="input-group-prepend positive-addon input-group-icon">
|
||||
<div
|
||||
class="svg-icon"
|
||||
v-html="icon"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<input
|
||||
v-model="number"
|
||||
class="form-control"
|
||||
type="number"
|
||||
min="0"
|
||||
required="required"
|
||||
ref="input"
|
||||
>
|
||||
</div>
|
||||
<br />
|
||||
<button class="btn btn-dark" @click="$refs.input.focus()">Focus ^</button>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
<div class="input-group">
|
||||
|
||||
<input
|
||||
v-model="number"
|
||||
class="form-control"
|
||||
type="number"
|
||||
min="0"
|
||||
required="required"
|
||||
>
|
||||
<div class="input-group-append positive-addon input-group-icon">
|
||||
<div
|
||||
class="svg-icon"
|
||||
v-html="icon"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
icon: positiveIcon,
|
||||
};
|
||||
},
|
||||
props: {
|
||||
text: {
|
||||
default: text('Input Text', 'example text'),
|
||||
},
|
||||
number: {
|
||||
default: number('Input Number', 0),
|
||||
},
|
||||
},
|
||||
}));
|
||||
@@ -1,45 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
|
||||
const stories = storiesOf('Margins', module);
|
||||
|
||||
const margins = [
|
||||
'mr-1 ml-1 my-1',
|
||||
'mx-2 ml-3 my-2',
|
||||
'mx-2 ml-1 my-1',
|
||||
'ml-1 mr-4',
|
||||
'ml-2 mr-2 my-1',
|
||||
'ml-75 my-3 mr-2',
|
||||
];
|
||||
|
||||
stories
|
||||
.add('overview', () => ({
|
||||
components: { },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<span class="background inline-block">
|
||||
<span class="content mx-1 my-1 inline-block">
|
||||
<span class="text mx-1 my-1 inline-block">
|
||||
The margin between gray and teal is the margin content.
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<span v-for="m in margins"
|
||||
class="background mx-1 my-1 inline-block">
|
||||
<span class="content inline-block" :class="m">
|
||||
<span class="mx-1 my-1 inline-block">{{m}}</span>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
`,
|
||||
|
||||
data () {
|
||||
return {
|
||||
margins,
|
||||
};
|
||||
},
|
||||
}));
|
||||
@@ -1,24 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { withKnobs, boolean } from '@storybook/addon-knobs';
|
||||
|
||||
import PinBadge from './pinBadge.vue';
|
||||
|
||||
const stories = storiesOf('Pin Badge', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('states', () => ({
|
||||
components: { PinBadge },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<pin-badge :pinned="pinned"></pin-badge>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
pinned: {
|
||||
default: boolean('Pinned', false),
|
||||
},
|
||||
},
|
||||
}));
|
||||
@@ -20,23 +20,38 @@
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12" v-if="selectedTab === 'gems'">
|
||||
<div
|
||||
v-if="selectedTab === 'gems'"
|
||||
class="col-12"
|
||||
>
|
||||
<span v-if="gemTransactions.length === 0">
|
||||
{{ $t('noGemTransactions') }}
|
||||
</span>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th v-once class="timestamp-column">
|
||||
{{ $t('timestamp')}}
|
||||
<th
|
||||
v-once
|
||||
class="timestamp-column"
|
||||
>
|
||||
{{ $t('timestamp') }}
|
||||
</th>
|
||||
<th v-once class="amount-column">
|
||||
{{ $t('amount')}}
|
||||
<th
|
||||
v-once
|
||||
class="amount-column"
|
||||
>
|
||||
{{ $t('amount') }}
|
||||
</th>
|
||||
<th v-once class="action-column">
|
||||
{{ $t('action')}}
|
||||
<th
|
||||
v-once
|
||||
class="action-column"
|
||||
>
|
||||
{{ $t('action') }}
|
||||
</th>
|
||||
<th v-once class="note-column">
|
||||
{{ $t('note')}}
|
||||
<th
|
||||
v-once
|
||||
class="note-column"
|
||||
>
|
||||
{{ $t('note') }}
|
||||
</th>
|
||||
</tr>
|
||||
<tr
|
||||
@@ -49,7 +64,10 @@
|
||||
>{{ entry.createdAt | timeAgo }}</span>
|
||||
</td>
|
||||
<td>
|
||||
<div class="amount-with-icon" :id="entry.id">
|
||||
<div
|
||||
:id="entry.id"
|
||||
class="amount-with-icon"
|
||||
>
|
||||
<span
|
||||
class="svg-icon inline icon-16 my-1"
|
||||
aria-hidden="true"
|
||||
@@ -95,39 +113,58 @@
|
||||
</span>
|
||||
<span v-else-if="transactionTypes.challenges.includes(entry.transactionType)">
|
||||
<router-link
|
||||
class="challenge-link"
|
||||
:to="{ name: 'challenge', params: { challengeId: entry.reference } }">
|
||||
class="challenge-link"
|
||||
:to="{ name: 'challenge', params: { challengeId: entry.reference } }"
|
||||
>
|
||||
<span
|
||||
v-markdown="entry.referenceText"
|
||||
></span>
|
||||
</router-link>
|
||||
</span>
|
||||
<span v-else v-html="entryReferenceText(entry)"></span>
|
||||
<span
|
||||
v-else
|
||||
v-html="entryReferenceText(entry)"
|
||||
></span>
|
||||
|
||||
<span v-if="entry.reference">
|
||||
({{entry.reference}})
|
||||
({{ entry.reference }})
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="col-12" v-if="selectedTab === 'hourglass'">
|
||||
<div
|
||||
v-if="selectedTab === 'hourglass'"
|
||||
class="col-12"
|
||||
>
|
||||
<span v-if="hourglassTransactions.length === 0">
|
||||
{{ $t('noHourglassTransactions') }}
|
||||
</span>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th v-once class="timestamp-column">
|
||||
{{ $t('timestamp')}}
|
||||
<th
|
||||
v-once
|
||||
class="timestamp-column"
|
||||
>
|
||||
{{ $t('timestamp') }}
|
||||
</th>
|
||||
<th v-once class="amount-column">
|
||||
{{ $t('amount')}}
|
||||
<th
|
||||
v-once
|
||||
class="amount-column"
|
||||
>
|
||||
{{ $t('amount') }}
|
||||
</th>
|
||||
<th v-once class="action-column">
|
||||
{{ $t('action')}}
|
||||
<th
|
||||
v-once
|
||||
class="action-column"
|
||||
>
|
||||
{{ $t('action') }}
|
||||
</th>
|
||||
<th v-once class="note-column">
|
||||
{{ $t('note')}}
|
||||
<th
|
||||
v-once
|
||||
class="note-column"
|
||||
>
|
||||
{{ $t('note') }}
|
||||
</th>
|
||||
</tr>
|
||||
<tr
|
||||
@@ -140,7 +177,10 @@
|
||||
>{{ entry.createdAt | timeAgo }}</span>
|
||||
</td>
|
||||
<td>
|
||||
<div class="amount-with-icon" :id="entry.id">
|
||||
<div
|
||||
:id="entry.id"
|
||||
class="amount-with-icon"
|
||||
>
|
||||
<span
|
||||
class="svg-icon inline icon-16 my-1"
|
||||
aria-hidden="true"
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { withKnobs } from '@storybook/addon-knobs';
|
||||
|
||||
import SelectList from './selectList.vue';
|
||||
import SelectDifficulty from '../tasks/modal-controls/selectDifficulty';
|
||||
import SelectTranslatedArray from '../tasks/modal-controls/selectTranslatedArray';
|
||||
|
||||
const stories = storiesOf('Select List', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('states', () => ({
|
||||
components: { SelectList },
|
||||
template: `
|
||||
<div class="m-xl">
|
||||
Hover / Click on:
|
||||
<select-list class="mb-4"
|
||||
:items="items"
|
||||
:key-prop="'key'"
|
||||
:value="selected"
|
||||
@select="selected = $event">
|
||||
<template v-slot:item="{ item }">
|
||||
<div v-if="item">
|
||||
Template: {{ item?.key }} - {{ item?.value.text }}
|
||||
</div>
|
||||
<div v-else>
|
||||
Nothing selected
|
||||
</div>
|
||||
</template>
|
||||
</select-list>
|
||||
|
||||
Disabled:
|
||||
<select-list :disabled="true"
|
||||
:value="selected"
|
||||
:items="items"
|
||||
:key-prop="'key'"
|
||||
class="mb-4">
|
||||
<template v-slot:item="{ item }">
|
||||
Template: {{ item?.key }} - {{ item?.value.text }}
|
||||
</template>
|
||||
</select-list>
|
||||
|
||||
<br/>
|
||||
Selected: {{ selected }} <br/>
|
||||
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
selected: null,
|
||||
items: [
|
||||
{
|
||||
key: 1,
|
||||
value: {
|
||||
text: 'First',
|
||||
},
|
||||
},
|
||||
{
|
||||
key: 2,
|
||||
value: {
|
||||
text: 'Second',
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
}))
|
||||
.add('difficulty', () => ({
|
||||
components: { SelectDifficulty },
|
||||
template: `
|
||||
<div class="m-xl">
|
||||
<select-difficulty
|
||||
:value="selected"
|
||||
@select="selected = $event"
|
||||
>
|
||||
|
||||
</select-difficulty>
|
||||
|
||||
Selected: {{ selected }}
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
selected: 2,
|
||||
};
|
||||
},
|
||||
}))
|
||||
.add('translated array', () => ({
|
||||
components: { SelectTranslatedArray },
|
||||
template: `
|
||||
<div class="m-xl">
|
||||
<select-translated-array
|
||||
:items="['daily', 'weekly', 'monthly']"
|
||||
:value="selected"
|
||||
@select="selected = $event"
|
||||
>
|
||||
|
||||
</select-translated-array>
|
||||
|
||||
Selected: {{ selected }}
|
||||
</div>
|
||||
`,
|
||||
data () {
|
||||
return {
|
||||
selected: 'weekly',
|
||||
};
|
||||
},
|
||||
}));
|
||||
@@ -1,32 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { text, withKnobs } from '@storybook/addon-knobs';
|
||||
|
||||
const stories = storiesOf('Textarea', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('states', () => ({
|
||||
components: { },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<textarea autofocus ref="area">Normal {{text}}</textarea>
|
||||
<br />
|
||||
<button class="btn btn-dark" @click="$refs.area.focus()">Focus ^</button>
|
||||
<br />
|
||||
<textarea placeholder="placeholder"></textarea>
|
||||
<br />
|
||||
|
||||
<textarea disabled>Disabled {{text}}</textarea><br />
|
||||
|
||||
<textarea readonly>Readonly {{text}}</textarea> <br />
|
||||
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
text: {
|
||||
default: text('Area Message', 'example text'),
|
||||
},
|
||||
},
|
||||
}));
|
||||
@@ -1,39 +0,0 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import { storiesOf } from '@storybook/vue';
|
||||
import { text, withKnobs } from '@storybook/addon-knobs';
|
||||
import toggleSwitch from './toggleSwitch';
|
||||
|
||||
const stories = storiesOf('Toggle Switch', module);
|
||||
|
||||
stories.addDecorator(withKnobs);
|
||||
|
||||
stories
|
||||
.add('label only', () => ({
|
||||
components: { toggleSwitch },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<toggle-switch :label="label"></toggle-switch>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
label: {
|
||||
default: text('Label', 'example text'),
|
||||
},
|
||||
},
|
||||
}))
|
||||
.add('with description', () => ({
|
||||
components: { toggleSwitch },
|
||||
template: `
|
||||
<div style="position: absolute; margin: 20px">
|
||||
<toggle-switch :label="label" :hover-text="description"></toggle-switch>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
label: {
|
||||
default: text('Label', 'example text'),
|
||||
},
|
||||
description: {
|
||||
default: text('Description', 'description text'),
|
||||
},
|
||||
},
|
||||
}));
|
||||
@@ -139,7 +139,7 @@
|
||||
class="mx-auto"
|
||||
:no-caret="true"
|
||||
>
|
||||
<template v-slot:button-content>
|
||||
<template #button-content>
|
||||
<span
|
||||
v-once
|
||||
class="svg-icon dots-icon with-icon"
|
||||
|
||||
@@ -147,10 +147,10 @@
|
||||
class="row"
|
||||
>
|
||||
<div
|
||||
class="col-4"
|
||||
:id="statInfo.title"
|
||||
class="col-4"
|
||||
>
|
||||
<strong> {{ $t(statInfo.title)}} </strong>
|
||||
<strong> {{ $t(statInfo.title) }} </strong>
|
||||
<strong>: {{ statsComputed[stat] }}</strong>
|
||||
<b-popover
|
||||
:target="statInfo.title"
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
<div class="disable-background">
|
||||
<toggle-switch
|
||||
:label="optTextSet.switchDescription"
|
||||
:checked="this.user.inbox.optOut"
|
||||
:checked="user.inbox.optOut"
|
||||
:hover-text="optTextSet.popoverText"
|
||||
@change="toggleOpt()"
|
||||
/>
|
||||
@@ -588,6 +588,23 @@ export default {
|
||||
},
|
||||
},
|
||||
mixins: [styleHelper],
|
||||
beforeRouteEnter (to, from, next) {
|
||||
next(vm => {
|
||||
const data = vm.$store.state.privateMessageOptions;
|
||||
|
||||
if ((!data || (data && !data.userIdToMessage)) && vm.$route.query && vm.$route.query.uuid) {
|
||||
vm.$store.dispatch('user:userLookup', { uuid: vm.$route.query.uuid }).then(res => {
|
||||
if (res && res.data && res.data.data) {
|
||||
vm.$store.dispatch('user:newPrivateMessageTo', {
|
||||
member: res.data.data,
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
vm.hasPrivateMessageOptionsOnPageLoad = true;
|
||||
}
|
||||
});
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
icons: Object.freeze({
|
||||
@@ -612,23 +629,6 @@ export default {
|
||||
MAX_MESSAGE_LENGTH: MAX_MESSAGE_LENGTH.toString(),
|
||||
};
|
||||
},
|
||||
beforeRouteEnter (to, from, next) {
|
||||
next(vm => {
|
||||
const data = vm.$store.state.privateMessageOptions;
|
||||
|
||||
if ((!data || (data && !data.userIdToMessage)) && vm.$route.query && vm.$route.query.uuid) {
|
||||
vm.$store.dispatch('user:userLookup', { uuid: vm.$route.query.uuid }).then(res => {
|
||||
if (res && res.data && res.data.data) {
|
||||
vm.$store.dispatch('user:newPrivateMessageTo', {
|
||||
member: res.data.data,
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
vm.hasPrivateMessageOptionsOnPageLoad = true;
|
||||
}
|
||||
});
|
||||
},
|
||||
computed: {
|
||||
...mapState({ user: 'user.data' }),
|
||||
canLoadMore () {
|
||||
|
||||
@@ -87,6 +87,9 @@ async function buyArmoire (store, params) {
|
||||
icon: getDropClass({ type: item.type, key: item.dropKey }),
|
||||
};
|
||||
|
||||
if (resData.armoire.emptied) {
|
||||
notificationOptions.emptied = resData.armoire.emptied;
|
||||
}
|
||||
store.dispatch('snackbars:add', {
|
||||
title: '',
|
||||
timeout: true,
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
{}
|
||||
@@ -1 +0,0 @@
|
||||
{}
|
||||
@@ -1 +0,0 @@
|
||||
{}
|
||||
@@ -1 +0,0 @@
|
||||
{}
|
||||
@@ -1 +0,0 @@
|
||||
{}
|
||||
@@ -1 +0,0 @@
|
||||
{}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user