Compare commits
91 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5cdcbc5310 | |||
| 84a52002c8 | |||
| 671c90a593 | |||
| 5d202c7617 | |||
| 5ee33f219a | |||
| 4e93874483 | |||
| 8bf44ce47a | |||
| 458bde1d13 | |||
| 3101abbb08 | |||
| 537313a21e | |||
| 453383af9f | |||
| a19db5798d | |||
| ea1569e23e | |||
| 58aa1ac2f3 | |||
| a979fc3843 | |||
| 9f91775e78 | |||
| 61ca931e66 | |||
| 2888f843e3 | |||
| b947c714f0 | |||
| 783b8995b8 | |||
| 8db2fb8015 | |||
| 1bcf2dfe80 | |||
| 805641b6cf | |||
| 5b0584fc5e | |||
| 99429d9d48 | |||
| ec5de91123 | |||
| 6ffc28f04e | |||
| b1a348aee3 | |||
| 66ed0a350b | |||
| 6b2e9f16e2 | |||
| 7f6a2a0700 | |||
| 05008b20d3 | |||
| 6cae168adb | |||
| 72a9506b9f | |||
| af96cd0488 | |||
| 60204bef06 | |||
| 4c21d9e560 | |||
| fa38b22003 | |||
| be86812900 | |||
| d03e5e93b0 | |||
| c879560445 | |||
| dc9800d88a | |||
| 39fcb3e876 | |||
| 188023b197 | |||
| e47b0982c8 | |||
| 92f217775b | |||
| daf2c354d6 | |||
| c4343379a1 | |||
| ce07d06c15 | |||
| a0041221be | |||
| 2ba6e972c3 | |||
| 6bacb89271 | |||
| ebfb6f96b3 | |||
| 22d696219a | |||
| 9014943a86 | |||
| 6a70487fa6 | |||
| 4fa381f153 | |||
| 97209e40ad | |||
| 2e97f9864e | |||
| 6d6adfd919 | |||
| 13123c0bae | |||
| 577e6f005e | |||
| 1361fea2d4 | |||
| cbcc7cd479 | |||
| 0e36c1aa0f | |||
| 5b4505ac62 | |||
| aa3d972cb4 | |||
| d4b729c95e | |||
| d4b867acc3 | |||
| 15c09691af | |||
| 27263e9b2f | |||
| 2d9715b657 | |||
| 8ca5ee99b0 | |||
| 9f9da5632d | |||
| 9364cdc2b4 | |||
| 2896cf77e0 | |||
| 936d3ffc98 | |||
| 9608b9fa9f | |||
| 657327edd7 | |||
| 9706a9c8be | |||
| 484bae40cd | |||
| c0b6353ded | |||
| f71062e86c | |||
| 193e7062c3 | |||
| 86d2fed76e | |||
| 2b7fe7c1d5 | |||
| 999b62df43 | |||
| b7448e2cfe | |||
| 0bc836b490 | |||
| fdf7e3a665 | |||
| 00d12e83bd |
@@ -12,6 +12,7 @@ ENV GOOGLE_CLIENT_ID 1035232791481-32vtplgnjnd1aufv3mcu1lthf31795fq.apps.googleu
|
||||
ENV LOGGLY_CLIENT_TOKEN ab5663bf-241f-4d14-8783-7d80db77089a
|
||||
ENV NODE_ENV production
|
||||
ENV STRIPE_PUB_KEY pk_85fQ0yMECHNfHTSsZoxZXlPSwSNfA
|
||||
ENV APPLE_AUTH_CLIENT_ID 9Q9SMRMCNN.com.habitrpg.ios.Habitica
|
||||
|
||||
# Install global packages
|
||||
RUN npm install -g gulp-cli mocha
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
* Code is GPL v3 licensed:
|
||||
This Source Code is subject to the terms of the GNU General Public License, v. 3.0.
|
||||
If a copy of the GPL was not distributed with this file, You can obtain one at http://www.gnu.org/licenses/gpl-3.0.txt
|
||||
If a copy of the GPL was not distributed with this file, you can obtain one at http://www.gnu.org/licenses/gpl-3.0.txt
|
||||
|
||||
* Assets and content designed for Mozilla BrowserQuest are licensed under CC-BY-SA 3.0:
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
||||
@@ -79,5 +79,6 @@
|
||||
"APPLE_TEAM_ID": "",
|
||||
"APPLE_AUTH_CLIENT_ID": "",
|
||||
"APPLE_AUTH_KEY_ID": "",
|
||||
"BLOCKED_IPS": ""
|
||||
"BLOCKED_IPS": "",
|
||||
"LOG_AMPLITUDE_EVENTS": "false"
|
||||
}
|
||||
|
||||
@@ -161,4 +161,4 @@ gulp.task('sprites:checkCompiledDimensions', gulp.series('sprites:main', 'sprite
|
||||
done();
|
||||
}));
|
||||
|
||||
gulp.task('sprites:compile', gulp.series('sprites:clean', 'sprites:main', 'sprites:largeSprites', 'sprites:checkCompiledDimensions', done => done()));
|
||||
gulp.task('sprites:compile', gulp.series('sprites:clean', 'sprites:checkCompiledDimensions', done => done()));
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "habitica",
|
||||
"version": "4.140.5",
|
||||
"version": "4.140.14",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -1574,9 +1574,9 @@
|
||||
"integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g=="
|
||||
},
|
||||
"@types/express": {
|
||||
"version": "4.17.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.4.tgz",
|
||||
"integrity": "sha512-DO1L53rGqIDUEvOjJKmbMEQ5Z+BM2cIEPy/eV3En+s166Gz+FeuzRerxcab757u/U4v4XF4RYrZPmqKa+aY/2w==",
|
||||
"version": "4.17.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.6.tgz",
|
||||
"integrity": "sha512-n/mr9tZI83kd4azlPG5y997C/M4DNABK9yErhFM6hKdym4kkmd9j0vtsJyjFIwfRBxtrxZtAfGZCNRIBMFLK5w==",
|
||||
"requires": {
|
||||
"@types/body-parser": "*",
|
||||
"@types/express-serve-static-core": "*",
|
||||
@@ -1594,9 +1594,9 @@
|
||||
}
|
||||
},
|
||||
"@types/express-serve-static-core": {
|
||||
"version": "4.17.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.3.tgz",
|
||||
"integrity": "sha512-sHEsvEzjqN+zLbqP+8OXTipc10yH1QLR+hnr5uw29gi9AhCAAAdri8ClNV7iMdrJrIzXIQtlkPvq8tJGhj3QJQ==",
|
||||
"version": "4.17.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.5.tgz",
|
||||
"integrity": "sha512-578YH5Lt88AKoADy0b2jQGwJtrBxezXtVe/MBqWXKZpqx91SnC0pVkVCcxcytz3lWW+cHBYDi3Ysh0WXc+rAYw==",
|
||||
"requires": {
|
||||
"@types/node": "*",
|
||||
"@types/range-parser": "*"
|
||||
@@ -3218,9 +3218,9 @@
|
||||
}
|
||||
},
|
||||
"bson": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz",
|
||||
"integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg=="
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.4.tgz",
|
||||
"integrity": "sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q=="
|
||||
},
|
||||
"buffer-alloc": {
|
||||
"version": "1.2.0",
|
||||
@@ -4139,9 +4139,9 @@
|
||||
}
|
||||
},
|
||||
"csv-stringify": {
|
||||
"version": "5.3.6",
|
||||
"resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.3.6.tgz",
|
||||
"integrity": "sha512-kPcRbMvo5NLLD71TAqW5K+g9kbM2HpIZJLAzm73Du8U+5TXmDp9YtXKCBLyxEh0q3Jbg8QhNFBz3b5VJzjZ/jw=="
|
||||
"version": "5.4.3",
|
||||
"resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.4.3.tgz",
|
||||
"integrity": "sha512-WJLgRJQcVjPK45jXS1xfnkwVbw9bOjg2F2BQRa9OkG7Di2W/geclPZNlcQTwxbzn1nEDI2ane2AubTdTd6gCvw=="
|
||||
},
|
||||
"currently-unhandled": {
|
||||
"version": "0.4.1",
|
||||
@@ -7359,14 +7359,33 @@
|
||||
}
|
||||
},
|
||||
"habitica-markdown": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/habitica-markdown/-/habitica-markdown-1.3.2.tgz",
|
||||
"integrity": "sha512-IyiS583DfqE+KvW4NQAB4K2HjJZ1oF50L0EDz7KaixyK7C41s47wsbN81QtNMB8LnRqbMHFDesD2xEzdicjFXw==",
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/habitica-markdown/-/habitica-markdown-1.4.0.tgz",
|
||||
"integrity": "sha512-hklG3eBILNbx/VxGeRxuk+/RiWWllcd5QLNv7Kvm2wGBRTeK9c3my2eusGuHXkwStEFGxjJD5e0iMO47cGPxYw==",
|
||||
"requires": {
|
||||
"habitica-markdown-emoji": "1.2.4",
|
||||
"markdown-it": "8.4.2",
|
||||
"markdown-it-link-attributes": "1.0.0",
|
||||
"markdown-it": "10.0.0",
|
||||
"markdown-it-link-attributes": "3.0.0",
|
||||
"markdown-it-linkify-images": "^1.1.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"entities": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
|
||||
"integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw=="
|
||||
},
|
||||
"markdown-it": {
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz",
|
||||
"integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==",
|
||||
"requires": {
|
||||
"argparse": "^1.0.7",
|
||||
"entities": "~2.0.0",
|
||||
"linkify-it": "^2.0.0",
|
||||
"mdurl": "^1.0.1",
|
||||
"uc.micro": "^1.0.5"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"habitica-markdown-emoji": {
|
||||
@@ -8813,122 +8832,17 @@
|
||||
}
|
||||
},
|
||||
"jwks-rsa": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.7.0.tgz",
|
||||
"integrity": "sha512-tq7DVJt9J6wTvl9+AQfwZIiPSuY2Vf0F+MovfRTFuBqLB1xgDVhegD33ChEAQ6yBv9zFvUIyj4aiwrSA5VehUw==",
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.8.0.tgz",
|
||||
"integrity": "sha512-+HYROHD5fsYQCNrJ37RSr2NjbN2/V9YT+yVF3oJxLmPIZWrmp1SOl1hMw2RcuNh+LGA2bGZIhRKGiMjhQa/b7Q==",
|
||||
"requires": {
|
||||
"@types/express-jwt": "0.0.42",
|
||||
"axios": "^0.19.2",
|
||||
"debug": "^4.1.0",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"limiter": "^1.1.4",
|
||||
"lru-memoizer": "^2.0.1",
|
||||
"ms": "^2.1.2",
|
||||
"request": "^2.88.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"assert-plus": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
|
||||
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
|
||||
},
|
||||
"aws-sign2": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
|
||||
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
|
||||
},
|
||||
"caseless": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
||||
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
|
||||
},
|
||||
"form-data": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
|
||||
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.6",
|
||||
"mime-types": "^2.1.12"
|
||||
}
|
||||
},
|
||||
"har-validator": {
|
||||
"version": "5.1.3",
|
||||
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
|
||||
"integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
|
||||
"requires": {
|
||||
"ajv": "^6.5.5",
|
||||
"har-schema": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"http-signature": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
|
||||
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0",
|
||||
"jsprim": "^1.2.2",
|
||||
"sshpk": "^1.7.0"
|
||||
}
|
||||
},
|
||||
"oauth-sign": {
|
||||
"version": "0.9.0",
|
||||
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
|
||||
},
|
||||
"punycode": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
|
||||
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
|
||||
},
|
||||
"qs": {
|
||||
"version": "6.5.2",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
|
||||
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
|
||||
},
|
||||
"request": {
|
||||
"version": "2.88.2",
|
||||
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
|
||||
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
|
||||
"requires": {
|
||||
"aws-sign2": "~0.7.0",
|
||||
"aws4": "^1.8.0",
|
||||
"caseless": "~0.12.0",
|
||||
"combined-stream": "~1.0.6",
|
||||
"extend": "~3.0.2",
|
||||
"forever-agent": "~0.6.1",
|
||||
"form-data": "~2.3.2",
|
||||
"har-validator": "~5.1.3",
|
||||
"http-signature": "~1.2.0",
|
||||
"is-typedarray": "~1.0.0",
|
||||
"isstream": "~0.1.2",
|
||||
"json-stringify-safe": "~5.0.1",
|
||||
"mime-types": "~2.1.19",
|
||||
"oauth-sign": "~0.9.0",
|
||||
"performance-now": "^2.1.0",
|
||||
"qs": "~6.5.2",
|
||||
"safe-buffer": "^5.1.2",
|
||||
"tough-cookie": "~2.5.0",
|
||||
"tunnel-agent": "^0.6.0",
|
||||
"uuid": "^3.3.2"
|
||||
}
|
||||
},
|
||||
"tough-cookie": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
|
||||
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
|
||||
"requires": {
|
||||
"psl": "^1.1.28",
|
||||
"punycode": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"tunnel-agent": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
|
||||
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
|
||||
"requires": {
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
}
|
||||
"ms": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"jws": {
|
||||
@@ -9350,9 +9264,9 @@
|
||||
"integrity": "sha1-m+4OmpkKljupbfaYDE/dsF37Tcw="
|
||||
},
|
||||
"markdown-it-link-attributes": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/markdown-it-link-attributes/-/markdown-it-link-attributes-1.0.0.tgz",
|
||||
"integrity": "sha1-jaHKFynw+hbGVhWwsQdbecg3Gi4="
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/markdown-it-link-attributes/-/markdown-it-link-attributes-3.0.0.tgz",
|
||||
"integrity": "sha512-B34ySxVeo6MuEGSPCWyIYryuXINOvngNZL87Mp7YYfKIf6DcD837+lXA8mo6EBbauKsnGz22ZH0zsbOiQRWTNg=="
|
||||
},
|
||||
"markdown-it-linkify-images": {
|
||||
"version": "1.1.1",
|
||||
@@ -9757,33 +9671,16 @@
|
||||
}
|
||||
},
|
||||
"mongodb": {
|
||||
"version": "3.4.1",
|
||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.4.1.tgz",
|
||||
"integrity": "sha512-juqt5/Z42J4DcE7tG7UdVaTKmUC6zinF4yioPfpeOSNBieWSK6qCY+0tfGQcHLKrauWPDdMZVROHJOa8q2pWsA==",
|
||||
"dev": true,
|
||||
"version": "3.5.6",
|
||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.6.tgz",
|
||||
"integrity": "sha512-sh3q3GLDLT4QmoDLamxtAECwC3RGjq+oNuK1ENV8+tnipIavss6sMYt77hpygqlMOCt0Sla5cl7H4SKCVBCGEg==",
|
||||
"requires": {
|
||||
"bson": "^1.1.1",
|
||||
"bl": "^2.2.0",
|
||||
"bson": "^1.1.4",
|
||||
"denque": "^1.4.1",
|
||||
"require_optional": "^1.0.1",
|
||||
"safe-buffer": "^5.1.2",
|
||||
"saslprep": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"mongoose": {
|
||||
"version": "5.9.7",
|
||||
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.9.7.tgz",
|
||||
"integrity": "sha512-WJOBh9WMvivqBK8my9HFtSzSySKdUxJPNGAwswEakAasWUcPXJl3yHMtZ4ngGnKbwTT9KnAr75xamlt/PouR9w==",
|
||||
"requires": {
|
||||
"bson": "~1.1.1",
|
||||
"kareem": "2.3.1",
|
||||
"mongodb": "3.5.5",
|
||||
"mongoose-legacy-pluralize": "1.0.2",
|
||||
"mpath": "0.6.0",
|
||||
"mquery": "3.2.2",
|
||||
"ms": "2.1.2",
|
||||
"regexp-clone": "1.0.0",
|
||||
"safe-buffer": "5.1.2",
|
||||
"sift": "7.0.1",
|
||||
"sliced": "1.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"bl": {
|
||||
@@ -9795,30 +9692,40 @@
|
||||
"safe-buffer": "^5.1.1"
|
||||
}
|
||||
},
|
||||
"mongodb": {
|
||||
"version": "3.5.5",
|
||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.5.tgz",
|
||||
"integrity": "sha512-GCjDxR3UOltDq00Zcpzql6dQo1sVry60OXJY3TDmFc2SWFY6c8Gn1Ardidc5jDirvJrx2GC3knGOImKphbSL3A==",
|
||||
"requires": {
|
||||
"bl": "^2.2.0",
|
||||
"bson": "^1.1.1",
|
||||
"denque": "^1.4.1",
|
||||
"require_optional": "^1.0.1",
|
||||
"safe-buffer": "^5.1.2",
|
||||
"saslprep": "^1.0.0"
|
||||
}
|
||||
"bson": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.4.tgz",
|
||||
"integrity": "sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"mongoose": {
|
||||
"version": "5.9.10",
|
||||
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.9.10.tgz",
|
||||
"integrity": "sha512-w1HNukfJzzDLfcI1f79h2Wj4ogVbf+X8hRkyFgqlcjK7OnDlAgahjDMIsT+mCS9jKojrMhjSsZIs9FiRPkLqMg==",
|
||||
"requires": {
|
||||
"bson": "^1.1.4",
|
||||
"kareem": "2.3.1",
|
||||
"mongodb": "3.5.6",
|
||||
"mongoose-legacy-pluralize": "1.0.2",
|
||||
"mpath": "0.7.0",
|
||||
"mquery": "3.2.2",
|
||||
"ms": "2.1.2",
|
||||
"regexp-clone": "1.0.0",
|
||||
"safe-buffer": "5.1.2",
|
||||
"sift": "7.0.1",
|
||||
"sliced": "1.0.1"
|
||||
}
|
||||
},
|
||||
"mongoose-legacy-pluralize": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
|
||||
"integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
|
||||
},
|
||||
"monk": {
|
||||
"version": "7.1.2",
|
||||
"resolved": "https://registry.npmjs.org/monk/-/monk-7.1.2.tgz",
|
||||
"integrity": "sha512-wyO1wW2lVlVChJXtNIyJ/ZSlBg/wQ/XTsWzfhuV19pl47/44nxR1KhXKxTnSB1hx08xuTMF3QodvaFBuRWPUjQ==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/monk/-/monk-7.2.0.tgz",
|
||||
"integrity": "sha512-PdCTlPhmUH5ULg80CS0Dgn9LQ7omldNQg+kVn7wtQF1cA/me/Kd5YmiRDxUeTUukpNFkrM3qEYP5oC5AqVjSgw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"debug": "*",
|
||||
@@ -9901,9 +9808,9 @@
|
||||
}
|
||||
},
|
||||
"mpath": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.6.0.tgz",
|
||||
"integrity": "sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw=="
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.7.0.tgz",
|
||||
"integrity": "sha512-Aiq04hILxhz1L+f7sjGyn7IxYzWm1zLNNXcfhDtx04kZ2Gk7uvFdgZ8ts1cWa/6d0TQmag2yR8zSGZUmp0tFNg=="
|
||||
},
|
||||
"mquery": {
|
||||
"version": "3.2.2",
|
||||
@@ -11014,14 +10921,6 @@
|
||||
"passport-oauth2": "1.x.x"
|
||||
}
|
||||
},
|
||||
"passport-google-oauth2": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/passport-google-oauth2/-/passport-google-oauth2-0.2.0.tgz",
|
||||
"integrity": "sha512-62EdPtbfVdc55nIXi0p1WOa/fFMM8v/M8uQGnbcXA4OexZWCnfsEi3wo2buag+Is5oqpuHzOtI64JpHk0Xi5RQ==",
|
||||
"requires": {
|
||||
"passport-oauth2": "^1.1.2"
|
||||
}
|
||||
},
|
||||
"passport-google-oauth20": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-1.0.0.tgz",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "habitica",
|
||||
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
||||
"version": "4.140.5",
|
||||
"version": "4.140.14",
|
||||
"main": "./website/server/index.js",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.9.0",
|
||||
@@ -20,7 +20,7 @@
|
||||
"compression": "^1.7.4",
|
||||
"cookie-session": "^1.4.0",
|
||||
"coupon-code": "^0.4.5",
|
||||
"csv-stringify": "^5.3.6",
|
||||
"csv-stringify": "^5.4.3",
|
||||
"cwait": "^1.1.1",
|
||||
"domain-middleware": "~0.1.0",
|
||||
"eslint": "^6.8.0",
|
||||
@@ -36,26 +36,25 @@
|
||||
"gulp-imagemin": "^6.2.0",
|
||||
"gulp-nodemon": "^2.5.0",
|
||||
"gulp.spritesmith": "^6.9.0",
|
||||
"habitica-markdown": "^1.3.2",
|
||||
"habitica-markdown": "^1.4.0",
|
||||
"helmet": "^3.22.0",
|
||||
"image-size": "^0.8.3",
|
||||
"in-app-purchase": "^1.11.3",
|
||||
"js2xmlparser": "^4.0.1",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"jwks-rsa": "^1.7.0",
|
||||
"jwks-rsa": "^1.8.0",
|
||||
"lodash": "^4.17.15",
|
||||
"merge-stream": "^2.0.0",
|
||||
"method-override": "^3.0.0",
|
||||
"moment": "^2.24.0",
|
||||
"moment-recur": "^1.0.7",
|
||||
"mongoose": "^5.9.7",
|
||||
"mongoose": "^5.9.10",
|
||||
"morgan": "^1.10.0",
|
||||
"nconf": "^0.10.0",
|
||||
"node-gcm": "^1.0.2",
|
||||
"on-headers": "^1.0.2",
|
||||
"passport": "^0.4.1",
|
||||
"passport-facebook": "^3.0.0",
|
||||
"passport-google-oauth2": "^0.2.0",
|
||||
"passport-google-oauth20": "1.0.0",
|
||||
"paypal-ipn": "3.0.0",
|
||||
"paypal-rest-sdk": "^1.8.1",
|
||||
@@ -101,6 +100,7 @@
|
||||
"client:build": "cd website/client && npm run build",
|
||||
"client:unit": "cd website/client && npm run test:unit",
|
||||
"start": "gulp nodemon",
|
||||
"debug": "gulp nodemon --inspect",
|
||||
"postinstall": "gulp build && cd website/client && npm install",
|
||||
"apidoc": "gulp apidoc"
|
||||
},
|
||||
@@ -112,7 +112,7 @@
|
||||
"expect.js": "^0.3.1",
|
||||
"istanbul": "^1.1.0-alpha.1",
|
||||
"mocha": "^5.1.1",
|
||||
"monk": "^7.1.2",
|
||||
"monk": "^7.2.0",
|
||||
"require-again": "^2.0.0",
|
||||
"sinon": "^7.2.4",
|
||||
"sinon-chai": "^3.5.0",
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
import mongoose from 'mongoose';
|
||||
import {
|
||||
highlightMentions,
|
||||
} from '../../../../website/server/libs/highlightMentions';
|
||||
|
||||
describe('highlightMentions', () => {
|
||||
beforeEach(() => {
|
||||
const mockFind = {
|
||||
select () {
|
||||
return this;
|
||||
},
|
||||
lean () {
|
||||
return this;
|
||||
},
|
||||
exec () {
|
||||
return Promise.resolve([{
|
||||
auth: { local: { username: 'user' } }, _id: '111',
|
||||
}, { auth: { local: { username: 'user2' } }, _id: '222' }, { auth: { local: { username: 'user3' } }, _id: '333' }, { auth: { local: { username: 'user-dash' } }, _id: '444' }, { auth: { local: { username: 'user_underscore' } }, _id: '555' },
|
||||
]);
|
||||
},
|
||||
};
|
||||
|
||||
sinon.stub(mongoose.Model, 'find').returns(mockFind);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sinon.restore();
|
||||
});
|
||||
|
||||
it('doesn\'t change text without mentions', async () => {
|
||||
const text = 'some chat text';
|
||||
const result = await highlightMentions(text);
|
||||
expect(result[0]).to.equal(text);
|
||||
});
|
||||
it('highlights existing users', async () => {
|
||||
const text = '@user: message';
|
||||
const result = await highlightMentions(text);
|
||||
expect(result[0]).to.equal('[@user](/profile/111): message');
|
||||
});
|
||||
it('highlights special characters', async () => {
|
||||
const text = '@user-dash: message @user_underscore';
|
||||
const result = await highlightMentions(text);
|
||||
expect(result[0]).to.equal('[@user-dash](/profile/444): message [@user_underscore](/profile/555)');
|
||||
});
|
||||
it('doesn\'t highlight nonexisting users', async () => {
|
||||
const text = '@nouser message';
|
||||
const result = await highlightMentions(text);
|
||||
expect(result[0]).to.equal('@nouser message');
|
||||
});
|
||||
it('highlights multiple existing users', async () => {
|
||||
const text = '@user message (@user2) @user3 @user';
|
||||
const result = await highlightMentions(text);
|
||||
expect(result[0]).to.equal('[@user](/profile/111) message ([@user2](/profile/222)) [@user3](/profile/333) [@user](/profile/111)');
|
||||
});
|
||||
it('doesn\'t highlight more than 5 users', async () => {
|
||||
const text = '@user @user2 @user3 @user4 @user5 @user6';
|
||||
const result = await highlightMentions(text);
|
||||
expect(result[0]).to.equal(text);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,136 @@
|
||||
import mongoose from 'mongoose';
|
||||
import highlightMentions from '../../../../website/server/libs/highlightMentions';
|
||||
|
||||
describe('highlightMentions', () => {
|
||||
beforeEach(() => {
|
||||
const mockFind = {
|
||||
select () {
|
||||
return this;
|
||||
},
|
||||
lean () {
|
||||
return this;
|
||||
},
|
||||
exec () {
|
||||
return Promise.resolve([
|
||||
{ auth: { local: { username: 'user' } }, _id: '111' },
|
||||
{ auth: { local: { username: 'user2' } }, _id: '222' },
|
||||
{ auth: { local: { username: 'user3' } }, _id: '333' },
|
||||
{ auth: { local: { username: 'user-dash' } }, _id: '444' },
|
||||
{ auth: { local: { username: 'user_underscore' } }, _id: '555' },
|
||||
]);
|
||||
},
|
||||
};
|
||||
|
||||
sinon.stub(mongoose.Model, 'find').returns(mockFind);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sinon.restore();
|
||||
});
|
||||
|
||||
it('doesn\'t change text without mentions', async () => {
|
||||
const text = 'some chat text';
|
||||
const result = await highlightMentions(text);
|
||||
expect(result[0]).to.equal(text);
|
||||
});
|
||||
|
||||
it('highlights existing users', async () => {
|
||||
const text = '@user: message';
|
||||
const result = await highlightMentions(text);
|
||||
expect(result[0]).to.equal('[@user](/profile/111): message');
|
||||
});
|
||||
|
||||
it('highlights special characters', async () => {
|
||||
const text = '@user-dash: message @user_underscore';
|
||||
const result = await highlightMentions(text);
|
||||
expect(result[0]).to.equal('[@user-dash](/profile/444): message [@user_underscore](/profile/555)');
|
||||
});
|
||||
|
||||
it('doesn\'t highlight nonexisting users', async () => {
|
||||
const text = '@nouser message';
|
||||
const result = await highlightMentions(text);
|
||||
expect(result[0]).to.equal('@nouser message');
|
||||
});
|
||||
|
||||
it('highlights multiple existing users', async () => {
|
||||
const text = '@user message (@user2) @user3 @user';
|
||||
const result = await highlightMentions(text);
|
||||
expect(result[0]).to.equal('[@user](/profile/111) message ([@user2](/profile/222)) [@user3](/profile/333) [@user](/profile/111)');
|
||||
});
|
||||
|
||||
it('doesn\'t highlight more than 5 users', async () => {
|
||||
const text = '@user @user2 @user3 @user4 @user5 @user6';
|
||||
const result = await highlightMentions(text);
|
||||
expect(result[0]).to.equal(text);
|
||||
});
|
||||
|
||||
describe('exceptions in code blocks', () => {
|
||||
it('doesn\'t highlight user in inline code block', async () => {
|
||||
const text = '`@user`';
|
||||
|
||||
const result = await highlightMentions(text);
|
||||
|
||||
expect(result[0]).to.equal(text);
|
||||
});
|
||||
|
||||
it('doesn\'t highlight user in fenced code block', async () => {
|
||||
const text = 'Text\n\n```\n// code referencing @user\n```\n\nText';
|
||||
|
||||
const result = await highlightMentions(text);
|
||||
|
||||
expect(result[0]).to.equal(text);
|
||||
});
|
||||
|
||||
it('doesn\'t highlight user in indented code block', async () => {
|
||||
const text = ' @user';
|
||||
|
||||
const result = await highlightMentions(text);
|
||||
|
||||
expect(result[0]).to.equal(text);
|
||||
});
|
||||
|
||||
it('does highlight user that\'s after in-line code block', async () => {
|
||||
const text = '`<code />` for @user';
|
||||
|
||||
const result = await highlightMentions(text);
|
||||
|
||||
expect(result[0]).to.equal('`<code />` for [@user](/profile/111)');
|
||||
});
|
||||
|
||||
it('does highlight same content properly', async () => {
|
||||
const text = '@user `@user`';
|
||||
|
||||
const result = await highlightMentions(text);
|
||||
|
||||
expect(result[0]).to.equal('[@user](/profile/111) `@user`');
|
||||
});
|
||||
});
|
||||
|
||||
it('github issue 12118, method crashes when square brackets are used', async () => {
|
||||
const text = '[test]';
|
||||
|
||||
let err;
|
||||
|
||||
try {
|
||||
await highlightMentions(text);
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
|
||||
expect(err).to.be.undefined;
|
||||
});
|
||||
|
||||
it('github issue 12138, method crashes when regex chars are used in code block', async () => {
|
||||
const text = '`[test]`';
|
||||
|
||||
let err;
|
||||
|
||||
try {
|
||||
await highlightMentions(text);
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
|
||||
expect(err).to.be.undefined;
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,64 @@
|
||||
import moment from 'moment';
|
||||
import { calculateSubscriptionTerminationDate } from '../../../../../../website/server/libs/payments/util';
|
||||
import api from '../../../../../../website/server/libs/payments/payments';
|
||||
|
||||
describe('#calculateSubscriptionTerminationDate', () => {
|
||||
let plan;
|
||||
let nextBill;
|
||||
|
||||
beforeEach(() => {
|
||||
plan = {
|
||||
customerId: 'customer-id',
|
||||
extraMonths: 0,
|
||||
};
|
||||
nextBill = moment();
|
||||
});
|
||||
it('should extend date to the exact amount of days left before the next bill will occur', () => {
|
||||
nextBill = moment()
|
||||
.add(5, 'days');
|
||||
const expectedTerminationDate = moment()
|
||||
.add(5, 'days');
|
||||
|
||||
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, api.constants);
|
||||
expect(expectedTerminationDate.diff(terminationDate, 'days')).to.eql(0);
|
||||
});
|
||||
it('if nextBill is null, add 30 days to termination date', () => {
|
||||
nextBill = null;
|
||||
const expectedTerminationDate = moment()
|
||||
.add(30, 'days');
|
||||
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, api.constants);
|
||||
|
||||
expect(expectedTerminationDate.diff(terminationDate, 'days')).to.eql(0);
|
||||
});
|
||||
it('if nextBill is null and it\'s a group plan, add 2 days instead of 30', () => {
|
||||
nextBill = null;
|
||||
plan.customerId = api.constants.GROUP_PLAN_CUSTOMER_ID;
|
||||
const expectedTerminationDate = moment()
|
||||
.add(2, 'days');
|
||||
|
||||
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, api.constants);
|
||||
expect(expectedTerminationDate.diff(terminationDate, 'days')).to.eql(0);
|
||||
});
|
||||
it('should add 30.5 days for each extraMonth', () => {
|
||||
plan.extraMonths = 4;
|
||||
const expectedTerminationDate = moment()
|
||||
.add(30.5 * 4, 'days');
|
||||
|
||||
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, api.constants);
|
||||
expect(expectedTerminationDate.diff(terminationDate, 'days')).to.eql(0);
|
||||
});
|
||||
it('should round up if total days gained by extraMonth is a decimal number', () => {
|
||||
plan.extraMonths = 5;
|
||||
const expectedTerminationDate = moment()
|
||||
.add(Math.ceil(30.5 * 5), 'days');
|
||||
|
||||
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, api.constants);
|
||||
expect(expectedTerminationDate.diff(terminationDate, 'days')).to.eql(0);
|
||||
});
|
||||
it('behaves like extraMonths is 0 if it\'s set to a negative number', () => {
|
||||
plan.extraMonths = -5;
|
||||
const expectedTerminationDate = moment();
|
||||
const terminationDate = calculateSubscriptionTerminationDate(nextBill, plan, api.constants);
|
||||
expect(expectedTerminationDate.diff(terminationDate, 'days')).to.eql(0);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,12 @@
|
||||
import { getMatchesByWordArray } from '../../../../website/server/libs/stringUtils';
|
||||
import bannedWords from '../../../../website/server/libs/bannedWords';
|
||||
|
||||
describe('stringUtils', () => {
|
||||
describe('getMatchesByWordArray', () => {
|
||||
it('check all banned words are matched', async () => {
|
||||
const message = bannedWords.join(',').replace(/\\/g, '');
|
||||
const matches = getMatchesByWordArray(message, bannedWords);
|
||||
expect(matches.length).to.equal(bannedWords.length);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -170,6 +170,7 @@ describe('errorHandler', () => {
|
||||
originalUrl: req.originalUrl,
|
||||
headers: req.headers,
|
||||
body: req.body,
|
||||
query: req.query,
|
||||
httpCode: 400,
|
||||
isHandledError: true,
|
||||
});
|
||||
|
||||
@@ -538,52 +538,74 @@ describe('Group Model', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('sends a chat message if no progress is made on quest with multiple items', async () => {
|
||||
progress.collectedItems = 0;
|
||||
party.quest.key = 'dilatoryDistress1';
|
||||
party.quest.active = false;
|
||||
describe('collection quests with multiple items', () => {
|
||||
it('sends a chat message if no progress is made on quest with multiple items', async () => {
|
||||
progress.collectedItems = 0;
|
||||
party.quest.key = 'dilatoryDistress1';
|
||||
party.quest.active = false;
|
||||
|
||||
await party.startQuest(questLeader);
|
||||
Group.prototype.sendChat.resetHistory();
|
||||
await party.save();
|
||||
await party.startQuest(questLeader);
|
||||
Group.prototype.sendChat.resetHistory();
|
||||
await party.save();
|
||||
|
||||
await Group.processQuestProgress(participatingMember, progress);
|
||||
await Group.processQuestProgress(participatingMember, progress);
|
||||
|
||||
party = await Group.findOne({ _id: party._id });
|
||||
party = await Group.findOne({ _id: party._id });
|
||||
|
||||
expect(Group.prototype.sendChat).to.be.calledOnce;
|
||||
expect(Group.prototype.sendChat).to.be.calledWith({
|
||||
message: '`Participating Member found 0 Fire Coral, 0 Blue Fins.`',
|
||||
info: {
|
||||
items: { blueFins: 0, fireCoral: 0 },
|
||||
quest: 'dilatoryDistress1',
|
||||
type: 'user_found_items',
|
||||
user: 'Participating Member',
|
||||
},
|
||||
expect(Group.prototype.sendChat).to.be.calledOnce;
|
||||
expect(Group.prototype.sendChat).to.be.calledWith({
|
||||
message: '`Participating Member found 0 Fire Coral, 0 Blue Fins.`',
|
||||
info: {
|
||||
items: { blueFins: 0, fireCoral: 0 },
|
||||
quest: 'dilatoryDistress1',
|
||||
type: 'user_found_items',
|
||||
user: 'Participating Member',
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('handles collection quests with multiple items', async () => {
|
||||
progress.collectedItems = 10;
|
||||
party.quest.key = 'evilsanta2';
|
||||
party.quest.active = false;
|
||||
it('handles correctly', async () => {
|
||||
progress.collectedItems = 10;
|
||||
party.quest.key = 'evilsanta2';
|
||||
party.quest.active = false;
|
||||
|
||||
await party.startQuest(questLeader);
|
||||
Group.prototype.sendChat.resetHistory();
|
||||
await party.save();
|
||||
await party.startQuest(questLeader);
|
||||
Group.prototype.sendChat.resetHistory();
|
||||
await party.save();
|
||||
|
||||
await Group.processQuestProgress(participatingMember, progress);
|
||||
await Group.processQuestProgress(participatingMember, progress);
|
||||
|
||||
party = await Group.findOne({ _id: party._id });
|
||||
party = await Group.findOne({ _id: party._id });
|
||||
|
||||
expect(Group.prototype.sendChat).to.be.calledOnce;
|
||||
expect(Group.prototype.sendChat).to.be.calledWithMatch({
|
||||
message: sinon.match(/`Participating Member found/).and(sinon.match(/\d* (Tracks|Broken Twigs)/)),
|
||||
info: {
|
||||
quest: 'evilsanta2',
|
||||
type: 'user_found_items',
|
||||
user: 'Participating Member',
|
||||
},
|
||||
expect(Group.prototype.sendChat).to.be.calledOnce;
|
||||
expect(Group.prototype.sendChat).to.be.calledWithMatch({
|
||||
message: sinon.match(/`Participating Member found/).and(sinon.match(/\d* (Tracks|Broken Twigs)/)),
|
||||
info: {
|
||||
quest: 'evilsanta2',
|
||||
type: 'user_found_items',
|
||||
user: 'Participating Member',
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it('cannot collect excess items', async () => {
|
||||
// Make sure the quest progress isn't erased
|
||||
sandbox.stub(Group.prototype, 'finishQuest').returns(Promise.resolve());
|
||||
|
||||
progress.collectedItems = 500;
|
||||
party.quest.key = 'evilsanta2';
|
||||
party.quest.active = false;
|
||||
|
||||
await party.startQuest(questLeader);
|
||||
await party.save();
|
||||
|
||||
await Group.processQuestProgress(participatingMember, progress);
|
||||
party = await Group.findOne({ _id: party._id });
|
||||
|
||||
expect(party.quest.progress.collect.tracks)
|
||||
.to.eql(questScrolls.evilsanta2.collect.tracks.count);
|
||||
expect(party.quest.progress.collect.branches)
|
||||
.to.eql(questScrolls.evilsanta2.collect.branches.count);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -2380,29 +2402,29 @@ describe('Group Model', () => {
|
||||
});
|
||||
});
|
||||
|
||||
context('isSubscribed', () => {
|
||||
context('hasActiveGroupPlan', () => {
|
||||
it('returns false if group does not have customer id', () => {
|
||||
expect(party.isSubscribed()).to.be.undefined;
|
||||
expect(party.hasActiveGroupPlan()).to.be.undefined;
|
||||
});
|
||||
|
||||
it('returns true if group does not have plan.dateTerminated', () => {
|
||||
party.purchased.plan.customerId = 'test-id';
|
||||
|
||||
expect(party.isSubscribed()).to.be.true;
|
||||
expect(party.hasActiveGroupPlan()).to.be.true;
|
||||
});
|
||||
|
||||
it('returns true if group if plan.dateTerminated is after today', () => {
|
||||
party.purchased.plan.customerId = 'test-id';
|
||||
party.purchased.plan.dateTerminated = moment().add(1, 'days').toDate();
|
||||
|
||||
expect(party.isSubscribed()).to.be.true;
|
||||
expect(party.hasActiveGroupPlan()).to.be.true;
|
||||
});
|
||||
|
||||
it('returns false if group if plan.dateTerminated is before today', () => {
|
||||
party.purchased.plan.customerId = 'test-id';
|
||||
party.purchased.plan.dateTerminated = moment().subtract(1, 'days').toDate();
|
||||
|
||||
expect(party.isSubscribed()).to.be.false;
|
||||
expect(party.hasActiveGroupPlan()).to.be.false;
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -14,8 +14,6 @@ import {
|
||||
TAVERN_ID,
|
||||
} from '../../../../../website/server/models/group';
|
||||
import { CHAT_FLAG_FROM_SHADOW_MUTE, MAX_MESSAGE_LENGTH } from '../../../../../website/common/script/constants';
|
||||
import { getMatchesByWordArray } from '../../../../../website/server/libs/stringUtils';
|
||||
import bannedWords from '../../../../../website/server/libs/bannedWords';
|
||||
import guildsAllowingBannedWords from '../../../../../website/server/libs/guildsAllowingBannedWords';
|
||||
import * as email from '../../../../../website/server/libs/email';
|
||||
|
||||
@@ -292,12 +290,6 @@ describe('POST /chat', () => {
|
||||
.that.includes(testBannedWords.join(', '));
|
||||
});
|
||||
|
||||
it('check all banned words are matched', async () => {
|
||||
const message = bannedWords.join(',').replace(/\\/g, '');
|
||||
const matches = getMatchesByWordArray(message, bannedWords);
|
||||
expect(matches.length).to.equal(bannedWords.length);
|
||||
});
|
||||
|
||||
it('does not error when bad word is suffix of a word', async () => {
|
||||
const wordAsSuffix = `prefix${testBannedWordMessage}`;
|
||||
const message = await user.post('/groups/habitrpg/chat', { message: wordAsSuffix });
|
||||
|
||||
@@ -2,6 +2,7 @@ import { v4 as generateUUID } from 'uuid';
|
||||
import {
|
||||
each,
|
||||
} from 'lodash';
|
||||
import moment from 'moment';
|
||||
import {
|
||||
generateChallenge,
|
||||
checkExistence,
|
||||
@@ -12,6 +13,7 @@ import {
|
||||
} from '../../../../helpers/api-integration/v3';
|
||||
import { model as User } from '../../../../../website/server/models/user';
|
||||
import payments from '../../../../../website/server/libs/payments/payments';
|
||||
import { calculateSubscriptionTerminationDate } from '../../../../../website/server/libs/payments/util';
|
||||
|
||||
describe('POST /groups/:groupId/leave', () => {
|
||||
const typesOfGroups = {
|
||||
@@ -338,4 +340,48 @@ describe('POST /groups/:groupId/leave', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
each(typesOfGroups, (groupDetails, groupType) => {
|
||||
context(`Leaving a group with extraMonths left plan when the group is a ${groupType}`, () => {
|
||||
const extraMonths = 12;
|
||||
let groupWithPlan;
|
||||
let member;
|
||||
|
||||
beforeEach(async () => {
|
||||
const { group, members } = await createAndPopulateGroup({
|
||||
groupDetails,
|
||||
members: 1,
|
||||
upgradeToGroupPlan: true,
|
||||
});
|
||||
[member] = members;
|
||||
groupWithPlan = group;
|
||||
await member.update({
|
||||
'purchased.plan.extraMonths': extraMonths,
|
||||
});
|
||||
});
|
||||
it('calculates dateTerminated and sets extraMonths to zero after user leaves the group', async () => {
|
||||
const userBeforeLeave = await User.findById(member._id).exec();
|
||||
|
||||
await member.post(`/groups/${groupWithPlan._id}/leave`);
|
||||
const userAfterLeave = await User.findById(member._id).exec();
|
||||
|
||||
const dateTerminatedBefore = userBeforeLeave.purchased.plan.dateTerminated;
|
||||
const extraMonthsBefore = userBeforeLeave.purchased.plan.extraMonths;
|
||||
const dateTerminatedAfter = userAfterLeave.purchased.plan.dateTerminated;
|
||||
const extraMonthsAfter = userAfterLeave.purchased.plan.extraMonths;
|
||||
|
||||
const expectedTerminationDate = calculateSubscriptionTerminationDate(null, {
|
||||
customerId: payments.constants.GROUP_PLAN_CUSTOMER_ID,
|
||||
extraMonths,
|
||||
}, payments.constants);
|
||||
|
||||
expect(extraMonthsBefore).to.gte(12);
|
||||
expect(extraMonthsAfter).to.equal(0);
|
||||
expect(dateTerminatedBefore).to.be.null;
|
||||
expect(dateTerminatedAfter).to.exist;
|
||||
|
||||
expect(moment(dateTerminatedAfter).diff(expectedTerminationDate, 'days')).to.equal(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -112,7 +112,7 @@ describe('POST /groups/:groupId/quests/accept', () => {
|
||||
|
||||
await Promise.all([partyMembers[0].sync(), questingGroup.sync()]);
|
||||
expect(leader.party.quest.RSVPNeeded).to.equal(false);
|
||||
expect(questingGroup.quest.members[partyMembers[0]._id]);
|
||||
expect(questingGroup.quest.members[partyMembers[0]._id]).to.equal(true);
|
||||
});
|
||||
|
||||
it('does not begin the quest if pending invitations remain', async () => {
|
||||
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
describe('POST /user/unlock', () => {
|
||||
let user;
|
||||
const unlockPath = 'shirt.convict,shirt.cross,shirt.fire,shirt.horizon,shirt.ocean,shirt.purple,shirt.rainbow,shirt.redblue,shirt.thunder,shirt.tropical,shirt.zombie';
|
||||
const unlockGearSetPath = 'items.gear.owned.headAccessory_special_bearEars,items.gear.owned.headAccessory_special_cactusEars,items.gear.owned.headAccessory_special_foxEars,items.gear.owned.headAccessory_special_lionEars,items.gear.owned.headAccessory_special_pandaEars,items.gear.owned.headAccessory_special_pigEars,items.gear.owned.headAccessory_special_tigerEars,items.gear.owned.headAccessory_special_wolfEars';
|
||||
const unlockCost = 1.25;
|
||||
const usersStartingGems = 5;
|
||||
|
||||
@@ -34,4 +35,25 @@ describe('POST /user/unlock', () => {
|
||||
expect(response.message).to.equal(t('unlocked'));
|
||||
expect(user.balance).to.equal(usersStartingGems - unlockCost);
|
||||
});
|
||||
|
||||
it('does not reduce a user\'s balance twice', async () => {
|
||||
await user.update({
|
||||
balance: usersStartingGems,
|
||||
});
|
||||
const response = await user.post(`/user/unlock?path=${unlockGearSetPath}`);
|
||||
await user.sync();
|
||||
|
||||
expect(response.message).to.equal(t('unlocked'));
|
||||
expect(user.balance).to.equal(usersStartingGems - unlockCost);
|
||||
|
||||
expect(user.post(`/user/unlock?path=${unlockGearSetPath}`))
|
||||
.to.eventually.be.rejected.and.to.eql({
|
||||
code: 401,
|
||||
error: 'NotAuthorized',
|
||||
message: t('alreadyUnlocked'),
|
||||
});
|
||||
await user.sync();
|
||||
|
||||
expect(user.balance).to.equal(usersStartingGems - unlockCost);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -89,6 +89,18 @@ describe('shared.ops.feed', () => {
|
||||
}
|
||||
});
|
||||
|
||||
it('does not allow feeding of wacky pets', done => {
|
||||
user.items.pets['Wolf-Veggie'] = 5;
|
||||
user.items.food.Meat = 1;
|
||||
try {
|
||||
feed(user, { params: { pet: 'Wolf-Veggie', food: 'Meat' } });
|
||||
} catch (err) {
|
||||
expect(err).to.be.an.instanceof(NotAuthorized);
|
||||
expect(err.message).to.equal(i18n.t('messageCannotFeedPet'));
|
||||
done();
|
||||
}
|
||||
});
|
||||
|
||||
it('does not allow feeding of mounts', done => {
|
||||
user.items.pets['Wolf-Base'] = -1;
|
||||
user.items.mounts['Wolf-Base'] = true;
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
import unlock from '../../../website/common/script/ops/unlock';
|
||||
import i18n from '../../../website/common/script/i18n';
|
||||
import {
|
||||
generateUser,
|
||||
} from '../../helpers/common.helper';
|
||||
import {
|
||||
NotAuthorized,
|
||||
BadRequest,
|
||||
} from '../../../website/common/script/libs/errors';
|
||||
import { generateUser } from '../../helpers/common.helper';
|
||||
import { NotAuthorized, BadRequest } from '../../../website/common/script/libs/errors';
|
||||
|
||||
describe('shared.ops.unlock', () => {
|
||||
let user;
|
||||
@@ -31,6 +26,15 @@ describe('shared.ops.unlock', () => {
|
||||
}
|
||||
});
|
||||
|
||||
it('does not unlock lost gear', done => {
|
||||
user.items.gear.owned.headAccessory_special_bearEars = false;
|
||||
|
||||
unlock(user, { query: { path: 'items.gear.owned.headAccessory_special_bearEars' } });
|
||||
|
||||
expect(user.balance).to.equal(usersStartingGems);
|
||||
done();
|
||||
});
|
||||
|
||||
it('returns an error when user balance is too low', done => {
|
||||
user.balance = 0;
|
||||
|
||||
@@ -50,18 +54,30 @@ describe('shared.ops.unlock', () => {
|
||||
} catch (err) {
|
||||
expect(err).to.be.an.instanceof(NotAuthorized);
|
||||
expect(err.message).to.equal(i18n.t('alreadyUnlocked'));
|
||||
expect(user.balance).to.equal(3.75);
|
||||
done();
|
||||
}
|
||||
});
|
||||
|
||||
// disabled until fully implemente
|
||||
xit('returns an error when user already owns items in a full set', done => {
|
||||
it('returns an error when user already owns a full set of gear', done => {
|
||||
try {
|
||||
unlock(user, { query: { path: unlockPath } });
|
||||
unlock(user, { query: { path: unlockPath } });
|
||||
unlock(user, { query: { path: unlockGearSetPath } });
|
||||
unlock(user, { query: { path: unlockGearSetPath } });
|
||||
} catch (err) {
|
||||
expect(err).to.be.an.instanceof(NotAuthorized);
|
||||
expect(err.message).to.equal(i18n.t('alreadyUnlocked'));
|
||||
expect(user.balance).to.equal(3.75);
|
||||
done();
|
||||
}
|
||||
});
|
||||
|
||||
xit('returns an error when user already owns items in a full set', done => {
|
||||
try {
|
||||
unlock(user, { query: { path: unlockPath.split(',').splice(2).join(',') } });
|
||||
unlock(user, { query: { path: unlockPath } });
|
||||
} catch (err) {
|
||||
expect(err).to.be.an.instanceof(NotAuthorized);
|
||||
expect(err.message).to.equal(i18n.t('alreadyUnlockedPart'));
|
||||
done();
|
||||
}
|
||||
});
|
||||
@@ -78,7 +94,7 @@ describe('shared.ops.unlock', () => {
|
||||
expect(user.preferences.background).to.equal('giant_florals');
|
||||
});
|
||||
|
||||
it('un-equips an item already equipped', () => {
|
||||
it('un-equips a background already equipped', () => {
|
||||
expect(user.purchased.background.giant_florals).to.not.exist;
|
||||
|
||||
unlock(user, { query: { path: backgroundUnlockPath } }); // unlock
|
||||
@@ -105,7 +121,7 @@ describe('shared.ops.unlock', () => {
|
||||
expect(user.items.gear.owned.headAccessory_special_wolfEars).to.be.true;
|
||||
});
|
||||
|
||||
it('unlocks a an item', () => {
|
||||
it('unlocks an item', () => {
|
||||
const [, message] = unlock(user, { query: { path: backgroundUnlockPath } });
|
||||
|
||||
expect(message).to.equal(i18n.t('unlocked'));
|
||||
|
||||
@@ -5,6 +5,8 @@ import { v4 as generateUUID } from 'uuid';
|
||||
import { ApiUser, ApiGroup, ApiChallenge } from '../api-classes';
|
||||
import { requester } from '../requester';
|
||||
import * as Tasks from '../../../../website/server/models/task';
|
||||
import payments from '../../../../website/server/libs/payments/payments';
|
||||
import { model as User } from '../../../../website/server/models/user';
|
||||
|
||||
// Creates a new user and returns it
|
||||
// If you need the user to have specific requirements,
|
||||
@@ -83,14 +85,35 @@ export async function generateGroup (leader, details = {}, update = {}) {
|
||||
return apiGroup;
|
||||
}
|
||||
|
||||
async function _upgradeToGroupPlan (groupLeader, group) {
|
||||
const groupLeaderModel = await User.findById(groupLeader._id).exec();
|
||||
|
||||
// Create subscription
|
||||
const paymentData = {
|
||||
user: groupLeaderModel,
|
||||
groupId: group._id,
|
||||
sub: {
|
||||
key: 'basic_3mo',
|
||||
},
|
||||
customerId: 'customer-id',
|
||||
paymentMethod: 'Payment Method',
|
||||
headers: {
|
||||
'x-client': 'habitica-web',
|
||||
'user-agent': '',
|
||||
},
|
||||
};
|
||||
await payments.createSubscription(paymentData);
|
||||
}
|
||||
|
||||
// This is generate group + the ability to create
|
||||
// real users to populate it. The settings object
|
||||
// takes in:
|
||||
// members: Number - the number of group members to create.
|
||||
// Defaults to 0. Does not include group leader.
|
||||
// inivtes: Number - the number of users to create and invite to the group. Defaults to 0.
|
||||
// invites: Number - the number of users to create and invite to the group. Defaults to 0.
|
||||
// groupDetails: Object - how to initialize the group
|
||||
// leaderDetails: Object - defaults for the leader, defaults with a gem balance so the user
|
||||
// addGroupPlan: boolean - will add group plan with basic subscription. Defaults to false
|
||||
// can create the group
|
||||
//
|
||||
// Returns an object with
|
||||
@@ -101,6 +124,7 @@ export async function generateGroup (leader, details = {}, update = {}) {
|
||||
export async function createAndPopulateGroup (settings = {}) {
|
||||
const numberOfMembers = settings.members || 0;
|
||||
const numberOfInvites = settings.invites || 0;
|
||||
const upgradeToGroupPlan = settings.upgradeToGroupPlan || false;
|
||||
const { groupDetails } = settings;
|
||||
const leaderDetails = settings.leaderDetails || { balance: 10 };
|
||||
|
||||
@@ -130,6 +154,10 @@ export async function createAndPopulateGroup (settings = {}) {
|
||||
|
||||
await Promise.all(invitees.map(invitee => invitee.sync()));
|
||||
|
||||
if (upgradeToGroupPlan) {
|
||||
await _upgradeToGroupPlan(groupLeader, group);
|
||||
}
|
||||
|
||||
return {
|
||||
groupLeader,
|
||||
group,
|
||||
|
||||
@@ -7265,9 +7265,9 @@
|
||||
"integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA=="
|
||||
},
|
||||
"bootstrap-vue": {
|
||||
"version": "2.11.0",
|
||||
"resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.11.0.tgz",
|
||||
"integrity": "sha512-T23+aVVSDifX1SsI5y69bYZzbm8iQHlmgiBUw9XxY1KTw/fb4xvUq4+Y01Tsaul04+zmrUah/5zvUGKLwTcH7A==",
|
||||
"version": "2.12.0",
|
||||
"resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.12.0.tgz",
|
||||
"integrity": "sha512-cnW89Ig0OBbKTA6Hv8daijSWziNSDErAme9jTOmjBDtzqYAd9D4NCp0wDjfNRaZBojTRx/UR1SCatxP3bE+SMw==",
|
||||
"requires": {
|
||||
"@nuxt/opencollective": "^0.3.0",
|
||||
"bootstrap": ">=4.4.1 <5.0.0",
|
||||
@@ -11676,13 +11676,13 @@
|
||||
}
|
||||
},
|
||||
"habitica-markdown": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/habitica-markdown/-/habitica-markdown-1.3.2.tgz",
|
||||
"integrity": "sha512-IyiS583DfqE+KvW4NQAB4K2HjJZ1oF50L0EDz7KaixyK7C41s47wsbN81QtNMB8LnRqbMHFDesD2xEzdicjFXw==",
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/habitica-markdown/-/habitica-markdown-1.4.0.tgz",
|
||||
"integrity": "sha512-hklG3eBILNbx/VxGeRxuk+/RiWWllcd5QLNv7Kvm2wGBRTeK9c3my2eusGuHXkwStEFGxjJD5e0iMO47cGPxYw==",
|
||||
"requires": {
|
||||
"habitica-markdown-emoji": "1.2.4",
|
||||
"markdown-it": "8.4.2",
|
||||
"markdown-it-link-attributes": "1.0.0",
|
||||
"markdown-it": "10.0.0",
|
||||
"markdown-it-link-attributes": "3.0.0",
|
||||
"markdown-it-linkify-images": "^1.1.1"
|
||||
}
|
||||
},
|
||||
@@ -13560,22 +13560,15 @@
|
||||
}
|
||||
},
|
||||
"markdown-it": {
|
||||
"version": "8.4.2",
|
||||
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
|
||||
"integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz",
|
||||
"integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==",
|
||||
"requires": {
|
||||
"argparse": "^1.0.7",
|
||||
"entities": "~1.1.1",
|
||||
"entities": "~2.0.0",
|
||||
"linkify-it": "^2.0.0",
|
||||
"mdurl": "^1.0.1",
|
||||
"uc.micro": "^1.0.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"entities": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
|
||||
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"markdown-it-emoji": {
|
||||
@@ -13584,9 +13577,9 @@
|
||||
"integrity": "sha1-m+4OmpkKljupbfaYDE/dsF37Tcw="
|
||||
},
|
||||
"markdown-it-link-attributes": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/markdown-it-link-attributes/-/markdown-it-link-attributes-1.0.0.tgz",
|
||||
"integrity": "sha1-jaHKFynw+hbGVhWwsQdbecg3Gi4="
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/markdown-it-link-attributes/-/markdown-it-link-attributes-3.0.0.tgz",
|
||||
"integrity": "sha512-B34ySxVeo6MuEGSPCWyIYryuXINOvngNZL87Mp7YYfKIf6DcD837+lXA8mo6EBbauKsnGz22ZH0zsbOiQRWTNg=="
|
||||
},
|
||||
"markdown-it-linkify-images": {
|
||||
"version": "1.1.1",
|
||||
@@ -13594,6 +13587,25 @@
|
||||
"integrity": "sha512-1IEmAaAjIgAwY+tZI0sxDXdy9QKHutj5cN0lH2JBiSZt+2NYKrWRJj0cloQW3OFIfP2MLFA1E+6OLJhXPiLgNw==",
|
||||
"requires": {
|
||||
"markdown-it": "^8.4.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"entities": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
|
||||
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
|
||||
},
|
||||
"markdown-it": {
|
||||
"version": "8.4.2",
|
||||
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
|
||||
"integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
|
||||
"requires": {
|
||||
"argparse": "^1.0.7",
|
||||
"entities": "~1.1.1",
|
||||
"linkify-it": "^2.0.0",
|
||||
"mdurl": "^1.0.1",
|
||||
"uc.micro": "^1.0.5"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"markdown-to-jsx": {
|
||||
@@ -15158,11 +15170,6 @@
|
||||
"sha.js": "^2.4.8"
|
||||
}
|
||||
},
|
||||
"perfect-scrollbar": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.0.tgz",
|
||||
"integrity": "sha512-NrNHJn5mUGupSiheBTy6x+6SXCFbLlm8fVZh9moIzw/LgqElN5q4ncR4pbCBCYuCJ8Kcl9mYM0NgDxvW+b4LxA=="
|
||||
},
|
||||
"performance-now": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
||||
@@ -15433,17 +15440,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"postcss-import": {
|
||||
"version": "12.0.1",
|
||||
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz",
|
||||
"integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==",
|
||||
"requires": {
|
||||
"postcss": "^7.0.1",
|
||||
"postcss-value-parser": "^3.2.3",
|
||||
"read-cache": "^1.0.0",
|
||||
"resolve": "^1.1.7"
|
||||
}
|
||||
},
|
||||
"postcss-load-config": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz",
|
||||
@@ -16633,21 +16629,6 @@
|
||||
"lodash": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"read-cache": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
||||
"integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
|
||||
"requires": {
|
||||
"pify": "^2.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"pify": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
|
||||
}
|
||||
}
|
||||
},
|
||||
"read-pkg": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
|
||||
@@ -17177,9 +17158,9 @@
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"sass": {
|
||||
"version": "1.26.3",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.26.3.tgz",
|
||||
"integrity": "sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw==",
|
||||
"version": "1.26.5",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.26.5.tgz",
|
||||
"integrity": "sha512-FG2swzaZUiX53YzZSjSakzvGtlds0lcbF+URuU9mxOv7WBh7NhXEVDa4kPKN4hN6fC2TkOTOKqiqp6d53N9X5Q==",
|
||||
"requires": {
|
||||
"chokidar": ">=2.0.0 <4.0.0"
|
||||
}
|
||||
@@ -19722,16 +19703,6 @@
|
||||
"resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz",
|
||||
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw=="
|
||||
},
|
||||
"vue2-perfect-scrollbar": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/vue2-perfect-scrollbar/-/vue2-perfect-scrollbar-1.4.0.tgz",
|
||||
"integrity": "sha512-kluthjiZOOhAZ/18RTZJr2Y9lpjgkuOuxkH8MMMq1dYrSUdvlEv8V1UPtW7UDVcTAUo048AUE/W4hSPTfluejw==",
|
||||
"requires": {
|
||||
"cssnano": "^4.1.3",
|
||||
"perfect-scrollbar": "^1.4.0",
|
||||
"postcss-import": "^12.0.0"
|
||||
}
|
||||
},
|
||||
"vuedraggable": {
|
||||
"version": "2.23.2",
|
||||
"resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.23.2.tgz",
|
||||
@@ -19802,15 +19773,15 @@
|
||||
"integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
|
||||
},
|
||||
"webpack": {
|
||||
"version": "4.42.1",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz",
|
||||
"integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==",
|
||||
"version": "4.43.0",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz",
|
||||
"integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==",
|
||||
"requires": {
|
||||
"@webassemblyjs/ast": "1.9.0",
|
||||
"@webassemblyjs/helper-module-context": "1.9.0",
|
||||
"@webassemblyjs/wasm-edit": "1.9.0",
|
||||
"@webassemblyjs/wasm-parser": "1.9.0",
|
||||
"acorn": "^6.2.1",
|
||||
"acorn": "^6.4.1",
|
||||
"ajv": "^6.10.2",
|
||||
"ajv-keywords": "^3.4.1",
|
||||
"chrome-trace-event": "^1.0.2",
|
||||
@@ -19827,7 +19798,7 @@
|
||||
"schema-utils": "^1.0.0",
|
||||
"tapable": "^1.1.3",
|
||||
"terser-webpack-plugin": "^1.4.3",
|
||||
"watchpack": "^1.6.0",
|
||||
"watchpack": "^1.6.1",
|
||||
"webpack-sources": "^1.4.1"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -19837,9 +19808,9 @@
|
||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
|
||||
},
|
||||
"mkdirp": {
|
||||
"version": "0.5.4",
|
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
|
||||
"integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==",
|
||||
"version": "0.5.5",
|
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
|
||||
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
|
||||
"requires": {
|
||||
"minimist": "^1.2.5"
|
||||
}
|
||||
|
||||
@@ -29,14 +29,14 @@
|
||||
"axios-progress-bar": "^1.2.0",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"bootstrap": "^4.4.1",
|
||||
"bootstrap-vue": "^2.11.0",
|
||||
"bootstrap-vue": "^2.12.0",
|
||||
"chai": "^4.1.2",
|
||||
"core-js": "^3.6.5",
|
||||
"eslint": "^6.8.0",
|
||||
"eslint-config-habitrpg": "^6.2.0",
|
||||
"eslint-plugin-mocha": "^5.3.0",
|
||||
"eslint-plugin-vue": "^6.2.2",
|
||||
"habitica-markdown": "^1.3.2",
|
||||
"habitica-markdown": "^1.4.0",
|
||||
"hellojs": "^1.18.4",
|
||||
"inspectpack": "^4.4.0",
|
||||
"intro.js": "^2.9.3",
|
||||
@@ -44,7 +44,7 @@
|
||||
"lodash": "^4.17.15",
|
||||
"moment": "^2.24.0",
|
||||
"nconf": "^0.10.0",
|
||||
"sass": "^1.26.3",
|
||||
"sass": "^1.26.5",
|
||||
"sass-loader": "^8.0.2",
|
||||
"smartbanner.js": "^1.15.0",
|
||||
"svg-inline-loader": "^0.8.2",
|
||||
@@ -58,9 +58,8 @@
|
||||
"vue-mugen-scroll": "^0.2.6",
|
||||
"vue-router": "^3.1.6",
|
||||
"vue-template-compiler": "^2.6.11",
|
||||
"vue2-perfect-scrollbar": "^1.4.0",
|
||||
"vuedraggable": "^2.23.1",
|
||||
"vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#5d237615463a84a23dd6f3f77c6ab577d68593ec",
|
||||
"webpack": "^4.42.1"
|
||||
"webpack": "^4.43.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,84 +1,24 @@
|
||||
.promo_april_fools_2020 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -445px -184px;
|
||||
width: 423px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_armoire_backgrounds_202004 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px -500px;
|
||||
background-position: -313px 0px;
|
||||
width: 423px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_egg_quest {
|
||||
.promo_mystery_202005 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -355px -648px;
|
||||
width: 354px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_mystery_202004 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -875px 0px;
|
||||
background-position: 0px -223px;
|
||||
width: 282px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_pastel_skin_hair {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px -648px;
|
||||
width: 354px;
|
||||
height: 147px;
|
||||
}
|
||||
.customize-option.promo_pastel_skin_hair {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -25px -663px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.promo_seasonal_shop_spring {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -875px -299px;
|
||||
width: 162px;
|
||||
height: 138px;
|
||||
}
|
||||
.promo_shiny_seeds {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -424px -500px;
|
||||
width: 360px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_spring_2019 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px -337px;
|
||||
width: 432px;
|
||||
height: 162px;
|
||||
}
|
||||
.promo_spring_2020 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -445px 0px;
|
||||
width: 429px;
|
||||
height: 183px;
|
||||
}
|
||||
.promo_spring_potions_2020 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -433px -337px;
|
||||
width: 423px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_take_this {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -1026px -148px;
|
||||
background-position: -313px -148px;
|
||||
width: 96px;
|
||||
height: 69px;
|
||||
}
|
||||
.scene_hat_guild {
|
||||
.scene_casting_spells {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px 0px;
|
||||
width: 444px;
|
||||
height: 336px;
|
||||
}
|
||||
.scene_meditation {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -875px -148px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
width: 312px;
|
||||
height: 222px;
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
}
|
||||
.quest_dustbunnies {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1320px -660px;
|
||||
background-position: -440px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
@@ -30,19 +30,19 @@
|
||||
}
|
||||
.quest_evilsanta2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -220px -232px;
|
||||
background-position: 0px -232px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_falcon {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -440px -232px;
|
||||
background-position: -220px -232px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_ferret {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -660px 0px;
|
||||
background-position: -440px -232px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
@@ -54,13 +54,13 @@
|
||||
}
|
||||
.quest_ghost_stag {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: 0px -452px;
|
||||
background-position: -660px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_goldenknight1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -220px -452px;
|
||||
background-position: -660px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
@@ -84,13 +84,13 @@
|
||||
}
|
||||
.quest_guineapig {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -880px -220px;
|
||||
background-position: 0px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_harpy {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -880px -440px;
|
||||
background-position: -220px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
@@ -102,43 +102,43 @@
|
||||
}
|
||||
.quest_hippo {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -220px -672px;
|
||||
background-position: -440px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_horse {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -440px -672px;
|
||||
background-position: -660px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_kangaroo {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -660px -672px;
|
||||
background-position: -880px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_kraken {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1311px -1332px;
|
||||
background-position: -660px -1332px;
|
||||
width: 216px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_lostMasterclasser1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1100px 0px;
|
||||
background-position: -880px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_lostMasterclasser2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1100px -220px;
|
||||
background-position: -880px -440px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_lostMasterclasser3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1100px -440px;
|
||||
background-position: 0px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
@@ -150,61 +150,61 @@
|
||||
}
|
||||
.quest_mayhemMistiflying2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: 0px -892px;
|
||||
background-position: -220px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_mayhemMistiflying3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -220px -892px;
|
||||
background-position: -440px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_monkey {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -440px -892px;
|
||||
background-position: -660px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moon1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1540px -1082px;
|
||||
background-position: -1540px -214px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_moon2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -880px -892px;
|
||||
background-position: -880px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moon3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1100px -892px;
|
||||
background-position: -1100px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moonstone1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1320px 0px;
|
||||
background-position: -1100px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moonstone2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1320px -220px;
|
||||
background-position: -1100px -440px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moonstone3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1320px -440px;
|
||||
background-position: -1100px -660px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_nudibranch {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1540px -865px;
|
||||
background-position: -1540px -431px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
@@ -216,7 +216,7 @@
|
||||
}
|
||||
.quest_owl {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: 0px -1112px;
|
||||
background-position: 0px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
@@ -234,25 +234,25 @@
|
||||
}
|
||||
.quest_pterodactyl {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -660px -1112px;
|
||||
background-position: -220px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_rat {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -880px -1112px;
|
||||
background-position: -440px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_robot {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1100px -1112px;
|
||||
background-position: -660px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_rock {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1540px -214px;
|
||||
background-position: -1540px -865px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
@@ -264,43 +264,43 @@
|
||||
}
|
||||
.quest_ruby {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -440px -1112px;
|
||||
background-position: -880px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_sabretooth {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -220px -1112px;
|
||||
background-position: -1100px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_seaserpent {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1320px -880px;
|
||||
background-position: -1320px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_sheep {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -660px -892px;
|
||||
background-position: -1320px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_silver {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1100px -660px;
|
||||
background-position: -1320px -440px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_slime {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -880px -672px;
|
||||
background-position: -1320px -660px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_sloth {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: 0px -672px;
|
||||
background-position: -1320px -880px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
@@ -312,7 +312,7 @@
|
||||
}
|
||||
.quest_snake {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -660px -1332px;
|
||||
background-position: -877px -1332px;
|
||||
width: 216px;
|
||||
height: 177px;
|
||||
}
|
||||
@@ -324,43 +324,43 @@
|
||||
}
|
||||
.quest_squirrel {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -880px 0px;
|
||||
background-position: 0px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_stoikalmCalamity1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1762px -872px;
|
||||
background-position: -1762px -721px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
.quest_stoikalmCalamity2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -440px -452px;
|
||||
background-position: -220px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_stoikalmCalamity3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -660px -220px;
|
||||
background-position: -440px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_taskwoodsTerror1 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1762px -721px;
|
||||
background-position: -1762px -872px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
.quest_taskwoodsTerror2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -1540px -431px;
|
||||
background-position: -1540px -1082px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_taskwoodsTerror3 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: 0px -232px;
|
||||
background-position: -660px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
@@ -378,19 +378,19 @@
|
||||
}
|
||||
.quest_trex_undead {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -877px -1332px;
|
||||
background-position: -1311px -1332px;
|
||||
width: 216px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_triceratops {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -440px 0px;
|
||||
background-position: -880px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_turtle {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-13.png');
|
||||
background-position: -660px -452px;
|
||||
background-position: -1100px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
|
||||
@@ -1,84 +1,84 @@
|
||||
.Mount_Head_Wolf-RoyalPurple {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -136px 0px;
|
||||
background-position: 0px 0px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
.Mount_Head_Wolf-Ruby {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -136px -408px;
|
||||
background-position: -136px 0px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
.Mount_Head_Wolf-Shade {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: 0px -408px;
|
||||
background-position: 0px -136px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
.Mount_Head_Wolf-Shadow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: 0px -136px;
|
||||
background-position: -136px -136px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
.Mount_Head_Wolf-Shimmer {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -136px -136px;
|
||||
background-position: -272px 0px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
.Mount_Head_Wolf-Silver {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -272px 0px;
|
||||
background-position: -272px -136px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
.Mount_Head_Wolf-Skeleton {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -272px -136px;
|
||||
background-position: 0px -272px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
.Mount_Head_Wolf-Spooky {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: 0px -272px;
|
||||
background-position: -136px -272px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
.Mount_Head_Wolf-StarryNight {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -136px -272px;
|
||||
background-position: -272px -272px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
.Mount_Head_Wolf-Sunshine {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -272px -272px;
|
||||
background-position: -408px 0px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
.Mount_Head_Wolf-Thunderstorm {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -408px 0px;
|
||||
background-position: -408px -136px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
.Mount_Head_Wolf-Watery {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -408px -136px;
|
||||
background-position: -408px -272px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
.Mount_Head_Wolf-White {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -408px -272px;
|
||||
background-position: 0px -408px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
.Mount_Head_Wolf-Zombie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: 0px 0px;
|
||||
background-position: -136px -408px;
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
}
|
||||
@@ -90,55 +90,55 @@
|
||||
}
|
||||
.Mount_Head_Yarn-CottonCandyBlue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -544px -212px;
|
||||
background-position: -378px -408px;
|
||||
width: 105px;
|
||||
height: 105px;
|
||||
}
|
||||
.Mount_Head_Yarn-CottonCandyPink {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -378px -408px;
|
||||
background-position: -544px 0px;
|
||||
width: 105px;
|
||||
height: 105px;
|
||||
}
|
||||
.Mount_Head_Yarn-Desert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -544px 0px;
|
||||
background-position: -544px -106px;
|
||||
width: 105px;
|
||||
height: 105px;
|
||||
}
|
||||
.Mount_Head_Yarn-Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -544px -106px;
|
||||
background-position: -544px -212px;
|
||||
width: 105px;
|
||||
height: 105px;
|
||||
}
|
||||
.Mount_Head_Yarn-Red {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -212px -544px;
|
||||
background-position: -544px -318px;
|
||||
width: 105px;
|
||||
height: 105px;
|
||||
}
|
||||
.Mount_Head_Yarn-Shade {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -544px -318px;
|
||||
background-position: -544px -424px;
|
||||
width: 105px;
|
||||
height: 105px;
|
||||
}
|
||||
.Mount_Head_Yarn-Skeleton {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -544px -424px;
|
||||
background-position: 0px -544px;
|
||||
width: 105px;
|
||||
height: 105px;
|
||||
}
|
||||
.Mount_Head_Yarn-White {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: 0px -544px;
|
||||
background-position: -106px -544px;
|
||||
width: 105px;
|
||||
height: 105px;
|
||||
}
|
||||
.Mount_Head_Yarn-Zombie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -106px -544px;
|
||||
background-position: -212px -544px;
|
||||
width: 105px;
|
||||
height: 105px;
|
||||
}
|
||||
@@ -942,7 +942,7 @@
|
||||
}
|
||||
.Mount_Icon_Cactus-Rainbow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -1716px -700px;
|
||||
background-position: -492px -1150px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
@@ -1878,7 +1878,7 @@
|
||||
}
|
||||
.Mount_Icon_FlyingPig-IcySnow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-22.png');
|
||||
background-position: -492px -1150px;
|
||||
background-position: -1716px -700px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
.Mount_Icon_Rooster-Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -82px 0px;
|
||||
background-position: 0px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Rooster-Red {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -164px -1100px;
|
||||
background-position: -82px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
@@ -1002,7 +1002,7 @@
|
||||
}
|
||||
.Mount_Icon_Triceratops-CottonCandyPink {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: 0px 0px;
|
||||
background-position: -164px -1100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
@@ -1242,757 +1242,757 @@
|
||||
}
|
||||
.Mount_Icon_Whale-Base {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1640px -1096px;
|
||||
background-position: -1640px -400px;
|
||||
width: 78px;
|
||||
height: 86px;
|
||||
}
|
||||
.Mount_Icon_Whale-CottonCandyBlue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1640px -1009px;
|
||||
background-position: -1640px -487px;
|
||||
width: 78px;
|
||||
height: 86px;
|
||||
}
|
||||
.Mount_Icon_Whale-CottonCandyPink {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1640px -922px;
|
||||
background-position: -1640px -574px;
|
||||
width: 78px;
|
||||
height: 86px;
|
||||
}
|
||||
.Mount_Icon_Whale-Desert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1640px -835px;
|
||||
background-position: -1640px -661px;
|
||||
width: 78px;
|
||||
height: 86px;
|
||||
}
|
||||
.Mount_Icon_Whale-Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1640px -1183px;
|
||||
background-position: -1640px -748px;
|
||||
width: 78px;
|
||||
height: 86px;
|
||||
}
|
||||
.Mount_Icon_Whale-Red {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1640px -661px;
|
||||
background-position: -1640px -835px;
|
||||
width: 78px;
|
||||
height: 86px;
|
||||
}
|
||||
.Mount_Icon_Whale-Shade {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1640px -574px;
|
||||
background-position: -1640px -922px;
|
||||
width: 78px;
|
||||
height: 86px;
|
||||
}
|
||||
.Mount_Icon_Whale-Skeleton {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1640px -487px;
|
||||
background-position: -1640px -1009px;
|
||||
width: 78px;
|
||||
height: 86px;
|
||||
}
|
||||
.Mount_Icon_Whale-White {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1640px -748px;
|
||||
background-position: -1640px -1096px;
|
||||
width: 78px;
|
||||
height: 86px;
|
||||
}
|
||||
.Mount_Icon_Whale-Zombie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1640px -400px;
|
||||
background-position: -1640px -1183px;
|
||||
width: 78px;
|
||||
height: 86px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Amber {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -900px;
|
||||
background-position: -1230px -1200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Aquatic {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -1000px;
|
||||
background-position: -1312px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Aurora {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -1100px;
|
||||
background-position: -1312px -100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Base {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -1200px;
|
||||
background-position: -1312px -200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-BirchBark {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px 0px;
|
||||
background-position: -1312px -300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Bronze {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -100px;
|
||||
background-position: -1312px -400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Celestial {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -200px;
|
||||
background-position: -1312px -500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-CottonCandyBlue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -300px;
|
||||
background-position: -1312px -600px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-CottonCandyPink {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -400px;
|
||||
background-position: -1312px -700px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Cupid {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -500px;
|
||||
background-position: -1312px -800px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Desert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -600px;
|
||||
background-position: -1312px -900px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Ember {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -700px;
|
||||
background-position: -1312px -1000px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Fairy {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -800px;
|
||||
background-position: -1312px -1100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Floral {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -900px;
|
||||
background-position: -1312px -1200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Frost {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -1000px;
|
||||
background-position: -1394px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Ghost {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -1100px;
|
||||
background-position: -1394px -100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Glass {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -1200px;
|
||||
background-position: -1394px -200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Glow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: 0px -1300px;
|
||||
background-position: -1394px -300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -82px -1300px;
|
||||
background-position: -1394px -400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Holly {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -164px -1300px;
|
||||
background-position: -1394px -500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-IcySnow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -246px -1300px;
|
||||
background-position: -1394px -600px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Peppermint {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -328px -1300px;
|
||||
background-position: -1394px -700px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Rainbow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -410px -1300px;
|
||||
background-position: -1394px -800px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Red {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -492px -1300px;
|
||||
background-position: -1394px -900px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-RoseQuartz {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -574px -1300px;
|
||||
background-position: -1394px -1000px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-RoyalPurple {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -656px -1300px;
|
||||
background-position: -1394px -1100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Ruby {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -738px -1300px;
|
||||
background-position: -1394px -1200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Shade {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -820px -1300px;
|
||||
background-position: 0px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Shadow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -902px -1300px;
|
||||
background-position: -82px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Shimmer {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -984px -1300px;
|
||||
background-position: -164px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Silver {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1066px -1300px;
|
||||
background-position: -246px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Skeleton {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1148px -1300px;
|
||||
background-position: -328px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Spooky {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1230px -1300px;
|
||||
background-position: -410px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-StarryNight {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -1300px;
|
||||
background-position: -492px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Sunshine {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -1300px;
|
||||
background-position: -574px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Thunderstorm {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px 0px;
|
||||
background-position: -656px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Watery {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -100px;
|
||||
background-position: -738px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-White {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -200px;
|
||||
background-position: -820px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Wolf-Zombie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -300px;
|
||||
background-position: -902px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Yarn-Base {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -400px;
|
||||
background-position: -984px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Yarn-CottonCandyBlue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -500px;
|
||||
background-position: -1066px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Yarn-CottonCandyPink {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -600px;
|
||||
background-position: -1148px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Yarn-Desert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -700px;
|
||||
background-position: -1230px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Yarn-Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -800px;
|
||||
background-position: -1312px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Yarn-Red {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -900px;
|
||||
background-position: -1394px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Yarn-Shade {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -1000px;
|
||||
background-position: -1476px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Yarn-Skeleton {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -1100px;
|
||||
background-position: -1476px -100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Yarn-White {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -1200px;
|
||||
background-position: -1476px -200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Mount_Icon_Yarn-Zombie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -1300px;
|
||||
background-position: -1476px -300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Alligator-Base {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: 0px -1400px;
|
||||
background-position: -1476px -400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Alligator-CottonCandyBlue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -82px -1400px;
|
||||
background-position: -1476px -500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Alligator-CottonCandyPink {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -164px -1400px;
|
||||
background-position: -1476px -600px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Alligator-Desert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -246px -1400px;
|
||||
background-position: -1476px -700px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Alligator-Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -328px -1400px;
|
||||
background-position: -1476px -800px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Alligator-Red {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -410px -1400px;
|
||||
background-position: -1476px -900px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Alligator-Shade {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -492px -1400px;
|
||||
background-position: -1476px -1000px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Alligator-Skeleton {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -574px -1400px;
|
||||
background-position: -1476px -1100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Alligator-White {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -656px -1400px;
|
||||
background-position: -1476px -1200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Alligator-Zombie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -738px -1400px;
|
||||
background-position: -1476px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Armadillo-Base {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -820px -1400px;
|
||||
background-position: 0px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Armadillo-CottonCandyBlue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -902px -1400px;
|
||||
background-position: -82px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Armadillo-CottonCandyPink {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -984px -1400px;
|
||||
background-position: -164px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Armadillo-Desert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1066px -1400px;
|
||||
background-position: -246px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Armadillo-Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1148px -1400px;
|
||||
background-position: -328px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Armadillo-Red {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1230px -1400px;
|
||||
background-position: -410px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Armadillo-Shade {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -1400px;
|
||||
background-position: -492px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Armadillo-Skeleton {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -1400px;
|
||||
background-position: -574px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Armadillo-White {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -1400px;
|
||||
background-position: -656px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Armadillo-Zombie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px 0px;
|
||||
background-position: -738px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Axolotl-Base {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -100px;
|
||||
background-position: -820px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Axolotl-CottonCandyBlue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -200px;
|
||||
background-position: -902px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Axolotl-CottonCandyPink {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -300px;
|
||||
background-position: -984px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Axolotl-Desert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -400px;
|
||||
background-position: -1066px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Axolotl-Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -500px;
|
||||
background-position: -1148px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Axolotl-Red {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -600px;
|
||||
background-position: -1230px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Axolotl-Shade {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -700px;
|
||||
background-position: -1312px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Axolotl-Skeleton {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -800px;
|
||||
background-position: -1394px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Axolotl-White {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -900px;
|
||||
background-position: -1476px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Axolotl-Zombie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -1000px;
|
||||
background-position: -1558px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Badger-Base {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -1100px;
|
||||
background-position: -1558px -100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Badger-CottonCandyBlue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -1200px;
|
||||
background-position: -1558px -200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Badger-CottonCandyPink {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -1300px;
|
||||
background-position: -1558px -300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Badger-Desert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -1400px;
|
||||
background-position: -1558px -400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Badger-Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: 0px -1500px;
|
||||
background-position: -1558px -500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Badger-Red {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -82px -1500px;
|
||||
background-position: -1558px -600px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Badger-Shade {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -164px -1500px;
|
||||
background-position: -1558px -700px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Badger-Skeleton {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -246px -1500px;
|
||||
background-position: -1558px -800px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Badger-White {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -328px -1500px;
|
||||
background-position: -1558px -900px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Badger-Zombie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -410px -1500px;
|
||||
background-position: -1558px -1000px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Bear-Veteran {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -492px -1500px;
|
||||
background-position: -1558px -1100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Amber {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -574px -1500px;
|
||||
background-position: -1558px -1200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Aquatic {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -656px -1500px;
|
||||
background-position: -1558px -1300px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Aurora {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -738px -1500px;
|
||||
background-position: -1558px -1400px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Base {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -820px -1500px;
|
||||
background-position: 0px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-BirchBark {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -902px -1500px;
|
||||
background-position: -82px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Bronze {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -984px -1500px;
|
||||
background-position: -164px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Celestial {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1066px -1500px;
|
||||
background-position: -246px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-CottonCandyBlue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1148px -1500px;
|
||||
background-position: -328px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-CottonCandyPink {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1230px -1500px;
|
||||
background-position: -410px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Cupid {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -1500px;
|
||||
background-position: -492px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Desert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1394px -1500px;
|
||||
background-position: -574px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Dessert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1476px -1500px;
|
||||
background-position: -656px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Ember {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1558px -1500px;
|
||||
background-position: -738px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Fairy {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1640px 0px;
|
||||
background-position: -820px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Floral {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1640px -100px;
|
||||
background-position: -902px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Frost {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1640px -200px;
|
||||
background-position: -984px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Ghost {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -800px;
|
||||
background-position: -1066px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Glass {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -700px;
|
||||
background-position: -1148px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Glow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -600px;
|
||||
background-position: -1230px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -500px;
|
||||
background-position: -1312px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Holly {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -400px;
|
||||
background-position: -1394px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-IcySnow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -300px;
|
||||
background-position: -1476px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Peppermint {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -200px;
|
||||
background-position: -1558px -1500px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Polar {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px -100px;
|
||||
background-position: -1640px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Rainbow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1312px 0px;
|
||||
background-position: -1640px -100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-BearCub-Red {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-24.png');
|
||||
background-position: -1230px -1200px;
|
||||
background-position: -1640px -200px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
.Pet-Hippo-Base {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-26.png');
|
||||
background-position: -82px 0px;
|
||||
background-position: 0px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Hippo-CottonCandyBlue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-26.png');
|
||||
background-position: -82px -1100px;
|
||||
background-position: -82px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
@@ -996,7 +996,7 @@
|
||||
}
|
||||
.Pet-Parrot-Golden {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-26.png');
|
||||
background-position: 0px 0px;
|
||||
background-position: -82px -1100px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
.Pet-Spider-Zombie {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -82px 0px;
|
||||
background-position: 0px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
.Pet-Squirrel-Base {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -984px 0px;
|
||||
background-position: -82px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
@@ -648,7 +648,7 @@
|
||||
}
|
||||
.Pet-Velociraptor-Desert {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: 0px 0px;
|
||||
background-position: -984px 0px;
|
||||
width: 81px;
|
||||
height: 99px;
|
||||
}
|
||||
@@ -1062,13 +1062,13 @@
|
||||
}
|
||||
.Pet_HatchingPotion_Amber {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -1053px -1100px;
|
||||
background-position: -984px -1100px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
.Pet_HatchingPotion_Aquatic {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: 0px -1200px;
|
||||
background-position: -1053px -1100px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
@@ -1182,7 +1182,7 @@
|
||||
}
|
||||
.Pet_HatchingPotion_IcySnow {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-27.png');
|
||||
background-position: -984px -1100px;
|
||||
background-position: 0px -1200px;
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
|
||||
@@ -12,25 +12,25 @@
|
||||
}
|
||||
.hair_bangs_3_peppermint {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-3.png');
|
||||
background-position: -91px 0px;
|
||||
background-position: 0px 0px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_bangs_3_peppermint {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-3.png');
|
||||
background-position: -116px -15px;
|
||||
background-position: -25px -15px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_bangs_3_pgreen {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-3.png');
|
||||
background-position: -728px -1092px;
|
||||
background-position: -91px 0px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_bangs_3_pgreen {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-3.png');
|
||||
background-position: -753px -1107px;
|
||||
background-position: -116px -15px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
@@ -1512,13 +1512,13 @@
|
||||
}
|
||||
.hair_base_11_ppurple2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-3.png');
|
||||
background-position: 0px 0px;
|
||||
background-position: -728px -1092px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_11_ppurple2 {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-3.png');
|
||||
background-position: -25px -15px;
|
||||
background-position: -753px -1107px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
.hair_base_15_white {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-4.png');
|
||||
background-position: -91px 0px;
|
||||
background-position: 0px 0px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_15_white {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-4.png');
|
||||
background-position: -116px -0px;
|
||||
background-position: -25px -0px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_15_winternight {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-4.png');
|
||||
background-position: -728px -1092px;
|
||||
background-position: -91px 0px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_15_winternight {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-4.png');
|
||||
background-position: -753px -1092px;
|
||||
background-position: -116px -0px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
@@ -2448,13 +2448,13 @@
|
||||
}
|
||||
.hair_base_2_blue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-4.png');
|
||||
background-position: 0px 0px;
|
||||
background-position: -728px -1092px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_2_blue {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-4.png');
|
||||
background-position: -25px -15px;
|
||||
background-position: -753px -1107px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
@@ -12,25 +12,25 @@
|
||||
}
|
||||
.hair_base_5_holly {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-5.png');
|
||||
background-position: -91px 0px;
|
||||
background-position: 0px 0px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_5_holly {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-5.png');
|
||||
background-position: -116px -15px;
|
||||
background-position: -25px -15px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_5_hollygreen {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-5.png');
|
||||
background-position: -728px -1092px;
|
||||
background-position: -91px 0px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_5_hollygreen {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-5.png');
|
||||
background-position: -753px -1107px;
|
||||
background-position: -116px -15px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
@@ -1980,13 +1980,13 @@
|
||||
}
|
||||
.hair_base_9_porange {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-5.png');
|
||||
background-position: 0px 0px;
|
||||
background-position: -728px -1092px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_9_porange {
|
||||
background-image: url('~@/assets/images/sprites/spritesmith-main-5.png');
|
||||
background-position: -25px -15px;
|
||||
background-position: -753px -1107px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 469 KiB After Width: | Height: | Size: 470 KiB |
|
Before Width: | Height: | Size: 643 KiB After Width: | Height: | Size: 643 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 121 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 117 KiB |
|
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 185 KiB |
|
Before Width: | Height: | Size: 424 KiB After Width: | Height: | Size: 424 KiB |
|
Before Width: | Height: | Size: 224 KiB After Width: | Height: | Size: 224 KiB |
|
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 169 KiB |
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 167 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 175 KiB |
|
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 153 KiB After Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 156 KiB After Width: | Height: | Size: 156 KiB |
|
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 184 KiB |
|
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 137 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 133 KiB |
|
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 143 KiB |
@@ -4,23 +4,47 @@
|
||||
line-height: 1.33;
|
||||
color: $gray-200;
|
||||
padding: 4px 8px;
|
||||
box-shadow: 0 1px 1px 0 rgba($black, 0.12);
|
||||
box-shadow: 0 1px 3px 0 rgba($black, 0.12), 0 1px 2px 0 rgba($black, 0.24);
|
||||
}
|
||||
|
||||
.badge-pill {
|
||||
border-radius: 100px;
|
||||
}
|
||||
|
||||
.badge-round {
|
||||
height: 1.5rem;
|
||||
width: 1.5rem;
|
||||
border-radius: 100%;
|
||||
}
|
||||
|
||||
.badge-default {
|
||||
background: $gray-500;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.badge-dialog {
|
||||
position: absolute;
|
||||
left: -16px;
|
||||
top: -16px;
|
||||
|
||||
.badge-pin {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.badge-item {
|
||||
position: absolute;
|
||||
top: -9px;
|
||||
}
|
||||
|
||||
.badge-top {
|
||||
position: absolute;
|
||||
left: calc((100% - 24px) / 2);
|
||||
top: -12px;
|
||||
}
|
||||
|
||||
.badge-purple {
|
||||
position: absolute;
|
||||
color: $white;
|
||||
|
||||
@@ -68,8 +68,6 @@ $purple-600: #D5C8FF;
|
||||
$header-color: #D5C8FF;
|
||||
$header-dark-background: #271B3D;
|
||||
|
||||
$suggested-item-color: #D5C8FF;
|
||||
|
||||
$healer-color: #FFA624;
|
||||
$rogue-color: #4F2A93;
|
||||
$warrior-color: #C92B2B;
|
||||
|
||||
@@ -32,9 +32,8 @@
|
||||
@import './dragdrop';
|
||||
@import './banner';
|
||||
@import './progress-bar';
|
||||
@import './pin';
|
||||
@import './animals';
|
||||
@import './iconalert';
|
||||
@import './tiers';
|
||||
@import './payments';
|
||||
@import './datepicker.scss';
|
||||
@import './datepicker.scss';
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
@media only screen and (min-width: 1440px){
|
||||
margin-right: 1.71em;
|
||||
}
|
||||
|
||||
|
||||
// Desktop L (1280)
|
||||
@media only screen and (min-width: 1280px) and (max-width: 1439px) {
|
||||
margin-right: 0.43em;
|
||||
@@ -47,8 +47,9 @@
|
||||
height: 92px;
|
||||
border-radius: 2px;
|
||||
background: $white;
|
||||
box-shadow: 0 2px 2px 0 rgba($black, 0.15), 0 1px 4px 0 rgba($black, 0.1);
|
||||
box-shadow: 0 1px 3px 0 rgba($black, 0.12), 0 1px 2px 0 rgba($black, 0.24);
|
||||
border: 1px solid transparent;
|
||||
cursor: pointer;
|
||||
|
||||
&-empty {
|
||||
background: $gray-10;
|
||||
@@ -61,8 +62,8 @@
|
||||
}
|
||||
|
||||
&:hover {
|
||||
box-shadow: 0 4px 4px 0 rgba($black, 0.16), 0 1px 8px 0 rgba($black, 0.12);
|
||||
border-color: $purple-500;
|
||||
box-shadow: 0 3px 6px 0 rgba($black, 0.16), 0 3px 6px 0 rgba($black, 0.24);
|
||||
border-color: $purple-400;
|
||||
}
|
||||
|
||||
&.highlight {
|
||||
@@ -72,15 +73,6 @@
|
||||
&.highlight-border {
|
||||
border-color: $purple-500;
|
||||
}
|
||||
|
||||
&.suggested {
|
||||
box-shadow: 0 2px 2px 0 rgba(26, 24, 29, 0.16), 0 1px 4px 0 rgba(26, 24, 29, 0.12);
|
||||
border: solid 1px $suggested-item-color;
|
||||
}
|
||||
|
||||
&.suggested:hover {
|
||||
border: solid 1px $purple-500;
|
||||
}
|
||||
}
|
||||
|
||||
.flat .item {
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
.badge-svg {
|
||||
left: calc((100% - 18px) / 2);
|
||||
cursor: pointer;
|
||||
color: $gray-400;
|
||||
background: $white;
|
||||
padding: 4.5px 6px;
|
||||
|
||||
&.item-selected-badge {
|
||||
background: $purple-300;
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
|
||||
span.badge.badge-pill.badge-item.badge-svg:not(.item-selected-badge) {
|
||||
color: #a5a1ac;
|
||||
}
|
||||
|
||||
span.badge.badge-pill.badge-item.badge-svg.hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.item:hover {
|
||||
span.badge.badge-pill.badge-item.badge-svg.hide {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
// this variables are used to determine which shop npc/backgrounds should be loaded
|
||||
// possible values are: normal, fall, habitoween, thanksgiving, winter, nye, birthday, valentines, spring, summer
|
||||
// possible values are: normal, fall, habitoween, thanksgiving, winter, nye, birthday, valentines, normal, summer
|
||||
// more to be added on future seasons
|
||||
|
||||
$npc_market_flavor: 'spring';
|
||||
$npc_quests_flavor: 'spring';
|
||||
$npc_seasonal_flavor: 'spring';
|
||||
$npc_timetravelers_flavor: 'spring';
|
||||
$npc_tavern_flavor: 'spring';
|
||||
$npc_market_flavor: 'normal';
|
||||
$npc_quests_flavor: 'normal';
|
||||
$npc_seasonal_flavor: 'normal';
|
||||
$npc_timetravelers_flavor: 'normal';
|
||||
$npc_tavern_flavor: 'normal';
|
||||
|
||||
$restingToolbarHeight: 40px;
|
||||
$menuToolbarHeight: 56px;
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
|
||||
<path fill="#FFF" fill-rule="evenodd" d="M6.252 8.46l-2.71-2.712 4.602-3.58 1.688 1.689-3.58 4.602zm5.554-4.497l-.626-.627-.001-.001L8.666.822 8.037.194a.66.66 0 1 0-.934.934l.1.1L2.6 4.806l-.216-.216a.66.66 0 1 0-.934.934l.627.627v.001l1.418 1.418-3.301 3.302a.66.66 0 1 0 .934.934L4.43 8.505l1.417 1.417.001.002.628.627a.658.658 0 0 0 .934 0 .66.66 0 0 0 0-.934L7.194 9.4l3.58-4.602.098.099a.659.659 0 0 0 .934 0 .66.66 0 0 0 0-.934z"/>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="-2 -1.5 16 16">
|
||||
<path id="prefix__a" d="M9.748 4.127l-3.27 4.205-2.31-2.31 4.205-3.27 1.375 1.375zm2.484-.091l-.554-.554V3.43l-.102-.051L8.463.267C8.293.095 8.063 0 7.82 0c-.244 0-.472.095-.644.267-.173.172-.267.401-.267.644 0 .195.061.382.174.536L2.87 4.724l-.06-.06c-.355-.354-.932-.354-1.288 0-.355.356-.355.933 0 1.288l1.87 1.869-3.126 3.125c-.355.355-.355.933 0 1.286.17.173.4.268.643.268.244 0 .474-.095.645-.267L4.68 9.108l1.87 1.87c.342.343.94.344 1.287 0 .355-.356.355-.933 0-1.289l-.06-.06 3.277-4.212c.345.252.87.215 1.18-.093.354-.356.354-.933 0-1.288z"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 534 B After Width: | Height: | Size: 691 B |
@@ -225,30 +225,30 @@ export default {
|
||||
classGear (heroClass) {
|
||||
if (heroClass === 'rogue') {
|
||||
return {
|
||||
armor: 'armor_special_spring2020Rogue',
|
||||
head: 'head_special_spring2020Rogue',
|
||||
shield: 'shield_special_spring2020Rogue',
|
||||
weapon: 'weapon_special_spring2020Rogue',
|
||||
armor: 'armor_rogue_5',
|
||||
head: 'head_rogue_5',
|
||||
shield: 'shield_rogue_6',
|
||||
weapon: 'weapon_rogue_6',
|
||||
};
|
||||
} if (heroClass === 'wizard') {
|
||||
return {
|
||||
armor: 'armor_special_spring2020Mage',
|
||||
head: 'head_special_spring2020Mage',
|
||||
weapon: 'weapon_special_spring2020Mage',
|
||||
armor: 'armor_wizard_5',
|
||||
head: 'head_wizard_5',
|
||||
weapon: 'weapon_wizard_6',
|
||||
};
|
||||
} if (heroClass === 'healer') {
|
||||
return {
|
||||
armor: 'armor_special_spring2020Healer',
|
||||
head: 'head_special_spring2020Healer',
|
||||
shield: 'shield_special_spring2020Healer',
|
||||
weapon: 'weapon_special_spring2020Healer',
|
||||
armor: 'armor_healer_5',
|
||||
head: 'head_healer_5',
|
||||
shield: 'shield_healer_5',
|
||||
weapon: 'weapon_healer_6',
|
||||
};
|
||||
}
|
||||
return {
|
||||
armor: 'armor_special_spring2020Warrior',
|
||||
head: 'head_special_spring2020Warrior',
|
||||
shield: 'shield_special_spring2020Warrior',
|
||||
weapon: 'weapon_special_spring2020Warrior',
|
||||
armor: 'armor_warrior_5',
|
||||
head: 'head_warrior_5',
|
||||
shield: 'shield_warrior_5',
|
||||
weapon: 'weapon_warrior_6',
|
||||
};
|
||||
},
|
||||
selectionBox (selectedClass, heroClass) {
|
||||
|
||||
@@ -49,11 +49,13 @@
|
||||
target="_blank"
|
||||
>{{ $t('oldNews') }}</a>
|
||||
</li>
|
||||
<!-- Commenting out merch page see https://github.com/HabitRPG/habitica/issues/12039
|
||||
<li>
|
||||
<router-link to="/static/merch">
|
||||
{{ $t('merch') }}
|
||||
</router-link>
|
||||
</li>
|
||||
-->
|
||||
<li>
|
||||
<router-link to="/static/press-kit">
|
||||
{{ $t('presskit') }}
|
||||
@@ -214,7 +216,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-5">
|
||||
© 2019 Habitica. All rights reserved.
|
||||
© 2020 Habitica. All rights reserved.
|
||||
<div
|
||||
v-if="!IS_PRODUCTION && isUserLoaded"
|
||||
class="debug float-left"
|
||||
|
||||
@@ -227,7 +227,7 @@
|
||||
></i>
|
||||
<div
|
||||
v-if="!user.purchased.background[bg.key]"
|
||||
class="purchase-background single"
|
||||
class="purchase-background single d-flex align-items-center justify-content-center"
|
||||
>
|
||||
<div
|
||||
class="svg-icon hourglass"
|
||||
@@ -237,16 +237,12 @@
|
||||
</div>
|
||||
<span
|
||||
v-if="!user.purchased.background[bg.key]"
|
||||
class="badge badge-pill badge-item badge-svg"
|
||||
:class="{
|
||||
'item-selected-badge': isBackgroundPinned(bg),
|
||||
'hide': !isBackgroundPinned(bg)}"
|
||||
@click.prevent.stop="togglePinned(bg)"
|
||||
class="badge-top"
|
||||
@click.stop.prevent="togglePinned(bg)"
|
||||
>
|
||||
<span
|
||||
class="svg-icon inline icon-12 color"
|
||||
v-html="icons.pin"
|
||||
></span>
|
||||
<pin-badge
|
||||
:pinned="isBackgroundPinned(bg)"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -295,7 +291,7 @@
|
||||
></i>
|
||||
<div
|
||||
v-if="!user.purchased.background[bg.key]"
|
||||
class="purchase-background single"
|
||||
class="purchase-background single d-flex align-items-center justify-content-center"
|
||||
>
|
||||
<div
|
||||
class="svg-icon gem"
|
||||
@@ -305,16 +301,12 @@
|
||||
</div>
|
||||
<span
|
||||
v-if="!user.purchased.background[bg.key]"
|
||||
class="badge badge-pill badge-item badge-svg"
|
||||
:class="{
|
||||
'item-selected-badge': isBackgroundPinned(bg),
|
||||
'hide': !isBackgroundPinned(bg)}"
|
||||
@click.prevent.stop="togglePinned(bg)"
|
||||
class="badge-top"
|
||||
@click.stop.prevent="togglePinned(bg)"
|
||||
>
|
||||
<span
|
||||
class="svg-icon inline icon-12 color"
|
||||
v-html="icons.pin"
|
||||
></span>
|
||||
<pin-badge
|
||||
:pinned="isBackgroundPinned(bg)"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
<div
|
||||
@@ -1095,38 +1087,14 @@
|
||||
}
|
||||
}
|
||||
|
||||
.badge-svg {
|
||||
left: calc((100% - 18px) / 2);
|
||||
cursor: pointer;
|
||||
color: $gray-400;
|
||||
background: $white;
|
||||
padding: 4.5px 6px;
|
||||
|
||||
&.item-selected-badge {
|
||||
background: $purple-300;
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
|
||||
.icon-12 {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
}
|
||||
|
||||
span.badge.badge-pill.badge-item.badge-svg:not(.item-selected-badge) {
|
||||
color: #a5a1ac;
|
||||
}
|
||||
|
||||
span.badge.badge-pill.badge-item.badge-svg.hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.background-button {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.background-button:hover {
|
||||
span.badge.badge-pill.badge-item.badge-svg.hide {
|
||||
.badge-pin:not(.pinned) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&:hover .badge-pin {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
@@ -1142,6 +1110,7 @@ import usernameForm from './settings/usernameForm';
|
||||
import shops from '@/../../common/script/libs/shops';
|
||||
import guide from '@/mixins/guide';
|
||||
import notifications from '@/mixins/notifications';
|
||||
import PinBadge from '@/components/ui/pinBadge';
|
||||
import toggleSwitch from '@/components/ui/toggleSwitch';
|
||||
import bodySettings from './avatarModal/body-settings';
|
||||
import skinSettings from './avatarModal/skin-settings';
|
||||
@@ -1158,7 +1127,6 @@ import backgroundsIcon from '@/assets/svg/backgrounds.svg';
|
||||
import gem from '@/assets/svg/gem.svg';
|
||||
import hourglass from '@/assets/svg/hourglass.svg';
|
||||
import gold from '@/assets/svg/gold.svg';
|
||||
import pin from '@/assets/svg/pin.svg';
|
||||
import arrowRight from '@/assets/svg/arrow_right.svg';
|
||||
import arrowLeft from '@/assets/svg/arrow_left.svg';
|
||||
import svgClose from '@/assets/svg/close.svg';
|
||||
@@ -1170,14 +1138,14 @@ import content from '@/../../common/script/content/index';
|
||||
export default {
|
||||
components: {
|
||||
avatar,
|
||||
bodySettings,
|
||||
extraSettings,
|
||||
hairSettings,
|
||||
PinBadge,
|
||||
skinSettings,
|
||||
subMenu,
|
||||
toggleSwitch,
|
||||
usernameForm,
|
||||
bodySettings,
|
||||
skinSettings,
|
||||
hairSettings,
|
||||
extraSettings,
|
||||
|
||||
subMenu,
|
||||
},
|
||||
mixins: [guide, notifications, avatarEditorUtilies],
|
||||
data () {
|
||||
@@ -1198,7 +1166,6 @@ export default {
|
||||
backgroundsIcon,
|
||||
gem,
|
||||
hourglass,
|
||||
pin,
|
||||
gold,
|
||||
arrowRight,
|
||||
arrowLeft,
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>
|
||||
<strong v-once>{{ $t('privacySettings') }} *</strong>
|
||||
<strong v-once>{{ $t('privacySettings') }}</strong>
|
||||
</label>
|
||||
<br>
|
||||
<div class="custom-control custom-checkbox">
|
||||
@@ -115,7 +115,8 @@ label.custom-control-label(v-once) {{ $t('allowGuildInvitationsFromNonMembers')
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>
|
||||
<strong v-once>{{ $t('groupDescription') }} *</strong>
|
||||
<strong v-if="isParty">{{ $t('groupDescription') }}</strong>
|
||||
<strong v-else>{{ $t('groupDescription') }} *</strong>
|
||||
</label>
|
||||
<a
|
||||
v-markdown="$t('markdownFormattingHelp')"
|
||||
@@ -254,7 +255,7 @@ label.custom-control-label(v-once) {{ $t('allowGuildInvitationsFromNonMembers')
|
||||
<button
|
||||
v-if="workingGroup.id"
|
||||
class="btn btn-primary btn-md"
|
||||
:disabled="!workingGroup.name || !workingGroup.description"
|
||||
:disabled="!workingGroup.name || (!isParty && !workingGroup.description)"
|
||||
>
|
||||
{{ isParty ? $t('updateParty') : $t('updateGuild') }}
|
||||
</button>
|
||||
@@ -540,7 +541,7 @@ export default {
|
||||
if (!this.workingGroup.name) errors.push(this.$t('nameRequired'));
|
||||
if (!this.workingGroup.summary) errors.push(this.$t('summaryRequired'));
|
||||
if (this.workingGroup.summary.length > MAX_SUMMARY_SIZE_FOR_GUILDS) errors.push(this.$t('summaryTooLong'));
|
||||
if (!this.workingGroup.description) errors.push(this.$t('descriptionRequired'));
|
||||
if (!this.isParty && !this.workingGroup.description) errors.push(this.$t('descriptionRequired'));
|
||||
if (!this.isParty && (!this.workingGroup.categories || this.workingGroup.categories.length === 0)) errors.push(this.$t('categoiresRequired'));
|
||||
|
||||
if (errors.length > 0) {
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
:class="{
|
||||
'input-valid': invite.valid, 'is-invalid input-invalid': invite.valid === false}"
|
||||
@keyup="expandInviteList"
|
||||
@change="checkInviteList"
|
||||
@input="inviteUpdated(invite)"
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
@@ -128,8 +128,6 @@
|
||||
<script>
|
||||
import clone from 'lodash/clone';
|
||||
import debounce from 'lodash/debounce';
|
||||
import filter from 'lodash/filter';
|
||||
import forEach from 'lodash/forEach';
|
||||
import isEmail from 'validator/lib/isEmail';
|
||||
import isUUID from 'validator/lib/isUUID';
|
||||
import { mapState } from '@/libs/store';
|
||||
@@ -152,25 +150,24 @@ export default {
|
||||
computed: {
|
||||
...mapState({ user: 'user.data' }),
|
||||
cannotSubmit () {
|
||||
const filteredInvites = filter(
|
||||
this.invites,
|
||||
invite => invite.text.length > 0 && !invite.valid,
|
||||
);
|
||||
if (filteredInvites.length > 0) return true;
|
||||
return false;
|
||||
const filledInvites = this.invites.filter(invite => invite.text.length);
|
||||
return !filledInvites.length || filledInvites.some(invite => !invite.valid);
|
||||
},
|
||||
inviter () {
|
||||
return this.user.profile.name;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
inviteUpdated (invite) {
|
||||
this.clearErrors(invite);
|
||||
this.checkInviteList();
|
||||
},
|
||||
checkInviteList: debounce(function checkList () {
|
||||
this.invites = filter(
|
||||
this.invites,
|
||||
this.invites = this.invites.filter(
|
||||
(invite, index) => invite.text.length > 0 || index === this.invites.length - 1,
|
||||
);
|
||||
while (this.invites.length < 2) this.invites.push(clone(INVITE_DEFAULTS));
|
||||
forEach(this.invites, (value, index) => {
|
||||
this.invites.forEach((value, index) => {
|
||||
if (value.text.length < 1 || isEmail(value.text)) {
|
||||
return this.fillErrors(index);
|
||||
}
|
||||
@@ -185,12 +182,16 @@ export default {
|
||||
return this.$store.dispatch('user:userLookup', { username: searchUsername })
|
||||
.then(res => this.fillErrors(index, res));
|
||||
});
|
||||
}, 250),
|
||||
}, 500),
|
||||
expandInviteList () {
|
||||
if (this.invites[this.invites.length - 1].text.length > 0) {
|
||||
this.invites.push(clone(INVITE_DEFAULTS));
|
||||
}
|
||||
},
|
||||
clearErrors (invite) {
|
||||
invite.valid = null;
|
||||
invite.error = null;
|
||||
},
|
||||
fillErrors (index, res) {
|
||||
if (!res || res.status === 200) {
|
||||
this.invites[index].error = null;
|
||||
@@ -216,7 +217,7 @@ export default {
|
||||
uuids: [],
|
||||
usernames: [],
|
||||
};
|
||||
forEach(this.invites, invite => {
|
||||
this.invites.forEach(invite => {
|
||||
if (invite.text.length < 1) return;
|
||||
if (isEmail(invite.text)) {
|
||||
invitationDetails.emails.push({ email: invite.text });
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
{{ `${$t('lockedItem')}` }}
|
||||
</h4>
|
||||
<div
|
||||
v-if="item.specialClass"
|
||||
v-if="isWrongClass"
|
||||
class="popover-content-text"
|
||||
>
|
||||
{{ `${$t('classLockedItem')}` }}
|
||||
@@ -71,6 +71,11 @@ export default {
|
||||
}
|
||||
return this.item.notes;
|
||||
},
|
||||
isWrongClass () {
|
||||
const wrongKlass = this.item.klass && !['special', 'armoire', this.user.stats.class].includes(this.item.klass);
|
||||
const wrongSpecialClass = this.item.klass === 'special' && this.item.specialClass && this.item.specialClass !== this.user.stats.class;
|
||||
return wrongKlass || wrongSpecialClass;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -159,10 +159,10 @@
|
||||
:class="group.key"
|
||||
>
|
||||
<!-- eslint-enable vue/no-use-v-if-with-v-for -->
|
||||
<h2 class="mb-3">
|
||||
<h2 class="d-flex align-items-center mb-3">
|
||||
{{ group.label }}
|
||||
<span
|
||||
class="badge badge-pill badge-default"
|
||||
class="badge badge-pill badge-default ml-2"
|
||||
>{{ items[group.key].length }}</span>
|
||||
</h2>
|
||||
<itemRows
|
||||
|
||||
@@ -80,11 +80,11 @@
|
||||
:key="group.key"
|
||||
>
|
||||
<!-- eslint-enable vue/no-use-v-if-with-v-for -->
|
||||
<h2 class="mb-3">
|
||||
<h2 class="d-flex align-items-center mb-3">
|
||||
{{ $t(group.key) }}
|
||||
<span
|
||||
v-if="group.key != 'special'"
|
||||
class="badge badge-pill badge-default"
|
||||
class="badge badge-pill badge-default ml-2"
|
||||
>{{ group.quantity }}</span>
|
||||
</h2>
|
||||
<itemRows
|
||||
|
||||
@@ -1,20 +1,22 @@
|
||||
<template>
|
||||
<perfect-scrollbar
|
||||
<div
|
||||
ref="container"
|
||||
class="container-fluid"
|
||||
:class="{'disable-perfect-scroll': disablePerfectScroll}"
|
||||
:options="psOptions"
|
||||
>
|
||||
<div class="row loadmore">
|
||||
<div v-if="canLoadMore && !isLoading">
|
||||
<div class="loadmore-divider"></div>
|
||||
<div class="loadmore-divider-holder">
|
||||
<div class="loadmore-divider"></div>
|
||||
</div>
|
||||
<button
|
||||
class="btn btn-secondary"
|
||||
@click="triggerLoad()"
|
||||
>
|
||||
{{ $t('loadEarlierMessages') }}
|
||||
</button>
|
||||
<div class="loadmore-divider"></div>
|
||||
<div class="loadmore-divider-holder">
|
||||
<div class="loadmore-divider"></div>
|
||||
</div>
|
||||
</div>
|
||||
<h2
|
||||
v-show="isLoading"
|
||||
@@ -30,11 +32,10 @@
|
||||
:class="{ 'margin-right': user._id !== msg.uuid}"
|
||||
>
|
||||
<div
|
||||
v-if="user._id !== msg.uuid"
|
||||
class="d-flex flex-grow-1"
|
||||
>
|
||||
<avatar
|
||||
v-if="conversationOpponentUser"
|
||||
v-if="user._id !== msg.uuid && conversationOpponentUser"
|
||||
class="avatar-left"
|
||||
:member="conversationOpponentUser"
|
||||
:avatar-only="true"
|
||||
@@ -42,20 +43,10 @@
|
||||
:hide-class-badge="true"
|
||||
@click.native="showMemberModal(msg.uuid)"
|
||||
/>
|
||||
<div class="card card-right">
|
||||
<message-card
|
||||
:msg="msg"
|
||||
@message-removed="messageRemoved"
|
||||
@show-member-modal="showMemberModal"
|
||||
@message-card-mounted="itemWasMounted"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="user._id === msg.uuid"
|
||||
class="d-flex flex-grow-1"
|
||||
>
|
||||
<div class="card card-left">
|
||||
<div
|
||||
class="card"
|
||||
:class="{'card-right': user._id !== msg.uuid, 'card-left': user._id === msg.uuid}"
|
||||
>
|
||||
<message-card
|
||||
:msg="msg"
|
||||
@message-removed="messageRemoved"
|
||||
@@ -64,7 +55,7 @@
|
||||
/>
|
||||
</div>
|
||||
<avatar
|
||||
v-if="user"
|
||||
v-if="user && user._id === msg.uuid"
|
||||
class="avatar-right"
|
||||
:member="user"
|
||||
:avatar-only="true"
|
||||
@@ -74,16 +65,11 @@
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</perfect-scrollbar>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
@import '~vue2-perfect-scrollbar/dist/vue2-perfect-scrollbar.css';
|
||||
|
||||
.disable-perfect-scroll {
|
||||
overflow-y: inherit !important;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
width: 170px;
|
||||
@@ -162,6 +148,8 @@
|
||||
.loadmore {
|
||||
justify-content: center;
|
||||
margin-right: 12px;
|
||||
margin-top: 12px;
|
||||
margin-bottom: 24px;
|
||||
|
||||
> div {
|
||||
display: flex;
|
||||
@@ -171,15 +159,11 @@
|
||||
button {
|
||||
text-align: center;
|
||||
color: $gray-50;
|
||||
margin-top: 12px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.loadmore-divider {
|
||||
height: 1px;
|
||||
background-color: $gray-500;
|
||||
.loadmore-divider-holder {
|
||||
flex: 1;
|
||||
margin-left: 24px;
|
||||
margin-right: 24px;
|
||||
@@ -189,6 +173,13 @@
|
||||
}
|
||||
}
|
||||
|
||||
.loadmore-divider {
|
||||
height: 1px;
|
||||
border-top: 1px $gray-500 solid;
|
||||
width: 100%;
|
||||
|
||||
}
|
||||
|
||||
.loading {
|
||||
padding-left: 1.5rem;
|
||||
margin-bottom: 1rem;
|
||||
@@ -200,7 +191,6 @@
|
||||
<script>
|
||||
import moment from 'moment';
|
||||
import debounce from 'lodash/debounce';
|
||||
import { PerfectScrollbar } from 'vue2-perfect-scrollbar';
|
||||
import { mapState } from '@/libs/store';
|
||||
|
||||
import Avatar from '../avatar';
|
||||
@@ -210,7 +200,6 @@ export default {
|
||||
components: {
|
||||
Avatar,
|
||||
messageCard,
|
||||
PerfectScrollbar,
|
||||
},
|
||||
props: {
|
||||
chat: {},
|
||||
@@ -248,15 +237,10 @@ export default {
|
||||
messages () {
|
||||
return this.chat;
|
||||
},
|
||||
psOptions () {
|
||||
return {
|
||||
suppressScrollX: true,
|
||||
};
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
async triggerLoad () {
|
||||
const container = this.$refs.container.$el;
|
||||
const { container } = this.$refs;
|
||||
|
||||
// get current offset
|
||||
this.lastOffset = container.scrollTop - (container.scrollHeight - container.clientHeight);
|
||||
@@ -274,8 +258,9 @@ export default {
|
||||
}
|
||||
},
|
||||
displayDivider (message) {
|
||||
if (this.currentDayDividerDisplay !== moment(message.timestamp).day()) {
|
||||
this.currentDayDividerDisplay = moment(message.timestamp).day();
|
||||
const day = moment(message.timestamp).day();
|
||||
if (this.currentDayDividerDisplay !== day) {
|
||||
this.currentDayDividerDisplay = day;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -288,7 +273,7 @@ export default {
|
||||
if (this.handleScrollBack) {
|
||||
this.handleScrollBack = false;
|
||||
|
||||
const container = this.$refs.container.$el;
|
||||
const { container } = this.$refs;
|
||||
const offset = container.scrollHeight - container.clientHeight;
|
||||
|
||||
const newOffset = offset + this.lastOffset;
|
||||
|
||||
@@ -6,14 +6,12 @@
|
||||
>
|
||||
<span
|
||||
v-if="withPin"
|
||||
class="badge badge-pill badge-dialog"
|
||||
:class="{'item-selected-badge': isPinned}"
|
||||
class="badge-dialog"
|
||||
@click.prevent.stop="togglePinned()"
|
||||
>
|
||||
<span
|
||||
class="svg-icon inline color icon-16"
|
||||
v-html="icons.pin"
|
||||
></span>
|
||||
<pin-badge
|
||||
:pinned="isPinned"
|
||||
/>
|
||||
</span>
|
||||
<div>
|
||||
<span
|
||||
@@ -147,7 +145,7 @@
|
||||
v-else
|
||||
class="btn btn-primary"
|
||||
:disabled="item.key === 'gem' && gemsLeft === 0 ||
|
||||
attemptingToPurchaseMoreGemsThanAreLeft || numberInvalid"
|
||||
attemptingToPurchaseMoreGemsThanAreLeft || numberInvalid || item.locked"
|
||||
:class="{'notEnough': !preventHealthPotion ||
|
||||
!enoughCurrency(getPriceClass(), item.value * selectedAmountToBuy)}"
|
||||
@click="buyItem()"
|
||||
@@ -310,21 +308,6 @@
|
||||
display: block;
|
||||
}
|
||||
|
||||
.badge-dialog {
|
||||
color: $gray-300;
|
||||
position: absolute;
|
||||
left: -14px;
|
||||
padding: 8px 10px;
|
||||
top: -12px;
|
||||
background: white;
|
||||
cursor: pointer;
|
||||
|
||||
&.item-selected-badge {
|
||||
background: $purple-300;
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
|
||||
.notEnough {
|
||||
pointer-events: none;
|
||||
opacity: 0.55;
|
||||
@@ -405,11 +388,11 @@ import svgClose from '@/assets/svg/close.svg';
|
||||
import svgGold from '@/assets/svg/gold.svg';
|
||||
import svgGem from '@/assets/svg/gem.svg';
|
||||
import svgHourglasses from '@/assets/svg/hourglass.svg';
|
||||
import svgPin from '@/assets/svg/pin.svg';
|
||||
import svgClock from '@/assets/svg/clock.svg';
|
||||
import svgWhiteClock from '@/assets/svg/clock-white.svg';
|
||||
|
||||
import BalanceInfo from './balanceInfo.vue';
|
||||
import PinBadge from '@/components/ui/pinBadge';
|
||||
import currencyMixin from './_currencyMixin';
|
||||
import notifications from '@/mixins/notifications';
|
||||
import buyMixin from '@/mixins/buy';
|
||||
@@ -439,6 +422,7 @@ export default {
|
||||
EquipmentAttributesGrid,
|
||||
Item,
|
||||
Avatar,
|
||||
PinBadge,
|
||||
},
|
||||
mixins: [buyMixin, currencyMixin, notifications, numberInvalid, spellsMixin],
|
||||
props: {
|
||||
@@ -463,7 +447,6 @@ export default {
|
||||
gold: svgGold,
|
||||
gems: svgGem,
|
||||
hourglasses: svgHourglasses,
|
||||
pin: svgPin,
|
||||
clock: svgClock,
|
||||
whiteClock: svgWhiteClock,
|
||||
}),
|
||||
|
||||
@@ -37,14 +37,12 @@
|
||||
slot-scope="ctx"
|
||||
>
|
||||
<span
|
||||
class="badge badge-pill badge-item badge-svg"
|
||||
:class="{'item-selected-badge': ctx.item.pinned, 'hide': !ctx.item.pinned}"
|
||||
class="badge-top"
|
||||
@click.prevent.stop="togglePinned(ctx.item)"
|
||||
>
|
||||
<span
|
||||
class="svg-icon inline icon-12 color"
|
||||
v-html="icons.pin"
|
||||
></span>
|
||||
<pin-badge
|
||||
:pinned="ctx.item.pinned"
|
||||
/>
|
||||
</span>
|
||||
</template>
|
||||
</shopItem>
|
||||
@@ -55,14 +53,14 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import PinBadge from '@/components/ui/pinBadge';
|
||||
import ShopItem from './shopItem';
|
||||
|
||||
import pinUtils from '@/mixins/pinUtils';
|
||||
|
||||
import svgPin from '@/assets/svg/pin.svg';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
PinBadge,
|
||||
ShopItem,
|
||||
},
|
||||
mixins: [pinUtils],
|
||||
@@ -72,13 +70,6 @@ export default {
|
||||
featuredText: String,
|
||||
featuredItems: Array,
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
icons: Object.freeze({
|
||||
pin: svgPin,
|
||||
}),
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
featuredItemSelected (item) {
|
||||
this.$emit('featuredItemSelected', item);
|
||||
@@ -105,6 +96,14 @@ export default {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.badge-pin:not(.pinned) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.item:hover .badge-pin {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
@@ -12,39 +12,41 @@
|
||||
{{ gemsLeft }}
|
||||
</div>
|
||||
<span
|
||||
class="badge badge-pill badge-item badge-svg"
|
||||
:class="{'item-selected-badge': item.pinned, 'hide': !item.pinned}"
|
||||
class="badge-top"
|
||||
@click.prevent.stop="togglePinned(item)"
|
||||
>
|
||||
<span
|
||||
class="svg-icon inline icon-12 color"
|
||||
v-html="icons.pin"
|
||||
></span>
|
||||
<pin-badge
|
||||
:pinned="item.pinned"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.badge-pin:not(.pinned) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.item:hover .badge-pin {
|
||||
display: block;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import { mapState } from '@/libs/store';
|
||||
import CountBadge from '@/components/ui/countBadge';
|
||||
|
||||
import svgPin from '@/assets/svg/pin.svg';
|
||||
import PinBadge from '@/components/ui/pinBadge';
|
||||
import planGemLimits from '@/../../common/script/libs/planGemLimits';
|
||||
import pinUtils from '../../../mixins/pinUtils';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
CountBadge,
|
||||
PinBadge,
|
||||
},
|
||||
mixins: [pinUtils],
|
||||
props: ['item'],
|
||||
data () {
|
||||
return {
|
||||
icons: Object.freeze({
|
||||
pin: svgPin,
|
||||
}),
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
user: 'user.data',
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
<shopItem
|
||||
:key="ctx.item.key"
|
||||
:item="ctx.item"
|
||||
:empty-item="userItems.gear[ctx.item.key] === undefined"
|
||||
:popover-position="'top'"
|
||||
@click="gearSelected(ctx.item)"
|
||||
>
|
||||
@@ -58,14 +57,12 @@
|
||||
slot-scope="ctx"
|
||||
>
|
||||
<span
|
||||
class="badge badge-pill badge-item badge-svg"
|
||||
:class="{'item-selected-badge': ctx.item.pinned, 'hide': !ctx.item.pinned}"
|
||||
class="badge-top"
|
||||
@click.prevent.stop="togglePinned(ctx.item)"
|
||||
>
|
||||
<span
|
||||
class="svg-icon inline icon-12 color"
|
||||
v-html="icons.pin"
|
||||
></span>
|
||||
<pin-badge
|
||||
:pinned="ctx.item.pinned"
|
||||
/>
|
||||
</span>
|
||||
</template>
|
||||
</shopItem>
|
||||
@@ -81,11 +78,11 @@ import { mapState } from '@/libs/store';
|
||||
import LayoutSection from '@/components/ui/layoutSection';
|
||||
import FilterDropdown from '@/components/ui/filterDropdown';
|
||||
import ItemRows from '@/components/ui/itemRows';
|
||||
import PinBadge from '@/components/ui/pinBadge';
|
||||
import ShopItem from '../shopItem';
|
||||
|
||||
import shops from '@/../../common/script/libs/shops';
|
||||
|
||||
import svgPin from '@/assets/svg/pin.svg';
|
||||
import svgWarrior from '@/assets/svg/warrior.svg';
|
||||
import svgWizard from '@/assets/svg/wizard.svg';
|
||||
import svgRogue from '@/assets/svg/rogue.svg';
|
||||
@@ -112,6 +109,7 @@ export default {
|
||||
LayoutSection,
|
||||
FilterDropdown,
|
||||
ItemRows,
|
||||
PinBadge,
|
||||
ShopItem,
|
||||
},
|
||||
mixins: [pinUtils],
|
||||
@@ -122,7 +120,6 @@ export default {
|
||||
selectedSortGearBy: sortGearTypes[0],
|
||||
selectedGroupGearByClass: '',
|
||||
icons: Object.freeze({
|
||||
pin: svgPin,
|
||||
warrior: svgWarrior,
|
||||
wizard: svgWizard,
|
||||
rogue: svgRogue,
|
||||
@@ -168,9 +165,7 @@ export default {
|
||||
return this.$t(classType);
|
||||
},
|
||||
gearSelected (item) {
|
||||
if (!item.locked) {
|
||||
this.$root.$emit('buyModal::showItem', item);
|
||||
}
|
||||
this.$root.$emit('buyModal::showItem', item);
|
||||
},
|
||||
filterGearItems () {
|
||||
const category = _filter(this.marketGearCategories, ['identifier', this.selectedGroupGearByClass]);
|
||||
@@ -200,9 +195,11 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.equipment-rows {
|
||||
::v-deep .item.item-empty {
|
||||
background: white;
|
||||
.badge-pin:not(.pinned) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.item:hover .badge-pin {
|
||||
display: block;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -176,15 +176,9 @@ import FilterDropdown from '@/components/ui/filterDropdown';
|
||||
import MarketFilter from './filter';
|
||||
|
||||
import SellModal from './sellModal.vue';
|
||||
|
||||
import svgPin from '@/assets/svg/pin.svg';
|
||||
import svgGem from '@/assets/svg/gem.svg';
|
||||
import svgInformation from '@/assets/svg/information.svg';
|
||||
|
||||
import getItemInfo from '@/../../common/script/libs/getItemInfo';
|
||||
import shops from '@/../../common/script/libs/shops';
|
||||
|
||||
|
||||
import notifications from '@/mixins/notifications';
|
||||
import buyMixin from '@/mixins/buy';
|
||||
import currencyMixin from '../_currencyMixin';
|
||||
@@ -222,13 +216,6 @@ export default {
|
||||
|
||||
searchText: null,
|
||||
searchTextThrottled: null,
|
||||
|
||||
icons: Object.freeze({
|
||||
pin: svgPin,
|
||||
gem: svgGem,
|
||||
information: svgInformation,
|
||||
}),
|
||||
|
||||
sortItemsBy: sortItems,
|
||||
selectedSortItemsBy: sortItems[0],
|
||||
|
||||
|
||||