Compare commits
671 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 56af611212 | |||
| 2f4ebdac10 | |||
| 923bc9b284 | |||
| 55fecbc41b | |||
| 0056163a17 | |||
| cea9c745b8 | |||
| fc841d0ad4 | |||
| 9077290ea3 | |||
| 8b9c7da5dc | |||
| 8475fcddcc | |||
| a1535d286d | |||
| 3bcd82f6fe | |||
| 2ced5e2d5b | |||
| 2ef33386f1 | |||
| fd8f144da0 | |||
| 5a2350a034 | |||
| 38f17f0b6a | |||
| 0ed8bcedca | |||
| d44a984ee4 | |||
| ccde367a06 | |||
| 52f9319778 | |||
| e621e781ed | |||
| 8b5129cd4f | |||
| 6784d23a7c | |||
| c8466eec98 | |||
| 5a83f93ade | |||
| f0e6703546 | |||
| aa114ccc73 | |||
| 04420aa60e | |||
| 14106ec5bf | |||
| f24c501206 | |||
| 4de8e9a3fd | |||
| 171b09fbc6 | |||
| a7b3a560e8 | |||
| ec63ed8bba | |||
| 0a73a14bff | |||
| 1aef294646 | |||
| 6de5fed47a | |||
| 738221ea17 | |||
| 63f9304abf | |||
| a2287fc0c5 | |||
| 41782b2157 | |||
| e2385bd1fd | |||
| a8c93d96b1 | |||
| 8886082ebf | |||
| 12432bee91 | |||
| 551cbee92c | |||
| 07ae4134f3 | |||
| 8702a28bcc | |||
| 90e89791f3 | |||
| 20298d3dd5 | |||
| 2bfc41b1c3 | |||
| 016c8307df | |||
| 6ec8afeb84 | |||
| 0396114665 | |||
| 24e0462d1a | |||
| f1d0809d2d | |||
| c80de38572 | |||
| b4b9caed83 | |||
| dc15328e13 | |||
| 5917b1a0e1 | |||
| ebd41a3163 | |||
| 3fdfa231b7 | |||
| dc076b15a8 | |||
| 76feb1f8c5 | |||
| 6b22f51a66 | |||
| 704f44338b | |||
| 942f28466e | |||
| 733d3d5c01 | |||
| 35bc677f03 | |||
| cd274038b5 | |||
| 47df888060 | |||
| a491528f80 | |||
| 9e25feb22f | |||
| 0a8aa4630b | |||
| 1237c1c965 | |||
| cf484129a5 | |||
| 8130afcf33 | |||
| bbe496fda9 | |||
| e32cf5a581 | |||
| 5f67e223b8 | |||
| 13f2bf29f0 | |||
| a66320a35f | |||
| 93a77d0ad1 | |||
| 97c281cff6 | |||
| 81d53d9f9e | |||
| 597492539f | |||
| 9d3f4c605e | |||
| 0c6d9869e5 | |||
| 262e226e30 | |||
| 853de04cf9 | |||
| 0def89422b | |||
| c1572b278f | |||
| 096f382a70 | |||
| c268191470 | |||
| b711f35c11 | |||
| e0b3c0a378 | |||
| eb80692ddf | |||
| 79cfac27f8 | |||
| e49c7f6fb2 | |||
| 3f500ba488 | |||
| 740b96305e | |||
| c9ad41d625 | |||
| adbe0a01bc | |||
| a3afb4b998 | |||
| bbaae9b030 | |||
| 12f72d8c17 | |||
| ecf77dfd1d | |||
| 68d2e9b937 | |||
| 95c1cfe868 | |||
| 0bc39536d1 | |||
| a7ddeb7b89 | |||
| 06eba8c545 | |||
| f4267bf3da | |||
| 5484cf182c | |||
| 02f2347b9a | |||
| eb1c0fd4d8 | |||
| 5a4408c6ff | |||
| 3a16957d29 | |||
| db17a1ffad | |||
| 33c570217c | |||
| e9373142da | |||
| 6d1690ed1c | |||
| 599b97cec6 | |||
| 6fa3a6cecb | |||
| 6efd572065 | |||
| 3441016907 | |||
| 99666f899c | |||
| c9f80a1bb1 | |||
| e27a115721 | |||
| 9625a2612f | |||
| 1efb45a752 | |||
| f2f0dd6f06 | |||
| 08ddaa213e | |||
| 2097dee792 | |||
| 079fcbe983 | |||
| 08fd972931 | |||
| d16db714a4 | |||
| b5d66b616d | |||
| d1f09d9dd1 | |||
| 7be2003991 | |||
| b313bf06cd | |||
| cb877e8866 | |||
| ee33484bfb | |||
| 51e3d247d0 | |||
| d94c76e95b | |||
| 243ffda643 | |||
| c327c5a7ca | |||
| ea7a029ef6 | |||
| 8e7f559745 | |||
| 0a413dde02 | |||
| 251ec388e5 | |||
| 2723394729 | |||
| 119f79bdc8 | |||
| ba764cd367 | |||
| f516006f54 | |||
| ab2436e34e | |||
| cf5169f3bb | |||
| 0f2157cc43 | |||
| e0d054eb14 | |||
| 5d294cffc6 | |||
| b61f408829 | |||
| 3cb9c43346 | |||
| bef8970070 | |||
| 2e7932a7be | |||
| 3ec7535709 | |||
| 3d582509c5 | |||
| e9de1e0961 | |||
| 0ae5442c53 | |||
| 517cff52d2 | |||
| 21ee4c431b | |||
| 7f9f43652d | |||
| 99ec04f3b8 | |||
| 25ecf0e07b | |||
| cdb1036762 | |||
| ce0b960578 | |||
| c60d570517 | |||
| 72fc7cc83b | |||
| e3200d15e7 | |||
| 04f30e0ebd | |||
| 02c3789b5d | |||
| 8d21fa09e4 | |||
| 9e027d937d | |||
| fc34012a09 | |||
| bb20e92bb0 | |||
| 9ed7d20a19 | |||
| a3a592039e | |||
| 82985d6a80 | |||
| 1403c48c0d | |||
| 3e25342012 | |||
| 0ef7d1fdba | |||
| e066ad3ac8 | |||
| 6e0f7137a1 | |||
| fad404da8d | |||
| 818c76597f | |||
| 908a2db558 | |||
| 7df995436b | |||
| ccda342db9 | |||
| 2edc8662ad | |||
| d342f87489 | |||
| e29a568f2a | |||
| e5f19a6405 | |||
| fb529f0d2b | |||
| 21d1df3802 | |||
| 9951ec5740 | |||
| cc0e5adf3a | |||
| b05541b68c | |||
| 06e734f44a | |||
| 8dc17f57b6 | |||
| 95b7fc4f05 | |||
| 041e32aec8 | |||
| 93771bc54d | |||
| e7949204fe | |||
| d0464ef12e | |||
| 096ebf230a | |||
| c26ff95352 | |||
| 988e624ec3 | |||
| 0905e7edd3 | |||
| 41e2a17ad2 | |||
| 01c6f63c0c | |||
| 4bb2147657 | |||
| b8bfee0eb5 | |||
| 2a37614688 | |||
| c66ba0cc17 | |||
| d6283b1b32 | |||
| 3cfb3042fa | |||
| 00ecaf7a0d | |||
| f53aaf6060 | |||
| 85cacdfbfe | |||
| af1956cc84 | |||
| 40e79ac282 | |||
| a5cb8f6deb | |||
| 7007af70f2 | |||
| 7e865623de | |||
| 73d308dc01 | |||
| f444fd280b | |||
| fa52606fca | |||
| 849fcff20e | |||
| 706ada8ff7 | |||
| fc46c98336 | |||
| d98fd66f57 | |||
| 0c76fd3b09 | |||
| c4e23bdd7a | |||
| f0407a2051 | |||
| 3c61e848a6 | |||
| 4712204c82 | |||
| 40422f1d03 | |||
| 4ea2cf1fd9 | |||
| ca6728cc16 | |||
| a8ef3e22f0 | |||
| 3f631b5937 | |||
| 090e5eea31 | |||
| 93e88e0d06 | |||
| bd0b10180d | |||
| d608fa2cfa | |||
| fba7b6dc0c | |||
| 14fe4f3c68 | |||
| cbb3d9bb86 | |||
| 782f542035 | |||
| e71e5ca5be | |||
| b8ae9f236c | |||
| 31026a77ac | |||
| 3679d31a29 | |||
| a3d452ab2a | |||
| 78a6fd4c70 | |||
| d6a6104e1e | |||
| 0fc13c4db3 | |||
| 97f672eafe | |||
| 11cad2ddc7 | |||
| 2dbc9d8560 | |||
| 1b174cd4cf | |||
| 88afd5f341 | |||
| 666907fd6a | |||
| 0d41768634 | |||
| 1d21f73e25 | |||
| 3fc4dc5272 | |||
| 9681a8333e | |||
| 4f5d8f8df7 | |||
| a4961a71fe | |||
| 86c32ee136 | |||
| 2f8ffae81c | |||
| ec028bc34e | |||
| befed9560e | |||
| 902e31bf0c | |||
| 140dc5184f | |||
| 054594da4d | |||
| 15b0817745 | |||
| 8866cf227b | |||
| 32afadb0e4 | |||
| dbdb1af078 | |||
| 401ae6581e | |||
| c7c90826bb | |||
| 8266edb94d | |||
| c48cf07dca | |||
| 121af97f78 | |||
| 82fb62ac84 | |||
| 030a23aea2 | |||
| 46ff43af2b | |||
| da4b35903a | |||
| f54917bf03 | |||
| 60f00d7e6d | |||
| 941fd0eb34 | |||
| 3fe439a6d9 | |||
| 9a6aaa80c8 | |||
| dbe5fecb25 | |||
| 682a012e27 | |||
| 92231e6b4c | |||
| 4586d51818 | |||
| e786a2572a | |||
| e2c73c5c41 | |||
| a57a157ebf | |||
| 33ecf36bf0 | |||
| 18797162a0 | |||
| cbd8301c03 | |||
| 3c8533b230 | |||
| 1672456fba | |||
| 319bd70015 | |||
| 02d541e4fc | |||
| c9bf5a1c1a | |||
| ea52fb72b4 | |||
| ec1864dce2 | |||
| 96e8bfe469 | |||
| 43889aefb0 | |||
| b674d2366f | |||
| cecd7118be | |||
| 5e19526b55 | |||
| 76db47a83d | |||
| d6a721d577 | |||
| 9eb02f9bdb | |||
| a0886f5d04 | |||
| 3db3c06528 | |||
| f94c42b4fa | |||
| 29965dfc72 | |||
| 9ed094de56 | |||
| 7ffec31fde | |||
| 2911e65059 | |||
| c36d274867 | |||
| 00ce51961d | |||
| d300480cf9 | |||
| e24fa5381b | |||
| 6959b1836f | |||
| cd70eb0666 | |||
| 7cb92c773c | |||
| 624535c22a | |||
| 3cb9ef066b | |||
| 1cfeb9642c | |||
| b378b183af | |||
| b6af401d07 | |||
| e74a6ffffe | |||
| af9e7d9cf0 | |||
| 1197d85620 | |||
| 93cde287d9 | |||
| 039b57dee6 | |||
| 0036d85928 | |||
| f639b30cf4 | |||
| 373714c2ae | |||
| 3e805409b2 | |||
| 2d5b9c28ff | |||
| ca13953708 | |||
| 77dbe63c28 | |||
| d885f08aeb | |||
| 823bd945ca | |||
| 3f82d41f90 | |||
| eeb19579fb | |||
| 1ab98ddf85 | |||
| e8e864203d | |||
| 3a88c1df9f | |||
| 567402e276 | |||
| aacf65f51b | |||
| e5d8911eb4 | |||
| a57a162b8e | |||
| 5b2330e2c8 | |||
| e8af8096e0 | |||
| 7da80a0818 | |||
| d47e56e696 | |||
| 6dfbdc09b0 | |||
| 50125fa2b9 | |||
| 986516e0d6 | |||
| 2380c3c61d | |||
| e4a6003223 | |||
| 7657ab2c88 | |||
| e9fc738496 | |||
| 4250330412 | |||
| b4c471cd05 | |||
| 03f81b8e33 | |||
| 370f25a0a7 | |||
| f3bab6436f | |||
| 1753cbe26d | |||
| 8f15b544d5 | |||
| 35466fb767 | |||
| 22dcbf6b85 | |||
| 9629cfce81 | |||
| c1054fc3bb | |||
| bfbcdfc3b7 | |||
| 4a79576de0 | |||
| ad3f11728e | |||
| 079b45a3a4 | |||
| f4f7ceb54c | |||
| abfd132a2a | |||
| ce8fd55d78 | |||
| a318819eb2 | |||
| f49052a66b | |||
| f8695f8101 | |||
| 07fe34fefd | |||
| 0f9e4e37be | |||
| 393587fa62 | |||
| beb1c5fd4c | |||
| 523bb7ce4d | |||
| a27f6c1c75 | |||
| a227c85097 | |||
| 4b466a9889 | |||
| 99b42679f5 | |||
| 484ad8bb86 | |||
| ff5d529bdf | |||
| cc6871d80a | |||
| 7252fe47a8 | |||
| a99b19dbb3 | |||
| 8165491d9b | |||
| 9f1e8751ae | |||
| 68a36b0960 | |||
| 8dadd9dcb1 | |||
| 3f6b61ae7e | |||
| d56a006a1a | |||
| d6a03d17c7 | |||
| 9524050e21 | |||
| 3204855710 | |||
| 43b578a8f5 | |||
| ded4b65f58 | |||
| a1a10ed410 | |||
| 4faf0f416f | |||
| 2e6c188d62 | |||
| 5e12f8abc9 | |||
| 2bb898ee8f | |||
| 093f2a29d5 | |||
| 799a3de587 | |||
| 018fc44b03 | |||
| b788ba5c58 | |||
| 5ba12c7bfb | |||
| 8a1a17a271 | |||
| de334b1b59 | |||
| 53b94a9c5c | |||
| 6649767072 | |||
| 39d725762b | |||
| 17e1eacc2b | |||
| 702056e9c0 | |||
| 793201524a | |||
| 25cc887426 | |||
| 7f1d2b50f6 | |||
| 656e7087fc | |||
| 2a79a581e0 | |||
| 8e702b0cd4 | |||
| 6645a1fc5e | |||
| 292389fb82 | |||
| 4fe56cc9c2 | |||
| 483193dc14 | |||
| c75f4ab403 | |||
| 8c1dd853f9 | |||
| 300c08b243 | |||
| 39ea4c313f | |||
| 7e93905819 | |||
| 4499c3e0fc | |||
| 5f8ae8e26e | |||
| 95891885c1 | |||
| 775f49b2fc | |||
| 55ef0310ff | |||
| 5330955c0d | |||
| d4b771ddf8 | |||
| 04d9e1365d | |||
| 94871082a6 | |||
| df4f8728f3 | |||
| 7646c156ad | |||
| 7b7e4f9fa0 | |||
| 1dde38340e | |||
| 0641655738 | |||
| 2ab98d891b | |||
| a57108e4c9 | |||
| 4e4394fc9c | |||
| bbadbdfc1c | |||
| 7f0f41d9f8 | |||
| 650681fcb3 | |||
| b4bd129385 | |||
| c281b35e05 | |||
| 9306eb46c6 | |||
| 4b7ba57839 | |||
| 0ec8aa7ced | |||
| 3a1f900402 | |||
| be0254304e | |||
| f0b3176cd6 | |||
| 3d297bd2a6 | |||
| 2fece57a4a | |||
| db5749b92b | |||
| a6146ddba4 | |||
| c1ac43b332 | |||
| 6d3ce09c41 | |||
| 0a63d0efab | |||
| 0ad1b4cf77 | |||
| 5a8a1a067e | |||
| 7da9cc61a0 | |||
| 105e695568 | |||
| a2e6cdb9cc | |||
| 7fe0c0e0a5 | |||
| 99a599e66a | |||
| 741ec3f462 | |||
| 8a5cb47ca6 | |||
| 7dbe23abbf | |||
| 93ef9b4092 | |||
| 3bd3dc9dc9 | |||
| 793f17d3f8 | |||
| 9b41108f6d | |||
| f765234fd1 | |||
| 94b4f254b2 | |||
| bd8b884d1f | |||
| 54a080ac32 | |||
| 51d1c012d6 | |||
| b7e7827555 | |||
| dcfd0f73ef | |||
| 6d6a10aacd | |||
| 47742f2f83 | |||
| 2959fb274a | |||
| 7538978f9f | |||
| ade59b1195 | |||
| e8348d47ee | |||
| 0f3ec0c0ce | |||
| 0f18b1dd1a | |||
| 2ed381e59b | |||
| 4778fe3f0e | |||
| 326a8d9e0c | |||
| a411104230 | |||
| ddec97099b | |||
| 0c5ad71932 | |||
| de279e33de | |||
| a0dd797174 | |||
| 841ea175e6 | |||
| 8e8cde5578 | |||
| 378f199a6d | |||
| 8b6918e738 | |||
| 1c4e9113ed | |||
| 0a208d9948 | |||
| d26a8912fd | |||
| cca61359f8 | |||
| 69c1effe2b | |||
| 8c77346688 | |||
| 22b93fedff | |||
| 4796651095 | |||
| 3c141b9e63 | |||
| f6a2d4a8ae | |||
| 250fb0ae33 | |||
| b7eb9e07e5 | |||
| 9fa414b3a3 | |||
| d3e1e65d82 | |||
| 30b67bfb2e | |||
| 0aef4e52e4 | |||
| 73845b1bc1 | |||
| f93e6983c8 | |||
| 28bbcb59a8 | |||
| 04d55687e9 | |||
| 431480f751 | |||
| ea8e17592d | |||
| 9bf0338869 | |||
| dd7c3dae74 | |||
| fbfa8a310c | |||
| e3aef1bda0 | |||
| b75c01c6c1 | |||
| dbfbda6d32 | |||
| 5da61ffd75 | |||
| 8094580e79 | |||
| 93fd208c09 | |||
| 19dc8dec0f | |||
| 3ae59f1ec7 | |||
| 1fe2f895d3 | |||
| 42230379f8 | |||
| fb5a492c7f | |||
| 595a01f040 | |||
| 500a0a84dc | |||
| 45be4dd6ea | |||
| 41ff2cb444 | |||
| f42013d91b | |||
| f2bf7c7dbf | |||
| aecf063c55 | |||
| 772bbaf09d | |||
| 2f81b4324a | |||
| c4162a5910 | |||
| 40e8e1573c | |||
| 8ae0f64b4d | |||
| c8469cb1a3 | |||
| f0f90a3653 | |||
| e89076af62 | |||
| f42928ca44 | |||
| 432b6bf2cd | |||
| 7f47ce0fbf | |||
| 1a4eef9817 | |||
| 9c7e2131a6 | |||
| 271ed1f080 | |||
| 30e40fa58d | |||
| 1866d1ccf8 | |||
| e8391638fa | |||
| 0cea9d255b | |||
| b088a529f2 | |||
| e4f301deda | |||
| 6387b4f844 | |||
| 05edec4492 | |||
| 2ccbbfcea8 | |||
| 378f5922b9 | |||
| 17d066fe9d | |||
| b6de9d2448 | |||
| 222f1afd24 | |||
| 2706bdf5aa | |||
| 560b6714f9 | |||
| 31f3a08945 | |||
| 25e54f9632 | |||
| 475217ff27 | |||
| f5155039cf | |||
| 671d3652e3 | |||
| 86040fbc93 | |||
| 9206be3c64 | |||
| 695e0c4206 | |||
| b2426c5a14 | |||
| e158933ae4 | |||
| de6005bdac | |||
| 83b24ffa19 | |||
| 6015e96f15 | |||
| df0d4b38b6 | |||
| 45ed5f3748 | |||
| fba2f5330f | |||
| f35fb3879b | |||
| caaaf3381d | |||
| d3a97946e3 | |||
| b0c78734ca | |||
| b2b5ab714b | |||
| c570a69b87 | |||
| 2ac1610173 | |||
| f6e72627c4 | |||
| 5f43d8ac2b | |||
| fe6a26bd87 | |||
| 5cc2e6fe6a | |||
| c4db75b585 | |||
| c0ae6eca18 | |||
| 878242d8fd | |||
| e6e93fa2c2 | |||
| 666107e135 | |||
| 1868f60948 | |||
| 6f464b884e | |||
| a008f5a745 | |||
| 9165e2cd6a | |||
| 825ea5297f | |||
| 6db7f99a3b | |||
| b50e23ca2c | |||
| 703c3d91b3 | |||
| 83a05d870c | |||
| 4f20972292 | |||
| 1b35d4983a | |||
| 452dc77dff | |||
| 1783b11745 | |||
| 74eeae6eee | |||
| 3a7cd3c997 | |||
| b7f6ffa058 | |||
| e1a1e13b5d | |||
| 9cbb87ed25 | |||
| 11bca78f43 | |||
| b6418bc755 | |||
| 122a5085f9 | |||
| cd2b6ab78b | |||
| 9b2804063b | |||
| 7a617346b8 | |||
| 02fa9ed4b9 | |||
| 833991ba34 | |||
| ae65b6f992 | |||
| 88488c112c | |||
| 8313dfccc8 | |||
| e240d6c3f0 | |||
| bbfa81e0c3 |
@@ -1,6 +1,6 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- '10'
|
||||
- '12'
|
||||
services:
|
||||
- mongodb
|
||||
cache:
|
||||
@@ -14,7 +14,6 @@ before_script:
|
||||
- sleep 5
|
||||
script:
|
||||
- npm run $TEST
|
||||
- if [ $COVERAGE ]; then ./node_modules/.bin/lcov-result-merger 'coverage/**/*.info' | ./node_modules/coveralls/bin/coveralls.js; fi
|
||||
env:
|
||||
global:
|
||||
- DISABLE_REQUEST_LOGGING=true
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM node:10
|
||||
FROM node:12
|
||||
|
||||
ENV ADMIN_EMAIL admin@habitica.com
|
||||
ENV AMAZON_PAYMENTS_CLIENT_ID amzn1.application-oa2-client.68ed9e6904ef438fbc1bf86bf494056e
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
FROM node:10
|
||||
WORKDIR /code
|
||||
COPY package*.json /code/
|
||||
RUN npm install
|
||||
RUN npm install -g gulp-cli mocha
|
||||
FROM node:12
|
||||
WORKDIR /code
|
||||
COPY package*.json /code/
|
||||
RUN npm install
|
||||
RUN npm install -g gulp-cli mocha
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Habitica [](https://travis-ci.org/HabitRPG/habitica) [](https://codeclimate.com/github/HabitRPG/habitrpg) [](https://coveralls.io/github/HabitRPG/habitica?branch=develop) [](https://www.bountysource.com/trackers/68393-habitrpg?utm_source=68393&utm_medium=shield&utm_campaign=TRACKER_BADGE) [](https://www.codetriage.com/habitrpg/habitica)
|
||||
Habitica [](https://travis-ci.org/HabitRPG/habitica) [](https://codeclimate.com/github/HabitRPG/habitrpg) [](https://www.bountysource.com/trackers/68393-habitrpg?utm_source=68393&utm_medium=shield&utm_campaign=TRACKER_BADGE) [](https://www.codetriage.com/habitrpg/habitica)
|
||||
===============
|
||||
|
||||
[](https://greenkeeper.io/)
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
/* eslint-disable no-console */
|
||||
const MIGRATION_NAME = '20190731_naming_day';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
|
||||
import { model as User } from '../../../website/server/models/user';
|
||||
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count++;
|
||||
|
||||
let set;
|
||||
let push;
|
||||
const inc = {
|
||||
'items.food.Cake_Base': 1,
|
||||
'items.food.Cake_CottonCandyBlue': 1,
|
||||
'items.food.Cake_CottonCandyPink': 1,
|
||||
'items.food.Cake_Desert': 1,
|
||||
'items.food.Cake_Golden': 1,
|
||||
'items.food.Cake_Red': 1,
|
||||
'items.food.Cake_Shade': 1,
|
||||
'items.food.Cake_Skeleton': 1,
|
||||
'items.food.Cake_White': 1,
|
||||
'items.food.Cake_Zombie': 1,
|
||||
'achievements.habiticaDays': 1,
|
||||
};
|
||||
|
||||
if (user && user.items && user.items.gear && user.items.gear.owned && typeof user.items.gear.owned.body_special_namingDay2018 !== 'undefined') {
|
||||
set = { migration: MIGRATION_NAME };
|
||||
} else if (user && user.items && user.items.gear && user.items.gear.owned && typeof user.items.gear.owned.head_special_namingDay2017 !== 'undefined') {
|
||||
set = { migration: MIGRATION_NAME, 'items.gear.owned.body_special_namingDay2018': false };
|
||||
push = { pinnedItems: { type: 'marketGear', path: 'gear.flat.body_special_namingDay2018', _id: uuid() }};
|
||||
} else if (user && user.items && user.items.pets && typeof user.items.pets['Gryphon-RoyalPurple'] !== 'undefined') {
|
||||
set = { migration: MIGRATION_NAME, 'items.gear.owned.head_special_namingDay2017': false };
|
||||
push = { pinnedItems: { type: 'marketGear', path: 'gear.flat.head_special_namingDay2017', _id: uuid() }};
|
||||
} else if (user && user.items && user.items.mounts && typeof user.items.mounts['Gryphon-RoyalPurple'] !== 'undefined') {
|
||||
set = { migration: MIGRATION_NAME, 'items.pets.Gryphon-RoyalPurple': 5 };
|
||||
} else {
|
||||
set = { migration: MIGRATION_NAME, 'items.mounts.Gryphon-RoyalPurple': true };
|
||||
}
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
|
||||
if (push) {
|
||||
return await User.update({ _id: user._id }, { $set: set, $inc: inc, $push: push }).exec();
|
||||
} else {
|
||||
return await User.update({ _id: user._id }, { $set: set, $inc: inc }).exec();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = async function processUsers () {
|
||||
let query = {
|
||||
migration: { $ne: MIGRATION_NAME },
|
||||
'auth.timestamps.loggedin': { $gt: new Date('2019-07-01') },
|
||||
};
|
||||
|
||||
const fields = {
|
||||
_id: 1,
|
||||
items: 1,
|
||||
};
|
||||
|
||||
while (true) { // eslint-disable-line no-constant-condition
|
||||
const users = await User // eslint-disable-line no-await-in-loop
|
||||
.find(query)
|
||||
.limit(250)
|
||||
.sort({_id: 1})
|
||||
.select(fields)
|
||||
.lean()
|
||||
.exec();
|
||||
|
||||
if (users.length === 0) {
|
||||
console.warn('All appropriate users found and modified.');
|
||||
console.warn(`\n${count} users processed\n`);
|
||||
break;
|
||||
} else {
|
||||
query._id = {
|
||||
$gt: users[users.length - 1]._id,
|
||||
};
|
||||
}
|
||||
|
||||
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
|
||||
}
|
||||
};
|
||||
@@ -1,6 +1,6 @@
|
||||
/* eslint-disable no-console */
|
||||
const MIGRATION_NAME = 'mystery_items_201907';
|
||||
const MYSTERY_ITEMS = ['head_mystery_201907', 'armor_mystery_201907', 'eyewear_mystery_201907'];
|
||||
const MIGRATION_NAME = 'mystery_items_201908';
|
||||
const MYSTERY_ITEMS = ['armor_mystery_201908', 'headAccessory_mystery_201908'];
|
||||
import { model as User } from '../../website/server/models/user';
|
||||
import { model as UserNotification } from '../../website/server/models/userNotification';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "habitica",
|
||||
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
||||
"version": "4.105.1",
|
||||
"version": "4.109.1",
|
||||
"main": "./website/server/index.js",
|
||||
"dependencies": {
|
||||
"@google-cloud/trace-agent": "^4.0.0",
|
||||
@@ -9,7 +9,7 @@
|
||||
"accepts": "^1.3.5",
|
||||
"amazon-payments": "^0.2.7",
|
||||
"amplitude": "^3.5.0",
|
||||
"amplitude-js": "^5.0.0",
|
||||
"amplitude-js": "^5.2.2",
|
||||
"apidoc": "^0.17.5",
|
||||
"apn": "^2.2.0",
|
||||
"autoprefixer": "^9.4.0",
|
||||
@@ -28,7 +28,7 @@
|
||||
"babel-preset-es2015": "^6.6.0",
|
||||
"babel-register": "^6.6.0",
|
||||
"babel-runtime": "^6.11.6",
|
||||
"bcrypt": "^3.0.5",
|
||||
"bcrypt": "^3.0.6",
|
||||
"body-parser": "^1.18.3",
|
||||
"bootstrap": "^4.1.1",
|
||||
"bootstrap-vue": "^2.0.0-rc.18",
|
||||
@@ -64,11 +64,11 @@
|
||||
"method-override": "^3.0.0",
|
||||
"moment": "^2.22.1",
|
||||
"moment-recur": "^1.0.7",
|
||||
"mongoose": "^5.4.19",
|
||||
"mongoose": "^5.6.9",
|
||||
"morgan": "^1.7.0",
|
||||
"nconf": "^0.10.0",
|
||||
"node-gcm": "^1.0.2",
|
||||
"node-sass": "^4.9.0",
|
||||
"node-sass": "^4.12.0",
|
||||
"ora": "^3.2.0",
|
||||
"pageres": "^5.1.0",
|
||||
"passport": "^0.4.0",
|
||||
@@ -80,6 +80,7 @@
|
||||
"postcss-easy-import": "^3.0.0",
|
||||
"ps-tree": "^1.0.0",
|
||||
"pug": "^2.0.3",
|
||||
"regenerator-runtime": "^0.13.3",
|
||||
"rimraf": "^2.4.3",
|
||||
"sass-loader": "^7.0.3",
|
||||
"shelljs": "^0.8.2",
|
||||
@@ -115,7 +116,7 @@
|
||||
},
|
||||
"private": true,
|
||||
"engines": {
|
||||
"node": "^10",
|
||||
"node": "^12",
|
||||
"npm": "^6"
|
||||
},
|
||||
"scripts": {
|
||||
@@ -151,9 +152,8 @@
|
||||
"chai": "^4.1.2",
|
||||
"chai-as-promised": "^7.1.1",
|
||||
"chalk": "^2.4.1",
|
||||
"chromedriver": "^75.0.0",
|
||||
"chromedriver": "^76.0.0",
|
||||
"connect-history-api-fallback": "^1.1.0",
|
||||
"coveralls": "^3.0.3",
|
||||
"cross-spawn": "^6.0.5",
|
||||
"eslint": "^4.19.1",
|
||||
"eslint-config-habitrpg": "^4.0.0",
|
||||
@@ -177,7 +177,6 @@
|
||||
"karma-sourcemap-loader": "^0.3.7",
|
||||
"karma-spec-reporter": "0.0.32",
|
||||
"karma-webpack": "^3.0.0",
|
||||
"lcov-result-merger": "^3.0.0",
|
||||
"mocha": "^5.1.1",
|
||||
"monk": "^6.0.6",
|
||||
"nightwatch": "^1.0.16",
|
||||
|
||||
@@ -58,7 +58,7 @@ async function _deleteHabiticaData (user, email) {
|
||||
}
|
||||
|
||||
async function _processEmailAddress (email) {
|
||||
const emailRegex = new RegExp(`^${email}`, 'i');
|
||||
const emailRegex = new RegExp(`^${email}$`, 'i');
|
||||
const users = await User.find({
|
||||
$or: [
|
||||
{'auth.local.email': emailRegex},
|
||||
|
||||
@@ -1232,7 +1232,7 @@ describe('cron', () => {
|
||||
cron({user, tasksByType, daysMissed, analytics});
|
||||
|
||||
expect(user.history.exp).to.have.lengthOf(1);
|
||||
expect(user.history.exp[0].value).to.equal(150);
|
||||
expect(user.history.exp[0].value).to.equal(25);
|
||||
});
|
||||
|
||||
it('increments perfect day achievement if all (at least 1) due dailies were completed', () => {
|
||||
|
||||
@@ -12,6 +12,7 @@ import {
|
||||
SPAM_MIN_EXEMPT_CONTRIB_LEVEL,
|
||||
TAVERN_ID,
|
||||
} from '../../../../../website/server/models/group';
|
||||
import { CHAT_FLAG_FROM_SHADOW_MUTE } from '../../../../../website/common/script/constants';
|
||||
import { v4 as generateUUID } from 'uuid';
|
||||
import { getMatchesByWordArray } from '../../../../../website/server/libs/stringUtils';
|
||||
import bannedWords from '../../../../../website/server/libs/bannedWords';
|
||||
@@ -81,6 +82,10 @@ describe('POST /chat', () => {
|
||||
});
|
||||
|
||||
describe('mute user', () => {
|
||||
afterEach(() => {
|
||||
member.update({'flags.chatRevoked': false});
|
||||
});
|
||||
|
||||
it('returns an error when chat privileges are revoked when sending a message to a public guild', async () => {
|
||||
const userWithChatRevoked = await member.update({'flags.chatRevoked': true});
|
||||
await expect(userWithChatRevoked.post(`/groups/${groupWithChat._id}/chat`, { message: testMessage})).to.eventually.be.rejected.and.eql({
|
||||
@@ -89,6 +94,129 @@ describe('POST /chat', () => {
|
||||
message: t('chatPrivilegesRevoked'),
|
||||
});
|
||||
});
|
||||
|
||||
it('does not error when chat privileges are revoked when sending a message to a private guild', async () => {
|
||||
const { group, members } = await createAndPopulateGroup({
|
||||
groupDetails: {
|
||||
name: 'Private Guild',
|
||||
type: 'guild',
|
||||
privacy: 'private',
|
||||
},
|
||||
members: 1,
|
||||
});
|
||||
|
||||
const privateGuildMemberWithChatsRevoked = members[0];
|
||||
await privateGuildMemberWithChatsRevoked.update({'flags.chatRevoked': true});
|
||||
|
||||
const message = await privateGuildMemberWithChatsRevoked.post(`/groups/${group._id}/chat`, { message: testMessage});
|
||||
|
||||
expect(message.message.id).to.exist;
|
||||
});
|
||||
|
||||
it('does not error when chat privileges are revoked when sending a message to a party', async () => {
|
||||
const { group, members } = await createAndPopulateGroup({
|
||||
groupDetails: {
|
||||
name: 'Party',
|
||||
type: 'party',
|
||||
privacy: 'private',
|
||||
},
|
||||
members: 1,
|
||||
});
|
||||
|
||||
const privatePartyMemberWithChatsRevoked = members[0];
|
||||
await privatePartyMemberWithChatsRevoked.update({'flags.chatRevoked': true});
|
||||
|
||||
const message = await privatePartyMemberWithChatsRevoked.post(`/groups/${group._id}/chat`, { message: testMessage});
|
||||
|
||||
expect(message.message.id).to.exist;
|
||||
});
|
||||
});
|
||||
|
||||
describe('shadow-mute user', () => {
|
||||
beforeEach(() => {
|
||||
sandbox.spy(email, 'sendTxn');
|
||||
sandbox.stub(IncomingWebhook.prototype, 'send');
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sandbox.restore();
|
||||
member.update({'flags.chatShadowMuted': false});
|
||||
});
|
||||
|
||||
it('creates a chat with flagCount already set and notifies mods when sending a message to a public guild', async () => {
|
||||
const userWithChatShadowMuted = await member.update({'flags.chatShadowMuted': true});
|
||||
const message = await userWithChatShadowMuted.post(`/groups/${groupWithChat._id}/chat`, { message: testMessage});
|
||||
expect(message.message.id).to.exist;
|
||||
expect(message.message.flagCount).to.eql(CHAT_FLAG_FROM_SHADOW_MUTE);
|
||||
|
||||
// Email sent to mods
|
||||
await sleep(0.5);
|
||||
expect(email.sendTxn).to.be.calledOnce;
|
||||
expect(email.sendTxn.args[0][1]).to.eql('shadow-muted-post-report-to-mods');
|
||||
|
||||
// Slack message to mods
|
||||
expect(IncomingWebhook.prototype.send).to.be.calledOnce;
|
||||
/* eslint-disable camelcase */
|
||||
expect(IncomingWebhook.prototype.send).to.be.calledWith({
|
||||
text: `@${member.auth.local.username} / ${member.profile.name} posted while shadow-muted`,
|
||||
attachments: [{
|
||||
fallback: 'Shadow-Muted Message',
|
||||
color: 'danger',
|
||||
author_name: `@${member.auth.local.username} ${member.profile.name} (${member.auth.local.email}; ${member._id})`,
|
||||
title: 'Shadow-Muted Post in Test Guild',
|
||||
title_link: `${BASE_URL}/groups/guild/${groupWithChat.id}`,
|
||||
text: testMessage,
|
||||
mrkdwn_in: [
|
||||
'text',
|
||||
],
|
||||
}],
|
||||
});
|
||||
/* eslint-enable camelcase */
|
||||
});
|
||||
|
||||
it('creates a chat with zero flagCount when sending a message to a private guild', async () => {
|
||||
const { group, members } = await createAndPopulateGroup({
|
||||
groupDetails: {
|
||||
name: 'Private Guild',
|
||||
type: 'guild',
|
||||
privacy: 'private',
|
||||
},
|
||||
members: 1,
|
||||
});
|
||||
|
||||
const userWithChatShadowMuted = members[0];
|
||||
await userWithChatShadowMuted.update({'flags.chatShadowMuted': true});
|
||||
|
||||
const message = await userWithChatShadowMuted.post(`/groups/${group._id}/chat`, { message: testMessage});
|
||||
|
||||
expect(message.message.id).to.exist;
|
||||
expect(message.message.flagCount).to.eql(0);
|
||||
});
|
||||
|
||||
it('creates a chat with zero flagCount when sending a message to a party', async () => {
|
||||
const { group, members } = await createAndPopulateGroup({
|
||||
groupDetails: {
|
||||
name: 'Party',
|
||||
type: 'party',
|
||||
privacy: 'private',
|
||||
},
|
||||
members: 1,
|
||||
});
|
||||
|
||||
const userWithChatShadowMuted = members[0];
|
||||
await userWithChatShadowMuted.update({'flags.chatShadowMuted': true});
|
||||
|
||||
const message = await userWithChatShadowMuted.post(`/groups/${group._id}/chat`, { message: testMessage});
|
||||
|
||||
expect(message.message.id).to.exist;
|
||||
expect(message.message.flagCount).to.eql(0);
|
||||
});
|
||||
|
||||
it('creates a chat with zero flagCount when non-shadow-muted user sends a message to a public guild', async () => {
|
||||
const message = await member.post(`/groups/${groupWithChat._id}/chat`, { message: testMessage});
|
||||
expect(message.message.id).to.exist;
|
||||
expect(message.message.flagCount).to.eql(0);
|
||||
});
|
||||
});
|
||||
|
||||
context('banned word', () => {
|
||||
@@ -235,6 +363,7 @@ describe('POST /chat', () => {
|
||||
|
||||
afterEach(() => {
|
||||
sandbox.restore();
|
||||
user.update({'flags.chatRevoked': false});
|
||||
});
|
||||
|
||||
it('errors and revokes privileges when chat message contains a banned slur', async () => {
|
||||
@@ -274,11 +403,6 @@ describe('POST /chat', () => {
|
||||
error: 'NotAuthorized',
|
||||
message: t('chatPrivilegesRevoked'),
|
||||
});
|
||||
|
||||
// @TODO: The next test should not depend on this. We should reset the user test in a beforeEach
|
||||
// Restore chat privileges to continue testing
|
||||
user.flags.chatRevoked = false;
|
||||
await user.update({'flags.chatRevoked': false});
|
||||
});
|
||||
|
||||
it('does not allow slurs in private groups', async () => {
|
||||
@@ -327,10 +451,6 @@ describe('POST /chat', () => {
|
||||
error: 'NotAuthorized',
|
||||
message: t('chatPrivilegesRevoked'),
|
||||
});
|
||||
|
||||
// Restore chat privileges to continue testing
|
||||
members[0].flags.chatRevoked = false;
|
||||
await members[0].update({'flags.chatRevoked': false});
|
||||
});
|
||||
|
||||
it('errors when slur is typed in mixed case', async () => {
|
||||
@@ -345,42 +465,6 @@ describe('POST /chat', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('does not error when sending a message to a private guild with a user with revoked chat', async () => {
|
||||
let { group, members } = await createAndPopulateGroup({
|
||||
groupDetails: {
|
||||
name: 'Private Guild',
|
||||
type: 'guild',
|
||||
privacy: 'private',
|
||||
},
|
||||
members: 1,
|
||||
});
|
||||
|
||||
let privateGuildMemberWithChatsRevoked = members[0];
|
||||
await privateGuildMemberWithChatsRevoked.update({'flags.chatRevoked': true});
|
||||
|
||||
let message = await privateGuildMemberWithChatsRevoked.post(`/groups/${group._id}/chat`, { message: testMessage});
|
||||
|
||||
expect(message.message.id).to.exist;
|
||||
});
|
||||
|
||||
it('does not error when sending a message to a party with a user with revoked chat', async () => {
|
||||
let { group, members } = await createAndPopulateGroup({
|
||||
groupDetails: {
|
||||
name: 'Party',
|
||||
type: 'party',
|
||||
privacy: 'private',
|
||||
},
|
||||
members: 1,
|
||||
});
|
||||
|
||||
let privatePartyMemberWithChatsRevoked = members[0];
|
||||
await privatePartyMemberWithChatsRevoked.update({'flags.chatRevoked': true});
|
||||
|
||||
let message = await privatePartyMemberWithChatsRevoked.post(`/groups/${group._id}/chat`, { message: testMessage});
|
||||
|
||||
expect(message.message.id).to.exist;
|
||||
});
|
||||
|
||||
it('creates a chat', async () => {
|
||||
const newMessage = await user.post(`/groups/${groupWithChat._id}/chat`, { message: testMessage});
|
||||
const groupMessages = await user.get(`/groups/${groupWithChat._id}/chat`);
|
||||
@@ -486,35 +570,55 @@ describe('POST /chat', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('notifies other users of new messages for a guild', async () => {
|
||||
let message = await user.post(`/groups/${groupWithChat._id}/chat`, { message: testMessage});
|
||||
let memberWithNotification = await member.get('/user');
|
||||
|
||||
expect(message.message.id).to.exist;
|
||||
expect(memberWithNotification.newMessages[`${groupWithChat._id}`]).to.exist;
|
||||
expect(memberWithNotification.notifications.find(n => {
|
||||
return n.type === 'NEW_CHAT_MESSAGE' && n.data.group.id === groupWithChat._id;
|
||||
})).to.exist;
|
||||
});
|
||||
|
||||
it('notifies other users of new messages for a party', async () => {
|
||||
let { group, groupLeader, members } = await createAndPopulateGroup({
|
||||
groupDetails: {
|
||||
name: 'Test Party',
|
||||
type: 'party',
|
||||
privacy: 'private',
|
||||
},
|
||||
members: 1,
|
||||
context('chat notifications', () => {
|
||||
beforeEach(() => {
|
||||
member.update({newMessages: {}, notifications: []});
|
||||
});
|
||||
|
||||
let message = await groupLeader.post(`/groups/${group._id}/chat`, { message: testMessage});
|
||||
let memberWithNotification = await members[0].get('/user');
|
||||
it('notifies other users of new messages for a guild', async () => {
|
||||
let message = await user.post(`/groups/${groupWithChat._id}/chat`, { message: testMessage });
|
||||
let memberWithNotification = await member.get('/user');
|
||||
|
||||
expect(message.message.id).to.exist;
|
||||
expect(memberWithNotification.newMessages[`${group._id}`]).to.exist;
|
||||
expect(memberWithNotification.notifications.find(n => {
|
||||
return n.type === 'NEW_CHAT_MESSAGE' && n.data.group.id === group._id;
|
||||
})).to.exist;
|
||||
expect(message.message.id).to.exist;
|
||||
expect(memberWithNotification.newMessages[`${groupWithChat._id}`]).to.exist;
|
||||
expect(memberWithNotification.notifications.find(n => {
|
||||
return n.type === 'NEW_CHAT_MESSAGE' && n.data.group.id === groupWithChat._id;
|
||||
})).to.exist;
|
||||
});
|
||||
|
||||
it('notifies other users of new messages for a party', async () => {
|
||||
let { group, groupLeader, members } = await createAndPopulateGroup({
|
||||
groupDetails: {
|
||||
name: 'Test Party',
|
||||
type: 'party',
|
||||
privacy: 'private',
|
||||
},
|
||||
members: 1,
|
||||
});
|
||||
|
||||
let message = await groupLeader.post(`/groups/${group._id}/chat`, { message: testMessage });
|
||||
let memberWithNotification = await members[0].get('/user');
|
||||
|
||||
expect(message.message.id).to.exist;
|
||||
expect(memberWithNotification.newMessages[`${group._id}`]).to.exist;
|
||||
expect(memberWithNotification.notifications.find(n => {
|
||||
return n.type === 'NEW_CHAT_MESSAGE' && n.data.group.id === group._id;
|
||||
})).to.exist;
|
||||
});
|
||||
|
||||
it('does not notify other users of a new message that is already hidden from shadow-muting', async () => {
|
||||
await user.update({'flags.chatShadowMuted': true});
|
||||
let message = await user.post(`/groups/${groupWithChat._id}/chat`, { message: testMessage });
|
||||
let memberWithNotification = await member.get('/user');
|
||||
|
||||
await user.update({'flags.chatShadowMuted': false});
|
||||
|
||||
expect(message.message.id).to.exist;
|
||||
expect(memberWithNotification.newMessages[`${groupWithChat._id}`]).to.not.exist;
|
||||
expect(memberWithNotification.notifications.find(n => {
|
||||
return n.type === 'NEW_CHAT_MESSAGE' && n.data.group.id === groupWithChat._id;
|
||||
})).to.not.exist;
|
||||
});
|
||||
});
|
||||
|
||||
context('Spam prevention', () => {
|
||||
@@ -533,7 +637,7 @@ describe('POST /chat', () => {
|
||||
});
|
||||
|
||||
it('contributor should not receive spam alert', async () => {
|
||||
let userSocialite = await member.update({'contributor.level': SPAM_MIN_EXEMPT_CONTRIB_LEVEL, 'flags.chatRevoked': false});
|
||||
let userSocialite = await member.update({'contributor.level': SPAM_MIN_EXEMPT_CONTRIB_LEVEL});
|
||||
|
||||
// Post 1 more message than the spam limit to ensure they do not reach the limit
|
||||
for (let i = 0; i < SPAM_MESSAGE_LIMIT + 1; i++) {
|
||||
|
||||
@@ -276,44 +276,70 @@ describe('POST /groups/:groupId/leave', () => {
|
||||
});
|
||||
});
|
||||
|
||||
context('Leaving a group plan', () => {
|
||||
it('cancels the free subscription', async () => {
|
||||
// Create group
|
||||
let { group, groupLeader, members } = await createAndPopulateGroup({
|
||||
groupDetails: {
|
||||
name: 'Test Private Guild',
|
||||
type: 'guild',
|
||||
},
|
||||
members: 1,
|
||||
each(typesOfGroups, (groupDetails, groupType) => {
|
||||
context(`Leaving a group plan when the group is a ${groupType}`, () => {
|
||||
let groupWithPlan;
|
||||
let leader;
|
||||
let member;
|
||||
|
||||
beforeEach(async () => {
|
||||
let { group, groupLeader, members } = await createAndPopulateGroup({
|
||||
groupDetails,
|
||||
members: 1,
|
||||
});
|
||||
leader = groupLeader;
|
||||
member = members[0];
|
||||
groupWithPlan = group;
|
||||
let userWithFreePlan = await User.findById(leader._id).exec();
|
||||
|
||||
// Create subscription
|
||||
let paymentData = {
|
||||
user: userWithFreePlan,
|
||||
groupId: groupWithPlan._id,
|
||||
sub: {
|
||||
key: 'basic_3mo',
|
||||
},
|
||||
customerId: 'customer-id',
|
||||
paymentMethod: 'Payment Method',
|
||||
headers: {
|
||||
'x-client': 'habitica-web',
|
||||
'user-agent': '',
|
||||
},
|
||||
};
|
||||
await payments.createSubscription(paymentData);
|
||||
await member.sync();
|
||||
});
|
||||
|
||||
let leader = groupLeader;
|
||||
let member = members[0];
|
||||
let userWithFreePlan = await User.findById(leader._id).exec();
|
||||
it('cancels the free subscription', async () => {
|
||||
expect(member.purchased.plan.planId).to.equal('group_plan_auto');
|
||||
expect(member.purchased.plan.dateTerminated).to.not.exist;
|
||||
|
||||
// Create subscription
|
||||
let paymentData = {
|
||||
user: userWithFreePlan,
|
||||
groupId: group._id,
|
||||
sub: {
|
||||
key: 'basic_3mo',
|
||||
},
|
||||
customerId: 'customer-id',
|
||||
paymentMethod: 'Payment Method',
|
||||
headers: {
|
||||
'x-client': 'habitica-web',
|
||||
'user-agent': '',
|
||||
},
|
||||
};
|
||||
await payments.createSubscription(paymentData);
|
||||
await member.sync();
|
||||
expect(member.purchased.plan.planId).to.equal('group_plan_auto');
|
||||
expect(member.purchased.plan.dateTerminated).to.not.exist;
|
||||
// Leave
|
||||
await member.post(`/groups/${groupWithPlan._id}/leave`);
|
||||
await member.sync();
|
||||
expect(member.purchased.plan.dateTerminated).to.exist;
|
||||
});
|
||||
|
||||
// Leave
|
||||
await member.post(`/groups/${group._id}/leave`);
|
||||
await member.sync();
|
||||
expect(member.purchased.plan.dateTerminated).to.exist;
|
||||
it('preserves the free subscription when leaving a any other group without a plan', async () => {
|
||||
// Joining a guild without a group plan
|
||||
let { group: groupWithNoPlan } = await createAndPopulateGroup({
|
||||
groupDetails: {
|
||||
name: 'Group Without Plan',
|
||||
type: 'guild',
|
||||
privacy: 'public',
|
||||
},
|
||||
});
|
||||
|
||||
await member.post(`/groups/${groupWithNoPlan._id}/join`);
|
||||
await member.sync();
|
||||
expect(member.purchased.plan.planId).to.equal('group_plan_auto');
|
||||
expect(member.purchased.plan.dateTerminated).to.not.exist;
|
||||
|
||||
// Leaving the guild without a group plan
|
||||
await member.post(`/groups/${groupWithNoPlan._id}/leave`);
|
||||
await member.sync();
|
||||
expect(member.purchased.plan.dateTerminated).to.not.exist;
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -105,16 +105,22 @@ describe('PUT /heroes/:heroId', () => {
|
||||
|
||||
it('updates chatRevoked flag', async () => {
|
||||
let hero = await generateUser();
|
||||
|
||||
await user.put(`/hall/heroes/${hero._id}`, {
|
||||
flags: {chatRevoked: true},
|
||||
});
|
||||
|
||||
await hero.sync();
|
||||
|
||||
expect(hero.flags.chatRevoked).to.eql(true);
|
||||
});
|
||||
|
||||
it('updates chatShadowMuted flag', async () => {
|
||||
let hero = await generateUser();
|
||||
await user.put(`/hall/heroes/${hero._id}`, {
|
||||
flags: {chatShadowMuted: true},
|
||||
});
|
||||
await hero.sync();
|
||||
expect(hero.flags.chatShadowMuted).to.eql(true);
|
||||
});
|
||||
|
||||
it('updates contributor level', async () => {
|
||||
let hero = await generateUser({
|
||||
contributor: {level: 5},
|
||||
|
||||
@@ -93,15 +93,6 @@ describe('POST /tasks/:taskId/assign/:memberId', () => {
|
||||
expect(syncedTask).to.exist;
|
||||
});
|
||||
|
||||
it('sends a message to the group when a user claims a task', async () => {
|
||||
await member.post(`/tasks/${task._id}/assign/${member._id}`);
|
||||
|
||||
let updateGroup = await user.get(`/groups/${guild._id}`);
|
||||
|
||||
expect(updateGroup.chat[0].text).to.equal(t('userIsClamingTask', {username: member.profile.name, task: task.text}));
|
||||
expect(updateGroup.chat[0].uuid).to.equal('system');
|
||||
});
|
||||
|
||||
it('assigns a task to a user', async () => {
|
||||
await user.post(`/tasks/${task._id}/assign/${member._id}`);
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ describe('POST /user/open-mystery-item', () => {
|
||||
let mysteryItemKey = 'eyewear_special_summerRogue';
|
||||
let mysteryItemIndex = content.gear.flat[mysteryItemKey].index;
|
||||
let mysteryItemType = content.gear.flat[mysteryItemKey].type;
|
||||
let mysteryItemText = content.gear.flat[mysteryItemKey].text();
|
||||
|
||||
beforeEach(async () => {
|
||||
user = await generateUser({
|
||||
@@ -32,5 +33,6 @@ describe('POST /user/open-mystery-item', () => {
|
||||
expect(response.data.key).to.eql(mysteryItemKey);
|
||||
expect(response.data.index).to.eql(mysteryItemIndex);
|
||||
expect(response.data.type).to.eql(mysteryItemType);
|
||||
expect(response.data.text).to.eql(mysteryItemText);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -14,7 +14,7 @@ describe('POST /user/purchase-hourglass/:type/:key', () => {
|
||||
|
||||
// More tests in common code unit tests
|
||||
|
||||
it('buys a hourglass pet', async () => {
|
||||
it('buys an hourglass pet', async () => {
|
||||
let response = await user.post('/user/purchase-hourglass/pets/MantisShrimp-Base');
|
||||
await user.sync();
|
||||
|
||||
@@ -22,4 +22,22 @@ describe('POST /user/purchase-hourglass/:type/:key', () => {
|
||||
expect(user.purchased.plan.consecutive.trinkets).to.eql(1);
|
||||
expect(user.items.pets['MantisShrimp-Base']).to.eql(5);
|
||||
});
|
||||
|
||||
it('buys an hourglass quest', async () => {
|
||||
let response = await user.post('/user/purchase-hourglass/quests/robot');
|
||||
await user.sync();
|
||||
|
||||
expect(response.message).to.eql(t('hourglassPurchase'));
|
||||
expect(user.purchased.plan.consecutive.trinkets).to.eql(1);
|
||||
expect(user.items.quests.robot).to.eql(1);
|
||||
});
|
||||
|
||||
it('buys multiple hourglass quests', async () => {
|
||||
let response = await user.post('/user/purchase-hourglass/quests/robot', {quantity: 2});
|
||||
await user.sync();
|
||||
|
||||
expect(response.message).to.eql(t('hourglassPurchase'));
|
||||
expect(user.purchased.plan.consecutive.trinkets).to.eql(0);
|
||||
expect(user.items.quests.robot).to.eql(2);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
],
|
||||
"plugins": [
|
||||
"transform-object-rest-spread",
|
||||
"syntax-async-functions",
|
||||
"transform-regenerator",
|
||||
],
|
||||
"comments": false,
|
||||
}
|
||||
@@ -131,10 +131,12 @@ describe('getTaskClasses getter', () => {
|
||||
up: {
|
||||
bg: 'task-good-control-bg',
|
||||
inner: 'task-good-control-inner-habit',
|
||||
icon: 'task-good-control-icon',
|
||||
},
|
||||
down: {
|
||||
bg: 'task-disabled-habit-control-bg',
|
||||
inner: 'task-disabled-habit-control-inner',
|
||||
icon: 'task-good-control-icon',
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
@@ -36,7 +36,9 @@ describe('shared.ops.openMysteryItem', () => {
|
||||
|
||||
expect(user.items.gear.owned[mysteryItemKey]).to.be.true;
|
||||
expect(message).to.equal(i18n.t('mysteryItemOpened'));
|
||||
expect(data).to.eql(content.gear.flat[mysteryItemKey]);
|
||||
let item = _.cloneDeep(content.gear.flat[mysteryItemKey]);
|
||||
item.text = content.gear.flat[mysteryItemKey].text();
|
||||
expect(data).to.eql(item);
|
||||
expect(user.notifications.length).to.equal(0);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -153,7 +153,7 @@ describe('shared.ops.scoreTask', () => {
|
||||
it('does not give a streak achievement for a streak of zero', () => {
|
||||
let task = generateDaily({ userId: ref.afterUser._id, text: 'some daily', streak: -1 });
|
||||
scoreTask({ user: ref.afterUser, task, direction: 'up' });
|
||||
expect(ref.afterUser.achievements.streak).to.be.undefined;
|
||||
expect(ref.afterUser.achievements.streak).to.equal(0);
|
||||
});
|
||||
|
||||
it('does not remove a streak achievement when unticking a Daily gives a streak of zero', () => {
|
||||
|
||||
@@ -60,7 +60,7 @@ const baseConfig = {
|
||||
}),
|
||||
postcss: [
|
||||
autoprefixer({
|
||||
browsers: ['last 2 versions'],
|
||||
overrideBrowserslist: ['last 2 versions'],
|
||||
}),
|
||||
postcssEasyImport(),
|
||||
],
|
||||
@@ -103,6 +103,7 @@ const baseConfig = {
|
||||
options: {
|
||||
plugins: [
|
||||
{removeViewBox: false},
|
||||
{convertPathData: {noSpaceAfterFlags: false}},
|
||||
],
|
||||
},
|
||||
},
|
||||
@@ -124,6 +125,7 @@ const baseConfig = {
|
||||
options: {
|
||||
plugins: [
|
||||
{removeViewBox: false},
|
||||
{convertPathData: {noSpaceAfterFlags: false}},
|
||||
],
|
||||
},
|
||||
},
|
||||
|
||||
@@ -1,78 +1,42 @@
|
||||
.promo_armoire_backgrounds_201907 {
|
||||
.promo_armoire_backgrounds_201908 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -776px 0px;
|
||||
background-position: 0px -223px;
|
||||
width: 423px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_glass_watery_potions {
|
||||
.promo_farm_friends_bundle {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -776px -148px;
|
||||
width: 423px;
|
||||
background-position: 0px -371px;
|
||||
width: 420px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_mystery_201907 {
|
||||
.promo_mystery_201908 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -776px -444px;
|
||||
background-position: -659px 0px;
|
||||
width: 282px;
|
||||
height: 144px;
|
||||
}
|
||||
.promo_orcas {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -376px -286px;
|
||||
width: 219px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_seafoam {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -313px -473px;
|
||||
width: 425px;
|
||||
height: 148px;
|
||||
}
|
||||
.promo_seasonal_shop {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -596px -286px;
|
||||
width: 162px;
|
||||
height: 132px;
|
||||
}
|
||||
.promo_splashy_pals_bundle {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -776px -296px;
|
||||
width: 423px;
|
||||
height: 147px;
|
||||
}
|
||||
.promo_splashy_skins {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px -286px;
|
||||
width: 375px;
|
||||
height: 186px;
|
||||
}
|
||||
.customize-option.promo_splashy_skins {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -25px -301px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.promo_summer_splash_2019 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -367px 0px;
|
||||
width: 408px;
|
||||
height: 186px;
|
||||
}
|
||||
.promo_take_this {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -1059px -444px;
|
||||
background-position: -840px -148px;
|
||||
width: 96px;
|
||||
height: 69px;
|
||||
}
|
||||
.promo_unconventional_armor {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: -659px -148px;
|
||||
width: 180px;
|
||||
height: 180px;
|
||||
}
|
||||
.scene_casting_spells {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px -473px;
|
||||
background-position: 0px 0px;
|
||||
width: 312px;
|
||||
height: 222px;
|
||||
}
|
||||
.scene_tools {
|
||||
.scene_families {
|
||||
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
|
||||
background-position: 0px 0px;
|
||||
width: 366px;
|
||||
height: 285px;
|
||||
background-position: -313px 0px;
|
||||
width: 345px;
|
||||
height: 195px;
|
||||
}
|
||||
|
||||
@@ -364,769 +364,769 @@
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_among_giant_anemones {
|
||||
.background_amid_ancient_ruins {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_apple_picking {
|
||||
.background_among_giant_anemones {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_aquarium {
|
||||
.background_apple_picking {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_archaeological_dig {
|
||||
.background_aquarium {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_archery_range {
|
||||
.background_archaeological_dig {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_at_the_docks {
|
||||
.background_archery_range {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_aurora {
|
||||
.background_at_the_docks {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_autumn_forest {
|
||||
.background_aurora {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_avalanche {
|
||||
.background_autumn_forest {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_back_alley {
|
||||
.background_avalanche {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_back_of_giant_beast {
|
||||
.background_back_alley {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_bamboo_forest {
|
||||
.background_back_of_giant_beast {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_bayou {
|
||||
.background_bamboo_forest {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_beach {
|
||||
.background_bayou {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_beehive {
|
||||
.background_beach {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_bell_tower {
|
||||
.background_beehive {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_beside_well {
|
||||
.background_bell_tower {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_birch_forest {
|
||||
.background_beside_well {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_blacksmithy {
|
||||
.background_birch_forest {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_blizzard {
|
||||
.background_blacksmithy {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_blossoming_desert {
|
||||
.background_blizzard {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_blue {
|
||||
.background_blossoming_desert {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_bridge {
|
||||
.background_blue {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_bug_covered_log {
|
||||
.background_bridge {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_buried_treasure {
|
||||
.background_bug_covered_log {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_champions_colosseum {
|
||||
.background_buried_treasure {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_cherry_trees {
|
||||
.background_champions_colosseum {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_chessboard_land {
|
||||
.background_cherry_trees {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_clouds {
|
||||
.background_chessboard_land {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_coral_reef {
|
||||
.background_clouds {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_cornfields {
|
||||
.background_coral_reef {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_cozy_barn {
|
||||
.background_cornfields {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_cozy_bedroom {
|
||||
.background_cozy_barn {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_cozy_library {
|
||||
.background_cozy_bedroom {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_creepy_castle {
|
||||
.background_cozy_library {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_crosscountry_ski_trail {
|
||||
.background_creepy_castle {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_crystal_cave {
|
||||
.background_crosscountry_ski_trail {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_dark_deep {
|
||||
.background_crystal_cave {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_deep_mine {
|
||||
.background_dark_deep {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_deep_sea {
|
||||
.background_deep_mine {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_desert_dunes {
|
||||
.background_deep_sea {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_dilatory_castle {
|
||||
.background_desert_dunes {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_dilatory_city {
|
||||
.background_dilatory_castle {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_dilatory_ruins {
|
||||
.background_dilatory_city {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_distant_castle {
|
||||
.background_dilatory_ruins {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_dojo {
|
||||
.background_distant_castle {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_drifting_raft {
|
||||
.background_dojo {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_driving_a_coach {
|
||||
.background_drifting_raft {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1278px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_driving_a_sleigh {
|
||||
.background_driving_a_coach {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_duck_pond {
|
||||
.background_driving_a_sleigh {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_dungeon {
|
||||
.background_duck_pond {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_dusty_canyons {
|
||||
.background_dungeon {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_elegant_balcony {
|
||||
.background_dusty_canyons {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_fairy_ring {
|
||||
.background_elegant_balcony {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_fantastical_shoe_store {
|
||||
.background_fairy_ring {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_farmhouse {
|
||||
.background_fantastical_shoe_store {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_fiber_arts_room {
|
||||
.background_farmhouse {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -1036px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_field_with_colored_eggs {
|
||||
.background_fiber_arts_room {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -1184px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_floating_islands {
|
||||
.background_field_with_colored_eggs {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1562px -1332px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_floral_meadow {
|
||||
.background_floating_islands {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -1480px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_flower_market {
|
||||
.background_floral_meadow {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -1480px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.customize-option.background_flower_market {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -167px -1495px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.background_flying_over_a_field_of_wildflowers {
|
||||
.background_flower_market {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -1480px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.customize-option.background_flying_over_a_field_of_wildflowers {
|
||||
.customize-option.background_flower_market {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -309px -1495px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.background_flying_over_an_ancient_forest {
|
||||
.background_flying_over_a_field_of_wildflowers {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -1480px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_flying_over_icy_steppes {
|
||||
.customize-option.background_flying_over_a_field_of_wildflowers {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -451px -1495px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.background_flying_over_an_ancient_forest {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -1480px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_flying_over_rocky_canyon {
|
||||
.background_flying_over_icy_steppes {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -1480px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_flying_over_snowy_mountains {
|
||||
.background_flying_over_rocky_canyon {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -1480px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_flying_over_tropical_islands {
|
||||
.background_flying_over_snowy_mountains {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1420px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_forest {
|
||||
.background_flying_over_tropical_islands {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_frigid_peak {
|
||||
.background_forest {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_frosty_forest {
|
||||
.background_frigid_peak {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_frozen_lake {
|
||||
.background_frosty_forest {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -1136px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_garden_shed {
|
||||
.background_frozen_lake {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_gazebo {
|
||||
.background_garden_shed {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_giant_birdhouse {
|
||||
.background_gazebo {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_giant_book {
|
||||
.background_giant_birdhouse {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_giant_florals {
|
||||
.background_giant_book {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_giant_seashell {
|
||||
.background_giant_dandelions {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_giant_wave {
|
||||
.background_giant_florals {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_glowing_mushroom_cave {
|
||||
.background_giant_seashell {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -888px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_gorgeous_greenhouse {
|
||||
.background_giant_wave {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_grand_staircase {
|
||||
.background_glowing_mushroom_cave {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_graveyard {
|
||||
.background_gorgeous_greenhouse {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_green {
|
||||
.background_grand_staircase {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_guardian_statues {
|
||||
.background_graveyard {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_gumdrop_land {
|
||||
.background_green {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -994px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_habit_city_streets {
|
||||
.background_guardian_statues {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_halflings_house {
|
||||
.background_gumdrop_land {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_harvest_feast {
|
||||
.background_habit_city_streets {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_harvest_fields {
|
||||
.background_halflings_house {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_harvest_moon {
|
||||
.background_harvest_feast {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_haunted_house {
|
||||
.background_harvest_fields {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_ice_cave {
|
||||
.background_harvest_moon {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -740px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_iceberg {
|
||||
.background_haunted_house {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_idyllic_cabin {
|
||||
.background_ice_cave {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_island_waterfalls {
|
||||
.background_iceberg {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_kelp_forest {
|
||||
.background_idyllic_cabin {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_lake_with_floating_lanterns {
|
||||
.background_island_waterfalls {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -852px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_lighthouse_shore {
|
||||
.background_kelp_forest {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_lilypad {
|
||||
.background_lake_with_floating_lanterns {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_magic_beanstalk {
|
||||
.background_lighthouse_shore {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_magical_candles {
|
||||
.background_lilypad {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_magical_museum {
|
||||
.background_magic_beanstalk {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_marble_temple {
|
||||
.background_magical_candles {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -592px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_market {
|
||||
.background_magical_museum {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_meandering_cave {
|
||||
.background_marble_temple {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_medieval_kitchen {
|
||||
.background_market {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_midnight_castle {
|
||||
.background_meandering_cave {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -710px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_midnight_clouds {
|
||||
.background_medieval_kitchen {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_midnight_lake {
|
||||
.background_midnight_castle {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_mist_shrouded_mountain {
|
||||
.background_midnight_clouds {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_mistiflying_circus {
|
||||
.background_midnight_lake {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_mountain_lake {
|
||||
.background_mist_shrouded_mountain {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -444px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_mountain_pyramid {
|
||||
.background_mistiflying_circus {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_night_dunes {
|
||||
.background_mountain_lake {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_ocean_sunrise {
|
||||
.background_mountain_pyramid {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -568px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_old_fashioned_bakery {
|
||||
.background_night_dunes {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_on_tree_branch {
|
||||
.background_ocean_sunrise {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_open_waters {
|
||||
.background_old_fashioned_bakery {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_orchard {
|
||||
.background_on_tree_branch {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -296px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_pagodas {
|
||||
.background_open_waters {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_park_with_statue {
|
||||
.background_orchard {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -426px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_pirate_flag {
|
||||
.background_pagodas {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_pixelists_workshop {
|
||||
.background_park_with_statue {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_pumpkin_patch {
|
||||
.background_pirate_flag {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: 0px -148px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_purple {
|
||||
.background_pixelists_workshop {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -284px 0px;
|
||||
width: 141px;
|
||||
height: 147px;
|
||||
}
|
||||
.background_pyramids {
|
||||
.background_pumpkin_patch {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-0.png');
|
||||
background-position: -142px 0px;
|
||||
width: 141px;
|
||||
|
||||
@@ -1,78 +1,108 @@
|
||||
.quest_TEMPLATE_FOR_MISSING_IMAGE {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -502px -1546px;
|
||||
background-position: -502px -1543px;
|
||||
width: 221px;
|
||||
height: 39px;
|
||||
}
|
||||
.quest_cow {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1762px 0px;
|
||||
width: 174px;
|
||||
height: 213px;
|
||||
}
|
||||
.quest_dilatory {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_dilatoryDistress1 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -1332px;
|
||||
width: 210px;
|
||||
height: 210px;
|
||||
}
|
||||
.quest_dilatoryDistress2 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1762px -875px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
.quest_dilatoryDistress3 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -232px;
|
||||
background-position: -220px -232px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_dilatory_derby {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1320px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_dolphin {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1323px -660px;
|
||||
background-position: -440px -232px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_dustbunnies {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -883px 0px;
|
||||
background-position: -660px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_egg {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1760px -537px;
|
||||
background-position: -1762px -214px;
|
||||
width: 165px;
|
||||
height: 207px;
|
||||
}
|
||||
.quest_evilsanta {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1760px -1198px;
|
||||
background-position: -1762px -1026px;
|
||||
width: 118px;
|
||||
height: 131px;
|
||||
}
|
||||
.quest_evilsanta2 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -440px -232px;
|
||||
background-position: -220px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_falcon {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -663px 0px;
|
||||
background-position: -440px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_ferret {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -663px -220px;
|
||||
background-position: -660px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_frog {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1320px -1112px;
|
||||
background-position: -1540px 0px;
|
||||
width: 221px;
|
||||
height: 213px;
|
||||
}
|
||||
.quest_ghost_stag {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px -452px;
|
||||
background-position: -880px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_goldenknight1 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -440px -452px;
|
||||
background-position: -880px -440px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_goldenknight2 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -251px -1546px;
|
||||
background-position: -251px -1543px;
|
||||
width: 250px;
|
||||
height: 150px;
|
||||
}
|
||||
@@ -84,319 +114,289 @@
|
||||
}
|
||||
.quest_gryphon {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1314px -1332px;
|
||||
background-position: -1305px -1332px;
|
||||
width: 216px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_guineapig {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -883px -440px;
|
||||
background-position: -440px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_harpy {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -672px;
|
||||
background-position: -660px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_hedgehog {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px -1332px;
|
||||
background-position: -211px -1332px;
|
||||
width: 219px;
|
||||
height: 186px;
|
||||
}
|
||||
.quest_hippo {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -440px -672px;
|
||||
background-position: -1100px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_horse {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -660px -672px;
|
||||
background-position: -1100px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_kangaroo {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -880px -672px;
|
||||
background-position: -1100px -440px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_kraken {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1097px -1332px;
|
||||
background-position: -871px -1332px;
|
||||
width: 216px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_lostMasterclasser1 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1103px -220px;
|
||||
background-position: -1100px -660px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_lostMasterclasser2 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1103px -440px;
|
||||
background-position: 0px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_lostMasterclasser3 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1103px -660px;
|
||||
background-position: -220px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_mayhemMistiflying1 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1760px -896px;
|
||||
background-position: -1762px -573px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
.quest_mayhemMistiflying2 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px -892px;
|
||||
background-position: -660px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_mayhemMistiflying3 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -440px -892px;
|
||||
background-position: -880px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_monkey {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -660px -892px;
|
||||
background-position: -1100px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moon1 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1543px -868px;
|
||||
background-position: -1540px -1082px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_moon2 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1100px -892px;
|
||||
background-position: -1320px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moon3 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1323px 0px;
|
||||
background-position: -1320px -440px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moonstone1 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1323px -220px;
|
||||
background-position: -1320px -660px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moonstone2 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1323px -440px;
|
||||
background-position: -1320px -880px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_moonstone3 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -443px 0px;
|
||||
background-position: 0px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_nudibranch {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1543px -651px;
|
||||
background-position: -1540px -648px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_octopus {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -440px -1332px;
|
||||
background-position: -431px -1332px;
|
||||
width: 222px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_owl {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px -1112px;
|
||||
background-position: -660px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_peacock {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1543px -217px;
|
||||
background-position: -1540px -214px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_penguin {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1760px -353px;
|
||||
background-position: 0px -1694px;
|
||||
width: 190px;
|
||||
height: 183px;
|
||||
}
|
||||
.quest_pterodactyl {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -880px -1112px;
|
||||
background-position: -1100px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_rat {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1100px -1112px;
|
||||
background-position: -880px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_rock {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1543px 0px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_rooster {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1760px 0px;
|
||||
width: 213px;
|
||||
height: 174px;
|
||||
}
|
||||
.quest_sabretooth {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -660px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_seaserpent {
|
||||
.quest_robot {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -440px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_rock {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1540px -431px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_rooster {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1522px -1332px;
|
||||
width: 213px;
|
||||
height: 174px;
|
||||
}
|
||||
.quest_sabretooth {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px -1112px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_seaserpent {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -880px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_sheep {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -1112px;
|
||||
background-position: -880px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_silver {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -660px -220px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_slime {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1323px -880px;
|
||||
background-position: -440px 0px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_sloth {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -880px -892px;
|
||||
background-position: -220px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_snail {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -1332px;
|
||||
background-position: -1320px -1112px;
|
||||
width: 219px;
|
||||
height: 213px;
|
||||
}
|
||||
.quest_snake {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1543px -1085px;
|
||||
background-position: -654px -1332px;
|
||||
width: 216px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_spider {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -1546px;
|
||||
background-position: 0px -1543px;
|
||||
width: 250px;
|
||||
height: 150px;
|
||||
}
|
||||
.quest_squirrel {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -892px;
|
||||
background-position: -440px -892px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_stoikalmCalamity1 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1760px -745px;
|
||||
background-position: -1762px -422px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
.quest_stoikalmCalamity2 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1103px 0px;
|
||||
background-position: 0px -672px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_stoikalmCalamity3 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px -672px;
|
||||
background-position: 0px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_taskwoodsTerror1 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1760px -1047px;
|
||||
background-position: -1762px -724px;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
.quest_taskwoodsTerror2 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1543px -434px;
|
||||
background-position: -1540px -865px;
|
||||
width: 216px;
|
||||
height: 216px;
|
||||
}
|
||||
.quest_taskwoodsTerror3 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -883px -220px;
|
||||
background-position: 0px -232px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_treeling {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -880px -1332px;
|
||||
width: 216px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_trex {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1760px -175px;
|
||||
width: 204px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_trex_undead {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -663px -1332px;
|
||||
width: 216px;
|
||||
height: 177px;
|
||||
}
|
||||
.quest_triceratops {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -660px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_turtle {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: 0px -452px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_unicorn {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px -232px;
|
||||
width: 219px;
|
||||
height: 219px;
|
||||
}
|
||||
.quest_velociraptor {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -220px 0px;
|
||||
width: 222px;
|
||||
height: 225px;
|
||||
}
|
||||
.quest_vice1 {
|
||||
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
|
||||
background-position: -1531px -1332px;
|
||||
background-position: -1088px -1332px;
|
||||
width: 216px;
|
||||
height: 177px;
|
||||
}
|
||||
|
||||
|
After Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 491 KiB After Width: | Height: | Size: 491 KiB |
|
Before Width: | Height: | Size: 610 KiB After Width: | Height: | Size: 626 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 182 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 414 KiB After Width: | Height: | Size: 428 KiB |
|
Before Width: | Height: | Size: 207 KiB After Width: | Height: | Size: 216 KiB |
|
Before Width: | Height: | Size: 155 KiB After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 133 KiB |
|
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 140 KiB After Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 153 KiB After Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 161 KiB |
|
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 175 KiB |
|
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 156 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 155 KiB After Width: | Height: | Size: 151 KiB |
|
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 119 KiB |
@@ -1,7 +1,7 @@
|
||||
.task {
|
||||
&-worst { // dark red
|
||||
&-control {
|
||||
&-bg {
|
||||
&-bg {
|
||||
background: $maroon-100 !important;
|
||||
&:hover {
|
||||
.habit-control { background: rgba(26, 24, 29, 0.48) !important; }
|
||||
@@ -11,6 +11,7 @@
|
||||
&-inner-habit { background: rgba(26, 24, 29, 0.24) !important; }
|
||||
&-inner-daily-todo { background: $maroon-500 !important; }
|
||||
&-checkbox { color: $maroon-100 !important; }
|
||||
&-icon { color: #6c0406 !important; }
|
||||
}
|
||||
|
||||
&-modal {
|
||||
@@ -30,7 +31,7 @@
|
||||
|
||||
&-worse { // light red
|
||||
&-control {
|
||||
&-bg {
|
||||
&-bg {
|
||||
background: $red-100 !important;
|
||||
&:hover {
|
||||
.habit-control { background: rgba(26, 24, 29, 0.48) !important; }
|
||||
@@ -40,6 +41,7 @@
|
||||
&-inner-habit { background: rgba(26, 24, 29, 0.24) !important; }
|
||||
&-inner-daily-todo { background: $red-500 !important; }
|
||||
&-checkbox { color: $red-100 !important; }
|
||||
&-icon { color: #6c0406 !important; }
|
||||
}
|
||||
|
||||
&-modal {
|
||||
@@ -59,7 +61,7 @@
|
||||
|
||||
&-bad { // orange
|
||||
&-control {
|
||||
&-bg {
|
||||
&-bg {
|
||||
background: $orange-100 !important;
|
||||
|
||||
&:hover {
|
||||
@@ -70,10 +72,11 @@
|
||||
&-inner-habit { background: rgba(183, 90, 28, 0.4) !important; }
|
||||
&-inner-daily-todo { background: $orange-500 !important; }
|
||||
&-checkbox { color: $orange-100 !important; }
|
||||
&-icon { color: #7f3300 !important; }
|
||||
}
|
||||
|
||||
&-modal {
|
||||
&-bg {
|
||||
&-bg {
|
||||
background: $orange-100 !important;
|
||||
|
||||
.form-control {
|
||||
@@ -99,7 +102,7 @@
|
||||
|
||||
&-neutral { // yellow
|
||||
&-control {
|
||||
&-bg {
|
||||
&-bg {
|
||||
background: $yellow-100 !important;
|
||||
&:hover {
|
||||
.habit-control { background: #bf7d1a !important; }
|
||||
@@ -109,10 +112,11 @@
|
||||
&-inner-habit { background: rgba(183, 90, 28, 0.32) !important; }
|
||||
&-inner-daily-todo { background: $yellow-500 !important; }
|
||||
&-checkbox { color: $yellow-100 !important; }
|
||||
&-icon { color: #794b00 !important; }
|
||||
}
|
||||
|
||||
&-modal {
|
||||
&-bg {
|
||||
&-bg {
|
||||
background: $yellow-100 !important;
|
||||
|
||||
.form-control {
|
||||
@@ -138,7 +142,7 @@
|
||||
|
||||
&-good { // green
|
||||
&-control {
|
||||
&-bg {
|
||||
&-bg {
|
||||
background: $green-100 !important;
|
||||
&:hover {
|
||||
.habit-control { background: rgba(26, 24, 29, 0.48) !important; }
|
||||
@@ -148,6 +152,7 @@
|
||||
&-inner-habit { background: rgba(26, 24, 29, 0.24) !important; }
|
||||
&-inner-daily-todo { background: #77f4c7 !important; }
|
||||
&-checkbox { color: $green-10 !important; }
|
||||
&-icon { color: #005737 !important; }
|
||||
}
|
||||
|
||||
&-modal {
|
||||
@@ -167,7 +172,7 @@
|
||||
|
||||
&-better { // teal
|
||||
&-control {
|
||||
&-bg {
|
||||
&-bg {
|
||||
background: $teal-100 !important;
|
||||
&:hover {
|
||||
.habit-control { background: rgba(26, 24, 29, 0.48) !important; }
|
||||
@@ -177,6 +182,7 @@
|
||||
&-inner-habit { background: rgba(26, 24, 29, 0.24) !important; }
|
||||
&-inner-daily-todo { background: #8dedf6 !important; }
|
||||
&-checkbox { color: $teal-100 !important; }
|
||||
&-icon { color: #005158 !important; }
|
||||
}
|
||||
|
||||
&-modal {
|
||||
@@ -196,7 +202,7 @@
|
||||
|
||||
&-best { // blue
|
||||
&-control {
|
||||
&-bg {
|
||||
&-bg {
|
||||
background: $blue-100 !important;
|
||||
&:hover {
|
||||
.habit-control { background: rgba(26, 24, 29, 0.48) !important; }
|
||||
@@ -206,6 +212,7 @@
|
||||
&-inner-habit { background: rgba(26, 24, 29, 0.24) !important; }
|
||||
&-inner-daily-todo { background: $blue-500 !important; }
|
||||
&-checkbox { color: $blue-100 !important; }
|
||||
&-icon { color: #033f5e !important; }
|
||||
}
|
||||
|
||||
&-modal {
|
||||
@@ -241,7 +248,7 @@
|
||||
|
||||
&-reward {
|
||||
&-control {
|
||||
&-bg {
|
||||
&-bg {
|
||||
background: rgba(255, 217, 160, 0.32) !important;
|
||||
.small-text { color: $orange-10 !important; }
|
||||
|
||||
@@ -251,7 +258,7 @@
|
||||
}
|
||||
|
||||
&-disabled {
|
||||
&-habit {
|
||||
&-habit {
|
||||
&-control {
|
||||
&-bg { background: $gray-600; }
|
||||
&-inner {
|
||||
@@ -261,13 +268,13 @@
|
||||
}
|
||||
}
|
||||
|
||||
&-daily-todo {
|
||||
&-daily-todo {
|
||||
&-control {
|
||||
&-bg {
|
||||
&-bg {
|
||||
background: $gray-400 !important;
|
||||
&:hover {
|
||||
.daily-todo-control { background: rgba(255, 255, 255, 0.72) !important; }
|
||||
}
|
||||
}
|
||||
}
|
||||
&-inner { background: $gray-500 !important; }
|
||||
&-checkbox { color: $gray-400 !important; }
|
||||
@@ -298,6 +305,12 @@
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.lock {
|
||||
margin-top: 7px;
|
||||
height: 12px;
|
||||
width: 10px;
|
||||
}
|
||||
|
||||
.positive {
|
||||
margin-top: 9px;
|
||||
}
|
||||
@@ -321,4 +334,10 @@
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.svg-icon.lock {
|
||||
margin: 8px auto;
|
||||
height: 12px;
|
||||
width: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
// possible values are: normal, fall, habitoween, thanksgiving, winter, nye, birthday, valentines, spring, summer
|
||||
// more to be added on future seasons
|
||||
|
||||
$npc_market_flavor: 'summer';
|
||||
$npc_quests_flavor: 'summer';
|
||||
$npc_seasonal_flavor: 'summer';
|
||||
$npc_timetravelers_flavor: 'summer';
|
||||
$npc_tavern_flavor: 'summer';
|
||||
$npc_market_flavor: 'normal';
|
||||
$npc_quests_flavor: 'normal';
|
||||
$npc_seasonal_flavor: 'normal';
|
||||
$npc_timetravelers_flavor: 'normal';
|
||||
$npc_tavern_flavor: 'normal';
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="12" viewBox="0 0 10 12">
|
||||
<path fill="#C3C0C7" fill-rule="evenodd" d="M4 9h2V7H4v2zm4 1H2V6h6v4zM5 2c1.103 0 2 .897 2 2H3c0-1.103.897-2 2-2zm4 2.277V4a4 4 0 0 0-8 0v.277C.405 4.624 0 5.262 0 6v4a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V6c0-.738-.405-1.376-1-1.723z"/>
|
||||
<path fill-rule="evenodd" d="M4 9h2V7H4v2zm4 1H2V6h6v4zM5 2c1.103 0 2 .897 2 2H3c0-1.103.897-2 2-2zm4 2.277V4a4 4 0 0 0-8 0v.277C.405 4.624 0 5.262 0 6v4a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V6c0-.738-.405-1.376-1-1.723z"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 311 B |
@@ -4,8 +4,8 @@
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#FFF" d="M24.052 26.3c-.832-.09-.841-.462-.832-5.421 0 0-.083-.312.395-.582.477-.27 1.93-2.679 1.037-4.734-.892-2.056-.248-1.952.125-1.744.374.208.554-.055.332-1.183-.457-2.325-1.17-3.113-2.851-4.162-1.104-.69-.704-1.94.866-1.848.766.045.766.046.862-.555.152-.947-.15-2.565-1.327-2.788-.81-.154-1.817.713-3.015.109-1.198-.604-3.178.904-3.988 1.254s-1.479.354-2.403.331c-.925-.022.49 1.531 1.906 1.881 1.216.3.743.516.674 1.51-.078 1.113.24 1.59-.279 1.707-.796.178-1.686-1.961-3.052-2.857C9.4 5.183 7.56 6.152 2.15.201 1.211-.83 1.592 2.36 2.17 4.063c1.543 4.55 4.532 5.153 5.942 5.29 1.18.116 1.984-.158 1.984.297 0 .33-1.391.48-1.93.482a9.469 9.469 0 0 1-1.762-.173c-1.073-.2.569 2.535 1.624 3.402 1.78 1.465 3.818 2.014 5.456 2.18.473.048 1.146.04 1.146.41 0 .352-.354.438-.773.441-2.294.017-3.612 1.849-3.986 3.967-.237 1.346-.06 2.868-.035 4.005l.09.812c.18 1.426-4.948 1.975-5.627-.322-.743-2.51 3.309-3.837 3.383-6.232.047-1.509-1.333-2.194-1.333-2.194V14.224H4.76v-1.587H3.174V11.05H1.587v4.761h1.587V17.4h2.613c.594 0 1.07.392 1.015 1.24-.137 2.093-4.589 3.379-3.365 6.716.884 2.41 4.696 2.441 8.513 2.441l7.118-.006c.222 0 .534-.107.08-1.255-.367-.927-1.632-.276-2.706-.276-1.137 0-1.176-.96-.446-1.973.446-.618 1.014-1.078 1.979-1.527 1.486-.693 2.617.198 3.174.963.8 1.099 1.054 2.355.348 2.552-.851.238-1.113.27-1.141 1.08-.022.581.256.422 1.595.422h4.445c.688 0 .637-.53-.055-1.45-.491-.653-1.028.11-2.289-.027z"/>
|
||||
<path fill="#FFF" d="M0 10.827h1.587V9.24H0zM113.986 19.894a1.385 1.385 0 0 0-1.942.25c-.54.7-1.354 1.101-2.236 1.101a2.82 2.82 0 0 1-2.815-2.645 416.05 416.05 0 0 1-.005-1.947 2.824 2.824 0 0 1 2.82-2.821c.781 0 1.508.312 2.046.879a1.385 1.385 0 0 0 2.008-1.907 5.614 5.614 0 0 0-4.054-1.741 5.596 5.596 0 0 0-5.59 5.59c0 .019.001 1.937.009 2.078a5.589 5.589 0 0 0 5.581 5.283c1.747 0 3.361-.793 4.429-2.178a1.385 1.385 0 0 0-.251-1.942M122.223 21.245a2.819 2.819 0 0 1-2.815-2.644 419.52 419.52 0 0 1-.006-1.949 2.824 2.824 0 0 1 2.82-2.82 2.824 2.824 0 0 1 2.821 2.82c0 .2-.002 1.734-.005 1.946a2.818 2.818 0 0 1-2.815 2.647m4.205-10.422c-.645 0-1.183.444-1.336 1.04a5.55 5.55 0 0 0-2.87-.8 5.596 5.596 0 0 0-5.589 5.59c0 .019.001 1.936.008 2.078a5.589 5.589 0 0 0 8.517 4.447 1.384 1.384 0 0 0 2.655-.548V12.208c0-.765-.62-1.385-1.385-1.385M58.861 21.245a2.819 2.819 0 0 1-2.815-2.646c-.003-.213-.005-1.747-.005-1.947a2.824 2.824 0 0 1 2.82-2.82 2.824 2.824 0 0 1 2.82 2.82c0 .2-.001 1.734-.005 1.946a2.818 2.818 0 0 1-2.815 2.647m4.206-10.422c-.646 0-1.183.444-1.337 1.04a5.55 5.55 0 0 0-2.869-.8 5.596 5.596 0 0 0-5.59 5.59c0 .019.001 1.937.009 2.078a5.589 5.589 0 0 0 8.516 4.447 1.384 1.384 0 0 0 2.655-.548V12.208c0-.765-.62-1.385-1.384-1.385M83.451 10.823c-.764 0-1.384.62-1.384 1.385V22.63a1.385 1.385 0 0 0 2.769 0V12.208c0-.765-.62-1.385-1.385-1.385M99.759 10.823c-.765 0-1.385.62-1.385 1.385V22.63a1.385 1.385 0 0 0 2.77 0V12.208c0-.765-.62-1.385-1.385-1.385M76.266 18.6a2.82 2.82 0 0 1-2.815 2.645 2.82 2.82 0 0 1-2.815-2.647c-.004-.214-.005-1.746-.005-1.946a2.824 2.824 0 0 1 2.82-2.82 2.824 2.824 0 0 1 2.82 2.82c0 .193-.002 1.733-.005 1.949m-2.815-7.538c-1.03 0-1.991.284-2.82.772v-5.17a1.385 1.385 0 0 0-2.77 0V22.63a1.385 1.385 0 0 0 2.655.548c.856.529 1.86.836 2.935.836a5.59 5.59 0 0 0 5.582-5.288c.007-.137.008-2.054.008-2.074a5.596 5.596 0 0 0-5.59-5.59M45.664 11.063a5.58 5.58 0 0 0-2.674.677V6.665a1.385 1.385 0 0 0-2.77 0V22.63a1.385 1.385 0 1 0 2.77 0v-7.157c.106-.09.203-.191.281-.315a2.808 2.808 0 0 1 2.393-1.326 2.824 2.824 0 0 1 2.82 2.82c0 .254-.002 5.635-.006 5.944a1.385 1.385 0 0 0 2.767.104c.007-.137.008-5.989.008-6.048a5.596 5.596 0 0 0-5.59-5.59M94.503 10.823h-1.616V6.665a1.385 1.385 0 0 0-2.77 0v4.158h-1.614a1.385 1.385 0 0 0 0 2.77h1.615v9.037a1.385 1.385 0 0 0 2.77 0v-9.038h1.615a1.385 1.385 0 0 0 0-2.769" mask="url(#b)"/>
|
||||
<path fill="#FF6066" d="M84.785 6.665a1.385 1.385 0 1 1-2.77 0 1.385 1.385 0 0 1 2.77 0" mask="url(#b)"/>
|
||||
<path fill="#4FB5E8" d="M101.092 6.665a1.385 1.385 0 1 1-2.77 0 1.385 1.385 0 0 1 2.77 0" mask="url(#b)"/>
|
||||
<path fill="#FFF" d="M0 10.827h1.587V9.24H0zM113.986 19.894a1.385 1.385 0 0 0-1.942.25c-.54.7-1.354 1.101-2.236 1.101a2.82 2.82 0 0 1-2.815-2.645 416.05 416.05 0 0 1-.005-1.947 2.824 2.824 0 0 1 2.82-2.821c.781 0 1.508.312 2.046.879a1.385 1.385 0 0 0 2.008-1.907 5.614 5.614 0 0 0-4.054-1.741 5.596 5.596 0 0 0-5.59 5.59c0 .019.001 1.937.009 2.078a5.589 5.589 0 0 0 5.581 5.283c1.747 0 3.361-.793 4.429-2.178a1.385 1.385 0 0 0-.251-1.942M122.223 21.245a2.819 2.819 0 0 1-2.815-2.644 419.52 419.52 0 0 1-.006-1.949 2.824 2.824 0 0 1 2.82-2.82 2.824 2.824 0 0 1 2.821 2.82c0 .2-.002 1.734-.005 1.946a2.818 2.818 0 0 1-2.815 2.647m4.205-10.422c-.645 0-1.183.444-1.336 1.04a5.55 5.55 0 0 0-2.87-.8 5.596 5.596 0 0 0-5.589 5.59c0 .019.001 1.936.008 2.078a5.589 5.589 0 0 0 8.517 4.447 1.384 1.384 0 0 0 2.655-.548V12.208c0-.765-.62-1.385-1.385-1.385M58.861 21.245a2.819 2.819 0 0 1-2.815-2.646c-.003-.213-.005-1.747-.005-1.947a2.824 2.824 0 0 1 2.82-2.82 2.824 2.824 0 0 1 2.82 2.82c0 .2-.001 1.734-.005 1.946a2.818 2.818 0 0 1-2.815 2.647m4.206-10.422c-.646 0-1.183.444-1.337 1.04a5.55 5.55 0 0 0-2.869-.8 5.596 5.596 0 0 0-5.59 5.59c0 .019.001 1.937.009 2.078a5.589 5.589 0 0 0 8.516 4.447 1.384 1.384 0 0 0 2.655-.548V12.208c0-.765-.62-1.385-1.384-1.385M83.451 10.823c-.764 0-1.384.62-1.384 1.385V22.63a1.385 1.385 0 0 0 2.769 0V12.208c0-.765-.62-1.385-1.385-1.385M99.759 10.823c-.765 0-1.385.62-1.385 1.385V22.63a1.385 1.385 0 0 0 2.77 0V12.208c0-.765-.62-1.385-1.385-1.385M76.266 18.6a2.82 2.82 0 0 1-2.815 2.645 2.82 2.82 0 0 1-2.815-2.647c-.004-.214-.005-1.746-.005-1.946a2.824 2.824 0 0 1 2.82-2.82 2.824 2.824 0 0 1 2.82 2.82c0 .193-.002 1.733-.005 1.949m-2.815-7.538c-1.03 0-1.991.284-2.82.772v-5.17a1.385 1.385 0 0 0-2.77 0V22.63a1.385 1.385 0 0 0 2.655.548c.856.529 1.86.836 2.935.836a5.59 5.59 0 0 0 5.582-5.288c.007-.137.008-2.054.008-2.074a5.596 5.596 0 0 0-5.59-5.59M45.664 11.063a5.58 5.58 0 0 0-2.674.677V6.665a1.385 1.385 0 0 0-2.77 0V22.63a1.385 1.385 0 1 0 2.77 0v-7.157c.106-.09.203-.191.281-.315a2.808 2.808 0 0 1 2.393-1.326 2.824 2.824 0 0 1 2.82 2.82c0 .254-.002 5.635-.006 5.944a1.385 1.385 0 0 0 2.767.104c.007-.137.008-5.989.008-6.048a5.596 5.596 0 0 0-5.59-5.59M94.503 10.823h-1.616V6.665a1.385 1.385 0 0 0-2.77 0v4.158h-1.614a1.385 1.385 0 0 0 0 2.77h1.615v9.037a1.385 1.385 0 0 0 2.77 0v-9.038h1.615a1.385 1.385 0 0 0 0-2.769" />
|
||||
<path fill="#FF6066" d="M84.785 6.665a1.385 1.385 0 1 1-2.77 0 1.385 1.385 0 0 1 2.77 0" />
|
||||
<path fill="#4FB5E8" d="M101.092 6.665a1.385 1.385 0 1 1-2.77 0 1.385 1.385 0 0 1 2.77 0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
@@ -16,7 +16,7 @@ export default {
|
||||
...mapState(['isUserLoggedIn']),
|
||||
contactUsLink () {
|
||||
if (this.isUserLoggedIn) {
|
||||
return {name: 'guild', params: {groupId: '5481ccf3-5d2d-48a9-a871-70a7380cee5a'} };
|
||||
return {name: 'guild', params: {groupId: 'a29da26b-37de-4a71-b0c6-48e72a900dac'} };
|
||||
} else {
|
||||
return {name: 'contact'};
|
||||
}
|
||||
|
||||
@@ -164,31 +164,30 @@ export default {
|
||||
classGear (heroClass) {
|
||||
if (heroClass === 'rogue') {
|
||||
return {
|
||||
armor: 'armor_special_summer2019Rogue',
|
||||
head: 'head_special_summer2019Rogue',
|
||||
shield: 'shield_special_summer2019Rogue',
|
||||
weapon: 'weapon_special_summer2019Rogue',
|
||||
armor: 'armor_rogue_5',
|
||||
head: 'head_rogue_5',
|
||||
shield: 'shield_rogue_6',
|
||||
weapon: 'weapon_rogue_6',
|
||||
};
|
||||
} else if (heroClass === 'wizard') {
|
||||
return {
|
||||
armor: 'armor_special_summer2019Mage',
|
||||
head: 'head_special_summer2019Mage',
|
||||
shield: 'shield_special_summer2019Mage',
|
||||
weapon: 'weapon_special_summer2019Mage',
|
||||
armor: 'armor_wizard_5',
|
||||
head: 'head_wizard_5',
|
||||
weapon: 'weapon_wizard_6',
|
||||
};
|
||||
} else if (heroClass === 'healer') {
|
||||
return {
|
||||
armor: 'armor_special_summer2019Healer',
|
||||
head: 'head_special_summer2019Healer',
|
||||
shield: 'shield_special_summer2019Healer',
|
||||
weapon: 'weapon_special_summer2019Healer',
|
||||
armor: 'armor_healer_5',
|
||||
head: 'head_healer_5',
|
||||
shield: 'shield_healer_5',
|
||||
weapon: 'weapon_healer_6',
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
armor: 'armor_special_summer2019Warrior',
|
||||
head: 'head_special_summer2019Warrior',
|
||||
shield: 'shield_special_summer2019Warrior',
|
||||
weapon: 'weapon_special_summer2019Warrior',
|
||||
armor: 'armor_warrior_5',
|
||||
head: 'head_warrior_5',
|
||||
shield: 'shield_warrior_5',
|
||||
weapon: 'weapon_warrior_6',
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
@@ -15,13 +15,12 @@
|
||||
</template>
|
||||
|
||||
<style lang='scss'>
|
||||
@import '~client/assets/scss/static.scss';
|
||||
</style>
|
||||
|
||||
<style lang='scss' scoped>
|
||||
.modal-body {
|
||||
padding-top: 2em;
|
||||
}
|
||||
@import '~client/assets/scss/static.scss';
|
||||
#new-stuff {
|
||||
.modal-body .modal-body {
|
||||
padding-top: 0rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
|
||||
@@ -39,9 +39,9 @@
|
||||
.custom-control.custom-checkbox
|
||||
input.custom-control-input(type="checkbox",
|
||||
:value="group.key",
|
||||
:id="group.key",
|
||||
:id="`challenge-modal-cat-${group.key}`",
|
||||
v-model="workingChallenge.categories")
|
||||
label.custom-control-label(v-once, :for="group.key") {{ $t(group.label) }}
|
||||
label.custom-control-label(v-once, :for="`challenge-modal-cat-${group.key}`") {{ $t(group.label) }}
|
||||
button.btn.btn-primary(@click.prevent="toggleCategorySelect") {{$t('close')}}
|
||||
// @TODO: Implement in V2 .form-group
|
||||
label
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
<template lang="pug">
|
||||
div
|
||||
.mentioned-icon(v-if='isUserMentioned')
|
||||
.message-hidden(v-if='!inbox && msg.flagCount === 1 && user.contributor.admin') Message flagged once, not hidden
|
||||
.message-hidden(v-if='!inbox && msg.flagCount > 1 && user.contributor.admin') Message hidden
|
||||
.message-hidden(v-if='!inbox && user.contributor.admin && msg.flagCount') {{flagCountDescription}}
|
||||
.card-body
|
||||
user-link(:userId="msg.uuid", :name="msg.user", :backer="msg.backer", :contributor="msg.contributor")
|
||||
p.time
|
||||
@@ -137,7 +136,8 @@ import copyIcon from 'assets/svg/copy.svg';
|
||||
import likeIcon from 'assets/svg/like.svg';
|
||||
import likedIcon from 'assets/svg/liked.svg';
|
||||
import reportIcon from 'assets/svg/report.svg';
|
||||
import {highlightUsers} from '../../libs/highlightUsers';
|
||||
import { highlightUsers } from '../../libs/highlightUsers';
|
||||
import { CHAT_FLAG_LIMIT_FOR_HIDING, CHAT_FLAG_FROM_SHADOW_MUTE } from '../../../common/script/constants';
|
||||
|
||||
export default {
|
||||
components: {userLink},
|
||||
@@ -210,6 +210,12 @@ export default {
|
||||
isMessageReported () {
|
||||
return this.msg.flags && this.msg.flags[this.user.id] || this.reported;
|
||||
},
|
||||
flagCountDescription () {
|
||||
if (!this.msg.flagCount) return '';
|
||||
if (this.msg.flagCount < CHAT_FLAG_LIMIT_FOR_HIDING) return 'Message flagged once, not hidden';
|
||||
if (this.msg.flagCount < CHAT_FLAG_FROM_SHADOW_MUTE) return 'Message hidden';
|
||||
return 'Message hidden (shadow-muted)';
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
async like () {
|
||||
@@ -274,6 +280,8 @@ export default {
|
||||
},
|
||||
},
|
||||
mounted () {
|
||||
this.CHAT_FLAG_LIMIT_FOR_HIDING = CHAT_FLAG_LIMIT_FOR_HIDING;
|
||||
this.CHAT_FLAG_FROM_SHADOW_MUTE = CHAT_FLAG_FROM_SHADOW_MUTE;
|
||||
this.$emit('chat-card-mounted', this.msg.id);
|
||||
},
|
||||
};
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
.create-task-area.d-flex(v-if='canCreateTasks')
|
||||
transition(name="slide-tasks-btns")
|
||||
.d-flex(v-if="openCreateBtn")
|
||||
.create-task-btn.rounded-btn(
|
||||
.create-task-btn.diamond-btn(
|
||||
v-for="type in columns",
|
||||
:key="type",
|
||||
@click="createTask(type)",
|
||||
@@ -28,7 +28,7 @@
|
||||
)
|
||||
.svg-icon(v-html="icons[type]", :class='`icon-${type}`')
|
||||
|
||||
#create-task-btn.create-btn.rounded-btn.btn.btn-success(
|
||||
#create-task-btn.create-btn.diamond-btn.btn.btn-success(
|
||||
@click="openCreateBtn = !openCreateBtn",
|
||||
:class="{open: openCreateBtn}",
|
||||
)
|
||||
|
||||
@@ -112,13 +112,13 @@
|
||||
li
|
||||
a(href='', v-html="$t('glossary')")
|
||||
li
|
||||
a(href='http://habitica.fandom.com/wiki/Habitica_Wiki', v-once) {{ $t('wiki') }}
|
||||
a(href='http://habitica.fandom.com/wiki/Habitica_Wiki' target='_blank', v-once) {{ $t('wiki') }}
|
||||
li
|
||||
a(href='https://oldgods.net/habitrpg/habitrpg_user_data_display.html', v-once) {{ $t('dataDisplayTool') }}
|
||||
a(href='https://oldgods.net/habitrpg/habitrpg_user_data_display.html', target='_blank', v-once) {{ $t('dataDisplayTool') }}
|
||||
li
|
||||
router-link(to="/groups/guild/a29da26b-37de-4a71-b0c6-48e72a900dac") {{ $t('reportProblem') }}
|
||||
li
|
||||
a(href='https://trello.com/c/odmhIqyW/440-read-first-table-of-contents', v-once) {{ $t('requestFeature') }}
|
||||
a(href='https://trello.com/c/odmhIqyW/440-read-first-table-of-contents', target='_blank', v-once) {{ $t('requestFeature') }}
|
||||
li
|
||||
a(href='', v-html="$t('communityForum')")
|
||||
li
|
||||
|
||||
@@ -56,6 +56,11 @@
|
||||
h4.expand-toggle(:class="{'open': expandAuth}", @click="expandAuth = !expandAuth") Auth
|
||||
div(v-if="expandAuth")
|
||||
pre {{hero.auth}}
|
||||
.form-group
|
||||
.checkbox
|
||||
label
|
||||
input(type='checkbox', v-if='hero.flags', v-model='hero.flags.chatShadowMuted')
|
||||
strong Chat Shadow Muting On
|
||||
.form-group
|
||||
.checkbox
|
||||
label
|
||||
@@ -85,12 +90,8 @@
|
||||
tbody
|
||||
tr(v-for='(hero, index) in heroes')
|
||||
td
|
||||
span(v-if='hero.contributor && hero.contributor.admin', :popover="$t('gamemaster')", popover-trigger='mouseenter', popover-placement='right')
|
||||
.label.label-default(:class='userLevelStyle(hero)')
|
||||
| {{hero.profile.name}}
|
||||
//- span(v-class='userAdminGlyphiconStyle(hero)')
|
||||
span(v-if='!hero.contributor || !hero.contributor.admin')
|
||||
.label.label-default(v-if='hero.profile', v-class='userLevelStyle(hero)') {{hero.profile.name}}
|
||||
user-link(v-if='hero.contributor && hero.contributor.admin', :user='hero', :popover="$t('gamemaster')", popover-trigger='mouseenter', popover-placement='right')
|
||||
user-link(v-if='!hero.contributor || !hero.contributor.admin', :user='hero')
|
||||
td(v-if='user.contributor.admin', @click='populateContributorInput(hero._id, index)').btn-link {{hero._id}}
|
||||
td {{hero.contributor.level}}
|
||||
td {{hero.contributor.text}}
|
||||
@@ -115,9 +116,13 @@ import { mountInfo, petInfo } from 'common/script/content/stable';
|
||||
import { food, hatchingPotions, special } from 'common/script/content';
|
||||
import gear from 'common/script/content/gear';
|
||||
import notifications from 'client/mixins/notifications';
|
||||
import userLink from '../userLink';
|
||||
|
||||
export default {
|
||||
mixins: [notifications, styleHelper],
|
||||
components: {
|
||||
userLink,
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
heroes: [],
|
||||
@@ -180,6 +185,7 @@ export default {
|
||||
if (!this.hero.flags) {
|
||||
this.hero.flags = {
|
||||
chatRevoked: false,
|
||||
chatShadowMuted: false,
|
||||
};
|
||||
}
|
||||
this.expandItems = false;
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
v-if="item != null",
|
||||
:hide-header="true",
|
||||
@change="onChange($event)"
|
||||
@hide="fixDocBody()"
|
||||
)
|
||||
div.close
|
||||
span.svg-icon.inline.icon-10(aria-hidden="true", v-html="icons.close", @click="hideDialog()")
|
||||
|
||||
@@ -25,10 +25,12 @@
|
||||
hr
|
||||
|
||||
.form-horizontal
|
||||
h5 {{ $t('audioTheme') }}
|
||||
select.form-control(v-model='user.preferences.sound',
|
||||
@change='set("sound")')
|
||||
option(v-for='sound in availableAudioThemes', :value='sound') {{ $t(`audioTheme_${sound}`) }}
|
||||
.form-group
|
||||
h5 {{ $t('audioTheme') }}
|
||||
select.form-control(v-model='user.preferences.sound',
|
||||
@change='changeAudioTheme')
|
||||
option(v-for='sound in availableAudioThemes', :value='sound') {{ $t(`audioTheme_${sound}`) }}
|
||||
button.btn.btn-primary.btn-xs(@click='playAudio', v-once) {{ $t('demo') }}
|
||||
hr
|
||||
|
||||
.form-horizontal(v-if='hasClass')
|
||||
@@ -215,6 +217,7 @@ import deleteModal from './deleteModal';
|
||||
import { SUPPORTED_SOCIAL_NETWORKS } from '../../../common/script/constants';
|
||||
import changeClass from '../../../common/script/ops/changeClass';
|
||||
import notificationsMixin from '../../mixins/notifications';
|
||||
import sounds from '../../libs/sounds';
|
||||
// @TODO: this needs our window.env fix
|
||||
// import { availableLanguages } from '../../../server/libs/i18n';
|
||||
|
||||
@@ -267,6 +270,7 @@ export default {
|
||||
this.temporaryDisplayName = this.user.profile.name;
|
||||
this.emailUpdates.newEmail = this.user.auth.local.email || null;
|
||||
this.localAuth.username = this.user.auth.local.username || null;
|
||||
this.soundIndex = 0;
|
||||
hello.init({
|
||||
facebook: process.env.FACEBOOK_KEY, // eslint-disable-line no-process-env
|
||||
google: process.env.GOOGLE_CLIENT_ID, // eslint-disable-line no-process-env
|
||||
@@ -511,6 +515,14 @@ export default {
|
||||
this.usernameUpdates.username = this.user.auth.local.username;
|
||||
}
|
||||
},
|
||||
changeAudioTheme () {
|
||||
this.soundIndex = 0;
|
||||
this.set('sound');
|
||||
},
|
||||
playAudio () {
|
||||
this.$root.$emit('playSound', sounds[this.soundIndex]);
|
||||
this.soundIndex = (this.soundIndex + 1) % sounds.length;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -306,7 +306,7 @@
|
||||
const hideAmountSelectionForPurchaseTypes = [
|
||||
'gear', 'backgrounds', 'mystery_set', 'card',
|
||||
'rebirth_orb', 'fortify', 'armoire', 'keys',
|
||||
'debuffPotion',
|
||||
'debuffPotion', 'pets', 'mounts',
|
||||
];
|
||||
|
||||
export default {
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
strong {{ $t('howManyToBuy') }}
|
||||
.box
|
||||
input(type='number', min='0', step='1', v-model.number='selectedAmountToBuy')
|
||||
span.svg-icon.inline.icon-32(aria-hidden="true", v-html="(priceType === 'gems') ? icons.gem : icons.gold")
|
||||
span.svg-icon.inline.icon-32(aria-hidden="true", v-html="currencyIcon")
|
||||
span.value(:class="priceType") {{ item.value }}
|
||||
|
||||
button.btn.btn-primary(
|
||||
@@ -44,6 +44,7 @@
|
||||
div.clearfix(slot="modal-footer")
|
||||
span.balance.float-left {{ $t('yourBalance') }}
|
||||
balanceInfo(
|
||||
:withHourglass="priceType === 'hourglasses'",
|
||||
:currencyNeeded="priceType",
|
||||
:amountNeeded="item.value"
|
||||
).float-right
|
||||
@@ -202,6 +203,7 @@
|
||||
import svgGem from 'assets/svg/gem.svg';
|
||||
import svgPin from 'assets/svg/pin.svg';
|
||||
import svgExperience from 'assets/svg/experience.svg';
|
||||
import svgHourglasses from 'assets/svg/hourglass.svg';
|
||||
|
||||
import BalanceInfo from '../balanceInfo.vue';
|
||||
import currencyMixin from '../_currencyMixin';
|
||||
@@ -229,6 +231,7 @@
|
||||
gem: svgGem,
|
||||
pin: svgPin,
|
||||
experience: svgExperience,
|
||||
hourglass: svgHourglasses,
|
||||
}),
|
||||
|
||||
isPinned: false,
|
||||
@@ -258,6 +261,11 @@
|
||||
return this.item.notes;
|
||||
}
|
||||
},
|
||||
currencyIcon () {
|
||||
if (this.priceType === 'gold') return this.icons.gold;
|
||||
if (this.priceType === 'hourglasses') return this.icons.hourglass;
|
||||
return this.icons.gem;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
onChange ($event) {
|
||||
|
||||
@@ -68,9 +68,13 @@
|
||||
:emptyItem="false",
|
||||
@click="selectItemToBuy(ctx.item)"
|
||||
)
|
||||
span(slot="popoverContent", slot-scope="ctx")
|
||||
span(slot="popoverContent", slot-scope="ctx", v-if="category !== 'quests'")
|
||||
div
|
||||
h4.popover-content-title {{ ctx.item.text }}
|
||||
span(slot="popoverContent", slot-scope="ctx", v-if="category === 'quests'")
|
||||
div.questPopover
|
||||
h4.popover-content-title {{ item.text }}
|
||||
questInfo(:quest="item")
|
||||
|
||||
template(slot="itemBadge", slot-scope="ctx")
|
||||
span.badge.badge-pill.badge-item.badge-svg(
|
||||
@@ -79,6 +83,18 @@
|
||||
@click.prevent.stop="togglePinned(ctx.item)"
|
||||
)
|
||||
span.svg-icon.inline.icon-12.color(v-html="icons.pin")
|
||||
buyQuestModal(
|
||||
:item="selectedItemToBuy || {}",
|
||||
:priceType="selectedItemToBuy ? selectedItemToBuy.currency : ''",
|
||||
:withPin="true",
|
||||
@change="resetItemToBuy($event)",
|
||||
)
|
||||
template(slot="item", slot-scope="ctx")
|
||||
item.flat(
|
||||
:item="ctx.item",
|
||||
:itemContentClass="ctx.item.class",
|
||||
:showPopover="false"
|
||||
)
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
@@ -225,8 +241,10 @@
|
||||
import ItemRows from 'client/components/ui/itemRows';
|
||||
import toggleSwitch from 'client/components/ui/toggleSwitch';
|
||||
import Avatar from 'client/components/avatar';
|
||||
import QuestInfo from '../quests/questInfo.vue';
|
||||
|
||||
import BuyModal from '../buyModal.vue';
|
||||
import BuyQuestModal from '../quests/buyQuestModal.vue';
|
||||
|
||||
import svgPin from 'assets/svg/pin.svg';
|
||||
import svgHourglass from 'assets/svg/hourglass.svg';
|
||||
@@ -250,9 +268,11 @@
|
||||
CountBadge,
|
||||
ItemRows,
|
||||
toggleSwitch,
|
||||
QuestInfo,
|
||||
|
||||
Avatar,
|
||||
BuyModal,
|
||||
BuyQuestModal,
|
||||
},
|
||||
watch: {
|
||||
searchText: _throttle(function throttleSearch () {
|
||||
@@ -274,6 +294,8 @@
|
||||
sortItemsBy: ['AZ', 'sortByNumber'],
|
||||
selectedSortItemsBy: 'AZ',
|
||||
|
||||
selectedItemToBuy: null,
|
||||
|
||||
hidePinned: false,
|
||||
|
||||
backgroundUpdate: new Date(),
|
||||
@@ -303,11 +325,11 @@
|
||||
let backgroundUpdate = this.backgroundUpdate; // eslint-disable-line
|
||||
|
||||
let normalGroups = _filter(apiCategories, (c) => {
|
||||
return c.identifier === 'mounts' || c.identifier === 'pets';
|
||||
return c.identifier === 'mounts' || c.identifier === 'pets' || c.identifier === 'quests';
|
||||
});
|
||||
|
||||
let setGroups = _filter(apiCategories, (c) => {
|
||||
return c.identifier !== 'mounts' && c.identifier !== 'pets';
|
||||
return c.identifier !== 'mounts' && c.identifier !== 'pets' && c.identifier !== 'quests';
|
||||
});
|
||||
|
||||
let setCategory = {
|
||||
@@ -375,7 +397,18 @@
|
||||
return _groupBy(entries, 'group');
|
||||
},
|
||||
selectItemToBuy (item) {
|
||||
this.$root.$emit('buyModal::showItem', item);
|
||||
if (item.purchaseType === 'quests') {
|
||||
this.selectedItemToBuy = item;
|
||||
|
||||
this.$root.$emit('bv::show::modal', 'buy-quest-modal');
|
||||
} else {
|
||||
this.$root.$emit('buyModal::showItem', item);
|
||||
}
|
||||
},
|
||||
resetItemToBuy ($event) {
|
||||
if (!$event) {
|
||||
this.selectedItemToBuy = null;
|
||||
}
|
||||
},
|
||||
},
|
||||
created () {
|
||||
|
||||
@@ -6,11 +6,13 @@
|
||||
// Habits left side control
|
||||
.left-control.d-flex.align-items-center.justify-content-center(v-if="task.type === 'habit'", :class="controlClass.up.bg")
|
||||
.task-control.habit-control(:class="controlClass.up.inner", @click="(isUser && task.up) ? score('up') : null")
|
||||
.svg-icon.positive(v-html="icons.positive")
|
||||
.svg-icon.lock(v-if="this.task.group.id && !isUser", v-html="icons.lock", :class="controlClass.up.icon")
|
||||
.svg-icon.positive(v-else, v-html="icons.positive")
|
||||
// Dailies and todos left side control
|
||||
.left-control.d-flex.justify-content-center(v-if="task.type === 'daily' || task.type === 'todo'", :class="controlClass.bg")
|
||||
.task-control.daily-todo-control(:class="controlClass.inner", @click="isUser ? score(task.completed ? 'down' : 'up') : null")
|
||||
.svg-icon.check(v-html="icons.check", :class="{'display-check-icon': task.completed, [controlClass.checkbox]: true}")
|
||||
.svg-icon.lock(v-html="icons.lock", v-if="this.task.group.id && !isUser && !task.completed", :class="controlClass.icon")
|
||||
.svg-icon.check(v-else, v-html="icons.check", :class="{'display-check-icon': task.completed, [controlClass.checkbox]: true}")
|
||||
// Task title, description and icons
|
||||
.task-content(:class="contentClass")
|
||||
.task-clickable-area(@click="edit($event, task)", :class="{'task-clickable-area-user': isUser}")
|
||||
@@ -99,7 +101,8 @@
|
||||
// Habits right side control
|
||||
.right-control.d-flex.align-items-center.justify-content-center(v-if="task.type === 'habit'", :class="controlClass.down.bg")
|
||||
.task-control.habit-control(:class="controlClass.down.inner", @click="(isUser && task.down) ? score('down') : null")
|
||||
.svg-icon.negative(v-html="icons.negative")
|
||||
.svg-icon.lock(v-if="this.task.group.id && !isUser", v-html="icons.lock", :class="controlClass.down.icon")
|
||||
.svg-icon.negative(v-else, v-html="icons.negative")
|
||||
// Rewards right side control
|
||||
.right-control.d-flex.align-items-center.justify-content-center.reward-control(v-if="task.type === 'reward'", :class="controlClass.bg", @click="isUser ? score('down') : null")
|
||||
.svg-icon(v-html="icons.gold")
|
||||
@@ -533,6 +536,7 @@ import topIcon from 'assets/svg/top.svg';
|
||||
import bottomIcon from 'assets/svg/bottom.svg';
|
||||
import deleteIcon from 'assets/svg/delete.svg';
|
||||
import checklistIcon from 'assets/svg/checklist.svg';
|
||||
import lockIcon from 'assets/svg/lock.svg';
|
||||
import menuIcon from 'assets/svg/menu.svg';
|
||||
import markdownDirective from 'client/directives/markdown';
|
||||
import notifications from 'client/mixins/notifications';
|
||||
@@ -569,6 +573,7 @@ export default {
|
||||
top: topIcon,
|
||||
bottom: bottomIcon,
|
||||
menu: menuIcon,
|
||||
lock: lockIcon,
|
||||
}),
|
||||
};
|
||||
},
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
<template lang="pug">
|
||||
form(v-if="task", @submit.stop.prevent="submit()", @click="handleClick($event)")
|
||||
b-modal#task-modal(v-bind:no-close-on-esc="showTagsSelect", v-bind:no-close-on-backdrop="showTagsSelect", size="sm", @hidden="onClose()", @show="handleOpen()", @shown="focusInput()")
|
||||
.task-modal-header(slot="modal-header", :class="cssClass('bg')", @click="handleClick($event)")
|
||||
.clearfix
|
||||
h1.float-left {{ title }}
|
||||
.float-right.d-flex.align-items-center
|
||||
span.cancel-task-btn.mr-2(v-once, @click="cancel()") {{ $t('cancel') }}
|
||||
button.btn.btn-secondary(type="submit", v-once) {{ $t('save') }}
|
||||
.form-group
|
||||
label(v-once) {{ `${$t('text')}*` }}
|
||||
input.form-control.title-input(
|
||||
type="text",
|
||||
required, v-model="task.text",
|
||||
ref="inputToFocus",
|
||||
spellcheck="true",
|
||||
:disabled="groupAccessRequiredAndOnPersonalPage || challengeAccessRequired"
|
||||
)
|
||||
.form-group
|
||||
label.d-flex.align-items-center.justify-content-between(v-once)
|
||||
span {{ $t('notes') }}
|
||||
small(v-once)
|
||||
a(target="_blank", href="http://habitica.fandom.com/wiki/Markdown_Cheat_Sheet") {{ $t('markdownHelpLink') }}
|
||||
b-modal#task-modal(v-bind:no-close-on-esc="showTagsSelect", v-bind:no-close-on-backdrop="showTagsSelect", size="sm", @hidden="onClose()", @show="handleOpen()", @shown="focusInput()")
|
||||
.task-modal-header(slot="modal-header", :class="cssClass('bg')", @click="handleClick($event)")
|
||||
.clearfix
|
||||
h1.float-left {{ title }}
|
||||
.float-right.d-flex.align-items-center
|
||||
span.cancel-task-btn.mr-2(v-once, @click="cancel()") {{ $t('cancel') }}
|
||||
button.btn.btn-secondary(@click="submit()", v-once) {{ $t('save') }}
|
||||
.form-group
|
||||
label(v-once) {{ `${$t('text')}*` }}
|
||||
input.form-control.title-input(
|
||||
type="text",
|
||||
required, v-model="task.text",
|
||||
ref="inputToFocus",
|
||||
spellcheck="true",
|
||||
:disabled="groupAccessRequiredAndOnPersonalPage || challengeAccessRequired"
|
||||
)
|
||||
.form-group
|
||||
label.d-flex.align-items-center.justify-content-between(v-once)
|
||||
span {{ $t('notes') }}
|
||||
small(v-once)
|
||||
a(target="_blank", href="http://habitica.fandom.com/wiki/Markdown_Cheat_Sheet") {{ $t('markdownHelpLink') }}
|
||||
|
||||
textarea.form-control(v-model="task.notes", rows="3")
|
||||
.task-modal-content(@click="handleClick($event)")
|
||||
textarea.form-control(v-model="task.notes", rows="3")
|
||||
.task-modal-content(@click="handleClick($event)")
|
||||
form(v-if="task", @submit.stop.prevent="submit()", @click="handleClick($event)")
|
||||
.option.mt-0(v-if="task.type === 'reward'")
|
||||
.form-group
|
||||
label(v-once) {{ $t('cost') }}
|
||||
@@ -242,9 +242,9 @@
|
||||
.svg-icon.d-inline-b(v-html="icons.destroy")
|
||||
span {{ $t('deleteTask') }}
|
||||
|
||||
.task-modal-footer.d-flex.justify-content-center.align-items-center(slot="modal-footer", @click="handleClick($event)")
|
||||
.cancel-task-btn(v-once, @click="cancel()") {{ $t('cancel') }}
|
||||
button.btn.btn-primary(type="submit", v-once) {{ $t('save') }}
|
||||
.task-modal-footer.d-flex.justify-content-center.align-items-center(slot="modal-footer", @click="handleClick($event)")
|
||||
.cancel-task-btn(v-once, @click="cancel()") {{ $t('cancel') }}
|
||||
button.btn.btn-primary(@click="submit()", v-once) {{ $t('save') }}
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
|
||||
@@ -12,22 +12,29 @@
|
||||
button.btn.btn-secondary.positive-icon(v-if='user._id !== this.userLoggedIn._id && userLoggedIn.inbox.blocks.indexOf(user._id) !== -1',
|
||||
@click="unblockUser()", v-b-tooltip.hover.right="$t('unblock')")
|
||||
.svg-icon.positive-icon(v-html="icons.positive")
|
||||
button.btn.btn-secondary.positive-icon(v-if='this.userLoggedIn.contributor.admin && !adminToolsLoaded',
|
||||
@click="loadAdminTools()", v-b-tooltip.hover.right="'Admin - Load Tools'")
|
||||
button.btn.btn-secondary.positive-icon(v-if='this.userLoggedIn.contributor.admin',
|
||||
@click="toggleAdminTools()", v-b-tooltip.hover.right="'Admin - Toggle Tools'")
|
||||
.svg-icon.positive-icon(v-html="icons.staff")
|
||||
span(v-if='this.userLoggedIn.contributor.admin && adminToolsLoaded')
|
||||
button.btn.btn-secondary.positive-icon(v-if='!hero.flags || (hero.flags && !hero.flags.chatRevoked)',
|
||||
@click="adminRevokeChat()", v-b-tooltip.hover.bottom="'Admin - Revoke Chat Privileges'")
|
||||
.svg-icon.positive-icon(v-html="icons.megaphone")
|
||||
button.btn.btn-secondary.positive-icon(v-if='hero.flags && hero.flags.chatRevoked',
|
||||
@click="adminReinstateChat()", v-b-tooltip.hover.bottom="'Admin - Reinstate Chat Privileges'")
|
||||
.svg-icon.positive-icon(v-html="icons.challenge")
|
||||
button.btn.btn-secondary.positive-icon(v-if='!hero.auth.blocked',
|
||||
@click="adminBlockUser()", v-b-tooltip.hover.right="'Admin - Ban User'")
|
||||
.svg-icon.positive-icon(v-html="icons.lock")
|
||||
button.btn.btn-secondary.positive-icon(v-if='hero.auth.blocked',
|
||||
@click="adminUnblockUser()", v-b-tooltip.hover.right="'Admin - Unblock User'")
|
||||
.svg-icon.positive-icon(v-html="icons.member")
|
||||
.row.admin-profile-actions(v-if='this.userLoggedIn.contributor.admin && adminToolsLoaded')
|
||||
.col-12.text-right
|
||||
span.admin-action(v-if='!hero.flags || (hero.flags && !hero.flags.chatShadowMuted)',
|
||||
@click="adminTurnOnShadowMuting()", v-b-tooltip.hover.bottom="'Turn on Shadow Muting'")
|
||||
| shadow-mute
|
||||
span.admin-action(v-if='hero.flags && hero.flags.chatShadowMuted',
|
||||
@click="adminTurnOffShadowMuting()", v-b-tooltip.hover.bottom="'Turn off Shadow Muting'")
|
||||
| un-shadow-mute
|
||||
span.admin-action(v-if='!hero.flags || (hero.flags && !hero.flags.chatRevoked)',
|
||||
@click="adminRevokeChat()", v-b-tooltip.hover.bottom="'Revoke Chat Privileges'")
|
||||
| mute
|
||||
span.admin-action(v-if='hero.flags && hero.flags.chatRevoked',
|
||||
@click="adminReinstateChat()", v-b-tooltip.hover.bottom="'Reinstate Chat Privileges'")
|
||||
| un-mute
|
||||
span.admin-action(v-if='!hero.auth.blocked',
|
||||
@click="adminBlockUser()", v-b-tooltip.hover.bottom="'Ban User'")
|
||||
| ban
|
||||
span.admin-action(v-if='hero.auth.blocked',
|
||||
@click="adminUnblockUser()", v-b-tooltip.hover.bottom="'Un-Ban User'")
|
||||
| un-ban
|
||||
.row
|
||||
.col-12
|
||||
member-details(:member="user")
|
||||
@@ -184,6 +191,16 @@
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.admin-profile-actions {
|
||||
margin-bottom: 3em;
|
||||
|
||||
.admin-action {
|
||||
color: blue;
|
||||
cursor: pointer;
|
||||
padding: 0 1em;
|
||||
}
|
||||
}
|
||||
|
||||
.profile-actions {
|
||||
float: right;
|
||||
margin-right: 1em;
|
||||
@@ -586,6 +603,22 @@ export default {
|
||||
openSendGemsModal () {
|
||||
this.$root.$emit('habitica::send-gems', this.user);
|
||||
},
|
||||
adminTurnOnShadowMuting () {
|
||||
if (!this.hero.flags) {
|
||||
this.hero.flags = {};
|
||||
}
|
||||
this.hero.flags.chatShadowMuted = true;
|
||||
|
||||
this.$store.dispatch('hall:updateHero', { heroDetails: this.hero });
|
||||
},
|
||||
adminTurnOffShadowMuting () {
|
||||
if (!this.hero.flags) {
|
||||
this.hero.flags = {};
|
||||
}
|
||||
this.hero.flags.chatShadowMuted = false;
|
||||
|
||||
this.$store.dispatch('hall:updateHero', { heroDetails: this.hero });
|
||||
},
|
||||
adminRevokeChat () {
|
||||
if (!this.hero.flags) {
|
||||
this.hero.flags = {};
|
||||
@@ -612,9 +645,13 @@ export default {
|
||||
|
||||
this.$store.dispatch('hall:updateHero', { heroDetails: this.hero });
|
||||
},
|
||||
async loadAdminTools () {
|
||||
this.hero = await this.$store.dispatch('hall:getHero', { uuid: this.user._id });
|
||||
this.adminToolsLoaded = true;
|
||||
async toggleAdminTools () {
|
||||
if (this.adminToolsLoaded) {
|
||||
this.adminToolsLoaded = false;
|
||||
} else {
|
||||
this.hero = await this.$store.dispatch('hall:getHero', { uuid: this.user._id });
|
||||
this.adminToolsLoaded = true;
|
||||
}
|
||||
},
|
||||
showAllocation () {
|
||||
return this.user._id === this.userLoggedIn._id && this.hasClass;
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
export default [
|
||||
'Achievement_Unlocked',
|
||||
'Chat',
|
||||
'Daily',
|
||||
'Death',
|
||||
'Item_Drop',
|
||||
'Level_Up',
|
||||
'Minus_Habit',
|
||||
'Plus_Habit',
|
||||
'Reward',
|
||||
'Todo',
|
||||
];
|
||||
@@ -112,12 +112,13 @@ export function purchaseMysterySet (store, params) {
|
||||
}
|
||||
|
||||
export function purchaseHourglassItem (store, params) {
|
||||
const quantity = params.quantity || 1;
|
||||
const user = store.state.user.data;
|
||||
let opResult = hourglassPurchaseOp(user, {params});
|
||||
let opResult = hourglassPurchaseOp(user, {params, quantity});
|
||||
|
||||
return {
|
||||
result: opResult,
|
||||
httpCall: axios.post(`/api/v4/user/purchase-hourglass/${params.type}/${params.key}`),
|
||||
httpCall: axios.post(`/api/v4/user/purchase-hourglass/${params.type}/${params.key}`, {quantity}),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -94,6 +94,7 @@ export function getTaskClasses (store) {
|
||||
bg: `task-${color}-control-bg`,
|
||||
checkbox: `task-${color}-control-checkbox`,
|
||||
inner: `task-${color}-control-inner-daily-todo`,
|
||||
icon: `task-${color}-control-icon`,
|
||||
};
|
||||
} else if (type === 'reward') {
|
||||
return {
|
||||
@@ -102,11 +103,11 @@ export function getTaskClasses (store) {
|
||||
} else if (type === 'habit') {
|
||||
return {
|
||||
up: task.up ?
|
||||
{ bg: `task-${color}-control-bg`, inner: `task-${color}-control-inner-habit`} :
|
||||
{ bg: 'task-disabled-habit-control-bg', inner: 'task-disabled-habit-control-inner' },
|
||||
{ bg: `task-${color}-control-bg`, inner: `task-${color}-control-inner-habit`, icon: `task-${color}-control-icon`} :
|
||||
{ bg: 'task-disabled-habit-control-bg', inner: 'task-disabled-habit-control-inner', icon: `task-${color}-control-icon` },
|
||||
down: task.down ?
|
||||
{ bg: `task-${color}-control-bg`, inner: `task-${color}-control-inner-habit`} :
|
||||
{ bg: 'task-disabled-habit-control-bg', inner: 'task-disabled-habit-control-inner' },
|
||||
{ bg: `task-${color}-control-bg`, inner: `task-${color}-control-inner-habit`, icon: `task-${color}-control-icon`} :
|
||||
{ bg: 'task-disabled-habit-control-bg', inner: 'task-disabled-habit-control-inner', icon: `task-${color}-control-icon` },
|
||||
};
|
||||
}
|
||||
break;
|
||||
|
||||